qlge: Expand coverage of hw lock for config register.
[deliverable/linux.git] / drivers / net / qlge / qlge_main.c
index 90d1f76c0e8b074729047d5d7aed9440b8d8315f..7f372672ac4efecced38b569017829d233c384d3 100644 (file)
@@ -214,6 +214,10 @@ int ql_write_cfg(struct ql_adapter *qdev, void *ptr, int size, u32 bit,
                return -ENOMEM;
        }
 
+       status = ql_sem_spinlock(qdev, SEM_ICB_MASK);
+       if (status)
+               return status;
+
        status = ql_wait_cfg(qdev, bit);
        if (status) {
                QPRINTK(qdev, IFUP, ERR,
@@ -221,12 +225,8 @@ int ql_write_cfg(struct ql_adapter *qdev, void *ptr, int size, u32 bit,
                goto exit;
        }
 
-       status = ql_sem_spinlock(qdev, SEM_ICB_MASK);
-       if (status)
-               goto exit;
        ql_write32(qdev, ICB_L, (u32) map);
        ql_write32(qdev, ICB_H, (u32) (map >> 32));
-       ql_sem_unlock(qdev, SEM_ICB_MASK);      /* does flush too */
 
        mask = CFG_Q_MASK | (bit << 16);
        value = bit | (q_id << CFG_Q_SHIFT);
@@ -237,6 +237,7 @@ int ql_write_cfg(struct ql_adapter *qdev, void *ptr, int size, u32 bit,
         */
        status = ql_wait_cfg(qdev, bit);
 exit:
+       ql_sem_unlock(qdev, SEM_ICB_MASK);      /* does flush too */
        pci_unmap_single(qdev->pdev, map, size, direction);
        return status;
 }
This page took 0.028518 seconds and 5 git commands to generate.