[SCSI] hpsa: use find_first_zero_bit

Use find_first_zero_bit to find the first cleared bit in a memory region.

This also includes the following minor changes.
- Use bitmap_zero
- Reduce unnecessary atomic bitops usage

Signed-off-by: Akinobu Mita <akinobu.mita@gmail.com>
Acked-by: Stephen M. Cameron <scameron@beardog.cce.hp.com>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
This commit is contained in:
Akinobu Mita 2012-01-21 00:15:27 +09:00 committed by James Bottomley
parent de13e9654e
commit 263d9401a3
1 changed files with 8 additions and 10 deletions

View File

@ -579,21 +579,19 @@ static int hpsa_find_target_lun(struct ctlr_info *h,
int i, found = 0; int i, found = 0;
DECLARE_BITMAP(lun_taken, HPSA_MAX_DEVICES); DECLARE_BITMAP(lun_taken, HPSA_MAX_DEVICES);
memset(&lun_taken[0], 0, HPSA_MAX_DEVICES >> 3); bitmap_zero(lun_taken, HPSA_MAX_DEVICES);
for (i = 0; i < h->ndevices; i++) { for (i = 0; i < h->ndevices; i++) {
if (h->dev[i]->bus == bus && h->dev[i]->target != -1) if (h->dev[i]->bus == bus && h->dev[i]->target != -1)
set_bit(h->dev[i]->target, lun_taken); __set_bit(h->dev[i]->target, lun_taken);
} }
for (i = 0; i < HPSA_MAX_DEVICES; i++) { i = find_first_zero_bit(lun_taken, HPSA_MAX_DEVICES);
if (!test_bit(i, lun_taken)) { if (i < HPSA_MAX_DEVICES) {
/* *bus = 1; */ /* *bus = 1; */
*target = i; *target = i;
*lun = 0; *lun = 0;
found = 1; found = 1;
break;
}
} }
return !found; return !found;
} }