[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <7c959c70-dc9f-c34c-e7fb-8b3c1c5fe2ab@redhat.com>
Date: Tue, 11 May 2021 13:10:55 +0200
From: Hans de Goede <hdegoede@...hat.com>
To: Yang Li <yang.lee@...ux.alibaba.com>, stuart.w.hayes@...il.com
Cc: mgross@...ux.intel.com, platform-driver-x86@...r.kernel.org,
linux-kernel@...r.kernel.org
Subject: Re: [PATCH] platform/x86: drop unneeded assignment in
host_control_smi()
Hi Yang Li,
On 4/27/21 1:31 PM, Yang Li wrote:
> Making '==' operation with ESM_STATUS_CMD_UNSUCCESSFUL directly
> after calling the function inb() is more efficient, so assignment
> to 'cmd_status' is redundant.
>
> Eliminate the following clang_analyzer warning:
> drivers/platform/x86/dell/dcdbas.c:397:11: warning: Although the value
> stored to 'cmd_status' is used in the enclosing expression, the value is
> never actually read from 'cmd_status'
>
> No functional change.
>
> Reported-by: Abaci Robot <abaci@...ux.alibaba.com>
> Signed-off-by: Yang Li <yang.lee@...ux.alibaba.com>
Thank you for your patch, but as the "kernel test robot <lkp@...el.com>"
reported, this actually breaks the check in the while loop.
cmd_status is a s8 and ESM_STATUS_CMD_UNSUCCESSFUL is defined as -1.
By dropping the intermediate step of storing the inb() value into the
s8, we end up comparing the inb() unsigned result directly to -1 which
is never true.
A possible way to fix this (without reworking the rest of the code) would
be to either cast the inb() result to a s8, so that you end up with this:
while ((s8)inb(PCAT_APM_STATUS_PORT) == ESM_STATUS_CMD_UNSUCCESSFUL) {
Also while at it please change the condition to a single line as I did
above.
Thanks & Regards,
Hans
> ---
> drivers/platform/x86/dell/dcdbas.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/drivers/platform/x86/dell/dcdbas.c b/drivers/platform/x86/dell/dcdbas.c
> index d513a59..a9e8a88 100644
> --- a/drivers/platform/x86/dell/dcdbas.c
> +++ b/drivers/platform/x86/dell/dcdbas.c
> @@ -394,7 +394,7 @@ static int host_control_smi(void)
>
> /* wait a few to see if it executed */
> num_ticks = TIMEOUT_USEC_SHORT_SEMA_BLOCKING;
> - while ((cmd_status = inb(PCAT_APM_STATUS_PORT))
> + while (inb(PCAT_APM_STATUS_PORT)
> == ESM_STATUS_CMD_UNSUCCESSFUL) {
> num_ticks--;
> if (num_ticks == EXPIRED_TIMER)
>
Powered by blists - more mailing lists