lkml.org 
[lkml]   [2004]   [Jul]   [16]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
Date
From
SubjectRe: [2.6 patch] SCSI tmscsim.c: fix inline compile errors
Hi

On Fri, 16 Jul 2004, Adrian Bunk wrote:

> Trying to compile drivers/scsi/tmscsim.c in 2.6.8-rc1-mm1 using gcc 3.4
> results in compile errors starting with the following:
>
> <-- snip -->
>
> ...
> CC drivers/scsi/tmscsim.o
> In file included from drivers/scsi/tmscsim.c:1477:
> drivers/scsi/scsiiom.c: In function `do_DC390_Interrupt':
> drivers/scsi/tmscsim.c:295: sorry, unimplemented: inlining failed in
> call to 'dc390_InvalidCmd': function body not available
> drivers/scsi/scsiiom.c:279: sorry, unimplemented: called from here
> drivers/scsi/tmscsim.c:296: sorry, unimplemented: inlining failed in
> call to 'dc390_EnableMsgOut_Abort': function body not available
> drivers/scsi/scsiiom.c:317: sorry, unimplemented: called from here
> make[2]: *** [drivers/scsi/tmscsim.o] Error 1
>
> <-- snip -->
>
>
> The patch below removes the inlines from the affected functions.
>
> An alternative approach would be to move the functions above the place
> where they are called the first time.

Thanks for the patch!

I looked at those 3 functions. dc390_EnableMsgOut_Abort is called 5 times
in the code and is 0x30 bytes long (as compiled with 3.3.2), so,
uninlining it, probably, makes most sense. The other 2 functions are
called only ones each and from the interrupt, so, I applied the
"alternative approach" to them - moved above the calling functions. So, if
there are no objections, perhaps, the attached patch could be applied
instead of yours. Tested.

Thanks
Guennadi

>
>
>
> diffstat output:
> drivers/scsi/scsiiom.c | 6 +++---
> drivers/scsi/tmscsim.c | 6 +++---
> 2 files changed, 6 insertions(+), 6 deletions(-)
>
>
> Signed-off-by: Adrian Bunk <bunk@fs.tum.de>
>
> --- linux-2.6.7-mm6-full-gcc3.4/drivers/scsi/scsiiom.c.old 2004-07-09 01:31:13.000000000 +0200
> +++ linux-2.6.7-mm6-full-gcc3.4/drivers/scsi/scsiiom.c 2004-07-09 01:33:35.000000000 +0200
> @@ -594,7 +594,7 @@
> }
>
> /* abort command */
> -static void __inline__
> +static void
> dc390_EnableMsgOut_Abort ( struct dc390_acb* pACB, struct dc390_srb* pSRB )
> {
> pSRB->MsgOutBuf[0] = ABORT;
> @@ -1656,7 +1656,7 @@
> }
>
>
> -static void __inline__
> +static void
> dc390_RequestSense( struct dc390_acb* pACB, struct dc390_dcb* pDCB, struct dc390_srb* pSRB )
> {
> struct scsi_cmnd *pcmd;
> @@ -1696,7 +1696,7 @@
>
>
>
> -static void __inline__
> +static void
> dc390_InvalidCmd( struct dc390_acb* pACB )
> {
> if( pACB->pActiveDCB->pActiveSRB->SRBState & (SRB_START_+SRB_MSGOUT) )
> --- linux-2.6.7-mm6-full-gcc3.4/drivers/scsi/tmscsim.c.old 2004-07-09 01:29:36.000000000 +0200
> +++ linux-2.6.7-mm6-full-gcc3.4/drivers/scsi/tmscsim.c 2004-07-09 01:33:46.000000000 +0200
> @@ -291,9 +291,9 @@
> static void dc390_DoingSRB_Done( struct dc390_acb* pACB, struct scsi_cmnd * cmd);
> static void dc390_ScsiRstDetect( struct dc390_acb* pACB );
> static void dc390_ResetSCSIBus( struct dc390_acb* pACB );
> -static void __inline__ dc390_RequestSense( struct dc390_acb* pACB, struct dc390_dcb* pDCB, struct dc390_srb* pSRB );
> -static void __inline__ dc390_InvalidCmd( struct dc390_acb* pACB );
> -static void __inline__ dc390_EnableMsgOut_Abort (struct dc390_acb*, struct dc390_srb*);
> +static void dc390_RequestSense( struct dc390_acb* pACB, struct dc390_dcb* pDCB, struct dc390_srb* pSRB );
> +static void dc390_InvalidCmd( struct dc390_acb* pACB );
> +static void dc390_EnableMsgOut_Abort (struct dc390_acb*, struct dc390_srb*);
> static irqreturn_t do_DC390_Interrupt( int, void *, struct pt_regs *);
>
> static int dc390_initAdapter(struct Scsi_Host *psh, unsigned long io_port, u8 Irq, u8 index );
>
> -
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at http://www.tux.org/lkml/
>
>

---
Guennadi LiakhovetskiSigned-off-by: Adrian Bunk <bunk@fs.tum.de>
Modified and
Signed-off-by: Guennadi Liakhovetski <g.liakhovetski@gmx.de>
diff -u a/drivers/scsi/scsiiom.c b/drivers/scsi/scsiiom.c
--- a/drivers/scsi/scsiiom.c Fri Jul 16 22:42:38 2004
+++ b/drivers/scsi/scsiiom.c Fri Jul 16 22:58:28 2004
@@ -213,8 +213,17 @@
}
#endif

+
+static void __inline__
+dc390_InvalidCmd(struct dc390_acb* pACB)
+{
+ if (pACB->pActiveDCB->pActiveSRB->SRBState & (SRB_START_ | SRB_MSGOUT))
+ DC390_write8(ScsiCmd, CLEAR_FIFO_CMD);
+}
+
+
static irqreturn_t __inline__
-DC390_Interrupt( int irq, void *dev_id, struct pt_regs *regs)
+DC390_Interrupt(int irq, void *dev_id, struct pt_regs *regs)
{
struct dc390_acb *pACB, *pACB2;
struct dc390_dcb *pDCB;
@@ -594,7 +603,7 @@
}

/* abort command */
-static void __inline__
+static void
dc390_EnableMsgOut_Abort ( struct dc390_acb* pACB, struct dc390_srb* pSRB )
{
pSRB->MsgOutBuf[0] = ABORT;
@@ -1333,6 +1342,35 @@
}


+static void __inline__
+dc390_RequestSense(struct dc390_acb* pACB, struct dc390_dcb* pDCB, struct dc390_srb* pSRB)
+{
+ struct scsi_cmnd *pcmd;
+
+ pcmd = pSRB->pcmd;
+
+ REMOVABLEDEBUG(printk(KERN_INFO "DC390: RequestSense(Cmd %02x, Id %02x, LUN %02x)\n",\
+ pcmd->cmnd[0], pDCB->TargetID, pDCB->TargetLUN));
+
+ pSRB->SRBFlag |= AUTO_REQSENSE;
+ pSRB->SavedSGCount = pcmd->use_sg;
+ pSRB->SavedTotXLen = pSRB->TotalXferredLen;
+ pSRB->AdaptStatus = 0;
+ pSRB->TargetStatus = 0; /* CHECK_CONDITION<<1; */
+
+ /* We are called from SRBdone, original PCI mapping has been removed
+ * already, new one is set up from StartSCSI */
+ pSRB->SGIndex = 0;
+
+ pSRB->TotalXferredLen = 0;
+ pSRB->SGToBeXferLen = 0;
+ if (dc390_StartSCSI(pACB, pDCB, pSRB)) {
+ dc390_Going_to_Waiting(pDCB, pSRB);
+ dc390_waiting_timer(pACB, HZ/5);
+ }
+}
+
+
static void
dc390_SRBdone( struct dc390_acb* pACB, struct dc390_dcb* pDCB, struct dc390_srb* pSRB )
{
@@ -1649,52 +1687,4 @@
dc390_Waiting_process( pACB );
}
return;
-}
-
-
-static void __inline__
-dc390_RequestSense( struct dc390_acb* pACB, struct dc390_dcb* pDCB, struct dc390_srb* pSRB )
-{
- struct scsi_cmnd *pcmd;
-
- pcmd = pSRB->pcmd;
-
- REMOVABLEDEBUG(printk (KERN_INFO "DC390: RequestSense (Cmd %02x, Id %02x, LUN %02x)\n",\
- pcmd->cmnd[0], pDCB->TargetID, pDCB->TargetLUN));
-
- pSRB->SRBFlag |= AUTO_REQSENSE;
- //pSRB->Segment0[0] = (u32) pSRB->CmdBlock[0];
- //pSRB->Segment0[1] = (u32) pSRB->CmdBlock[4];
- //pSRB->Segment1[0] = ((u32)(pcmd->cmd_len) << 8) + pSRB->SGcount;
- //pSRB->Segment1[1] = pSRB->TotalXferredLen;
- pSRB->SavedSGCount = pcmd->use_sg;
- pSRB->SavedTotXLen = pSRB->TotalXferredLen;
- pSRB->AdaptStatus = 0;
- pSRB->TargetStatus = 0; /* CHECK_CONDITION<<1; */
-
- /* We are called from SRBdone, original PCI mapping has been removed
- * already, new one is set up from StartSCSI */
- pSRB->SGIndex = 0;
-
- //pSRB->CmdBlock[0] = REQUEST_SENSE;
- //pSRB->CmdBlock[1] = pDCB->TargetLUN << 5;
- //(u16) pSRB->CmdBlock[2] = 0;
- //(u16) pSRB->CmdBlock[4] = sizeof(pcmd->sense_buffer);
- //pSRB->ScsiCmdLen = 6;
-
- pSRB->TotalXferredLen = 0;
- pSRB->SGToBeXferLen = 0;
- if( dc390_StartSCSI( pACB, pDCB, pSRB ) ) {
- dc390_Going_to_Waiting ( pDCB, pSRB );
- dc390_waiting_timer (pACB, HZ/5);
- }
-}
-
-
-
-static void __inline__
-dc390_InvalidCmd( struct dc390_acb* pACB )
-{
- if( pACB->pActiveDCB->pActiveSRB->SRBState & (SRB_START_+SRB_MSGOUT) )
- DC390_write8 (ScsiCmd, CLEAR_FIFO_CMD);
}
diff -u a/drivers/scsi/tmscsim.c b/drivers/scsi/tmscsim.c
--- a/drivers/scsi/tmscsim.c Fri Jul 16 22:40:41 2004
+++ b/drivers/scsi/tmscsim.c Fri Jul 16 23:01:08 2004
@@ -289,9 +289,7 @@
static void dc390_DoingSRB_Done( struct dc390_acb* pACB, struct scsi_cmnd * cmd);
static void dc390_ScsiRstDetect( struct dc390_acb* pACB );
static void dc390_ResetSCSIBus( struct dc390_acb* pACB );
-static void __inline__ dc390_RequestSense( struct dc390_acb* pACB, struct dc390_dcb* pDCB, struct dc390_srb* pSRB );
-static void __inline__ dc390_InvalidCmd( struct dc390_acb* pACB );
-static void __inline__ dc390_EnableMsgOut_Abort (struct dc390_acb*, struct dc390_srb*);
+static void dc390_EnableMsgOut_Abort(struct dc390_acb*, struct dc390_srb*);
static irqreturn_t do_DC390_Interrupt( int, void *, struct pt_regs *);

static int dc390_initAdapter(struct Scsi_Host *psh, unsigned long io_port, u8 Irq, u8 index );
@@ -939,8 +937,6 @@
{
pSRB->pSRBDCB = pDCB;
pSRB->pcmd = pcmd;
- //pSRB->ScsiCmdLen = pcmd->cmd_len;
- //memcpy (pSRB->CmdBlock, pcmd->cmnd, pcmd->cmd_len);

pSRB->SGIndex = 0;
pSRB->AdaptStatus = 0;
\
 
 \ /
  Last update: 2005-03-22 14:04    [from the cache]
©2003-2011 Jasper Spaans