Hi, James DECLARE_BITMAP isn't a good option for mvsas, since the tags array couldn't be global(it's chip-related) and even if we define the static tag array both in mv64xx.c and mv94xx.c, it still couldn't honor 88SE9480 as there are 2 separate cores. So if we use DECLARE_BITMAP, it's hard to maintain the corresponding tag for different core. Can we use the following replacement: - u8 tags[MVS_SLOTS >> 3]; + unsigned long tags[MVS_SLOTS / BITS_PER_LONG]; Thank you. -----Original Message----- From: Jeff Garzik [mailto:jeff@xxxxxxxxxx] Sent: 2009年5月9日 0:23 To: James Bottomley Cc: Ying Chu; linux-scsi@xxxxxxxxxxxxxxx Subject: Re: [PATCH 4/4] mvsas: Fine-tuned tags array for alignment James Bottomley wrote: > On Fri, 2009-05-08 at 14:18 +0800, Ying Chu wrote: >> >From 2269b0ff3c2573f76cb0569eb5da99e9f12711d1 Mon Sep 17 00:00:00 >> >2001 >> From: ayan <ayan@xxxxxxxxxxx> >> Date: Fri, 8 May 2009 19:59:39 +0800 >> Subject: [PATCH 4/4] bug fix: alignment >> >> Fine-tuned tags array with u32 for alignment. >> >> Signed-off-by: Ying Chu <jasonchu@xxxxxxxxxxx> >> Signed-off-by: Andy Yan <ayan@xxxxxxxxxxx> >> Signed-off-by: Ke Wei <kewei@xxxxxxxxxxx> >> --- >> drivers/scsi/mvsas/mv_sas.h | 2 +- >> 1 files changed, 1 insertions(+), 1 deletions(-) >> >> diff --git a/drivers/scsi/mvsas/mv_sas.h >> b/drivers/scsi/mvsas/mv_sas.h index 75b9748..04f27bf 100644 >> --- a/drivers/scsi/mvsas/mv_sas.h >> +++ b/drivers/scsi/mvsas/mv_sas.h >> @@ -313,7 +313,7 @@ struct mvs_info { >> const struct mvs_chip_info *chip; >> >> int tags_num; >> - u8 tags[MVS_SLOTS >> 3]; >> + u32 tags[MVS_SLOTS >> 5]; > > Why not just do > > DECLARE_BITMAP(tags, MVS_SLOTS); > > here? ... that way you're using the correctly defined type for the > bitmap operations and you can lose the spurious (void *) cast in your > bitmap wrapper operations. Agreed. Type 'u32' is incorrect for bitmap operations... it needs to be 'unsigned long', which is what DECLARE_BITMAP gives you. Jeff ?韬{.n?????%??檩??w?{.n???{炳??Ф?塄}?财??j:+v??????2??璀??摺?囤??z夸z罐?+?????w棹f