aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
Diffstat (limited to 'drivers')
-rw-r--r--drivers/scsi/3w-xxxx.c6
-rw-r--r--drivers/scsi/53c700.c19
-rw-r--r--drivers/scsi/53c7xx.c14
-rw-r--r--drivers/scsi/NCR53c406a.c8
-rw-r--r--drivers/scsi/aacraid/aachba.c18
-rw-r--r--drivers/scsi/aacraid/commctrl.c2
-rw-r--r--drivers/scsi/aha1542.c31
-rw-r--r--drivers/scsi/aic7xxx/aic7770.c2
-rw-r--r--drivers/scsi/aic7xxx/aic79xx.h2
-rw-r--r--drivers/scsi/aic7xxx/aic79xx_core.c10
-rw-r--r--drivers/scsi/aic7xxx/aic79xx_osm.c20
-rw-r--r--drivers/scsi/aic7xxx/aic79xx_pci.c2
-rw-r--r--drivers/scsi/aic7xxx/aic79xx_proc.c4
-rw-r--r--drivers/scsi/aic7xxx/aic7xxx.h2
-rw-r--r--drivers/scsi/aic7xxx/aic7xxx_core.c8
-rw-r--r--drivers/scsi/aic7xxx/aic7xxx_osm.c12
-rw-r--r--drivers/scsi/aic7xxx/aic7xxx_pci.c2
-rw-r--r--drivers/scsi/aic7xxx/aic7xxx_proc.c4
-rw-r--r--drivers/scsi/aic7xxx_old.c2
-rw-r--r--drivers/scsi/constants.c33
-rw-r--r--drivers/scsi/dtc.c18
-rw-r--r--drivers/scsi/fd_mcs.c2
-rw-r--r--drivers/scsi/fdomain.c10
-rw-r--r--drivers/scsi/g_NCR5380.c19
-rw-r--r--drivers/scsi/gdth.c4
-rw-r--r--drivers/scsi/ibmmca.c16
-rw-r--r--drivers/scsi/in2000.c2
-rw-r--r--drivers/scsi/initio.c3
-rw-r--r--drivers/scsi/ips.c2
-rw-r--r--drivers/scsi/osst.c4
-rw-r--r--drivers/scsi/pas16.c8
-rw-r--r--drivers/scsi/qla1280.c7
-rw-r--r--drivers/scsi/qlogicpti.c2
-rw-r--r--drivers/scsi/raid_class.c4
-rw-r--r--drivers/scsi/scsi_lib.c2
-rw-r--r--drivers/scsi/scsi_sysfs.c8
-rw-r--r--drivers/scsi/scsi_transport_fc.c6
-rw-r--r--drivers/scsi/scsi_transport_sas.c4
-rw-r--r--drivers/scsi/scsi_transport_spi.c4
-rw-r--r--drivers/scsi/sd.c2
-rw-r--r--drivers/scsi/seagate.c4
-rw-r--r--drivers/scsi/sg.c6
-rw-r--r--drivers/scsi/st.c2
-rw-r--r--drivers/scsi/sym53c8xx_2/sym_hipd.c3
-rw-r--r--drivers/scsi/t128.c10
-rw-r--r--drivers/scsi/wd33c93.c2
-rw-r--r--drivers/scsi/wd7000.c12
47 files changed, 167 insertions, 200 deletions
diff --git a/drivers/scsi/3w-xxxx.c b/drivers/scsi/3w-xxxx.c
index 37a58c6dad29..17dbd4ac8692 100644
--- a/drivers/scsi/3w-xxxx.c
+++ b/drivers/scsi/3w-xxxx.c
@@ -405,7 +405,7 @@ static int tw_decode_sense(TW_Device_Extension *tw_dev, int request_id, int fill
405 /* Attempt to return intelligent sense information */ 405 /* Attempt to return intelligent sense information */
406 if (fill_sense) { 406 if (fill_sense) {
407 if ((command->status == 0xc7) || (command->status == 0xcb)) { 407 if ((command->status == 0xc7) || (command->status == 0xcb)) {
408 for (i=0;i<(sizeof(tw_sense_table)/sizeof(tw_sense_table[0]));i++) { 408 for (i = 0; i < ARRAY_SIZE(tw_sense_table); i++) {
409 if (command->flags == tw_sense_table[i][0]) { 409 if (command->flags == tw_sense_table[i][0]) {
410 410
411 /* Valid bit and 'current errors' */ 411 /* Valid bit and 'current errors' */
@@ -625,7 +625,7 @@ static int tw_aen_complete(TW_Device_Extension *tw_dev, int request_id)
625 if (aen == 0x0ff) { 625 if (aen == 0x0ff) {
626 printk(KERN_WARNING "3w-xxxx: scsi%d: AEN: INFO: AEN queue overflow.\n", tw_dev->host->host_no); 626 printk(KERN_WARNING "3w-xxxx: scsi%d: AEN: INFO: AEN queue overflow.\n", tw_dev->host->host_no);
627 } else { 627 } else {
628 table_max = sizeof(tw_aen_string)/sizeof(char *); 628 table_max = ARRAY_SIZE(tw_aen_string);
629 if ((aen & 0x0ff) < table_max) { 629 if ((aen & 0x0ff) < table_max) {
630 if ((tw_aen_string[aen & 0xff][strlen(tw_aen_string[aen & 0xff])-1]) == '#') { 630 if ((tw_aen_string[aen & 0xff][strlen(tw_aen_string[aen & 0xff])-1]) == '#') {
631 printk(KERN_WARNING "3w-xxxx: scsi%d: AEN: %s%d.\n", tw_dev->host->host_no, tw_aen_string[aen & 0xff], aen >> 8); 631 printk(KERN_WARNING "3w-xxxx: scsi%d: AEN: %s%d.\n", tw_dev->host->host_no, tw_aen_string[aen & 0xff], aen >> 8);
@@ -786,7 +786,7 @@ static int tw_aen_drain_queue(TW_Device_Extension *tw_dev)
786 if (aen == 0x0ff) { 786 if (aen == 0x0ff) {
787 printk(KERN_WARNING "3w-xxxx: AEN: INFO: AEN queue overflow.\n"); 787 printk(KERN_WARNING "3w-xxxx: AEN: INFO: AEN queue overflow.\n");
788 } else { 788 } else {
789 table_max = sizeof(tw_aen_string)/sizeof(char *); 789 table_max = ARRAY_SIZE(tw_aen_string);
790 if ((aen & 0x0ff) < table_max) { 790 if ((aen & 0x0ff) < table_max) {
791 if ((tw_aen_string[aen & 0xff][strlen(tw_aen_string[aen & 0xff])-1]) == '#') { 791 if ((tw_aen_string[aen & 0xff][strlen(tw_aen_string[aen & 0xff])-1]) == '#') {
792 printk(KERN_WARNING "3w-xxxx: AEN: %s%d.\n", tw_aen_string[aen & 0xff], aen >> 8); 792 printk(KERN_WARNING "3w-xxxx: AEN: %s%d.\n", tw_aen_string[aen & 0xff], aen >> 8);
diff --git a/drivers/scsi/53c700.c b/drivers/scsi/53c700.c
index b767918b9a98..4958c3b93c30 100644
--- a/drivers/scsi/53c700.c
+++ b/drivers/scsi/53c700.c
@@ -316,7 +316,7 @@ NCR_700_detect(struct scsi_host_template *tpnt,
316 BUG_ON(!dma_is_consistent(pScript) && L1_CACHE_BYTES < dma_get_cache_alignment()); 316 BUG_ON(!dma_is_consistent(pScript) && L1_CACHE_BYTES < dma_get_cache_alignment());
317 hostdata->slots = (struct NCR_700_command_slot *)(memory + SLOTS_OFFSET); 317 hostdata->slots = (struct NCR_700_command_slot *)(memory + SLOTS_OFFSET);
318 hostdata->dev = dev; 318 hostdata->dev = dev;
319 319
320 pSlots = pScript + SLOTS_OFFSET; 320 pSlots = pScript + SLOTS_OFFSET;
321 321
322 /* Fill in the missing routines from the host template */ 322 /* Fill in the missing routines from the host template */
@@ -332,19 +332,18 @@ NCR_700_detect(struct scsi_host_template *tpnt,
332 tpnt->slave_destroy = NCR_700_slave_destroy; 332 tpnt->slave_destroy = NCR_700_slave_destroy;
333 tpnt->change_queue_depth = NCR_700_change_queue_depth; 333 tpnt->change_queue_depth = NCR_700_change_queue_depth;
334 tpnt->change_queue_type = NCR_700_change_queue_type; 334 tpnt->change_queue_type = NCR_700_change_queue_type;
335 335
336 if(tpnt->name == NULL) 336 if(tpnt->name == NULL)
337 tpnt->name = "53c700"; 337 tpnt->name = "53c700";
338 if(tpnt->proc_name == NULL) 338 if(tpnt->proc_name == NULL)
339 tpnt->proc_name = "53c700"; 339 tpnt->proc_name = "53c700";
340
341 340
342 host = scsi_host_alloc(tpnt, 4); 341 host = scsi_host_alloc(tpnt, 4);
343 if (!host) 342 if (!host)
344 return NULL; 343 return NULL;
345 memset(hostdata->slots, 0, sizeof(struct NCR_700_command_slot) 344 memset(hostdata->slots, 0, sizeof(struct NCR_700_command_slot)
346 * NCR_700_COMMAND_SLOTS_PER_HOST); 345 * NCR_700_COMMAND_SLOTS_PER_HOST);
347 for(j = 0; j < NCR_700_COMMAND_SLOTS_PER_HOST; j++) { 346 for (j = 0; j < NCR_700_COMMAND_SLOTS_PER_HOST; j++) {
348 dma_addr_t offset = (dma_addr_t)((unsigned long)&hostdata->slots[j].SG[0] 347 dma_addr_t offset = (dma_addr_t)((unsigned long)&hostdata->slots[j].SG[0]
349 - (unsigned long)&hostdata->slots[0].SG[0]); 348 - (unsigned long)&hostdata->slots[0].SG[0]);
350 hostdata->slots[j].pSG = (struct NCR_700_SG_List *)((unsigned long)(pSlots + offset)); 349 hostdata->slots[j].pSG = (struct NCR_700_SG_List *)((unsigned long)(pSlots + offset));
@@ -355,14 +354,12 @@ NCR_700_detect(struct scsi_host_template *tpnt,
355 hostdata->slots[j].state = NCR_700_SLOT_FREE; 354 hostdata->slots[j].state = NCR_700_SLOT_FREE;
356 } 355 }
357 356
358 for(j = 0; j < sizeof(SCRIPT)/sizeof(SCRIPT[0]); j++) { 357 for (j = 0; j < ARRAY_SIZE(SCRIPT); j++)
359 script[j] = bS_to_host(SCRIPT[j]); 358 script[j] = bS_to_host(SCRIPT[j]);
360 }
361 359
362 /* adjust all labels to be bus physical */ 360 /* adjust all labels to be bus physical */
363 for(j = 0; j < PATCHES; j++) { 361 for (j = 0; j < PATCHES; j++)
364 script[LABELPATCHES[j]] = bS_to_host(pScript + SCRIPT[LABELPATCHES[j]]); 362 script[LABELPATCHES[j]] = bS_to_host(pScript + SCRIPT[LABELPATCHES[j]]);
365 }
366 /* now patch up fixed addresses. */ 363 /* now patch up fixed addresses. */
367 script_patch_32(script, MessageLocation, 364 script_patch_32(script, MessageLocation,
368 pScript + MSGOUT_OFFSET); 365 pScript + MSGOUT_OFFSET);
@@ -385,17 +382,17 @@ NCR_700_detect(struct scsi_host_template *tpnt,
385 host->hostdata[0] = (unsigned long)hostdata; 382 host->hostdata[0] = (unsigned long)hostdata;
386 /* kick the chip */ 383 /* kick the chip */
387 NCR_700_writeb(0xff, host, CTEST9_REG); 384 NCR_700_writeb(0xff, host, CTEST9_REG);
388 if(hostdata->chip710) 385 if (hostdata->chip710)
389 hostdata->rev = (NCR_700_readb(host, CTEST8_REG)>>4) & 0x0f; 386 hostdata->rev = (NCR_700_readb(host, CTEST8_REG)>>4) & 0x0f;
390 else 387 else
391 hostdata->rev = (NCR_700_readb(host, CTEST7_REG)>>4) & 0x0f; 388 hostdata->rev = (NCR_700_readb(host, CTEST7_REG)>>4) & 0x0f;
392 hostdata->fast = (NCR_700_readb(host, CTEST9_REG) == 0); 389 hostdata->fast = (NCR_700_readb(host, CTEST9_REG) == 0);
393 if(banner == 0) { 390 if (banner == 0) {
394 printk(KERN_NOTICE "53c700: Version " NCR_700_VERSION " By James.Bottomley@HansenPartnership.com\n"); 391 printk(KERN_NOTICE "53c700: Version " NCR_700_VERSION " By James.Bottomley@HansenPartnership.com\n");
395 banner = 1; 392 banner = 1;
396 } 393 }
397 printk(KERN_NOTICE "scsi%d: %s rev %d %s\n", host->host_no, 394 printk(KERN_NOTICE "scsi%d: %s rev %d %s\n", host->host_no,
398 hostdata->chip710 ? "53c710" : 395 hostdata->chip710 ? "53c710" :
399 (hostdata->fast ? "53c700-66" : "53c700"), 396 (hostdata->fast ? "53c700-66" : "53c700"),
400 hostdata->rev, hostdata->differential ? 397 hostdata->rev, hostdata->differential ?
401 "(Differential)" : ""); 398 "(Differential)" : "");
diff --git a/drivers/scsi/53c7xx.c b/drivers/scsi/53c7xx.c
index cfc991271cc8..765769a629e4 100644
--- a/drivers/scsi/53c7xx.c
+++ b/drivers/scsi/53c7xx.c
@@ -361,7 +361,7 @@ int CmdPageStart = (0 - Ent_dsa_zero - sizeof(struct NCR53c7x0_cmd)) & 0xff;
361static char *setup_strings[] = 361static char *setup_strings[] =
362 {"","","","","","","",""}; 362 {"","","","","","","",""};
363 363
364#define MAX_SETUP_STRINGS (sizeof(setup_strings) / sizeof(char *)) 364#define MAX_SETUP_STRINGS ARRAY_SIZE(setup_strings)
365#define SETUP_BUFFER_SIZE 200 365#define SETUP_BUFFER_SIZE 200
366static char setup_buffer[SETUP_BUFFER_SIZE]; 366static char setup_buffer[SETUP_BUFFER_SIZE];
367static char setup_used[MAX_SETUP_STRINGS]; 367static char setup_used[MAX_SETUP_STRINGS];
@@ -2190,15 +2190,15 @@ static const struct {
2190 */ 2190 */
2191 2191
2192 2192
2193static void 2193static void
2194synchronous (struct Scsi_Host *host, int target, char *msg) { 2194synchronous (struct Scsi_Host *host, int target, char *msg) {
2195 struct NCR53c7x0_hostdata *hostdata = (struct NCR53c7x0_hostdata *) 2195 struct NCR53c7x0_hostdata *hostdata = (struct NCR53c7x0_hostdata *)
2196 host->hostdata[0]; 2196 host->hostdata[0];
2197 int desire, divisor, i, limit; 2197 int desire, divisor, i, limit;
2198 unsigned char scntl3, sxfer; 2198 unsigned char scntl3, sxfer;
2199/* The diagnostic message fits on one line, even with max. width integers */ 2199/* The diagnostic message fits on one line, even with max. width integers */
2200 char buf[80]; 2200 char buf[80];
2201 2201
2202/* Desired transfer clock in Hz */ 2202/* Desired transfer clock in Hz */
2203 desire = 1000000000L / (msg[3] * 4); 2203 desire = 1000000000L / (msg[3] * 4);
2204/* Scale the available SCSI clock by 10 so we get tenths */ 2204/* Scale the available SCSI clock by 10 so we get tenths */
@@ -2209,14 +2209,14 @@ synchronous (struct Scsi_Host *host, int target, char *msg) {
2209 msg[4] = 8; 2209 msg[4] = 8;
2210 2210
2211 if (hostdata->options & OPTION_DEBUG_SDTR) 2211 if (hostdata->options & OPTION_DEBUG_SDTR)
2212 printk("scsi%d : optimal synchronous divisor of %d.%01d\n", 2212 printk("scsi%d : optimal synchronous divisor of %d.%01d\n",
2213 host->host_no, divisor / 10, divisor % 10); 2213 host->host_no, divisor / 10, divisor % 10);
2214 2214
2215 limit = (sizeof(syncs) / sizeof(syncs[0]) -1); 2215 limit = ARRAY_SIZE(syncs) - 1;
2216 for (i = 0; (i < limit) && (divisor > syncs[i].div); ++i); 2216 for (i = 0; (i < limit) && (divisor > syncs[i].div); ++i);
2217 2217
2218 if (hostdata->options & OPTION_DEBUG_SDTR) 2218 if (hostdata->options & OPTION_DEBUG_SDTR)
2219 printk("scsi%d : selected synchronous divisor of %d.%01d\n", 2219 printk("scsi%d : selected synchronous divisor of %d.%01d\n",
2220 host->host_no, syncs[i].div / 10, syncs[i].div % 10); 2220 host->host_no, syncs[i].div / 10, syncs[i].div % 10);
2221 2221
2222 msg[3] = ((1000000000L / hostdata->scsi_clock) * syncs[i].div / 10 / 4); 2222 msg[3] = ((1000000000L / hostdata->scsi_clock) * syncs[i].div / 10 / 4);
diff --git a/drivers/scsi/NCR53c406a.c b/drivers/scsi/NCR53c406a.c
index ae37d3ab9c4a..8472c5359023 100644
--- a/drivers/scsi/NCR53c406a.c
+++ b/drivers/scsi/NCR53c406a.c
@@ -213,16 +213,16 @@ static void *addresses[] = {
213 (void *) 0xd8000, 213 (void *) 0xd8000,
214 (void *) 0xc8000 214 (void *) 0xc8000
215}; 215};
216#define ADDRESS_COUNT (sizeof( addresses ) / sizeof( unsigned )) 216#define ADDRESS_COUNT ARRAY_SIZE(addresses)
217#endif /* USE_BIOS */ 217#endif /* USE_BIOS */
218 218
219/* possible i/o port addresses */ 219/* possible i/o port addresses */
220static unsigned short ports[] = { 0x230, 0x330, 0x280, 0x290, 0x330, 0x340, 0x300, 0x310, 0x348, 0x350 }; 220static unsigned short ports[] = { 0x230, 0x330, 0x280, 0x290, 0x330, 0x340, 0x300, 0x310, 0x348, 0x350 };
221#define PORT_COUNT (sizeof( ports ) / sizeof( unsigned short )) 221#define PORT_COUNT ARRAY_SIZE(ports)
222 222
223/* possible interrupt channels */ 223/* possible interrupt channels */
224static unsigned short intrs[] = { 10, 11, 12, 15 }; 224static unsigned short intrs[] = { 10, 11, 12, 15 };
225#define INTR_COUNT (sizeof( intrs ) / sizeof( unsigned short )) 225#define INTR_COUNT ARRAY_SIZE(intrs)
226 226
227/* signatures for NCR 53c406a based controllers */ 227/* signatures for NCR 53c406a based controllers */
228#if USE_BIOS 228#if USE_BIOS
@@ -236,7 +236,7 @@ struct signature {
236 { 236 {
237"Copyright (C) Acculogic, Inc.\r\n2.8M Diskette Extension Bios ver 4.04.03 03/01/1993", 61, 82},}; 237"Copyright (C) Acculogic, Inc.\r\n2.8M Diskette Extension Bios ver 4.04.03 03/01/1993", 61, 82},};
238 238
239#define SIGNATURE_COUNT (sizeof( signatures ) / sizeof( struct signature )) 239#define SIGNATURE_COUNT ARRAY_SIZE(signatures)
240#endif /* USE_BIOS */ 240#endif /* USE_BIOS */
241 241
242/* ============================================================ */ 242/* ============================================================ */
diff --git a/drivers/scsi/aacraid/aachba.c b/drivers/scsi/aacraid/aachba.c
index e4b38f896cbd..ea9e038813eb 100644
--- a/drivers/scsi/aacraid/aachba.c
+++ b/drivers/scsi/aacraid/aachba.c
@@ -641,13 +641,13 @@ static void setinqstr(struct aac_dev *dev, void *data, int tindex)
641 cp[sizeof(str->pid)] = c; 641 cp[sizeof(str->pid)] = c;
642 } else { 642 } else {
643 struct aac_driver_ident *mp = aac_get_driver_ident(dev->cardtype); 643 struct aac_driver_ident *mp = aac_get_driver_ident(dev->cardtype);
644 644
645 inqstrcpy (mp->vname, str->vid); 645 inqstrcpy (mp->vname, str->vid);
646 /* last six chars reserved for vol type */ 646 /* last six chars reserved for vol type */
647 inqstrcpy (mp->model, str->pid); 647 inqstrcpy (mp->model, str->pid);
648 } 648 }
649 649
650 if (tindex < (sizeof(container_types)/sizeof(char *))){ 650 if (tindex < ARRAY_SIZE(container_types)){
651 char *findit = str->pid; 651 char *findit = str->pid;
652 652
653 for ( ; *findit != ' '; findit++); /* walk till we find a space */ 653 for ( ; *findit != ' '; findit++); /* walk till we find a space */
@@ -1576,7 +1576,7 @@ int aac_scsi_cmd(struct scsi_cmnd * scsicmd)
1576 * see: <vendor>.c i.e. aac.c 1576 * see: <vendor>.c i.e. aac.c
1577 */ 1577 */
1578 if (scmd_id(scsicmd) == host->this_id) { 1578 if (scmd_id(scsicmd) == host->this_id) {
1579 setinqstr(dev, (void *) (inq_data.inqd_vid), (sizeof(container_types)/sizeof(char *))); 1579 setinqstr(dev, (void *) (inq_data.inqd_vid), ARRAY_SIZE(container_types));
1580 inq_data.inqd_pdt = INQD_PDT_PROC; /* Processor device */ 1580 inq_data.inqd_pdt = INQD_PDT_PROC; /* Processor device */
1581 aac_internal_transfer(scsicmd, &inq_data, 0, sizeof(inq_data)); 1581 aac_internal_transfer(scsicmd, &inq_data, 0, sizeof(inq_data));
1582 scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8 | SAM_STAT_GOOD; 1582 scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8 | SAM_STAT_GOOD;
@@ -2381,7 +2381,7 @@ static struct aac_srb_status_info srb_status_info[] = {
2381 { SRB_STATUS_SUCCESS, "Success"}, 2381 { SRB_STATUS_SUCCESS, "Success"},
2382 { SRB_STATUS_ABORTED, "Aborted Command"}, 2382 { SRB_STATUS_ABORTED, "Aborted Command"},
2383 { SRB_STATUS_ABORT_FAILED, "Abort Failed"}, 2383 { SRB_STATUS_ABORT_FAILED, "Abort Failed"},
2384 { SRB_STATUS_ERROR, "Error Event"}, 2384 { SRB_STATUS_ERROR, "Error Event"},
2385 { SRB_STATUS_BUSY, "Device Busy"}, 2385 { SRB_STATUS_BUSY, "Device Busy"},
2386 { SRB_STATUS_INVALID_REQUEST, "Invalid Request"}, 2386 { SRB_STATUS_INVALID_REQUEST, "Invalid Request"},
2387 { SRB_STATUS_INVALID_PATH_ID, "Invalid Path ID"}, 2387 { SRB_STATUS_INVALID_PATH_ID, "Invalid Path ID"},
@@ -2400,7 +2400,7 @@ static struct aac_srb_status_info srb_status_info[] = {
2400 { SRB_STATUS_BAD_SRB_BLOCK_LENGTH,"Bad Srb Block Length"}, 2400 { SRB_STATUS_BAD_SRB_BLOCK_LENGTH,"Bad Srb Block Length"},
2401 { SRB_STATUS_REQUEST_FLUSHED, "Request Flushed"}, 2401 { SRB_STATUS_REQUEST_FLUSHED, "Request Flushed"},
2402 { SRB_STATUS_DELAYED_RETRY, "Delayed Retry"}, 2402 { SRB_STATUS_DELAYED_RETRY, "Delayed Retry"},
2403 { SRB_STATUS_INVALID_LUN, "Invalid LUN"}, 2403 { SRB_STATUS_INVALID_LUN, "Invalid LUN"},
2404 { SRB_STATUS_INVALID_TARGET_ID, "Invalid TARGET ID"}, 2404 { SRB_STATUS_INVALID_TARGET_ID, "Invalid TARGET ID"},
2405 { SRB_STATUS_BAD_FUNCTION, "Bad Function"}, 2405 { SRB_STATUS_BAD_FUNCTION, "Bad Function"},
2406 { SRB_STATUS_ERROR_RECOVERY, "Error Recovery"}, 2406 { SRB_STATUS_ERROR_RECOVERY, "Error Recovery"},
@@ -2415,11 +2415,9 @@ char *aac_get_status_string(u32 status)
2415{ 2415{
2416 int i; 2416 int i;
2417 2417
2418 for(i=0; i < (sizeof(srb_status_info)/sizeof(struct aac_srb_status_info)); i++ ){ 2418 for (i = 0; i < ARRAY_SIZE(srb_status_info); i++)
2419 if(srb_status_info[i].status == status){ 2419 if (srb_status_info[i].status == status)
2420 return srb_status_info[i].str; 2420 return srb_status_info[i].str;
2421 }
2422 }
2423 2421
2424 return "Bad Status Code"; 2422 return "Bad Status Code";
2425} 2423}
diff --git a/drivers/scsi/aacraid/commctrl.c b/drivers/scsi/aacraid/commctrl.c
index 9f75144e5247..255421de9d1a 100644
--- a/drivers/scsi/aacraid/commctrl.c
+++ b/drivers/scsi/aacraid/commctrl.c
@@ -535,7 +535,7 @@ static int aac_send_raw_srb(struct aac_dev* dev, void __user * arg)
535 default: 535 default:
536 data_dir = DMA_NONE; 536 data_dir = DMA_NONE;
537 } 537 }
538 if (user_srbcmd->sg.count > (sizeof(sg_list)/sizeof(sg_list[0]))) { 538 if (user_srbcmd->sg.count > ARRAY_SIZE(sg_list)) {
539 dprintk((KERN_DEBUG"aacraid: too many sg entries %d\n", 539 dprintk((KERN_DEBUG"aacraid: too many sg entries %d\n",
540 le32_to_cpu(srbcmd->sg.count))); 540 le32_to_cpu(srbcmd->sg.count)));
541 rcode = -EINVAL; 541 rcode = -EINVAL;
diff --git a/drivers/scsi/aha1542.c b/drivers/scsi/aha1542.c
index 51bad7a1e773..86c6bd234591 100644
--- a/drivers/scsi/aha1542.c
+++ b/drivers/scsi/aha1542.c
@@ -1011,7 +1011,7 @@ static int __init do_setup(char *str)
1011 1011
1012 int count=setup_idx; 1012 int count=setup_idx;
1013 1013
1014 get_options(str, sizeof(ints)/sizeof(int), ints); 1014 get_options(str, ARRAY_SIZE(ints), ints);
1015 aha1542_setup(str,ints); 1015 aha1542_setup(str,ints);
1016 1016
1017 return count<setup_idx; 1017 return count<setup_idx;
@@ -1072,8 +1072,7 @@ static int __init aha1542_detect(struct scsi_host_template * tpnt)
1072 int slot = 0; 1072 int slot = 0;
1073 int pos = 0; 1073 int pos = 0;
1074 1074
1075 for (indx = 0; (slot != MCA_NOTFOUND) && 1075 for (indx = 0; (slot != MCA_NOTFOUND) && (indx < ARRAY_SIZE(bases)); indx++) {
1076 (indx < sizeof(bases)/sizeof(bases[0])); indx++) {
1077 1076
1078 if (bases[indx]) 1077 if (bases[indx])
1079 continue; 1078 continue;
@@ -1083,10 +1082,9 @@ static int __init aha1542_detect(struct scsi_host_template * tpnt)
1083 if (slot == MCA_NOTFOUND) 1082 if (slot == MCA_NOTFOUND)
1084 break; 1083 break;
1085 1084
1086
1087 /* Found one */ 1085 /* Found one */
1088 pos = mca_read_stored_pos(slot, 3); 1086 pos = mca_read_stored_pos(slot, 3);
1089 1087
1090 /* Decode address */ 1088 /* Decode address */
1091 if (pos & 0x80) { 1089 if (pos & 0x80) {
1092 if (pos & 0x02) { 1090 if (pos & 0x02) {
@@ -1118,23 +1116,22 @@ static int __init aha1542_detect(struct scsi_host_template * tpnt)
1118 mca_set_adapter_name(slot, "Adapter AHA-1640"); 1116 mca_set_adapter_name(slot, "Adapter AHA-1640");
1119 mca_set_adapter_procfn(slot, NULL, NULL); 1117 mca_set_adapter_procfn(slot, NULL, NULL);
1120 mca_mark_as_used(slot); 1118 mca_mark_as_used(slot);
1121 1119
1122 /* Go on */ 1120 /* Go on */
1123 slot++; 1121 slot++;
1124 } 1122 }
1125 1123
1126 } 1124 }
1127#endif 1125#endif
1128 1126
1129 /* 1127 /*
1130 * Hunt for ISA Plug'n'Pray Adaptecs (AHA1535) 1128 * Hunt for ISA Plug'n'Pray Adaptecs (AHA1535)
1131 */ 1129 */
1132 1130
1133 if(isapnp) 1131 if(isapnp)
1134 { 1132 {
1135 struct pnp_dev *pdev = NULL; 1133 struct pnp_dev *pdev = NULL;
1136 for(indx = 0; indx <sizeof(bases)/sizeof(bases[0]);indx++) 1134 for(indx = 0; indx < ARRAY_SIZE(bases); indx++) {
1137 {
1138 if(bases[indx]) 1135 if(bases[indx])
1139 continue; 1136 continue;
1140 pdev = pnp_find_dev(NULL, ISAPNP_VENDOR('A', 'D', 'P'), 1137 pdev = pnp_find_dev(NULL, ISAPNP_VENDOR('A', 'D', 'P'),
@@ -1144,29 +1141,29 @@ static int __init aha1542_detect(struct scsi_host_template * tpnt)
1144 /* 1141 /*
1145 * Activate the PnP card 1142 * Activate the PnP card
1146 */ 1143 */
1147 1144
1148 if(pnp_device_attach(pdev)<0) 1145 if(pnp_device_attach(pdev)<0)
1149 continue; 1146 continue;
1150 1147
1151 if(pnp_activate_dev(pdev)<0) { 1148 if(pnp_activate_dev(pdev)<0) {
1152 pnp_device_detach(pdev); 1149 pnp_device_detach(pdev);
1153 continue; 1150 continue;
1154 } 1151 }
1155 1152
1156 if(!pnp_port_valid(pdev, 0)) { 1153 if(!pnp_port_valid(pdev, 0)) {
1157 pnp_device_detach(pdev); 1154 pnp_device_detach(pdev);
1158 continue; 1155 continue;
1159 } 1156 }
1160 1157
1161 bases[indx] = pnp_port_start(pdev, 0); 1158 bases[indx] = pnp_port_start(pdev, 0);
1162 1159
1163 /* The card can be queried for its DMA, we have 1160 /* The card can be queried for its DMA, we have
1164 the DMA set up that is enough */ 1161 the DMA set up that is enough */
1165 1162
1166 printk(KERN_INFO "ISAPnP found an AHA1535 at I/O 0x%03X\n", bases[indx]); 1163 printk(KERN_INFO "ISAPnP found an AHA1535 at I/O 0x%03X\n", bases[indx]);
1167 } 1164 }
1168 } 1165 }
1169 for (indx = 0; indx < sizeof(bases) / sizeof(bases[0]); indx++) 1166 for (indx = 0; indx < ARRAY_SIZE(bases); indx++)
1170 if (bases[indx] != 0 && request_region(bases[indx], 4, "aha1542")) { 1167 if (bases[indx] != 0 && request_region(bases[indx], 4, "aha1542")) {
1171 shpnt = scsi_register(tpnt, 1168 shpnt = scsi_register(tpnt,
1172 sizeof(struct aha1542_hostdata)); 1169 sizeof(struct aha1542_hostdata));
diff --git a/drivers/scsi/aic7xxx/aic7770.c b/drivers/scsi/aic7xxx/aic7770.c
index 527efd36f5c1..c4d17231c828 100644
--- a/drivers/scsi/aic7xxx/aic7770.c
+++ b/drivers/scsi/aic7xxx/aic7770.c
@@ -107,7 +107,7 @@ struct aic7770_identity aic7770_ident_table[] =
107 ahc_aic7770_EISA_setup 107 ahc_aic7770_EISA_setup
108 } 108 }
109}; 109};
110const int ahc_num_aic7770_devs = NUM_ELEMENTS(aic7770_ident_table); 110const int ahc_num_aic7770_devs = ARRAY_SIZE(aic7770_ident_table);
111 111
112struct aic7770_identity * 112struct aic7770_identity *
113aic7770_find_device(uint32_t id) 113aic7770_find_device(uint32_t id)
diff --git a/drivers/scsi/aic7xxx/aic79xx.h b/drivers/scsi/aic7xxx/aic79xx.h
index bb5166da4358..eb7745692682 100644
--- a/drivers/scsi/aic7xxx/aic79xx.h
+++ b/drivers/scsi/aic7xxx/aic79xx.h
@@ -68,8 +68,6 @@ struct scb_platform_data;
68#define FALSE 0 68#define FALSE 0
69#endif 69#endif
70 70
71#define NUM_ELEMENTS(array) (sizeof(array) / sizeof(*array))
72
73#define ALL_CHANNELS '\0' 71#define ALL_CHANNELS '\0'
74#define ALL_TARGETS_MASK 0xFFFF 72#define ALL_TARGETS_MASK 0xFFFF
75#define INITIATOR_WILDCARD (~0) 73#define INITIATOR_WILDCARD (~0)
diff --git a/drivers/scsi/aic7xxx/aic79xx_core.c b/drivers/scsi/aic7xxx/aic79xx_core.c
index e14244aa69d7..801fc81d0b20 100644
--- a/drivers/scsi/aic7xxx/aic79xx_core.c
+++ b/drivers/scsi/aic7xxx/aic79xx_core.c
@@ -59,7 +59,7 @@ char *ahd_chip_names[] =
59 "aic7902", 59 "aic7902",
60 "aic7901A" 60 "aic7901A"
61}; 61};
62static const u_int num_chip_names = NUM_ELEMENTS(ahd_chip_names); 62static const u_int num_chip_names = ARRAY_SIZE(ahd_chip_names);
63 63
64/* 64/*
65 * Hardware error codes. 65 * Hardware error codes.
@@ -77,7 +77,7 @@ static struct ahd_hard_error_entry ahd_hard_errors[] = {
77 { MPARERR, "Scratch or SCB Memory Parity Error" }, 77 { MPARERR, "Scratch or SCB Memory Parity Error" },
78 { CIOPARERR, "CIOBUS Parity Error" }, 78 { CIOPARERR, "CIOBUS Parity Error" },
79}; 79};
80static const u_int num_errors = NUM_ELEMENTS(ahd_hard_errors); 80static const u_int num_errors = ARRAY_SIZE(ahd_hard_errors);
81 81
82static struct ahd_phase_table_entry ahd_phase_table[] = 82static struct ahd_phase_table_entry ahd_phase_table[] =
83{ 83{
@@ -97,7 +97,7 @@ static struct ahd_phase_table_entry ahd_phase_table[] =
97 * In most cases we only wish to itterate over real phases, so 97 * In most cases we only wish to itterate over real phases, so
98 * exclude the last element from the count. 98 * exclude the last element from the count.
99 */ 99 */
100static const u_int num_phases = NUM_ELEMENTS(ahd_phase_table) - 1; 100static const u_int num_phases = ARRAY_SIZE(ahd_phase_table) - 1;
101 101
102/* Our Sequencer Program */ 102/* Our Sequencer Program */
103#include "aic79xx_seq.h" 103#include "aic79xx_seq.h"
@@ -7259,7 +7259,7 @@ ahd_qinfifo_count(struct ahd_softc *ahd)
7259 return (wrap_qinfifonext - wrap_qinpos); 7259 return (wrap_qinfifonext - wrap_qinpos);
7260 else 7260 else
7261 return (wrap_qinfifonext 7261 return (wrap_qinfifonext
7262 + NUM_ELEMENTS(ahd->qinfifo) - wrap_qinpos); 7262 + ARRAY_SIZE(ahd->qinfifo) - wrap_qinpos);
7263} 7263}
7264 7264
7265void 7265void
@@ -8619,7 +8619,7 @@ ahd_check_patch(struct ahd_softc *ahd, struct patch **start_patch,
8619 struct patch *last_patch; 8619 struct patch *last_patch;
8620 u_int num_patches; 8620 u_int num_patches;
8621 8621
8622 num_patches = sizeof(patches)/sizeof(struct patch); 8622 num_patches = ARRAY_SIZE(patches);
8623 last_patch = &patches[num_patches]; 8623 last_patch = &patches[num_patches];
8624 cur_patch = *start_patch; 8624 cur_patch = *start_patch;
8625 8625
diff --git a/drivers/scsi/aic7xxx/aic79xx_osm.c b/drivers/scsi/aic7xxx/aic79xx_osm.c
index 66e4a47bb9ee..e0ccdf362200 100644
--- a/drivers/scsi/aic7xxx/aic79xx_osm.c
+++ b/drivers/scsi/aic7xxx/aic79xx_osm.c
@@ -916,7 +916,7 @@ ahd_linux_setup_iocell_info(u_long index, int instance, int targ, int32_t value)
916{ 916{
917 917
918 if ((instance >= 0) 918 if ((instance >= 0)
919 && (instance < NUM_ELEMENTS(aic79xx_iocell_info))) { 919 && (instance < ARRAY_SIZE(aic79xx_iocell_info))) {
920 uint8_t *iocell_info; 920 uint8_t *iocell_info;
921 921
922 iocell_info = (uint8_t*)&aic79xx_iocell_info[instance]; 922 iocell_info = (uint8_t*)&aic79xx_iocell_info[instance];
@@ -934,7 +934,7 @@ ahd_linux_setup_tag_info_global(char *p)
934 tags = simple_strtoul(p + 1, NULL, 0) & 0xff; 934 tags = simple_strtoul(p + 1, NULL, 0) & 0xff;
935 printf("Setting Global Tags= %d\n", tags); 935 printf("Setting Global Tags= %d\n", tags);
936 936
937 for (i = 0; i < NUM_ELEMENTS(aic79xx_tag_info); i++) { 937 for (i = 0; i < ARRAY_SIZE(aic79xx_tag_info); i++) {
938 for (j = 0; j < AHD_NUM_TARGETS; j++) { 938 for (j = 0; j < AHD_NUM_TARGETS; j++) {
939 aic79xx_tag_info[i].tag_commands[j] = tags; 939 aic79xx_tag_info[i].tag_commands[j] = tags;
940 } 940 }
@@ -946,7 +946,7 @@ ahd_linux_setup_tag_info(u_long arg, int instance, int targ, int32_t value)
946{ 946{
947 947
948 if ((instance >= 0) && (targ >= 0) 948 if ((instance >= 0) && (targ >= 0)
949 && (instance < NUM_ELEMENTS(aic79xx_tag_info)) 949 && (instance < ARRAY_SIZE(aic79xx_tag_info))
950 && (targ < AHD_NUM_TARGETS)) { 950 && (targ < AHD_NUM_TARGETS)) {
951 aic79xx_tag_info[instance].tag_commands[targ] = value & 0x1FF; 951 aic79xx_tag_info[instance].tag_commands[targ] = value & 0x1FF;
952 if (bootverbose) 952 if (bootverbose)
@@ -1072,21 +1072,21 @@ aic79xx_setup(char *s)
1072 end = strchr(s, '\0'); 1072 end = strchr(s, '\0');
1073 1073
1074 /* 1074 /*
1075 * XXX ia64 gcc isn't smart enough to know that NUM_ELEMENTS 1075 * XXX ia64 gcc isn't smart enough to know that ARRAY_SIZE
1076 * will never be 0 in this case. 1076 * will never be 0 in this case.
1077 */ 1077 */
1078 n = 0; 1078 n = 0;
1079 1079
1080 while ((p = strsep(&s, ",.")) != NULL) { 1080 while ((p = strsep(&s, ",.")) != NULL) {
1081 if (*p == '\0') 1081 if (*p == '\0')
1082 continue; 1082 continue;
1083 for (i = 0; i < NUM_ELEMENTS(options); i++) { 1083 for (i = 0; i < ARRAY_SIZE(options); i++) {
1084 1084
1085 n = strlen(options[i].name); 1085 n = strlen(options[i].name);
1086 if (strncmp(options[i].name, p, n) == 0) 1086 if (strncmp(options[i].name, p, n) == 0)
1087 break; 1087 break;
1088 } 1088 }
1089 if (i == NUM_ELEMENTS(options)) 1089 if (i == ARRAY_SIZE(options))
1090 continue; 1090 continue;
1091 1091
1092 if (strncmp(p, "global_tag_depth", n) == 0) { 1092 if (strncmp(p, "global_tag_depth", n) == 0) {
@@ -1294,7 +1294,7 @@ ahd_platform_init(struct ahd_softc *ahd)
1294 /* 1294 /*
1295 * Lookup and commit any modified IO Cell options. 1295 * Lookup and commit any modified IO Cell options.
1296 */ 1296 */
1297 if (ahd->unit < NUM_ELEMENTS(aic79xx_iocell_info)) { 1297 if (ahd->unit < ARRAY_SIZE(aic79xx_iocell_info)) {
1298 struct ahd_linux_iocell_opts *iocell_opts; 1298 struct ahd_linux_iocell_opts *iocell_opts;
1299 1299
1300 iocell_opts = &aic79xx_iocell_info[ahd->unit]; 1300 iocell_opts = &aic79xx_iocell_info[ahd->unit];
@@ -1426,7 +1426,7 @@ ahd_linux_user_tagdepth(struct ahd_softc *ahd, struct ahd_devinfo *devinfo)
1426 1426
1427 tags = 0; 1427 tags = 0;
1428 if ((ahd->user_discenable & devinfo->target_mask) != 0) { 1428 if ((ahd->user_discenable & devinfo->target_mask) != 0) {
1429 if (ahd->unit >= NUM_ELEMENTS(aic79xx_tag_info)) { 1429 if (ahd->unit >= ARRAY_SIZE(aic79xx_tag_info)) {
1430 1430
1431 if (warned_user == 0) { 1431 if (warned_user == 0) {
1432 printf(KERN_WARNING 1432 printf(KERN_WARNING
diff --git a/drivers/scsi/aic7xxx/aic79xx_pci.c b/drivers/scsi/aic7xxx/aic79xx_pci.c
index 757242e522c2..14850f31aafa 100644
--- a/drivers/scsi/aic7xxx/aic79xx_pci.c
+++ b/drivers/scsi/aic7xxx/aic79xx_pci.c
@@ -201,7 +201,7 @@ struct ahd_pci_identity ahd_pci_ident_table [] =
201 } 201 }
202}; 202};
203 203
204const u_int ahd_num_pci_devs = NUM_ELEMENTS(ahd_pci_ident_table); 204const u_int ahd_num_pci_devs = ARRAY_SIZE(ahd_pci_ident_table);
205 205
206#define DEVCONFIG 0x40 206#define DEVCONFIG 0x40
207#define PCIXINITPAT 0x0000E000ul 207#define PCIXINITPAT 0x0000E000ul
diff --git a/drivers/scsi/aic7xxx/aic79xx_proc.c b/drivers/scsi/aic7xxx/aic79xx_proc.c
index 39a27840fce6..24fd59a230bf 100644
--- a/drivers/scsi/aic7xxx/aic79xx_proc.c
+++ b/drivers/scsi/aic7xxx/aic79xx_proc.c
@@ -76,11 +76,9 @@ static u_int
76ahd_calc_syncsrate(u_int period_factor) 76ahd_calc_syncsrate(u_int period_factor)
77{ 77{
78 int i; 78 int i;
79 int num_syncrates;
80 79
81 num_syncrates = sizeof(scsi_syncrates) / sizeof(scsi_syncrates[0]);
82 /* See if the period is in the "exception" table */ 80 /* See if the period is in the "exception" table */
83 for (i = 0; i < num_syncrates; i++) { 81 for (i = 0; i < ARRAY_SIZE(scsi_syncrates); i++) {
84 82
85 if (period_factor == scsi_syncrates[i].period_factor) { 83 if (period_factor == scsi_syncrates[i].period_factor) {
86 /* Period in kHz */ 84 /* Period in kHz */
diff --git a/drivers/scsi/aic7xxx/aic7xxx.h b/drivers/scsi/aic7xxx/aic7xxx.h
index 91d294c6334e..e24e6067401b 100644
--- a/drivers/scsi/aic7xxx/aic7xxx.h
+++ b/drivers/scsi/aic7xxx/aic7xxx.h
@@ -69,8 +69,6 @@ struct seeprom_descriptor;
69#define FALSE 0 69#define FALSE 0
70#endif 70#endif
71 71
72#define NUM_ELEMENTS(array) (sizeof(array) / sizeof(*array))
73
74#define ALL_CHANNELS '\0' 72#define ALL_CHANNELS '\0'
75#define ALL_TARGETS_MASK 0xFFFF 73#define ALL_TARGETS_MASK 0xFFFF
76#define INITIATOR_WILDCARD (~0) 74#define INITIATOR_WILDCARD (~0)
diff --git a/drivers/scsi/aic7xxx/aic7xxx_core.c b/drivers/scsi/aic7xxx/aic7xxx_core.c
index 50a3dd047cfe..93e4e40944b6 100644
--- a/drivers/scsi/aic7xxx/aic7xxx_core.c
+++ b/drivers/scsi/aic7xxx/aic7xxx_core.c
@@ -68,7 +68,7 @@ char *ahc_chip_names[] =
68 "aic7892", 68 "aic7892",
69 "aic7899" 69 "aic7899"
70}; 70};
71static const u_int num_chip_names = NUM_ELEMENTS(ahc_chip_names); 71static const u_int num_chip_names = ARRAY_SIZE(ahc_chip_names);
72 72
73/* 73/*
74 * Hardware error codes. 74 * Hardware error codes.
@@ -88,7 +88,7 @@ static struct ahc_hard_error_entry ahc_hard_errors[] = {
88 { PCIERRSTAT, "PCI Error detected" }, 88 { PCIERRSTAT, "PCI Error detected" },
89 { CIOPARERR, "CIOBUS Parity Error" }, 89 { CIOPARERR, "CIOBUS Parity Error" },
90}; 90};
91static const u_int num_errors = NUM_ELEMENTS(ahc_hard_errors); 91static const u_int num_errors = ARRAY_SIZE(ahc_hard_errors);
92 92
93static struct ahc_phase_table_entry ahc_phase_table[] = 93static struct ahc_phase_table_entry ahc_phase_table[] =
94{ 94{
@@ -108,7 +108,7 @@ static struct ahc_phase_table_entry ahc_phase_table[] =
108 * In most cases we only wish to itterate over real phases, so 108 * In most cases we only wish to itterate over real phases, so
109 * exclude the last element from the count. 109 * exclude the last element from the count.
110 */ 110 */
111static const u_int num_phases = NUM_ELEMENTS(ahc_phase_table) - 1; 111static const u_int num_phases = ARRAY_SIZE(ahc_phase_table) - 1;
112 112
113/* 113/*
114 * Valid SCSIRATE values. (p. 3-17) 114 * Valid SCSIRATE values. (p. 3-17)
@@ -6367,7 +6367,7 @@ ahc_check_patch(struct ahc_softc *ahc, struct patch **start_patch,
6367 struct patch *last_patch; 6367 struct patch *last_patch;
6368 u_int num_patches; 6368 u_int num_patches;
6369 6369
6370 num_patches = sizeof(patches)/sizeof(struct patch); 6370 num_patches = ARRAY_SIZE(patches);
6371 last_patch = &patches[num_patches]; 6371 last_patch = &patches[num_patches];
6372 cur_patch = *start_patch; 6372 cur_patch = *start_patch;
6373 6373
diff --git a/drivers/scsi/aic7xxx/aic7xxx_osm.c b/drivers/scsi/aic7xxx/aic7xxx_osm.c
index 2c801672d8bb..eadfefdd8d7a 100644
--- a/drivers/scsi/aic7xxx/aic7xxx_osm.c
+++ b/drivers/scsi/aic7xxx/aic7xxx_osm.c
@@ -886,7 +886,7 @@ ahc_linux_setup_tag_info_global(char *p)
886 tags = simple_strtoul(p + 1, NULL, 0) & 0xff; 886 tags = simple_strtoul(p + 1, NULL, 0) & 0xff;
887 printf("Setting Global Tags= %d\n", tags); 887 printf("Setting Global Tags= %d\n", tags);
888 888
889 for (i = 0; i < NUM_ELEMENTS(aic7xxx_tag_info); i++) { 889 for (i = 0; i < ARRAY_SIZE(aic7xxx_tag_info); i++) {
890 for (j = 0; j < AHC_NUM_TARGETS; j++) { 890 for (j = 0; j < AHC_NUM_TARGETS; j++) {
891 aic7xxx_tag_info[i].tag_commands[j] = tags; 891 aic7xxx_tag_info[i].tag_commands[j] = tags;
892 } 892 }
@@ -898,7 +898,7 @@ ahc_linux_setup_tag_info(u_long arg, int instance, int targ, int32_t value)
898{ 898{
899 899
900 if ((instance >= 0) && (targ >= 0) 900 if ((instance >= 0) && (targ >= 0)
901 && (instance < NUM_ELEMENTS(aic7xxx_tag_info)) 901 && (instance < ARRAY_SIZE(aic7xxx_tag_info))
902 && (targ < AHC_NUM_TARGETS)) { 902 && (targ < AHC_NUM_TARGETS)) {
903 aic7xxx_tag_info[instance].tag_commands[targ] = value & 0xff; 903 aic7xxx_tag_info[instance].tag_commands[targ] = value & 0xff;
904 if (bootverbose) 904 if (bootverbose)
@@ -1020,7 +1020,7 @@ aic7xxx_setup(char *s)
1020 end = strchr(s, '\0'); 1020 end = strchr(s, '\0');
1021 1021
1022 /* 1022 /*
1023 * XXX ia64 gcc isn't smart enough to know that NUM_ELEMENTS 1023 * XXX ia64 gcc isn't smart enough to know that ARRAY_SIZE
1024 * will never be 0 in this case. 1024 * will never be 0 in this case.
1025 */ 1025 */
1026 n = 0; 1026 n = 0;
@@ -1028,13 +1028,13 @@ aic7xxx_setup(char *s)
1028 while ((p = strsep(&s, ",.")) != NULL) { 1028 while ((p = strsep(&s, ",.")) != NULL) {
1029 if (*p == '\0') 1029 if (*p == '\0')
1030 continue; 1030 continue;
1031 for (i = 0; i < NUM_ELEMENTS(options); i++) { 1031 for (i = 0; i < ARRAY_SIZE(options); i++) {
1032 1032
1033 n = strlen(options[i].name); 1033 n = strlen(options[i].name);
1034 if (strncmp(options[i].name, p, n) == 0) 1034 if (strncmp(options[i].name, p, n) == 0)
1035 break; 1035 break;
1036 } 1036 }
1037 if (i == NUM_ELEMENTS(options)) 1037 if (i == ARRAY_SIZE(options))
1038 continue; 1038 continue;
1039 1039
1040 if (strncmp(p, "global_tag_depth", n) == 0) { 1040 if (strncmp(p, "global_tag_depth", n) == 0) {
@@ -1360,7 +1360,7 @@ ahc_linux_user_tagdepth(struct ahc_softc *ahc, struct ahc_devinfo *devinfo)
1360 1360
1361 tags = 0; 1361 tags = 0;
1362 if ((ahc->user_discenable & devinfo->target_mask) != 0) { 1362 if ((ahc->user_discenable & devinfo->target_mask) != 0) {
1363 if (ahc->unit >= NUM_ELEMENTS(aic7xxx_tag_info)) { 1363 if (ahc->unit >= ARRAY_SIZE(aic7xxx_tag_info)) {
1364 if (warned_user == 0) { 1364 if (warned_user == 0) {
1365 1365
1366 printf(KERN_WARNING 1366 printf(KERN_WARNING
diff --git a/drivers/scsi/aic7xxx/aic7xxx_pci.c b/drivers/scsi/aic7xxx/aic7xxx_pci.c
index 5f586140e057..b1156fbd4a1a 100644
--- a/drivers/scsi/aic7xxx/aic7xxx_pci.c
+++ b/drivers/scsi/aic7xxx/aic7xxx_pci.c
@@ -553,7 +553,7 @@ struct ahc_pci_identity ahc_pci_ident_table [] =
553 } 553 }
554}; 554};
555 555
556const u_int ahc_num_pci_devs = NUM_ELEMENTS(ahc_pci_ident_table); 556const u_int ahc_num_pci_devs = ARRAY_SIZE(ahc_pci_ident_table);
557 557
558#define AHC_394X_SLOT_CHANNEL_A 4 558#define AHC_394X_SLOT_CHANNEL_A 4
559#define AHC_394X_SLOT_CHANNEL_B 5 559#define AHC_394X_SLOT_CHANNEL_B 5
diff --git a/drivers/scsi/aic7xxx/aic7xxx_proc.c b/drivers/scsi/aic7xxx/aic7xxx_proc.c
index 04a3506cf340..5914b4aa4a8f 100644
--- a/drivers/scsi/aic7xxx/aic7xxx_proc.c
+++ b/drivers/scsi/aic7xxx/aic7xxx_proc.c
@@ -77,11 +77,9 @@ static u_int
77ahc_calc_syncsrate(u_int period_factor) 77ahc_calc_syncsrate(u_int period_factor)
78{ 78{
79 int i; 79 int i;
80 int num_syncrates;
81 80
82 num_syncrates = sizeof(scsi_syncrates) / sizeof(scsi_syncrates[0]);
83 /* See if the period is in the "exception" table */ 81 /* See if the period is in the "exception" table */
84 for (i = 0; i < num_syncrates; i++) { 82 for (i = 0; i < ARRAY_SIZE(scsi_syncrates); i++) {
85 83
86 if (period_factor == scsi_syncrates[i].period_factor) { 84 if (period_factor == scsi_syncrates[i].period_factor) {
87 /* Period in kHz */ 85 /* Period in kHz */
diff --git a/drivers/scsi/aic7xxx_old.c b/drivers/scsi/aic7xxx_old.c
index 770f1647e4d6..5dba1c63122e 100644
--- a/drivers/scsi/aic7xxx_old.c
+++ b/drivers/scsi/aic7xxx_old.c
@@ -1565,7 +1565,7 @@ aic7xxx_check_patch(struct aic7xxx_host *p,
1565 struct sequencer_patch *last_patch; 1565 struct sequencer_patch *last_patch;
1566 int num_patches; 1566 int num_patches;
1567 1567
1568 num_patches = sizeof(sequencer_patches)/sizeof(struct sequencer_patch); 1568 num_patches = ARRAY_SIZE(sequencer_patches);
1569 last_patch = &sequencer_patches[num_patches]; 1569 last_patch = &sequencer_patches[num_patches];
1570 cur_patch = *start_patch; 1570 cur_patch = *start_patch;
1571 1571
diff --git a/drivers/scsi/constants.c b/drivers/scsi/constants.c
index 30a335349cee..e24835b38b54 100644
--- a/drivers/scsi/constants.c
+++ b/drivers/scsi/constants.c
@@ -114,8 +114,7 @@ static const struct value_name_pair maint_in_arr[] = {
114 {0xd, "Report supported task management functions"}, 114 {0xd, "Report supported task management functions"},
115 {0xe, "Report priority"}, 115 {0xe, "Report priority"},
116}; 116};
117#define MAINT_IN_SZ \ 117#define MAINT_IN_SZ ARRAY_SIZE(maint_in_arr)
118 (int)(sizeof(maint_in_arr) / sizeof(maint_in_arr[0]))
119 118
120static const struct value_name_pair maint_out_arr[] = { 119static const struct value_name_pair maint_out_arr[] = {
121 {0x6, "Set device identifier"}, 120 {0x6, "Set device identifier"},
@@ -123,34 +122,29 @@ static const struct value_name_pair maint_out_arr[] = {
123 {0xb, "Change aliases"}, 122 {0xb, "Change aliases"},
124 {0xe, "Set priority"}, 123 {0xe, "Set priority"},
125}; 124};
126#define MAINT_OUT_SZ \ 125#define MAINT_OUT_SZ ARRAY_SIZE(maint_out_arr)
127 (int)(sizeof(maint_out_arr) / sizeof(maint_out_arr[0]))
128 126
129static const struct value_name_pair serv_in12_arr[] = { 127static const struct value_name_pair serv_in12_arr[] = {
130 {0x1, "Read media serial number"}, 128 {0x1, "Read media serial number"},
131}; 129};
132#define SERV_IN12_SZ \ 130#define SERV_IN12_SZ ARRAY_SIZE(serv_in12_arr)
133 (int)(sizeof(serv_in12_arr) / sizeof(serv_in12_arr[0]))
134 131
135static const struct value_name_pair serv_out12_arr[] = { 132static const struct value_name_pair serv_out12_arr[] = {
136 {-1, "dummy entry"}, 133 {-1, "dummy entry"},
137}; 134};
138#define SERV_OUT12_SZ \ 135#define SERV_OUT12_SZ ARRAY_SIZE(serv_out12_arr)
139 (int)(sizeof(serv_out12_arr) / sizeof(serv_in12_arr[0]))
140 136
141static const struct value_name_pair serv_in16_arr[] = { 137static const struct value_name_pair serv_in16_arr[] = {
142 {0x10, "Read capacity(16)"}, 138 {0x10, "Read capacity(16)"},
143 {0x11, "Read long(16)"}, 139 {0x11, "Read long(16)"},
144}; 140};
145#define SERV_IN16_SZ \ 141#define SERV_IN16_SZ ARRAY_SIZE(serv_in16_arr)
146 (int)(sizeof(serv_in16_arr) / sizeof(serv_in16_arr[0]))
147 142
148static const struct value_name_pair serv_out16_arr[] = { 143static const struct value_name_pair serv_out16_arr[] = {
149 {0x11, "Write long(16)"}, 144 {0x11, "Write long(16)"},
150 {0x1f, "Notify data transfer device(16)"}, 145 {0x1f, "Notify data transfer device(16)"},
151}; 146};
152#define SERV_OUT16_SZ \ 147#define SERV_OUT16_SZ ARRAY_SIZE(serv_out16_arr)
153 (int)(sizeof(serv_out16_arr) / sizeof(serv_in16_arr[0]))
154 148
155static const struct value_name_pair variable_length_arr[] = { 149static const struct value_name_pair variable_length_arr[] = {
156 {0x1, "Rebuild(32)"}, 150 {0x1, "Rebuild(32)"},
@@ -190,8 +184,7 @@ static const struct value_name_pair variable_length_arr[] = {
190 {0x8f7e, "Perform SCSI command (osd)"}, 184 {0x8f7e, "Perform SCSI command (osd)"},
191 {0x8f7f, "Perform task management function (osd)"}, 185 {0x8f7f, "Perform task management function (osd)"},
192}; 186};
193#define VARIABLE_LENGTH_SZ \ 187#define VARIABLE_LENGTH_SZ ARRAY_SIZE(variable_length_arr)
194 (int)(sizeof(variable_length_arr) / sizeof(variable_length_arr[0]))
195 188
196static const char * get_sa_name(const struct value_name_pair * arr, 189static const char * get_sa_name(const struct value_name_pair * arr,
197 int arr_sz, int service_action) 190 int arr_sz, int service_action)
@@ -1290,10 +1283,10 @@ EXPORT_SYMBOL(scsi_print_command);
1290#ifdef CONFIG_SCSI_CONSTANTS 1283#ifdef CONFIG_SCSI_CONSTANTS
1291 1284
1292static const char * const hostbyte_table[]={ 1285static const char * const hostbyte_table[]={
1293"DID_OK", "DID_NO_CONNECT", "DID_BUS_BUSY", "DID_TIME_OUT", "DID_BAD_TARGET", 1286"DID_OK", "DID_NO_CONNECT", "DID_BUS_BUSY", "DID_TIME_OUT", "DID_BAD_TARGET",
1294"DID_ABORT", "DID_PARITY", "DID_ERROR", "DID_RESET", "DID_BAD_INTR", 1287"DID_ABORT", "DID_PARITY", "DID_ERROR", "DID_RESET", "DID_BAD_INTR",
1295"DID_PASSTHROUGH", "DID_SOFT_ERROR", "DID_IMM_RETRY"}; 1288"DID_PASSTHROUGH", "DID_SOFT_ERROR", "DID_IMM_RETRY"};
1296#define NUM_HOSTBYTE_STRS (sizeof(hostbyte_table) / sizeof(const char *)) 1289#define NUM_HOSTBYTE_STRS ARRAY_SIZE(hostbyte_table)
1297 1290
1298void scsi_print_hostbyte(int scsiresult) 1291void scsi_print_hostbyte(int scsiresult)
1299{ 1292{
@@ -1303,7 +1296,7 @@ void scsi_print_hostbyte(int scsiresult)
1303 if (hb < NUM_HOSTBYTE_STRS) 1296 if (hb < NUM_HOSTBYTE_STRS)
1304 printk("(%s) ", hostbyte_table[hb]); 1297 printk("(%s) ", hostbyte_table[hb]);
1305 else 1298 else
1306 printk("is invalid "); 1299 printk("is invalid ");
1307} 1300}
1308#else 1301#else
1309void scsi_print_hostbyte(int scsiresult) 1302void scsi_print_hostbyte(int scsiresult)
@@ -1315,14 +1308,14 @@ void scsi_print_hostbyte(int scsiresult)
1315#ifdef CONFIG_SCSI_CONSTANTS 1308#ifdef CONFIG_SCSI_CONSTANTS
1316 1309
1317static const char * const driverbyte_table[]={ 1310static const char * const driverbyte_table[]={
1318"DRIVER_OK", "DRIVER_BUSY", "DRIVER_SOFT", "DRIVER_MEDIA", "DRIVER_ERROR", 1311"DRIVER_OK", "DRIVER_BUSY", "DRIVER_SOFT", "DRIVER_MEDIA", "DRIVER_ERROR",
1319"DRIVER_INVALID", "DRIVER_TIMEOUT", "DRIVER_HARD", "DRIVER_SENSE"}; 1312"DRIVER_INVALID", "DRIVER_TIMEOUT", "DRIVER_HARD", "DRIVER_SENSE"};
1320#define NUM_DRIVERBYTE_STRS (sizeof(driverbyte_table) / sizeof(const char *)) 1313#define NUM_DRIVERBYTE_STRS ARRAY_SIZE(driverbyte_table)
1321 1314
1322static const char * const driversuggest_table[]={"SUGGEST_OK", 1315static const char * const driversuggest_table[]={"SUGGEST_OK",
1323"SUGGEST_RETRY", "SUGGEST_ABORT", "SUGGEST_REMAP", "SUGGEST_DIE", 1316"SUGGEST_RETRY", "SUGGEST_ABORT", "SUGGEST_REMAP", "SUGGEST_DIE",
1324"SUGGEST_5", "SUGGEST_6", "SUGGEST_7", "SUGGEST_SENSE"}; 1317"SUGGEST_5", "SUGGEST_6", "SUGGEST_7", "SUGGEST_SENSE"};
1325#define NUM_SUGGEST_STRS (sizeof(driversuggest_table) / sizeof(const char *)) 1318#define NUM_SUGGEST_STRS ARRAY_SIZE(driversuggest_table)
1326 1319
1327void scsi_print_driverbyte(int scsiresult) 1320void scsi_print_driverbyte(int scsiresult)
1328{ 1321{
diff --git a/drivers/scsi/dtc.c b/drivers/scsi/dtc.c
index 310d2f488668..c5108c8c887b 100644
--- a/drivers/scsi/dtc.c
+++ b/drivers/scsi/dtc.c
@@ -145,35 +145,35 @@ static struct override {
1450, IRQ_AUTO}}; 1450, IRQ_AUTO}};
146#endif 146#endif
147 147
148#define NO_OVERRIDES (sizeof(overrides) / sizeof(struct override)) 148#define NO_OVERRIDES ARRAY_SIZE(overrides)
149 149
150static struct base { 150static struct base {
151 unsigned long address; 151 unsigned long address;
152 int noauto; 152 int noauto;
153} bases[] __initdata = { 153} bases[] __initdata = {
154 { 0xcc000, 0 }, 154 { 0xcc000, 0 },
155 { 0xc8000, 0 }, 155 { 0xc8000, 0 },
156 { 0xdc000, 0 }, 156 { 0xdc000, 0 },
157 { 0xd8000, 0 } 157 { 0xd8000, 0 }
158}; 158};
159 159
160#define NO_BASES (sizeof (bases) / sizeof (struct base)) 160#define NO_BASES ARRAY_SIZE(bases)
161 161
162static const struct signature { 162static const struct signature {
163 const char *string; 163 const char *string;
164 int offset; 164 int offset;
165} signatures[] = { 165} signatures[] = {
166 {"DATA TECHNOLOGY CORPORATION BIOS", 0x25}, 166 {"DATA TECHNOLOGY CORPORATION BIOS", 0x25},
167}; 167};
168 168
169#define NO_SIGNATURES (sizeof (signatures) / sizeof (struct signature)) 169#define NO_SIGNATURES ARRAY_SIZE(signatures)
170 170
171#ifndef MODULE 171#ifndef MODULE
172/* 172/*
173 * Function : dtc_setup(char *str, int *ints) 173 * Function : dtc_setup(char *str, int *ints)
174 * 174 *
175 * Purpose : LILO command line initialization of the overrides array, 175 * Purpose : LILO command line initialization of the overrides array,
176 * 176 *
177 * Inputs : str - unused, ints - array of integer parameters with ints[0] 177 * Inputs : str - unused, ints - array of integer parameters with ints[0]
178 * equal to the number of ints. 178 * equal to the number of ints.
179 * 179 *
diff --git a/drivers/scsi/fd_mcs.c b/drivers/scsi/fd_mcs.c
index cca485a2b438..70a1606bd580 100644
--- a/drivers/scsi/fd_mcs.c
+++ b/drivers/scsi/fd_mcs.c
@@ -279,7 +279,7 @@ static struct fd_mcs_adapters_struct fd_mcs_adapters[] = {
279 2}, 279 2},
280}; 280};
281 281
282#define FD_BRDS sizeof(fd_mcs_adapters)/sizeof(struct fd_mcs_adapters_struct) 282#define FD_BRDS ARRAY_SIZE(fd_mcs_adapters)
283 283
284static irqreturn_t fd_mcs_intr(int irq, void *dev_id, struct pt_regs *regs); 284static irqreturn_t fd_mcs_intr(int irq, void *dev_id, struct pt_regs *regs);
285 285
diff --git a/drivers/scsi/fdomain.c b/drivers/scsi/fdomain.c
index 7334244397d1..e16013f0ad6e 100644
--- a/drivers/scsi/fdomain.c
+++ b/drivers/scsi/fdomain.c
@@ -420,10 +420,10 @@ static unsigned long addresses[] = {
420 0xd0000, 420 0xd0000,
421 0xe0000, 421 0xe0000,
422}; 422};
423#define ADDRESS_COUNT (sizeof( addresses ) / sizeof( unsigned )) 423#define ADDRESS_COUNT ARRAY_SIZE(addresses)
424 424
425static unsigned short ports[] = { 0x140, 0x150, 0x160, 0x170 }; 425static unsigned short ports[] = { 0x140, 0x150, 0x160, 0x170 };
426#define PORT_COUNT (sizeof( ports ) / sizeof( unsigned short )) 426#define PORT_COUNT ARRAY_SIZE(ports)
427 427
428static unsigned short ints[] = { 3, 5, 10, 11, 12, 14, 15, 0 }; 428static unsigned short ints[] = { 3, 5, 10, 11, 12, 14, 15, 0 };
429 429
@@ -502,7 +502,7 @@ static struct signature {
502 geometry location are verified). */ 502 geometry location are verified). */
503}; 503};
504 504
505#define SIGNATURE_COUNT (sizeof( signatures ) / sizeof( struct signature )) 505#define SIGNATURE_COUNT ARRAY_SIZE(signatures)
506 506
507static void print_banner( struct Scsi_Host *shpnt ) 507static void print_banner( struct Scsi_Host *shpnt )
508{ 508{
@@ -519,7 +519,7 @@ static void print_banner( struct Scsi_Host *shpnt )
519 519
520 if (bios_minor >= 0) printk("%d", bios_minor); 520 if (bios_minor >= 0) printk("%d", bios_minor);
521 else printk("?."); 521 else printk("?.");
522 522
523 printk( " at 0x%lx using scsi id %d\n", 523 printk( " at 0x%lx using scsi id %d\n",
524 bios_base, shpnt->this_id ); 524 bios_base, shpnt->this_id );
525 } 525 }
diff --git a/drivers/scsi/g_NCR5380.c b/drivers/scsi/g_NCR5380.c
index e6bcfe949340..5f313c93b7a9 100644
--- a/drivers/scsi/g_NCR5380.c
+++ b/drivers/scsi/g_NCR5380.c
@@ -138,10 +138,9 @@ static struct override {
138[1] __initdata = { { 0,},}; 138[1] __initdata = { { 0,},};
139#endif 139#endif
140 140
141#define NO_OVERRIDES ARRAY_SIZE(overrides)
141 142
142#define NO_OVERRIDES (sizeof(overrides) / sizeof(struct override)) 143#ifndef MODULE
143
144#ifndef MODULE
145 144
146/** 145/**
147 * internal_setup - handle lilo command string override 146 * internal_setup - handle lilo command string override
@@ -210,7 +209,7 @@ static int __init do_NCR5380_setup(char *str)
210{ 209{
211 int ints[10]; 210 int ints[10];
212 211
213 get_options(str, sizeof(ints) / sizeof(int), ints); 212 get_options(str, ARRAY_SIZE(ints), ints);
214 internal_setup(BOARD_NCR5380, str, ints); 213 internal_setup(BOARD_NCR5380, str, ints);
215 return 1; 214 return 1;
216} 215}
@@ -218,7 +217,7 @@ static int __init do_NCR5380_setup(char *str)
218/** 217/**
219 * do_NCR53C400_setup - set up entry point 218 * do_NCR53C400_setup - set up entry point
220 * @str: unused 219 * @str: unused
221 * @ints: integer parameters from kernel setup code 220 * @ints: integer parameters from kernel setup code
222 * 221 *
223 * Setup function invoked at boot to parse the ncr53c400= command 222 * Setup function invoked at boot to parse the ncr53c400= command
224 * line. 223 * line.
@@ -228,7 +227,7 @@ static int __init do_NCR53C400_setup(char *str)
228{ 227{
229 int ints[10]; 228 int ints[10];
230 229
231 get_options(str, sizeof(ints) / sizeof(int), ints); 230 get_options(str, ARRAY_SIZE(ints), ints);
232 internal_setup(BOARD_NCR53C400, str, ints); 231 internal_setup(BOARD_NCR53C400, str, ints);
233 return 1; 232 return 1;
234} 233}
@@ -236,7 +235,7 @@ static int __init do_NCR53C400_setup(char *str)
236/** 235/**
237 * do_NCR53C400A_setup - set up entry point 236 * do_NCR53C400A_setup - set up entry point
238 * @str: unused 237 * @str: unused
239 * @ints: integer parameters from kernel setup code 238 * @ints: integer parameters from kernel setup code
240 * 239 *
241 * Setup function invoked at boot to parse the ncr53c400a= command 240 * Setup function invoked at boot to parse the ncr53c400a= command
242 * line. 241 * line.
@@ -246,7 +245,7 @@ static int __init do_NCR53C400A_setup(char *str)
246{ 245{
247 int ints[10]; 246 int ints[10];
248 247
249 get_options(str, sizeof(ints) / sizeof(int), ints); 248 get_options(str, ARRAY_SIZE(ints), ints);
250 internal_setup(BOARD_NCR53C400A, str, ints); 249 internal_setup(BOARD_NCR53C400A, str, ints);
251 return 1; 250 return 1;
252} 251}
@@ -254,7 +253,7 @@ static int __init do_NCR53C400A_setup(char *str)
254/** 253/**
255 * do_DTC3181E_setup - set up entry point 254 * do_DTC3181E_setup - set up entry point
256 * @str: unused 255 * @str: unused
257 * @ints: integer parameters from kernel setup code 256 * @ints: integer parameters from kernel setup code
258 * 257 *
259 * Setup function invoked at boot to parse the dtc3181e= command 258 * Setup function invoked at boot to parse the dtc3181e= command
260 * line. 259 * line.
@@ -264,7 +263,7 @@ static int __init do_DTC3181E_setup(char *str)
264{ 263{
265 int ints[10]; 264 int ints[10];
266 265
267 get_options(str, sizeof(ints) / sizeof(int), ints); 266 get_options(str, ARRAY_SIZE(ints), ints);
268 internal_setup(BOARD_DTC3181E, str, ints); 267 internal_setup(BOARD_DTC3181E, str, ints);
269 return 1; 268 return 1;
270} 269}
diff --git a/drivers/scsi/gdth.c b/drivers/scsi/gdth.c
index e720bb017c1e..fc4d9f61cf3d 100644
--- a/drivers/scsi/gdth.c
+++ b/drivers/scsi/gdth.c
@@ -569,8 +569,8 @@ static struct timer_list gdth_timer;
569#endif 569#endif
570 570
571#define PTR2USHORT(a) (ushort)(ulong)(a) 571#define PTR2USHORT(a) (ushort)(ulong)(a)
572#define GDTOFFSOF(a,b) (size_t)&(((a*)0)->b) 572#define GDTOFFSOF(a,b) (size_t)&(((a*)0)->b)
573#define INDEX_OK(i,t) ((i)<sizeof(t)/sizeof((t)[0])) 573#define INDEX_OK(i,t) ((i)<ARRAY_SIZE(t))
574 574
575#define NUMDATA(a) ( (gdth_num_str *)((a)->hostdata)) 575#define NUMDATA(a) ( (gdth_num_str *)((a)->hostdata))
576#define HADATA(a) (&((gdth_ext_str *)((a)->hostdata))->haext) 576#define HADATA(a) (&((gdth_ext_str *)((a)->hostdata))->haext)
diff --git a/drivers/scsi/ibmmca.c b/drivers/scsi/ibmmca.c
index 24eb59e143a9..0c6dc31bb14d 100644
--- a/drivers/scsi/ibmmca.c
+++ b/drivers/scsi/ibmmca.c
@@ -1441,7 +1441,7 @@ static int ibmmca_getinfo(char *buf, int slot, void *dev_id)
1441 struct Scsi_Host *dev = dev_id; 1441 struct Scsi_Host *dev = dev_id;
1442 1442
1443 spin_lock_irqsave(dev->host_lock, flags); 1443 spin_lock_irqsave(dev->host_lock, flags);
1444 1444
1445 shpnt = dev; /* assign host-structure to local pointer */ 1445 shpnt = dev; /* assign host-structure to local pointer */
1446 len = 0; /* set filled text-buffer index to 0 */ 1446 len = 0; /* set filled text-buffer index to 0 */
1447 /* get the _special contents of the hostdata structure */ 1447 /* get the _special contents of the hostdata structure */
@@ -1456,7 +1456,7 @@ static int ibmmca_getinfo(char *buf, int slot, void *dev_id)
1456 /* if the integrated subsystem has been found automatically: */ 1456 /* if the integrated subsystem has been found automatically: */
1457 len += sprintf(buf + len, 1457 len += sprintf(buf + len,
1458 "Adapter category: integrated\n" "Chip revision level: %d\n" "Chip status: %s\n" "8 kByte NVRAM status: %s\n", ((pos[2] & 0xf0) >> 4), (pos[2] & 1) ? "enabled" : "disabled", (pos[2] & 2) ? "locked" : "accessible"); 1458 "Adapter category: integrated\n" "Chip revision level: %d\n" "Chip status: %s\n" "8 kByte NVRAM status: %s\n", ((pos[2] & 0xf0) >> 4), (pos[2] & 1) ? "enabled" : "disabled", (pos[2] & 2) ? "locked" : "accessible");
1459 } else if ((speciale >= 0) && (speciale < (sizeof(subsys_list) / sizeof(struct subsys_list_struct)))) { 1459 } else if ((speciale >= 0) && (speciale < ARRAY_SIZE(subsys_list))) {
1460 /* if the subsystem is a slot adapter */ 1460 /* if the subsystem is a slot adapter */
1461 len += sprintf(buf + len, "Adapter category: slot-card\n" "ROM Segment Address: "); 1461 len += sprintf(buf + len, "Adapter category: slot-card\n" "ROM Segment Address: ");
1462 if ((pos[2] & 0xf0) == 0xf0) 1462 if ((pos[2] & 0xf0) == 0xf0)
@@ -1477,16 +1477,16 @@ static int ibmmca_getinfo(char *buf, int slot, void *dev_id)
1477 while (len % sizeof(int) != (sizeof(int) - 1)) 1477 while (len % sizeof(int) != (sizeof(int) - 1))
1478 len += sprintf(buf + len, " "); 1478 len += sprintf(buf + len, " ");
1479 len += sprintf(buf + len, "\n"); 1479 len += sprintf(buf + len, "\n");
1480 1480
1481 spin_unlock_irqrestore(shpnt->host_lock, flags); 1481 spin_unlock_irqrestore(shpnt->host_lock, flags);
1482 1482
1483 return len; 1483 return len;
1484} 1484}
1485 1485
1486int ibmmca_detect(struct scsi_host_template * scsi_template) 1486int ibmmca_detect(struct scsi_host_template * scsi_template)
1487{ 1487{
1488 struct Scsi_Host *shpnt; 1488 struct Scsi_Host *shpnt;
1489 int port, id, i, j, k, list_size, slot; 1489 int port, id, i, j, k, slot;
1490 int devices_on_irq_11 = 0; 1490 int devices_on_irq_11 = 0;
1491 int devices_on_irq_14 = 0; 1491 int devices_on_irq_14 = 0;
1492 int IRQ14_registered = 0; 1492 int IRQ14_registered = 0;
@@ -1603,8 +1603,7 @@ int ibmmca_detect(struct scsi_host_template * scsi_template)
1603 /* now look for other adapters in MCA slots, */ 1603 /* now look for other adapters in MCA slots, */
1604 /* determine the number of known IBM-SCSI-subsystem types */ 1604 /* determine the number of known IBM-SCSI-subsystem types */
1605 /* see the pos[2] dependence to get the adapter port-offset. */ 1605 /* see the pos[2] dependence to get the adapter port-offset. */
1606 list_size = sizeof(subsys_list) / sizeof(struct subsys_list_struct); 1606 for (i = 0; i < ARRAY_SIZE(subsys_list); i++) {
1607 for (i = 0; i < list_size; i++) {
1608 /* scan each slot for a fitting adapter id */ 1607 /* scan each slot for a fitting adapter id */
1609 slot = 0; /* start at slot 0 */ 1608 slot = 0; /* start at slot 0 */
1610 while ((slot = mca_find_adapter(subsys_list[i].mca_id, slot)) 1609 while ((slot = mca_find_adapter(subsys_list[i].mca_id, slot))
@@ -1669,8 +1668,7 @@ int ibmmca_detect(struct scsi_host_template * scsi_template)
1669 /* now check for SCSI-adapters, mapped to the integrated SCSI 1668 /* now check for SCSI-adapters, mapped to the integrated SCSI
1670 * area. E.g. a W/Cache in MCA-slot 9(!). Do the check correct here, 1669 * area. E.g. a W/Cache in MCA-slot 9(!). Do the check correct here,
1671 * as this is a known effect on some models 95xx. */ 1670 * as this is a known effect on some models 95xx. */
1672 list_size = sizeof(subsys_list) / sizeof(struct subsys_list_struct); 1671 for (i = 0; i < ARRAY_SIZE(subsys_list); i++) {
1673 for (i = 0; i < list_size; i++) {
1674 /* scan each slot for a fitting adapter id */ 1672 /* scan each slot for a fitting adapter id */
1675 slot = mca_find_adapter(subsys_list[i].mca_id, MCA_INTEGSCSI); 1673 slot = mca_find_adapter(subsys_list[i].mca_id, MCA_INTEGSCSI);
1676 if (slot != MCA_NOTFOUND) { /* scan through all slots */ 1674 if (slot != MCA_NOTFOUND) { /* scan through all slots */
diff --git a/drivers/scsi/in2000.c b/drivers/scsi/in2000.c
index 89a57a62e8ca..883bc92b4d9a 100644
--- a/drivers/scsi/in2000.c
+++ b/drivers/scsi/in2000.c
@@ -1809,7 +1809,7 @@ static int in2000_abort(Scsi_Cmnd * cmd)
1809 1809
1810 1810
1811#define MAX_IN2000_HOSTS 3 1811#define MAX_IN2000_HOSTS 3
1812#define MAX_SETUP_ARGS (sizeof(setup_args) / sizeof(char *)) 1812#define MAX_SETUP_ARGS ARRAY_SIZE(setup_args)
1813#define SETUP_BUFFER_SIZE 200 1813#define SETUP_BUFFER_SIZE 200
1814static char setup_buffer[SETUP_BUFFER_SIZE]; 1814static char setup_buffer[SETUP_BUFFER_SIZE];
1815static char setup_used[MAX_SETUP_ARGS]; 1815static char setup_used[MAX_SETUP_ARGS];
diff --git a/drivers/scsi/initio.c b/drivers/scsi/initio.c
index 0cc7f65b584f..913ba95f85bd 100644
--- a/drivers/scsi/initio.c
+++ b/drivers/scsi/initio.c
@@ -154,7 +154,6 @@
154static unsigned int i91u_debug = DEBUG_DEFAULT; 154static unsigned int i91u_debug = DEBUG_DEFAULT;
155#endif 155#endif
156 156
157#define TULSZ(sz) (sizeof(sz) / sizeof(sz[0]))
158#define TUL_RDWORD(x,y) (short)(inl((int)((ULONG)((ULONG)x+(UCHAR)y)) )) 157#define TUL_RDWORD(x,y) (short)(inl((int)((ULONG)((ULONG)x+(UCHAR)y)) ))
159 158
160typedef struct PCI_ID_Struc { 159typedef struct PCI_ID_Struc {
@@ -2771,7 +2770,7 @@ static int tul_NewReturnNumberOfAdapters(void)
2771 2770
2772 init_i91uAdapter_table(); 2771 init_i91uAdapter_table();
2773 2772
2774 for (i = 0; i < TULSZ(i91u_pci_devices); i++) 2773 for (i = 0; i < ARRAY_SIZE(i91u_pci_devices); i++)
2775 { 2774 {
2776 while ((pDev = pci_find_device(i91u_pci_devices[i].vendor_id, i91u_pci_devices[i].device_id, pDev)) != NULL) { 2775 while ((pDev = pci_find_device(i91u_pci_devices[i].vendor_id, i91u_pci_devices[i].device_id, pDev)) != NULL) {
2777 if (pci_enable_device(pDev)) 2776 if (pci_enable_device(pDev))
diff --git a/drivers/scsi/ips.c b/drivers/scsi/ips.c
index 350c08c60887..5353b28b2939 100644
--- a/drivers/scsi/ips.c
+++ b/drivers/scsi/ips.c
@@ -556,7 +556,7 @@ ips_setup(char *ips_str)
556 * We now have key/value pairs. 556 * We now have key/value pairs.
557 * Update the variables 557 * Update the variables
558 */ 558 */
559 for (i = 0; i < (sizeof (options) / sizeof (options[0])); i++) { 559 for (i = 0; i < ARRAY_SIZE(options); i++) {
560 if (strnicmp 560 if (strnicmp
561 (key, options[i].option_name, 561 (key, options[i].option_name,
562 strlen(options[i].option_name)) == 0) { 562 strlen(options[i].option_name)) == 0) {
diff --git a/drivers/scsi/osst.c b/drivers/scsi/osst.c
index e3bd4bc339f4..ce0ba3a174f9 100644
--- a/drivers/scsi/osst.c
+++ b/drivers/scsi/osst.c
@@ -5492,7 +5492,7 @@ static int __init osst_setup (char *str)
5492 char *stp; 5492 char *stp;
5493 5493
5494 stp = get_options(str, ARRAY_SIZE(ints), ints); 5494 stp = get_options(str, ARRAY_SIZE(ints), ints);
5495 5495
5496 if (ints[0] > 0) { 5496 if (ints[0] > 0) {
5497 for (i = 0; i < ints[0] && i < ARRAY_SIZE(parms); i++) 5497 for (i = 0; i < ints[0] && i < ARRAY_SIZE(parms); i++)
5498 *parms[i].val = ints[i + 1]; 5498 *parms[i].val = ints[i + 1];
@@ -5507,7 +5507,7 @@ static int __init osst_setup (char *str)
5507 break; 5507 break;
5508 } 5508 }
5509 } 5509 }
5510 if (i >= sizeof(parms) / sizeof(struct osst_dev_parm)) 5510 if (i >= ARRAY_SIZE(parms))
5511 printk(KERN_INFO "osst :I: Illegal parameter in '%s'\n", 5511 printk(KERN_INFO "osst :I: Illegal parameter in '%s'\n",
5512 stp); 5512 stp);
5513 stp = strchr(stp, ','); 5513 stp = strchr(stp, ',');
diff --git a/drivers/scsi/pas16.c b/drivers/scsi/pas16.c
index f09e94af9ade..1bf96ed8f935 100644
--- a/drivers/scsi/pas16.c
+++ b/drivers/scsi/pas16.c
@@ -156,7 +156,7 @@ static int default_irqs[] __initdata =
156static struct override { 156static struct override {
157 unsigned short io_port; 157 unsigned short io_port;
158 int irq; 158 int irq;
159} overrides 159} overrides
160#ifdef PAS16_OVERRIDE 160#ifdef PAS16_OVERRIDE
161 [] __initdata = PAS16_OVERRIDE; 161 [] __initdata = PAS16_OVERRIDE;
162#else 162#else
@@ -164,19 +164,19 @@ static struct override {
164 {0,IRQ_AUTO}}; 164 {0,IRQ_AUTO}};
165#endif 165#endif
166 166
167#define NO_OVERRIDES (sizeof(overrides) / sizeof(struct override)) 167#define NO_OVERRIDES ARRAY_SIZE(overrides)
168 168
169static struct base { 169static struct base {
170 unsigned short io_port; 170 unsigned short io_port;
171 int noauto; 171 int noauto;
172} bases[] __initdata = 172} bases[] __initdata =
173 { {PAS16_DEFAULT_BASE_1, 0}, 173 { {PAS16_DEFAULT_BASE_1, 0},
174 {PAS16_DEFAULT_BASE_2, 0}, 174 {PAS16_DEFAULT_BASE_2, 0},
175 {PAS16_DEFAULT_BASE_3, 0}, 175 {PAS16_DEFAULT_BASE_3, 0},
176 {PAS16_DEFAULT_BASE_4, 0} 176 {PAS16_DEFAULT_BASE_4, 0}
177 }; 177 };
178 178
179#define NO_BASES (sizeof (bases) / sizeof (struct base)) 179#define NO_BASES ARRAY_SIZE(bases)
180 180
181static const unsigned short pas16_offset[ 8 ] = 181static const unsigned short pas16_offset[ 8 ] =
182 { 182 {
diff --git a/drivers/scsi/qla1280.c b/drivers/scsi/qla1280.c
index 5a48e55f9418..77bb2351500c 100644
--- a/drivers/scsi/qla1280.c
+++ b/drivers/scsi/qla1280.c
@@ -4239,15 +4239,12 @@ qla1280_get_token(char *str)
4239{ 4239{
4240 char *sep; 4240 char *sep;
4241 long ret = -1; 4241 long ret = -1;
4242 int i, len; 4242 int i;
4243
4244 len = sizeof(setup_token)/sizeof(struct setup_tokens);
4245 4243
4246 sep = strchr(str, ':'); 4244 sep = strchr(str, ':');
4247 4245
4248 if (sep) { 4246 if (sep) {
4249 for (i = 0; i < len; i++){ 4247 for (i = 0; i < ARRAY_SIZE(setup_token); i++) {
4250
4251 if (!strncmp(setup_token[i].token, str, (sep - str))) { 4248 if (!strncmp(setup_token[i].token, str, (sep - str))) {
4252 ret = setup_token[i].val; 4249 ret = setup_token[i].val;
4253 break; 4250 break;
diff --git a/drivers/scsi/qlogicpti.c b/drivers/scsi/qlogicpti.c
index c7e78dcf09df..00f4b846360e 100644
--- a/drivers/scsi/qlogicpti.c
+++ b/drivers/scsi/qlogicpti.c
@@ -132,7 +132,7 @@ static const u_char mbox_param[] = {
132 PACKB(0, 0) /* 0x0042 */ 132 PACKB(0, 0) /* 0x0042 */
133}; 133};
134 134
135#define MAX_MBOX_COMMAND (sizeof(mbox_param)/sizeof(u_short)) 135#define MAX_MBOX_COMMAND ARRAY_SIZE(mbox_param)
136 136
137/* queue length's _must_ be power of two: */ 137/* queue length's _must_ be power of two: */
138#define QUEUE_DEPTH(in, out, ql) ((in - out) & (ql)) 138#define QUEUE_DEPTH(in, out, ql) ((in - out) & (ql))
diff --git a/drivers/scsi/raid_class.c b/drivers/scsi/raid_class.c
index 50c398aab557..327b33a57b0a 100644
--- a/drivers/scsi/raid_class.c
+++ b/drivers/scsi/raid_class.c
@@ -131,7 +131,7 @@ static const char *raid_state_name(enum raid_state state)
131 int i; 131 int i;
132 char *name = NULL; 132 char *name = NULL;
133 133
134 for (i = 0; i < sizeof(raid_states)/sizeof(raid_states[0]); i++) { 134 for (i = 0; i < ARRAY_SIZE(raid_states); i++) {
135 if (raid_states[i].value == state) { 135 if (raid_states[i].value == state) {
136 name = raid_states[i].name; 136 name = raid_states[i].name;
137 break; 137 break;
@@ -161,7 +161,7 @@ static const char *raid_level_name(enum raid_level level)
161 int i; 161 int i;
162 char *name = NULL; 162 char *name = NULL;
163 163
164 for (i = 0; i < sizeof(raid_levels)/sizeof(raid_levels[0]); i++) { 164 for (i = 0; i < ARRAY_SIZE(raid_levels); i++) {
165 if (raid_levels[i].value == level) { 165 if (raid_levels[i].value == level) {
166 name = raid_levels[i].name; 166 name = raid_levels[i].name;
167 break; 167 break;
diff --git a/drivers/scsi/scsi_lib.c b/drivers/scsi/scsi_lib.c
index 68d413c444f9..3ca7b9d3086c 100644
--- a/drivers/scsi/scsi_lib.c
+++ b/drivers/scsi/scsi_lib.c
@@ -30,7 +30,7 @@
30#include "scsi_logging.h" 30#include "scsi_logging.h"
31 31
32 32
33#define SG_MEMPOOL_NR (sizeof(scsi_sg_pools)/sizeof(struct scsi_host_sg_pool)) 33#define SG_MEMPOOL_NR ARRAY_SIZE(scsi_sg_pools)
34#define SG_MEMPOOL_SIZE 32 34#define SG_MEMPOOL_SIZE 32
35 35
36struct scsi_host_sg_pool { 36struct scsi_host_sg_pool {
diff --git a/drivers/scsi/scsi_sysfs.c b/drivers/scsi/scsi_sysfs.c
index a6fde52946d6..5ec7a4fb0145 100644
--- a/drivers/scsi/scsi_sysfs.c
+++ b/drivers/scsi/scsi_sysfs.c
@@ -39,7 +39,7 @@ const char *scsi_device_state_name(enum scsi_device_state state)
39 int i; 39 int i;
40 char *name = NULL; 40 char *name = NULL;
41 41
42 for (i = 0; i < sizeof(sdev_states)/sizeof(sdev_states[0]); i++) { 42 for (i = 0; i < ARRAY_SIZE(sdev_states); i++) {
43 if (sdev_states[i].value == state) { 43 if (sdev_states[i].value == state) {
44 name = sdev_states[i].name; 44 name = sdev_states[i].name;
45 break; 45 break;
@@ -65,7 +65,7 @@ const char *scsi_host_state_name(enum scsi_host_state state)
65 int i; 65 int i;
66 char *name = NULL; 66 char *name = NULL;
67 67
68 for (i = 0; i < sizeof(shost_states)/sizeof(shost_states[0]); i++) { 68 for (i = 0; i < ARRAY_SIZE(shost_states); i++) {
69 if (shost_states[i].value == state) { 69 if (shost_states[i].value == state) {
70 name = shost_states[i].name; 70 name = shost_states[i].name;
71 break; 71 break;
@@ -160,7 +160,7 @@ store_shost_state(struct class_device *class_dev, const char *buf, size_t count)
160 struct Scsi_Host *shost = class_to_shost(class_dev); 160 struct Scsi_Host *shost = class_to_shost(class_dev);
161 enum scsi_host_state state = 0; 161 enum scsi_host_state state = 0;
162 162
163 for (i = 0; i < sizeof(shost_states)/sizeof(shost_states[0]); i++) { 163 for (i = 0; i < ARRAY_SIZE(shost_states); i++) {
164 const int len = strlen(shost_states[i].name); 164 const int len = strlen(shost_states[i].name);
165 if (strncmp(shost_states[i].name, buf, len) == 0 && 165 if (strncmp(shost_states[i].name, buf, len) == 0 &&
166 buf[len] == '\n') { 166 buf[len] == '\n') {
@@ -466,7 +466,7 @@ store_state_field(struct device *dev, struct device_attribute *attr, const char
466 struct scsi_device *sdev = to_scsi_device(dev); 466 struct scsi_device *sdev = to_scsi_device(dev);
467 enum scsi_device_state state = 0; 467 enum scsi_device_state state = 0;
468 468
469 for (i = 0; i < sizeof(sdev_states)/sizeof(sdev_states[0]); i++) { 469 for (i = 0; i < ARRAY_SIZE(sdev_states); i++) {
470 const int len = strlen(sdev_states[i].name); 470 const int len = strlen(sdev_states[i].name);
471 if (strncmp(sdev_states[i].name, buf, len) == 0 && 471 if (strncmp(sdev_states[i].name, buf, len) == 0 &&
472 buf[len] == '\n') { 472 buf[len] == '\n') {
diff --git a/drivers/scsi/scsi_transport_fc.c b/drivers/scsi/scsi_transport_fc.c
index 95c5478dcdfd..f2db7a41cf1d 100644
--- a/drivers/scsi/scsi_transport_fc.c
+++ b/drivers/scsi/scsi_transport_fc.c
@@ -50,7 +50,7 @@ static const char *get_fc_##title##_name(enum table_type table_key) \
50 int i; \ 50 int i; \
51 char *name = NULL; \ 51 char *name = NULL; \
52 \ 52 \
53 for (i = 0; i < sizeof(table)/sizeof(table[0]); i++) { \ 53 for (i = 0; i < ARRAY_SIZE(table); i++) { \
54 if (table[i].value == table_key) { \ 54 if (table[i].value == table_key) { \
55 name = table[i].name; \ 55 name = table[i].name; \
56 break; \ 56 break; \
@@ -65,7 +65,7 @@ static int get_fc_##title##_match(const char *table_key, \
65{ \ 65{ \
66 int i; \ 66 int i; \
67 \ 67 \
68 for (i = 0; i < sizeof(table)/sizeof(table[0]); i++) { \ 68 for (i = 0; i < ARRAY_SIZE(table); i++) { \
69 if (strncmp(table_key, table[i].name, \ 69 if (strncmp(table_key, table[i].name, \
70 table[i].matchlen) == 0) { \ 70 table[i].matchlen) == 0) { \
71 *value = table[i].value; \ 71 *value = table[i].value; \
@@ -140,7 +140,7 @@ get_fc_##title##_names(u32 table_key, char *buf) \
140 ssize_t len = 0; \ 140 ssize_t len = 0; \
141 int i; \ 141 int i; \
142 \ 142 \
143 for (i = 0; i < sizeof(table)/sizeof(table[0]); i++) { \ 143 for (i = 0; i < ARRAY_SIZE(table); i++) { \
144 if (table[i].value & table_key) { \ 144 if (table[i].value & table_key) { \
145 len += sprintf(buf + len, "%s%s", \ 145 len += sprintf(buf + len, "%s%s", \
146 prefix, table[i].name); \ 146 prefix, table[i].name); \
diff --git a/drivers/scsi/scsi_transport_sas.c b/drivers/scsi/scsi_transport_sas.c
index 8b6d65e21bae..ce4f806bd8ec 100644
--- a/drivers/scsi/scsi_transport_sas.c
+++ b/drivers/scsi/scsi_transport_sas.c
@@ -65,7 +65,7 @@ get_sas_##title##_names(u32 table_key, char *buf) \
65 ssize_t len = 0; \ 65 ssize_t len = 0; \
66 int i; \ 66 int i; \
67 \ 67 \
68 for (i = 0; i < sizeof(table)/sizeof(table[0]); i++) { \ 68 for (i = 0; i < ARRAY_SIZE(table); i++) { \
69 if (table[i].value & table_key) { \ 69 if (table[i].value & table_key) { \
70 len += sprintf(buf + len, "%s%s", \ 70 len += sprintf(buf + len, "%s%s", \
71 prefix, table[i].name); \ 71 prefix, table[i].name); \
@@ -83,7 +83,7 @@ get_sas_##title##_names(u32 table_key, char *buf) \
83 ssize_t len = 0; \ 83 ssize_t len = 0; \
84 int i; \ 84 int i; \
85 \ 85 \
86 for (i = 0; i < sizeof(table)/sizeof(table[0]); i++) { \ 86 for (i = 0; i < ARRAY_SIZE(table); i++) { \
87 if (table[i].value == table_key) { \ 87 if (table[i].value == table_key) { \
88 len += sprintf(buf + len, "%s", \ 88 len += sprintf(buf + len, "%s", \
89 table[i].name); \ 89 table[i].name); \
diff --git a/drivers/scsi/scsi_transport_spi.c b/drivers/scsi/scsi_transport_spi.c
index 780aaedcbce9..5829f97a2068 100644
--- a/drivers/scsi/scsi_transport_spi.c
+++ b/drivers/scsi/scsi_transport_spi.c
@@ -146,7 +146,7 @@ static inline const char *spi_signal_to_string(enum spi_signal_type type)
146{ 146{
147 int i; 147 int i;
148 148
149 for (i = 0; i < sizeof(signal_types)/sizeof(signal_types[0]); i++) { 149 for (i = 0; i < ARRAY_SIZE(signal_types); i++) {
150 if (type == signal_types[i].value) 150 if (type == signal_types[i].value)
151 return signal_types[i].name; 151 return signal_types[i].name;
152 } 152 }
@@ -156,7 +156,7 @@ static inline enum spi_signal_type spi_signal_to_value(const char *name)
156{ 156{
157 int i, len; 157 int i, len;
158 158
159 for (i = 0; i < sizeof(signal_types)/sizeof(signal_types[0]); i++) { 159 for (i = 0; i < ARRAY_SIZE(signal_types); i++) {
160 len = strlen(signal_types[i].name); 160 len = strlen(signal_types[i].name);
161 if (strncmp(name, signal_types[i].name, len) == 0 && 161 if (strncmp(name, signal_types[i].name, len) == 0 &&
162 (name[len] == '\n' || name[len] == '\0')) 162 (name[len] == '\n' || name[len] == '\0'))
diff --git a/drivers/scsi/sd.c b/drivers/scsi/sd.c
index a112e49e946f..354199011246 100644
--- a/drivers/scsi/sd.c
+++ b/drivers/scsi/sd.c
@@ -175,7 +175,7 @@ static ssize_t sd_store_cache_type(struct class_device *cdev, const char *buf,
175 * it's not worth the risk */ 175 * it's not worth the risk */
176 return -EINVAL; 176 return -EINVAL;
177 177
178 for (i = 0; i < sizeof(sd_cache_types)/sizeof(sd_cache_types[0]); i++) { 178 for (i = 0; i < ARRAY_SIZE(sd_cache_types); i++) {
179 const int len = strlen(sd_cache_types[i]); 179 const int len = strlen(sd_cache_types[i]);
180 if (strncmp(sd_cache_types[i], buf, len) == 0 && 180 if (strncmp(sd_cache_types[i], buf, len) == 0 &&
181 buf[len] == '\n') { 181 buf[len] == '\n') {
diff --git a/drivers/scsi/seagate.c b/drivers/scsi/seagate.c
index 0ff83ddf13fe..7fa4da4ea64f 100644
--- a/drivers/scsi/seagate.c
+++ b/drivers/scsi/seagate.c
@@ -312,7 +312,7 @@ static Signature __initdata signatures[] = {
312 {"IBM F1 V1.2009/22/93", 5, 25, FD}, 312 {"IBM F1 V1.2009/22/93", 5, 25, FD},
313}; 313};
314 314
315#define NUM_SIGNATURES (sizeof(signatures) / sizeof(Signature)) 315#define NUM_SIGNATURES ARRAY_SIZE(signatures)
316#endif /* n OVERRIDE */ 316#endif /* n OVERRIDE */
317 317
318/* 318/*
@@ -457,7 +457,7 @@ int __init seagate_st0x_detect (struct scsi_host_template * tpnt)
457 * space for the on-board RAM instead. 457 * space for the on-board RAM instead.
458 */ 458 */
459 459
460 for (i = 0; i < (sizeof (seagate_bases) / sizeof (unsigned int)); ++i) { 460 for (i = 0; i < ARRAY_SIZE(seagate_bases); ++i) {
461 void __iomem *p = ioremap(seagate_bases[i], 0x2000); 461 void __iomem *p = ioremap(seagate_bases[i], 0x2000);
462 if (!p) 462 if (!p)
463 continue; 463 continue;
diff --git a/drivers/scsi/sg.c b/drivers/scsi/sg.c
index b098942445ec..98b9312ba8da 100644
--- a/drivers/scsi/sg.c
+++ b/drivers/scsi/sg.c
@@ -2635,8 +2635,7 @@ static int
2635sg_proc_init(void) 2635sg_proc_init(void)
2636{ 2636{
2637 int k, mask; 2637 int k, mask;
2638 int num_leaves = 2638 int num_leaves = ARRAY_SIZE(sg_proc_leaf_arr);
2639 sizeof (sg_proc_leaf_arr) / sizeof (sg_proc_leaf_arr[0]);
2640 struct proc_dir_entry *pdep; 2639 struct proc_dir_entry *pdep;
2641 struct sg_proc_leaf * leaf; 2640 struct sg_proc_leaf * leaf;
2642 2641
@@ -2661,8 +2660,7 @@ static void
2661sg_proc_cleanup(void) 2660sg_proc_cleanup(void)
2662{ 2661{
2663 int k; 2662 int k;
2664 int num_leaves = 2663 int num_leaves = ARRAY_SIZE(sg_proc_leaf_arr);
2665 sizeof (sg_proc_leaf_arr) / sizeof (sg_proc_leaf_arr[0]);
2666 2664
2667 if (!sg_proc_sgp) 2665 if (!sg_proc_sgp)
2668 return; 2666 return;
diff --git a/drivers/scsi/st.c b/drivers/scsi/st.c
index d40e7c871c36..2691248b2cbd 100644
--- a/drivers/scsi/st.c
+++ b/drivers/scsi/st.c
@@ -3839,7 +3839,7 @@ static int __init st_setup(char *str)
3839 break; 3839 break;
3840 } 3840 }
3841 } 3841 }
3842 if (i >= sizeof(parms) / sizeof(struct st_dev_parm)) 3842 if (i >= ARRAY_SIZE(parms))
3843 printk(KERN_WARNING "st: invalid parameter in '%s'\n", 3843 printk(KERN_WARNING "st: invalid parameter in '%s'\n",
3844 stp); 3844 stp);
3845 stp = strchr(stp, ','); 3845 stp = strchr(stp, ',');
diff --git a/drivers/scsi/sym53c8xx_2/sym_hipd.c b/drivers/scsi/sym53c8xx_2/sym_hipd.c
index a671bdc07450..940fa1e6f994 100644
--- a/drivers/scsi/sym53c8xx_2/sym_hipd.c
+++ b/drivers/scsi/sym53c8xx_2/sym_hipd.c
@@ -1276,8 +1276,7 @@ static struct sym_chip sym_dev_table[] = {
1276 FE_RAM|FE_IO256|FE_LEDC} 1276 FE_RAM|FE_IO256|FE_LEDC}
1277}; 1277};
1278 1278
1279#define sym_num_devs \ 1279#define sym_num_devs (ARRAY_SIZE(sym_dev_table))
1280 (sizeof(sym_dev_table) / sizeof(sym_dev_table[0]))
1281 1280
1282/* 1281/*
1283 * Look up the chip table. 1282 * Look up the chip table.
diff --git a/drivers/scsi/t128.c b/drivers/scsi/t128.c
index 21305fc91479..a24f661b0270 100644
--- a/drivers/scsi/t128.c
+++ b/drivers/scsi/t128.c
@@ -126,15 +126,15 @@
126static struct override { 126static struct override {
127 unsigned long address; 127 unsigned long address;
128 int irq; 128 int irq;
129} overrides 129} overrides
130#ifdef T128_OVERRIDE 130#ifdef T128_OVERRIDE
131 [] __initdata = T128_OVERRIDE; 131 [] __initdata = T128_OVERRIDE;
132#else 132#else
133 [4] __initdata = {{0, IRQ_AUTO}, {0, IRQ_AUTO}, 133 [4] __initdata = {{0, IRQ_AUTO}, {0, IRQ_AUTO},
134 {0 ,IRQ_AUTO}, {0, IRQ_AUTO}}; 134 {0 ,IRQ_AUTO}, {0, IRQ_AUTO}};
135#endif 135#endif
136 136
137#define NO_OVERRIDES (sizeof(overrides) / sizeof(struct override)) 137#define NO_OVERRIDES ARRAY_SIZE(overrides)
138 138
139static struct base { 139static struct base {
140 unsigned int address; 140 unsigned int address;
@@ -143,7 +143,7 @@ static struct base {
143 { 0xcc000, 0}, { 0xc8000, 0}, { 0xdc000, 0}, { 0xd8000, 0} 143 { 0xcc000, 0}, { 0xc8000, 0}, { 0xdc000, 0}, { 0xd8000, 0}
144}; 144};
145 145
146#define NO_BASES (sizeof (bases) / sizeof (struct base)) 146#define NO_BASES ARRAY_SIZE(bases)
147 147
148static struct signature { 148static struct signature {
149 const char *string; 149 const char *string;
@@ -152,7 +152,7 @@ static struct signature {
152{"TSROM: SCSI BIOS, Version 1.12", 0x36}, 152{"TSROM: SCSI BIOS, Version 1.12", 0x36},
153}; 153};
154 154
155#define NO_SIGNATURES (sizeof (signatures) / sizeof (struct signature)) 155#define NO_SIGNATURES ARRAY_SIZE(signatures)
156 156
157/* 157/*
158 * Function : t128_setup(char *str, int *ints) 158 * Function : t128_setup(char *str, int *ints)
diff --git a/drivers/scsi/wd33c93.c b/drivers/scsi/wd33c93.c
index d8a72609a31d..9341703dee00 100644
--- a/drivers/scsi/wd33c93.c
+++ b/drivers/scsi/wd33c93.c
@@ -1701,7 +1701,7 @@ wd33c93_abort(struct scsi_cmnd * cmd)
1701} 1701}
1702 1702
1703#define MAX_WD33C93_HOSTS 4 1703#define MAX_WD33C93_HOSTS 4
1704#define MAX_SETUP_ARGS ((int)(sizeof(setup_args) / sizeof(char *))) 1704#define MAX_SETUP_ARGS ARRAY_SIZE(setup_args)
1705#define SETUP_BUFFER_SIZE 200 1705#define SETUP_BUFFER_SIZE 200
1706static char setup_buffer[SETUP_BUFFER_SIZE]; 1706static char setup_buffer[SETUP_BUFFER_SIZE];
1707static char setup_used[MAX_SETUP_ARGS]; 1707static char setup_used[MAX_SETUP_ARGS];
diff --git a/drivers/scsi/wd7000.c b/drivers/scsi/wd7000.c
index fb54a87a80a3..e55f0ee7e7e4 100644
--- a/drivers/scsi/wd7000.c
+++ b/drivers/scsi/wd7000.c
@@ -267,7 +267,7 @@ static const long wd7000_biosaddr[] = {
267 0xc0000, 0xc2000, 0xc4000, 0xc6000, 0xc8000, 0xca000, 0xcc000, 0xce000, 267 0xc0000, 0xc2000, 0xc4000, 0xc6000, 0xc8000, 0xca000, 0xcc000, 0xce000,
268 0xd0000, 0xd2000, 0xd4000, 0xd6000, 0xd8000, 0xda000, 0xdc000, 0xde000 268 0xd0000, 0xd2000, 0xd4000, 0xd6000, 0xd8000, 0xda000, 0xdc000, 0xde000
269}; 269};
270#define NUM_ADDRS (sizeof(wd7000_biosaddr)/sizeof(long)) 270#define NUM_ADDRS ARRAY_SIZE(wd7000_biosaddr)
271 271
272static const unsigned short wd7000_iobase[] = { 272static const unsigned short wd7000_iobase[] = {
273 0x0300, 0x0308, 0x0310, 0x0318, 0x0320, 0x0328, 0x0330, 0x0338, 273 0x0300, 0x0308, 0x0310, 0x0318, 0x0320, 0x0328, 0x0330, 0x0338,
@@ -275,13 +275,13 @@ static const unsigned short wd7000_iobase[] = {
275 0x0380, 0x0388, 0x0390, 0x0398, 0x03a0, 0x03a8, 0x03b0, 0x03b8, 275 0x0380, 0x0388, 0x0390, 0x0398, 0x03a0, 0x03a8, 0x03b0, 0x03b8,
276 0x03c0, 0x03c8, 0x03d0, 0x03d8, 0x03e0, 0x03e8, 0x03f0, 0x03f8 276 0x03c0, 0x03c8, 0x03d0, 0x03d8, 0x03e0, 0x03e8, 0x03f0, 0x03f8
277}; 277};
278#define NUM_IOPORTS (sizeof(wd7000_iobase)/sizeof(unsigned short)) 278#define NUM_IOPORTS ARRAY_SIZE(wd7000_iobase)
279 279
280static const short wd7000_irq[] = { 3, 4, 5, 7, 9, 10, 11, 12, 14, 15 }; 280static const short wd7000_irq[] = { 3, 4, 5, 7, 9, 10, 11, 12, 14, 15 };
281#define NUM_IRQS (sizeof(wd7000_irq)/sizeof(short)) 281#define NUM_IRQS ARRAY_SIZE(wd7000_irq)
282 282
283static const short wd7000_dma[] = { 5, 6, 7 }; 283static const short wd7000_dma[] = { 5, 6, 7 };
284#define NUM_DMAS (sizeof(wd7000_dma)/sizeof(short)) 284#define NUM_DMAS ARRAY_SIZE(wd7000_dma)
285 285
286/* 286/*
287 * The following is set up by wd7000_detect, and used thereafter for 287 * The following is set up by wd7000_detect, and used thereafter for
@@ -317,7 +317,7 @@ static Config configs[] = {
317 {7, 6, 0x350, BUS_ON, BUS_OFF}, /* My configuration (Zaga) */ 317 {7, 6, 0x350, BUS_ON, BUS_OFF}, /* My configuration (Zaga) */
318 {-1, -1, 0x0, BUS_ON, BUS_OFF} /* Empty slot */ 318 {-1, -1, 0x0, BUS_ON, BUS_OFF} /* Empty slot */
319}; 319};
320#define NUM_CONFIGS (sizeof(configs)/sizeof(Config)) 320#define NUM_CONFIGS ARRAY_SIZE(configs)
321 321
322/* 322/*
323 * The following list defines strings to look for in the BIOS that identify 323 * The following list defines strings to look for in the BIOS that identify
@@ -333,7 +333,7 @@ typedef struct signature {
333static const Signature signatures[] = { 333static const Signature signatures[] = {
334 {"SSTBIOS", 0x0000d, 7} /* "SSTBIOS" @ offset 0x0000d */ 334 {"SSTBIOS", 0x0000d, 7} /* "SSTBIOS" @ offset 0x0000d */
335}; 335};
336#define NUM_SIGNATURES (sizeof(signatures)/sizeof(Signature)) 336#define NUM_SIGNATURES ARRAY_SIZE(signatures)
337 337
338 338
339/* 339/*