* [PATCH] tmscsim: use block-layer tags
@ 2004-10-12 21:14 Guennadi Liakhovetski
2004-10-13 19:35 ` Guennadi Liakhovetski
0 siblings, 1 reply; 4+ messages in thread
From: Guennadi Liakhovetski @ 2004-10-12 21:14 UTC (permalink / raw)
To: James Bottomley; +Cc: linux-scsi
Slightly tested. Applies on the top of all up to date tmscsim patches (if
I didn't miss any). Reviews, tests highly welcome. Inline patch should be
fine now. Will re-send if still not...
Signed-off-by: Guennadi Liakhovetski <g.liakhovetski@gmx.de>
diff -u a/drivers/scsi/tmscsim.c b/drivers/scsi/tmscsim.c
--- a/drivers/scsi/tmscsim.c Tue Oct 12 22:46:13 2004
+++ b/drivers/scsi/tmscsim.c Tue Oct 12 23:00:37 2004
@@ -494,8 +494,10 @@
static int
dc390_StartSCSI( struct dc390_acb* pACB, struct dc390_dcb* pDCB, struct dc390_srb* pSRB )
{
- struct scsi_device *sdev = pSRB->pcmd->device;
- u8 cmd; u8 disc_allowed, try_sync_nego;
+ struct scsi_cmnd *scmd = pSRB->pcmd;
+ struct scsi_device *sdev = scmd->device;
+ u8 cmd, disc_allowed, try_sync_nego;
+ char tag[2];
pSRB->ScsiPhase = SCSI_NOP0;
@@ -524,7 +526,7 @@
DC390_write8 (CtrlReg4, pDCB->CtrlR4);
DC390_write8 (ScsiCmd, CLEAR_FIFO_CMD); /* Flush FIFO */
DEBUG1(printk (KERN_INFO "DC390: Start SCSI command: %02x (Sync:%02x)\n",\
- pSRB->pcmd->cmnd[0], pDCB->SyncMode));
+ scmd->cmnd[0], pDCB->SyncMode));
disc_allowed = pDCB->DevMode & EN_DISCONNECT_;
try_sync_nego = 0;
/* Don't disconnect on AUTO_REQSENSE, cause it might be an
@@ -537,33 +539,26 @@
||*/ (pSRB->SRBFlag & AUTO_REQSENSE) )
disc_allowed = 0;
if ( (pDCB->SyncMode & SYNC_ENABLE) && (pDCB->TargetLUN == 0) && sdev->sdtr &&
- ( ( ( (pSRB->pcmd->cmnd[0] == REQUEST_SENSE) || (pSRB->SRBFlag & AUTO_REQSENSE) )
- && !(pDCB->SyncMode & SYNC_NEGO_DONE) ) || (pSRB->pcmd->cmnd[0] == INQUIRY) ) )
+ ( ( ( (scmd->cmnd[0] == REQUEST_SENSE) || (pSRB->SRBFlag & AUTO_REQSENSE) )
+ && !(pDCB->SyncMode & SYNC_NEGO_DONE) ) || (scmd->cmnd[0] == INQUIRY) ) )
try_sync_nego = 1;
- pSRB->MsgCnt = 0; cmd = SEL_W_ATN;
+ pSRB->MsgCnt = 0;
+ cmd = SEL_W_ATN;
DC390_write8 (ScsiFifo, IDENTIFY(disc_allowed, pDCB->TargetLUN));
/* Change 99/05/31: Don't use tags when not disconnecting (BUSY) */
- if ((pDCB->SyncMode & EN_TAG_QUEUEING) && disc_allowed)
- {
- s8 tag_no = 0;
- while ((1 << tag_no) & pDCB->TagMask) tag_no++;
- if (tag_no >= sizeof (pDCB->TagMask)*8 || tag_no >= pDCB->MaxCommand) {
- printk (KERN_WARNING "DC390: Out of tags for Dev. %02x %02x\n", pDCB->TargetID, pDCB->TargetLUN);
- return 1;
- //goto no_tag;
- }
- DC390_write8 (ScsiFifo, SIMPLE_QUEUE_TAG);
- pDCB->TagMask |= (1 << tag_no); pSRB->TagNumber = tag_no;
- DC390_write8 (ScsiFifo, tag_no);
- DEBUG1(printk (KERN_DEBUG "DC390: Select w/DisCn for Cmd %li (SRB %p), Using Tag %02x\n", pSRB->pcmd->pid, pSRB, tag_no));
+ if ((pDCB->SyncMode & EN_TAG_QUEUEING) && disc_allowed && scsi_populate_tag_msg(scmd, tag)) {
+ DC390_write8(ScsiFifo, tag[0]);
+ pDCB->TagMask |= (1 << tag[1]);
+ pSRB->TagNumber = tag[1];
+ DC390_write8(ScsiFifo, tag[1]);
+ DEBUG1(printk(KERN_INFO "DC390: Select w/DisCn for Cmd %li (SRB %p), block tag %02x\n", scmd->pid, pSRB, tag[1]));
cmd = SEL_W_ATN3;
- }
- else /* No TagQ */
- {
-// no_tag:
- DEBUG1(printk (KERN_DEBUG "DC390: Select w%s/DisCn for Cmd %li (SRB %p), No TagQ\n", (disc_allowed?"":"o"), pSRB->pcmd->pid, pSRB));
- }
+ } else {
+ /* No TagQ */
+//no_tag:
+ DEBUG1(printk(KERN_INFO "DC390: Select w%s/DisCn for Cmd %li (SRB %p), No TagQ\n", (disc_allowed ? "" : "o"), scmd->pid, pSRB));
+ }
pSRB->SRBState = SRB_START_;
@@ -592,15 +587,15 @@
DC390_write8 (ScsiFifo, pDCB->TargetLUN << 5);
DC390_write8 (ScsiFifo, 0);
DC390_write8 (ScsiFifo, 0);
- DC390_write8 (ScsiFifo, sizeof(pSRB->pcmd->sense_buffer));
+ DC390_write8 (ScsiFifo, sizeof(scmd->sense_buffer));
DC390_write8 (ScsiFifo, 0);
DEBUG1(printk (KERN_DEBUG "DC390: AutoReqSense !\n"));
}
else /* write cmnd to bus */
{
u8 *ptr; u8 i;
- ptr = (u8 *) pSRB->pcmd->cmnd;
- for (i=0; i<pSRB->pcmd->cmd_len; i++)
+ ptr = (u8 *)scmd->cmnd;
+ for (i = 0; i < scmd->cmd_len; i++)
DC390_write8 (ScsiFifo, *(ptr++));
}
}
@@ -613,14 +608,15 @@
{
dc390_freetag (pDCB, pSRB);
DEBUG0(printk ("DC390: Interrupt during Start SCSI (pid %li, target %02i-%02i)\n",
- pSRB->pcmd->pid, pSRB->pcmd->device->id, pSRB->pcmd->device->lun));
+ scmd->pid, scmd->device->id, scmd->device->lun));
pSRB->SRBState = SRB_READY;
//DC390_write8 (ScsiCmd, CLEAR_FIFO_CMD);
pACB->SelLost++;
return 1;
}
DC390_write8 (ScsiCmd, cmd);
- pACB->pActiveDCB = pDCB; pDCB->pActiveSRB = pSRB;
+ pACB->pActiveDCB = pDCB;
+ pDCB->pActiveSRB = pSRB;
pACB->Connected = 1;
pSRB->ScsiPhase = SCSI_NOP1;
return 0;
@@ -1067,7 +1063,8 @@
dc390_MsgIn_reject (struct dc390_acb* pACB, struct dc390_srb* pSRB)
{
pSRB->MsgOutBuf[0] = MESSAGE_REJECT;
- pSRB->MsgCnt = 1; DC390_ENABLE_MSGOUT;
+ pSRB->MsgCnt = 1;
+ DC390_ENABLE_MSGOUT;
DEBUG0 (printk (KERN_INFO "DC390: Reject message\n"));
}
@@ -1083,29 +1080,24 @@
static struct dc390_srb*
dc390_MsgIn_QTag (struct dc390_acb* pACB, struct dc390_dcb* pDCB, s8 tag)
{
- struct dc390_srb* lastSRB = pDCB->pGoingLast;
struct dc390_srb* pSRB = pDCB->pGoingSRB;
if (pSRB)
{
- for( ;pSRB ; )
- {
- if (pSRB->TagNumber == tag) break;
- if (pSRB == lastSRB) goto mingx0;
- pSRB = pSRB->pNextSRB;
- }
+ struct scsi_cmnd *scmd = scsi_find_tag(pSRB->pcmd->device, tag);
+ pSRB = (struct dc390_srb *)scmd->host_scribble;
- if( pDCB->DCBFlag & ABORT_DEV_ )
+ if (pDCB->DCBFlag & ABORT_DEV_)
{
pSRB->SRBState = SRB_ABORT_SENT;
dc390_EnableMsgOut_Abort( pACB, pSRB );
}
- if( !(pSRB->SRBState & SRB_DISCONNECT) )
- goto mingx0;
+ if (!(pSRB->SRBState & SRB_DISCONNECT))
+ goto mingx0;
- pDCB->pActiveSRB = pSRB;
- pSRB->SRBState = SRB_DATA_XFER;
+ pDCB->pActiveSRB = pSRB;
+ pSRB->SRBState = SRB_DATA_XFER;
}
else
{
@@ -1906,7 +1898,7 @@
{
struct dc390_dcb *pDCB, *pdcb;
struct dc390_srb *psrb, *psrb2;
- u8 i;
+ int i;
struct scsi_cmnd *pcmd;
pDCB = pACB->pLinkDCB;
@@ -1915,7 +1907,7 @@
do
{
psrb = pdcb->pGoingSRB;
- for( i=0; i<pdcb->GoingSRBCnt; i++)
+ for (i = 0; i < pdcb->GoingSRBCnt; i++)
{
psrb2 = psrb->pNextSRB;
pcmd = psrb->pcmd;
@@ -2003,6 +1995,7 @@
srb->pSRBDCB = dcb;
srb->pcmd = cmd;
+ cmd->host_scribble = (char *)srb;
srb->SGIndex = 0;
srb->AdaptStatus = 0;
@@ -2279,7 +2272,9 @@
if (sdev->tagged_supported && (dcb->DevMode & TAG_QUEUEING_)) {
dcb->SyncMode |= EN_TAG_QUEUEING;
dcb->MaxCommand = dcb->pDCBACB->TagMaxNum;
+ scsi_activate_tcq(sdev, dcb->MaxCommand);
}
+
return 0;
}
Thanks
Guennadi
---
Guennadi Liakhovetski
^ permalink raw reply [flat|nested] 4+ messages in thread* Re: [PATCH] tmscsim: use block-layer tags 2004-10-12 21:14 [PATCH] tmscsim: use block-layer tags Guennadi Liakhovetski @ 2004-10-13 19:35 ` Guennadi Liakhovetski 2004-10-13 21:49 ` James Bottomley 0 siblings, 1 reply; 4+ messages in thread From: Guennadi Liakhovetski @ 2004-10-13 19:35 UTC (permalink / raw) To: James Bottomley; +Cc: linux-scsi On Tue, 12 Oct 2004, Guennadi Liakhovetski wrote: > Slightly tested. Applies on the top of all up to date tmscsim patches (if > I didn't miss any). Reviews, tests highly welcome. Inline patch should be > fine now. Will re-send if still not... I think, there was (at least) one missing chunk in the first version of the patch. Here's an updated version. Patch inlining seems to work indeed now. Signed-off-by: Guennadi Liakhovetski <g.liakhovetski@gmx.de> diff -u a/drivers/scsi/tmscsim.c b/drivers/scsi/tmscsim.c --- a/drivers/scsi/tmscsim.c Tue Oct 12 23:06:39 2004 +++ b/drivers/scsi/tmscsim.c Wed Oct 13 21:27:25 2004 @@ -494,8 +494,10 @@ static int dc390_StartSCSI( struct dc390_acb* pACB, struct dc390_dcb* pDCB, struct dc390_srb* pSRB ) { - struct scsi_device *sdev = pSRB->pcmd->device; - u8 cmd; u8 disc_allowed, try_sync_nego; + struct scsi_cmnd *scmd = pSRB->pcmd; + struct scsi_device *sdev = scmd->device; + u8 cmd, disc_allowed, try_sync_nego; + char tag[2]; pSRB->ScsiPhase = SCSI_NOP0; @@ -524,7 +526,7 @@ DC390_write8 (CtrlReg4, pDCB->CtrlR4); DC390_write8 (ScsiCmd, CLEAR_FIFO_CMD); /* Flush FIFO */ DEBUG1(printk (KERN_INFO "DC390: Start SCSI command: %02x (Sync:%02x)\n",\ - pSRB->pcmd->cmnd[0], pDCB->SyncMode)); + scmd->cmnd[0], pDCB->SyncMode)); disc_allowed = pDCB->DevMode & EN_DISCONNECT_; try_sync_nego = 0; /* Don't disconnect on AUTO_REQSENSE, cause it might be an @@ -537,33 +539,26 @@ ||*/ (pSRB->SRBFlag & AUTO_REQSENSE) ) disc_allowed = 0; if ( (pDCB->SyncMode & SYNC_ENABLE) && (pDCB->TargetLUN == 0) && sdev->sdtr && - ( ( ( (pSRB->pcmd->cmnd[0] == REQUEST_SENSE) || (pSRB->SRBFlag & AUTO_REQSENSE) ) - && !(pDCB->SyncMode & SYNC_NEGO_DONE) ) || (pSRB->pcmd->cmnd[0] == INQUIRY) ) ) + ( ( ( (scmd->cmnd[0] == REQUEST_SENSE) || (pSRB->SRBFlag & AUTO_REQSENSE) ) + && !(pDCB->SyncMode & SYNC_NEGO_DONE) ) || (scmd->cmnd[0] == INQUIRY) ) ) try_sync_nego = 1; - pSRB->MsgCnt = 0; cmd = SEL_W_ATN; + pSRB->MsgCnt = 0; + cmd = SEL_W_ATN; DC390_write8 (ScsiFifo, IDENTIFY(disc_allowed, pDCB->TargetLUN)); /* Change 99/05/31: Don't use tags when not disconnecting (BUSY) */ - if ((pDCB->SyncMode & EN_TAG_QUEUEING) && disc_allowed) - { - s8 tag_no = 0; - while ((1 << tag_no) & pDCB->TagMask) tag_no++; - if (tag_no >= sizeof (pDCB->TagMask)*8 || tag_no >= pDCB->MaxCommand) { - printk (KERN_WARNING "DC390: Out of tags for Dev. %02x %02x\n", pDCB->TargetID, pDCB->TargetLUN); - return 1; - //goto no_tag; - } - DC390_write8 (ScsiFifo, SIMPLE_QUEUE_TAG); - pDCB->TagMask |= (1 << tag_no); pSRB->TagNumber = tag_no; - DC390_write8 (ScsiFifo, tag_no); - DEBUG1(printk (KERN_DEBUG "DC390: Select w/DisCn for Cmd %li (SRB %p), Using Tag %02x\n", pSRB->pcmd->pid, pSRB, tag_no)); + if ((pDCB->SyncMode & EN_TAG_QUEUEING) && disc_allowed && scsi_populate_tag_msg(scmd, tag)) { + DC390_write8(ScsiFifo, tag[0]); + pDCB->TagMask |= (1 << tag[1]); + pSRB->TagNumber = tag[1]; + DC390_write8(ScsiFifo, tag[1]); + DEBUG1(printk(KERN_INFO "DC390: Select w/DisCn for Cmd %li (SRB %p), block tag %02x\n", scmd->pid, pSRB, tag[1])); cmd = SEL_W_ATN3; - } - else /* No TagQ */ - { -// no_tag: - DEBUG1(printk (KERN_DEBUG "DC390: Select w%s/DisCn for Cmd %li (SRB %p), No TagQ\n", (disc_allowed?"":"o"), pSRB->pcmd->pid, pSRB)); - } + } else { + /* No TagQ */ +//no_tag: + DEBUG1(printk(KERN_INFO "DC390: Select w%s/DisCn for Cmd %li (SRB %p), No TagQ\n", (disc_allowed ? "" : "o"), scmd->pid, pSRB)); + } pSRB->SRBState = SRB_START_; @@ -592,15 +587,15 @@ DC390_write8 (ScsiFifo, pDCB->TargetLUN << 5); DC390_write8 (ScsiFifo, 0); DC390_write8 (ScsiFifo, 0); - DC390_write8 (ScsiFifo, sizeof(pSRB->pcmd->sense_buffer)); + DC390_write8 (ScsiFifo, sizeof(scmd->sense_buffer)); DC390_write8 (ScsiFifo, 0); DEBUG1(printk (KERN_DEBUG "DC390: AutoReqSense !\n")); } else /* write cmnd to bus */ { u8 *ptr; u8 i; - ptr = (u8 *) pSRB->pcmd->cmnd; - for (i=0; i<pSRB->pcmd->cmd_len; i++) + ptr = (u8 *)scmd->cmnd; + for (i = 0; i < scmd->cmd_len; i++) DC390_write8 (ScsiFifo, *(ptr++)); } } @@ -613,14 +608,15 @@ { dc390_freetag (pDCB, pSRB); DEBUG0(printk ("DC390: Interrupt during Start SCSI (pid %li, target %02i-%02i)\n", - pSRB->pcmd->pid, pSRB->pcmd->device->id, pSRB->pcmd->device->lun)); + scmd->pid, scmd->device->id, scmd->device->lun)); pSRB->SRBState = SRB_READY; //DC390_write8 (ScsiCmd, CLEAR_FIFO_CMD); pACB->SelLost++; return 1; } DC390_write8 (ScsiCmd, cmd); - pACB->pActiveDCB = pDCB; pDCB->pActiveSRB = pSRB; + pACB->pActiveDCB = pDCB; + pDCB->pActiveSRB = pSRB; pACB->Connected = 1; pSRB->ScsiPhase = SCSI_NOP1; return 0; @@ -1067,7 +1063,8 @@ dc390_MsgIn_reject (struct dc390_acb* pACB, struct dc390_srb* pSRB) { pSRB->MsgOutBuf[0] = MESSAGE_REJECT; - pSRB->MsgCnt = 1; DC390_ENABLE_MSGOUT; + pSRB->MsgCnt = 1; + DC390_ENABLE_MSGOUT; DEBUG0 (printk (KERN_INFO "DC390: Reject message\n")); } @@ -1083,29 +1080,24 @@ static struct dc390_srb* dc390_MsgIn_QTag (struct dc390_acb* pACB, struct dc390_dcb* pDCB, s8 tag) { - struct dc390_srb* lastSRB = pDCB->pGoingLast; struct dc390_srb* pSRB = pDCB->pGoingSRB; if (pSRB) { - for( ;pSRB ; ) - { - if (pSRB->TagNumber == tag) break; - if (pSRB == lastSRB) goto mingx0; - pSRB = pSRB->pNextSRB; - } + struct scsi_cmnd *scmd = scsi_find_tag(pSRB->pcmd->device, tag); + pSRB = (struct dc390_srb *)scmd->host_scribble; - if( pDCB->DCBFlag & ABORT_DEV_ ) + if (pDCB->DCBFlag & ABORT_DEV_) { pSRB->SRBState = SRB_ABORT_SENT; dc390_EnableMsgOut_Abort( pACB, pSRB ); } - if( !(pSRB->SRBState & SRB_DISCONNECT) ) - goto mingx0; + if (!(pSRB->SRBState & SRB_DISCONNECT)) + goto mingx0; - pDCB->pActiveSRB = pSRB; - pSRB->SRBState = SRB_DATA_XFER; + pDCB->pActiveSRB = pSRB; + pSRB->SRBState = SRB_DATA_XFER; } else { @@ -1782,7 +1774,7 @@ static void dc390_SRBdone( struct dc390_acb* pACB, struct dc390_dcb* pDCB, struct dc390_srb* pSRB ) { - u8 bval, status; + u8 status; struct scsi_cmnd *pcmd; pcmd = pSRB->pcmd; @@ -1833,9 +1825,13 @@ } else if( status_byte(status) == QUEUE_FULL ) { - bval = (u8) pDCB->GoingSRBCnt; - bval--; - pDCB->MaxCommand = bval; + if (pDCB->GoingSRBCnt > 2) { + pDCB->MaxCommand = pDCB->GoingSRBCnt - 1; + scsi_adjust_queue_depth(pcmd->device, MSG_ORDERED_TAG, pDCB->MaxCommand); + } else { + pDCB->MaxCommand = 1; + scsi_deactivate_tcq(pcmd->device, pcmd->device->host->can_queue); + } pcmd->use_sg = pSRB->SavedSGCount; DEBUG0 (printk ("DC390: RETRY pid %li (%02x), target %02i-%02i\n", pcmd->pid, pcmd->cmnd[0], pcmd->device->id, pcmd->device->lun)); pSRB->TotalXferredLen = 0; @@ -1906,7 +1902,7 @@ { struct dc390_dcb *pDCB, *pdcb; struct dc390_srb *psrb, *psrb2; - u8 i; + int i; struct scsi_cmnd *pcmd; pDCB = pACB->pLinkDCB; @@ -1915,7 +1911,7 @@ do { psrb = pdcb->pGoingSRB; - for( i=0; i<pdcb->GoingSRBCnt; i++) + for (i = 0; i < pdcb->GoingSRBCnt; i++) { psrb2 = psrb->pNextSRB; pcmd = psrb->pcmd; @@ -2003,6 +1999,7 @@ srb->pSRBDCB = dcb; srb->pcmd = cmd; + cmd->host_scribble = (char *)srb; srb->SGIndex = 0; srb->AdaptStatus = 0; @@ -2279,7 +2276,9 @@ if (sdev->tagged_supported && (dcb->DevMode & TAG_QUEUEING_)) { dcb->SyncMode |= EN_TAG_QUEUEING; dcb->MaxCommand = dcb->pDCBACB->TagMaxNum; + scsi_activate_tcq(sdev, dcb->MaxCommand); } + return 0; } Thanks Guennadi --- Guennadi Liakhovetski ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH] tmscsim: use block-layer tags 2004-10-13 19:35 ` Guennadi Liakhovetski @ 2004-10-13 21:49 ` James Bottomley 2004-10-13 22:00 ` Christoph Hellwig 0 siblings, 1 reply; 4+ messages in thread From: James Bottomley @ 2004-10-13 21:49 UTC (permalink / raw) To: Guennadi Liakhovetski; +Cc: SCSI Mailing List On Wed, 2004-10-13 at 14:35, Guennadi Liakhovetski wrote: > On Tue, 12 Oct 2004, Guennadi Liakhovetski wrote: > > > Slightly tested. Applies on the top of all up to date tmscsim patches (if > > I didn't miss any). Reviews, tests highly welcome. Inline patch should be > > fine now. Will re-send if still not... > > I think, there was (at least) one missing chunk in the first version of > the patch. Here's an updated version. Patch inlining seems to work indeed > now. This doesn't want to apply to scsi-misc-2.6 ... Patch failed. **** patch log follows **** Patching file drivers/scsi/tmscsim.c 11 out of 13 hunks FAILED -- saving rejects to file drivers/scsi/tmscsim.c.rej James ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH] tmscsim: use block-layer tags 2004-10-13 21:49 ` James Bottomley @ 2004-10-13 22:00 ` Christoph Hellwig 0 siblings, 0 replies; 4+ messages in thread From: Christoph Hellwig @ 2004-10-13 22:00 UTC (permalink / raw) To: James Bottomley; +Cc: Guennadi Liakhovetski, SCSI Mailing List On Wed, Oct 13, 2004 at 04:49:22PM -0500, James Bottomley wrote: > On Wed, 2004-10-13 at 14:35, Guennadi Liakhovetski wrote: > > On Tue, 12 Oct 2004, Guennadi Liakhovetski wrote: > > > > > Slightly tested. Applies on the top of all up to date tmscsim patches (if > > > I didn't miss any). Reviews, tests highly welcome. Inline patch should be > > > fine now. Will re-send if still not... > > > > I think, there was (at least) one missing chunk in the first version of > > the patch. Here's an updated version. Patch inlining seems to work indeed > > now. > > This doesn't want to apply to scsi-misc-2.6 ... > > Patch failed. **** patch log follows **** > Patching file drivers/scsi/tmscsim.c > 11 out of 13 hunks FAILED -- saving rejects to file > drivers/scsi/tmscsim.c.rej scsi-misc still seems to be missing the patch to merge scsiiom.c into tmscsim.c ^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2004-10-13 22:00 UTC | newest] Thread overview: 4+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2004-10-12 21:14 [PATCH] tmscsim: use block-layer tags Guennadi Liakhovetski 2004-10-13 19:35 ` Guennadi Liakhovetski 2004-10-13 21:49 ` James Bottomley 2004-10-13 22:00 ` Christoph Hellwig
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox