]> git.hungrycats.org Git - linux/commitdiff
[PATCH] switch fusion to use <linux/list.h> everywhere
authorChristoph Hellwig <hch@lst.de>
Tue, 21 Sep 2004 11:35:09 +0000 (07:35 -0400)
committerChristoph Hellwig <hch@lst.de>
Tue, 21 Sep 2004 11:35:09 +0000 (07:35 -0400)
Acked By: Moore, Eric Dean <emoore@lsil.com>
Signed-off-by: James Bottomley <James.Bottomley@SteelEye.com>
drivers/message/fusion/mptbase.c
drivers/message/fusion/mptbase.h
drivers/message/fusion/mptscsih.c

index 70a44c9d2f7414ccdc742e105ca9da0256352bae..5ed5b5d0c1345384f32b73c128d4ddcb8500852d 100644 (file)
@@ -437,7 +437,7 @@ mpt_interrupt(int irq, void *bus_id, struct pt_regs *r)
 
                        /*  Put Request back on FreeQ!  */
                        spin_lock_irqsave(&ioc->FreeQlock, flags);
-                       Q_ADD_TAIL(&ioc->FreeQ, &mf->u.frame.linkage, MPT_FRAME_HDR);
+                       list_add_tail(&mf->u.frame.linkage.list, &ioc->FreeQ);
 #ifdef MFCNT
                        ioc->mfcnt--;
 #endif
@@ -533,7 +533,7 @@ mpt_base_reply(MPT_ADAPTER *ioc, MPT_FRAME_HDR *mf, MPT_FRAME_HDR *reply)
                        del_timer(&pCfg->timer);
 
                        spin_lock_irqsave(&ioc->FreeQlock, flags);
-                       Q_DEL_ITEM(&pCfg->linkage);
+                       list_del(&pCfg->linkage);
                        spin_unlock_irqrestore(&ioc->FreeQlock, flags);
 
                        /*
@@ -819,11 +819,12 @@ mpt_get_msg_frame(int handle, MPT_ADAPTER *ioc)
                return NULL;
 
        spin_lock_irqsave(&ioc->FreeQlock, flags);
-       if (! Q_IS_EMPTY(&ioc->FreeQ)) {
+       if (!list_empty(&ioc->FreeQ)) {
                int req_offset;
 
-               mf = ioc->FreeQ.head;
-               Q_DEL_ITEM(&mf->u.frame.linkage);
+               mf = list_entry(ioc->FreeQ.next, MPT_FRAME_HDR,
+                               u.frame.linkage.list);
+               list_del(&mf->u.frame.linkage.list);
                mf->u.frame.hwhdr.msgctxu.fld.cb_idx = handle;  /* byte */
                req_offset = (u8 *)mf - (u8 *)ioc->req_frames;
                                                                /* u16! */
@@ -919,7 +920,7 @@ mpt_free_msg_frame(MPT_ADAPTER *ioc, MPT_FRAME_HDR *mf)
 
        /*  Put Request back on FreeQ!  */
        spin_lock_irqsave(&ioc->FreeQlock, flags);
-       Q_ADD_TAIL(&ioc->FreeQ, &mf->u.frame.linkage, MPT_FRAME_HDR);
+       list_add_tail(&mf->u.frame.linkage.list, &ioc->FreeQ);
 #ifdef MFCNT
        ioc->mfcnt--;
 #endif
@@ -1198,7 +1199,7 @@ mptbase_probe(struct pci_dev *pdev, const struct pci_device_id *id)
 
        /* Initialize the running configQ head.
         */
-       Q_INIT(&ioc->configQ, Q_ITEM);
+       INIT_LIST_HEAD(&ioc->configQ);
 
        /* Find lookup slot. */
        INIT_LIST_HEAD(&ioc->list);
@@ -3592,14 +3593,14 @@ PrimeIocFifos(MPT_ADAPTER *ioc)
                /* Initialize the free chain Q.
                */
 
-               Q_INIT(&ioc->FreeChainQ, MPT_FRAME_HDR);
+               INIT_LIST_HEAD(&ioc->FreeChainQ);
 
                /* Post the chain buffers to the FreeChainQ.
                */
                mem = (u8 *)ioc->ChainBuffer;
                for (i=0; i < num_chain; i++) {
                        mf = (MPT_FRAME_HDR *) mem;
-                       Q_ADD_TAIL(&ioc->FreeChainQ.head, &mf->u.frame.linkage, MPT_FRAME_HDR);
+                       list_add_tail(&mf->u.frame.linkage.list, &ioc->FreeChainQ);
                        mem += ioc->req_sz;
                }
 
@@ -3609,12 +3610,13 @@ PrimeIocFifos(MPT_ADAPTER *ioc)
                mem = (u8 *) ioc->req_frames;
 
                spin_lock_irqsave(&ioc->FreeQlock, flags);
-               Q_INIT(&ioc->FreeQ, MPT_FRAME_HDR);
+               INIT_LIST_HEAD(&ioc->FreeQ);
                for (i = 0; i < ioc->req_depth; i++) {
                        mf = (MPT_FRAME_HDR *) mem;
 
                        /*  Queue REQUESTs *internally*!  */
-                       Q_ADD_TAIL(&ioc->FreeQ.head, &mf->u.frame.linkage, MPT_FRAME_HDR);
+                       list_add_tail(&mf->u.frame.linkage.list, &ioc->FreeQ);
+
                        mem += ioc->req_sz;
                }
                spin_unlock_irqrestore(&ioc->FreeQlock, flags);
@@ -4903,7 +4905,7 @@ mpt_config(MPT_ADAPTER *ioc, CONFIGPARMS *pCfg)
 
        /* Add to end of Q, set timer and then issue this command */
        spin_lock_irqsave(&ioc->FreeQlock, flags);
-       Q_ADD_TAIL(&ioc->configQ.head, &pCfg->linkage, Q_ITEM);
+       list_add_tail(&pCfg->linkage, &ioc->configQ);
        spin_unlock_irqrestore(&ioc->FreeQlock, flags);
 
        add_timer(&pCfg->timer);
@@ -5014,7 +5016,7 @@ mpt_toolbox(MPT_ADAPTER *ioc, CONFIGPARMS *pCfg)
 
        /* Add to end of Q, set timer and then issue this command */
        spin_lock_irqsave(&ioc->FreeQlock, flags);
-       Q_ADD_TAIL(&ioc->configQ.head, &pCfg->linkage, Q_ITEM);
+       list_add_tail(&pCfg->linkage, &ioc->configQ);
        spin_unlock_irqrestore(&ioc->FreeQlock, flags);
 
        add_timer(&pCfg->timer);
@@ -5081,13 +5083,8 @@ mpt_ioc_reset(MPT_ADAPTER *ioc, int reset_phase)
                 * the FIFO's are primed.
                 */
                spin_lock_irqsave(&ioc->FreeQlock, flags);
