2012-08-16 11:04:15

by Dan Carpenter

[permalink] [raw]
Subject: [patch] [SCSI] mvsas: fix a && vs & bug

The "1 << (slot_idx % 32)" condition is always true. The intent was to
test a bit field here using bitwise AND. We do the test correctly a few
lines later in the do while loop.

Signed-off-by: Dan Carpenter <[email protected]>
---
Static checker fix. Untested. Would apply to the -stable kernel.

diff --git a/drivers/scsi/mvsas/mv_94xx.c b/drivers/scsi/mvsas/mv_94xx.c
index 7e423e5..16349aa 100644
--- a/drivers/scsi/mvsas/mv_94xx.c
+++ b/drivers/scsi/mvsas/mv_94xx.c
@@ -622,7 +622,7 @@ static void mvs_94xx_command_active(struct mvs_info *mvi, u32 slot_idx)
{
u32 tmp;
tmp = mvs_cr32(mvi, MVS_COMMAND_ACTIVE+(slot_idx >> 3));
- if (tmp && 1 << (slot_idx % 32)) {
+ if (tmp & 1 << (slot_idx % 32)) {
mv_printk("command active %08X, slot [%x].\n", tmp, slot_idx);
mvs_cw32(mvi, MVS_COMMAND_ACTIVE + (slot_idx >> 3),
1 << (slot_idx % 32));


2012-08-16 15:23:50

by Jeff Garzik

[permalink] [raw]
Subject: Re: [patch] [SCSI] mvsas: fix a && vs & bug

On 08/16/2012 07:04 AM, Dan Carpenter wrote:
> The "1 << (slot_idx % 32)" condition is always true. The intent was to
> test a bit field here using bitwise AND. We do the test correctly a few
> lines later in the do while loop.
>
> Signed-off-by: Dan Carpenter <[email protected]>

Acked-by: Jeff Garzik <[email protected]>