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@xxxxxxxxxxxxxxxxx> > Signed-off-by: Yang Li <yang.lee@xxxxxxxxxxxxxxxxx> Thank you for your patch, but as the "kernel test robot <lkp@xxxxxxxxx>" 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) >