-               if (! Q_IS_EMPTY(&ioc->configQ)){
-                       pCfg = (CONFIGPARMS *)ioc->configQ.head;
-                       do {
-                               del_timer(&pCfg->timer);
-                               pCfg = (CONFIGPARMS *) (pCfg->linkage.forw);
-                       } while (pCfg != (CONFIGPARMS *)&ioc->configQ);
-               }
+               list_for_each_entry(pCfg, &ioc->configQ, linkage)
+                       del_timer(&pCfg->timer);
                spin_unlock_irqrestore(&ioc->FreeQlock, flags);
 
        } else {
@@ -5097,19 +5094,12 @@ mpt_ioc_reset(MPT_ADAPTER *ioc, int reset_phase)
                 * Flush the Q, and wake up all suspended threads.
                 */
                spin_lock_irqsave(&ioc->FreeQlock, flags);
-               if (! Q_IS_EMPTY(&ioc->configQ)){
-                       pCfg = (CONFIGPARMS *)ioc->configQ.head;
-                       do {
-                               pNext = (CONFIGPARMS *) pCfg->linkage.forw;
-
-                               Q_DEL_ITEM(&pCfg->linkage);
+               list_for_each_entry_safe(pCfg, pNext, &ioc->configQ, linkage) {
+                       list_del(&pCfg->linkage);
 
-                               pCfg->status = MPT_CONFIG_ERROR;
-                               pCfg->wait_done = 1;
-                               wake_up(&mpt_waitq);
-
-                               pCfg = pNext;
-                       } while (pCfg != (CONFIGPARMS *)&ioc->configQ);
+                       pCfg->status = MPT_CONFIG_ERROR;
+                       pCfg->wait_done = 1;
+                       wake_up(&mpt_waitq);
                }
                spin_unlock_irqrestore(&ioc->FreeQlock, flags);
        }
index 56f64b3f0d55a0658fcb37f6cfbedec6213a09d9..4207af565800c0f54f4125f8132dcf3cd3370569 100644 (file)
@@ -226,8 +226,7 @@ struct mpt_pci_driver{
 
 typedef union _MPT_FRAME_TRACKER {
        struct {
-               struct _MPT_FRAME_HDR   *forw;
-               struct _MPT_FRAME_HDR   *back;
+               struct list_head        list;
                u32                      arg1;
                u32                      pad;
                void                    *argp1;
@@ -290,15 +289,6 @@ typedef struct _MPT_FRAME_HDR {
 
 #define MPT_REQ_MSGFLAGS_DROPME                0x80
 
-/* Used for tracking the free request frames
- * and free reply frames.
- */
-typedef struct _MPT_Q_TRACKER {
-       MPT_FRAME_HDR   *head;
-       MPT_FRAME_HDR   *tail;
-} MPT_Q_TRACKER;
-
-
 typedef struct _MPT_SGL_HDR {
        SGESimple32_t    sge[1];
 } MPT_SGL_HDR;
@@ -308,16 +298,6 @@ typedef struct _MPT_SGL64_HDR {
 } MPT_SGL64_HDR;
 
 
-typedef struct _Q_ITEM {
-       struct _Q_ITEM  *forw;
-       struct _Q_ITEM  *back;
-} Q_ITEM;
-
-typedef struct _Q_TRACKER {
-       struct _Q_ITEM  *head;
-       struct _Q_ITEM  *tail;
-} Q_TRACKER;
-
 /*
  *  Chip-specific stuff... FC929 delineates break between
  *  FC and Parallel SCSI parts. Do NOT re-order.
@@ -401,8 +381,6 @@ typedef struct _ScsiCmndTracker {
  *     (used to be FCSCSI_TARGET)
  */
 typedef struct _VirtDevice {
-       struct _VirtDevice      *forw;
-       struct _VirtDevice      *back;
        struct scsi_device      *device;
        rwlock_t                 VdevLock;
        int                      ref_cnt;
@@ -426,9 +404,6 @@ typedef struct _VirtDevice {
        struct timer_list        stall_timer;
        struct timer_list        retry_timer;
        struct timer_list        gone_timer;
-       ScsiCmndTracker          WaitQ;
-       ScsiCmndTracker          SentQ;
-       ScsiCmndTracker          DoneQ;
        u32                      num_luns;
        u32                      luns[8];               /* Max LUNs is 256 */
        u8                       pad[4];
@@ -575,8 +550,6 @@ typedef     struct _ScsiCfgData {
  */
 typedef struct _MPT_ADAPTER
 {
-       struct _MPT_ADAPTER     *forw;
-       struct _MPT_ADAPTER     *back;
        int                      id;            /* Unique adapter id N {0,1,2,...} */
        int                      pci_irq;       /* This irq           */
        char                     name[MPT_NAME_LENGTH]; /* "iocN"             */
@@ -607,7 +580,7 @@ typedef struct _MPT_ADAPTER
        int                     *ChainToChain;
        u8                      *ChainBuffer;
        dma_addr_t               ChainBufferDMA;
-       MPT_Q_TRACKER            FreeChainQ;
+       struct list_head         FreeChainQ;
        spinlock_t               FreeChainQlock;
        CHIP_TYPE                chip_type;
                /* We (host driver) get to manage our own RequestQueue! */
@@ -617,7 +590,7 @@ typedef struct _MPT_ADAPTER
        int                      req_depth;     /* Number of request frames */
        int                      req_sz;        /* Request frame size (bytes) */
        spinlock_t               FreeQlock;
-       MPT_Q_TRACKER            FreeQ;
+       struct list_head         FreeQ;
                /* Pool of SCSI sense buffers for commands coming from
                 * the SCSI mid-layer.  We have one 256 byte sense buffer
                 * for each REQ entry.
@@ -648,7 +621,7 @@ typedef struct _MPT_ADAPTER
        struct _mpt_ioctl_events *events;       /* pointer to event log */
        u8                      *cached_fw;     /* Pointer to FW */
        dma_addr_t              cached_fw_dma;
-       Q_TRACKER                configQ;       /* linked list of config. requests */
+       struct list_head         configQ;       /* linked list of config. requests */
        int                      hs_reply_idx;
 #ifndef MFCNT
        u32                      pad0;
@@ -902,34 +875,6 @@ typedef struct _mpt_sge {
 #define MPT_INDEX_2_RFPTR(ioc,idx) \
        (MPT_FRAME_HDR*)( (u8*)(ioc)->reply_frames + (ioc)->req_sz * (idx) )
 
-#define Q_INIT(q,type)  (q)->head = (q)->tail = (type*)(q)
-#define Q_IS_EMPTY(q)   ((Q_ITEM*)(q)->head == (Q_ITEM*)(q))
-
-#define Q_ADD_TAIL(qt,i,type) { \
-       Q_TRACKER       *_qt = (Q_TRACKER*)(qt); \
-       Q_ITEM          *oldTail = _qt->tail; \
-       (i)->forw = (type*)_qt; \
-       (i)->back = (type*)oldTail; \
-       oldTail->forw = (Q_ITEM*)(i); \
-       _qt->tail = (Q_ITEM*)(i); \
-}
-
-#define Q_ADD_HEAD(qt,i,type) { \
-       Q_TRACKER       *_qt = (Q_TRACKER*)(qt); \
-       Q_ITEM          *oldHead = _qt->head; \
-       (i)->forw = (type*)oldHead; \
-       (i)->back = (type*)_qt; \
-       oldHead->back = (Q_ITEM*)(i); \
-       _qt->head = (Q_ITEM*)(i); \
-}
-
-#define Q_DEL_ITEM(i) { \
-       Q_ITEM  *_forw = (Q_ITEM*)(i)->forw; \
-       Q_ITEM  *_back = (Q_ITEM*)(i)->back; \
-       _back->forw = _forw; \
-       _forw->back = _back; \
-}
-
 #define SWAB4(value) \
        (u32)(   (((value) & 0x000000ff) << 24) \
               | (((value) & 0x0000ff00) << 8)  \
@@ -1017,8 +962,6 @@ typedef struct _MPT_SCSI_HOST {
                /* Pool of memory for holding SCpnts before doing
                 * OS callbacks. freeQ is the free pool.
                 */
-       MPT_Q_TRACKER             taskQ;                /* TM request Q */
-       int                       taskQcnt;
        u8                        tmPending;
        u8                        resetPending;
        u8                        is_spi;               /* Parallel SCSI i/f */
@@ -1069,7 +1012,7 @@ typedef struct _DmpServices {
  * Generic structure passed to the base mpt_config function.
  */
 typedef struct _x_config_parms {
-       Q_ITEM                   linkage;       /* linked list */
+       struct list_head         linkage;       /* linked list */
        struct timer_list        timer;         /* timer function for this request  */
        ConfigPageHeader_t      *hdr;
        dma_addr_t               physAddr;
index 38c8fb77d2997a2556faddc35f3369d7d59d58c2..ee7829625168133120326fbe2c64df9780049c37 100644 (file)
@@ -340,19 +340,18 @@ mptscsih_getFreeChainBuffer(MPT_ADAPTER *ioc, int *retIndex)
        dsgprintk((MYIOC_s_INFO_FMT "getFreeChainBuffer called\n",
                        ioc->name));
        spin_lock_irqsave(&ioc->FreeQlock, flags);
-       if (!Q_IS_EMPTY(&ioc->FreeChainQ)) {
-
+       if (!list_empty(&ioc->FreeChainQ)) {
                int offset;
 
-               chainBuf = ioc->FreeChainQ.head;
-               Q_DEL_ITEM(&chainBuf->u.frame.linkage);
+               chainBuf = list_entry(ioc->FreeChainQ.next, MPT_FRAME_HDR,
+                               u.frame.linkage.list);
+               list_del(&chainBuf->u.frame.linkage.list);
                offset = (u8 *)chainBuf - (u8 *)ioc->ChainBuffer;
                chain_idx = offset / ioc->req_sz;
                rc = SUCCESS;
                dsgprintk((MYIOC_s_INFO_FMT "getFreeChainBuffer (index %d), got buf=%p\n",
                        ioc->name, *retIndex, chainBuf));
-       }
-       else {
+       } else {
                rc = FAILED;
                chain_idx = MPT_HOST_NO_CHAIN;
                dfailprintk((MYIOC_s_ERR_FMT "getFreeChainBuffer failed\n",
@@ -360,9 +359,7 @@ mptscsih_getFreeChainBuffer(MPT_ADAPTER *ioc, int *retIndex)
        }
        spin_unlock_irqrestore(&ioc->FreeQlock, flags);
 
-
        *retIndex = chain_idx;
-
        return rc;
 } /* mptscsih_getFreeChainBuffer() */
 
@@ -1218,12 +1215,6 @@ mptscsih_probe(struct pci_dev *pdev, const struct pci_device_id *id)
        dprintk((MYIOC_s_INFO_FMT "ScsiLookup @ %p, sz=%d\n",
                 ioc->name, hd->ScsiLookup, sz));
                
-       /* Initialize this Scsi_Host
-        * internal task Q.
-        */
-       Q_INIT(&hd->taskQ, MPT_FRAME_HDR);
-       hd->taskQcnt = 0;
-               
        /* Allocate memory for the device structures.
         * A non-Null pointer at an offset
         * indicates a device exists.
@@ -2102,9 +2093,9 @@ mptscsih_freeChainBuffers(MPT_ADAPTER *ioc, int req_idx)
 
                chain = (MPT_FRAME_HDR *) (ioc->ChainBuffer
                                        + (chain_idx * ioc->req_sz));
+
                spin_lock_irqsave(&ioc->FreeQlock, flags);
-               Q_ADD_TAIL(&ioc->FreeChainQ.head,
-                                       &chain->u.frame.linkage, MPT_FRAME_HDR);
+               list_add_tail(&chain->u.frame.linkage.list, &ioc->FreeChainQ);
                spin_unlock_irqrestore(&ioc->FreeQlock, flags);
 
                dmfprintk((MYIOC_s_INFO_FMT "FreeChainBuffers (index %d)\n",
@@ -2664,8 +2655,6 @@ mptscsih_taskmgmt_complete(MPT_ADAPTER *ioc, MPT_FRAME_HDR *mf, MPT_FRAME_HDR *m
                if (hd->tmPtr) {
                        del_timer(&hd->TMtimer);
                }
-               dtmprintk((MYIOC_s_WARN_FMT "taskQcnt (%d)\n",
-                       ioc->name, hd->taskQcnt));
        } else {
                dtmprintk((MYIOC_s_WARN_FMT "TaskMgmt Complete: NULL Scsi Host Ptr\n",
                        ioc->name));
@@ -2799,9 +2788,6 @@ mptscsih_slave_alloc(struct scsi_device *device)
                } else {
                        memset(vdev, 0, sizeof(VirtDevice));
                        rwlock_init(&vdev->VdevLock);
-                       Q_INIT(&vdev->WaitQ, void);
-                       Q_INIT(&vdev->SentQ, void);
-                       Q_INIT(&vdev->DoneQ, void);
                        vdev->tflags = MPT_TARGET_FLAGS_Q_YES;
                        vdev->ioc_id = hd->ioc->id;
                        vdev->target_id = device->id;