Hi Andrew, Is this patch accepted? If not, can you please provide comment. Thank you, > -----Original Message----- > From: Ju, Seokmann > Sent: Tuesday, April 18, 2006 4:52 PM > To: 'Andrew Morton'; andre@xxxxxxxxxxxxx; James.Bottomley@xxxxxxxxxxxx > Cc: Ju, Seokmann; linux-kernel@xxxxxxxxxxxxxxx; > linux-scsi@xxxxxxxxxxxxxxx > Subject: [PATCH 1/1] megaraid_{mm,mbox}: updated > fix-a-bug-in-reset-handler > > Hi, > > This patch has created against 2.6.17-rc1-mm3. > > The patch contains changes addressing following concerns > brought by previous megaraid_mmmbox-fix-a-bug-in-reset-handler.patch. > > 1.Andrew Morton: > > + scb->status = -EFAULT; > > What is the significance of -EFAULT here? Seems inappropriate? > 2. Andrew Morton: > And if that mbox is in main memory, the duration of > this spin will vary by > a factor of many tens across all the different machines > on which this > driver must operate. > > Careful use of ndelay() or udelay() would fix that. > > Thank you, > > Seokmann > > Signed-Off By: Seokmann Ju <seokmann.ju@xxxxxxxx> > --- > diff -Naur old/drivers/scsi/megaraid/megaraid_mbox.c > new/drivers/scsi/megaraid/megaraid_mbox.c > --- old/drivers/scsi/megaraid/megaraid_mbox.c 2006-04-18 > 17:17:06.288025720 -0400 > +++ new/drivers/scsi/megaraid/megaraid_mbox.c 2006-04-13 > 16:46:53.000000000 -0400 > @@ -2278,6 +2278,7 @@ > unsigned long flags; > uint8_t c; > int status; > + uioc_t *kioc; > > > if (!adapter) return; > @@ -2320,6 +2321,9 @@ > // remove from local clist > list_del_init(&scb->list); > > + kioc = (uioc_t *)scb->gp; > + kioc->status = 0; > + > megaraid_mbox_mm_done(adapter, scb); > > continue; > @@ -2636,6 +2640,7 @@ > int recovery_window; > int recovering; > int i; > + uioc_t *kioc; > > adapter = SCP2ADAPTER(scp); > raid_dev = ADAP2RAIDDEV(adapter); > @@ -2662,7 +2667,10 @@ > "megaraid: IOCTL packet with %d[%d:%d] > being reset\n", > scb->sno, scb->dev_channel, scb->dev_target)); > > - scb->status = -EFAULT; > + scb->status = -1; > + > + kioc = (uioc_t *)scb->gp; > + kioc->status = -EFAULT; > > megaraid_mbox_mm_done(adapter, scb); > } else { > @@ -2933,12 +2941,13 @@ > wmb(); > WRINDOOR(raid_dev, raid_dev->mbox_dma | 0x1); > > - for (i = 0; i < 0xFFFFFF; i++) { > + for (i = 0; i < MBOX_SYNC_WAIT_CNT; i++) { > if (mbox->numstatus != 0xFF) break; > rmb(); > + udelay(MBOX_SYNC_DELAY_200); > } > > - if (i == 0xFFFFFF) { > + if (i == MBOX_SYNC_WAIT_CNT) { > // We may need to re-calibrate the counter > con_log(CL_ANN, (KERN_CRIT > "megaraid: fast sync command timed out\n")); > @@ -3717,7 +3726,6 @@ > unsigned long flags; > > kioc = (uioc_t *)scb->gp; > - kioc->status = 0; > mbox64 = (mbox64_t *)(unsigned > long)kioc->cmdbuf; > mbox64->mbox32.status = scb->status; > raw_mbox = (uint8_t *)&mbox64->mbox32; > diff -Naur old/drivers/scsi/megaraid/megaraid_mbox.h > new/drivers/scsi/megaraid/megaraid_mbox.h > --- old/drivers/scsi/megaraid/megaraid_mbox.h 2006-04-18 > 17:17:06.289025568 -0400 > +++ new/drivers/scsi/megaraid/megaraid_mbox.h 2006-04-13 > 16:05:30.000000000 -0400 > @@ -100,6 +100,9 @@ > #define MBOX_BUSY_WAIT 10 // max usec to > wait for busy mailbox > #define MBOX_RESET_WAIT 180 // wait these > many seconds in reset > #define MBOX_RESET_EXT_WAIT 120 // extended wait reset > +#define MBOX_SYNC_WAIT_CNT 0xFFFF // wait loop index for > synchronous mode > + > +#define MBOX_SYNC_DELAY_200 200 // 200 micro-seconds > > /* > * maximum transfer that can happen through the firmware > commands issued > --- > - : send the line "unsubscribe linux-scsi" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html