diff options
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/net/ixgbe/ixgbe_fcoe.c | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/drivers/net/ixgbe/ixgbe_fcoe.c b/drivers/net/ixgbe/ixgbe_fcoe.c index 26dd27479e2c..6342d4859790 100644 --- a/drivers/net/ixgbe/ixgbe_fcoe.c +++ b/drivers/net/ixgbe/ixgbe_fcoe.c | |||
@@ -92,6 +92,7 @@ int ixgbe_fcoe_ddp_put(struct net_device *netdev, u16 xid) | |||
92 | struct ixgbe_fcoe *fcoe; | 92 | struct ixgbe_fcoe *fcoe; |
93 | struct ixgbe_adapter *adapter; | 93 | struct ixgbe_adapter *adapter; |
94 | struct ixgbe_fcoe_ddp *ddp; | 94 | struct ixgbe_fcoe_ddp *ddp; |
95 | u32 fcbuff; | ||
95 | 96 | ||
96 | if (!netdev) | 97 | if (!netdev) |
97 | goto out_ddp_put; | 98 | goto out_ddp_put; |
@@ -115,7 +116,14 @@ int ixgbe_fcoe_ddp_put(struct net_device *netdev, u16 xid) | |||
115 | IXGBE_WRITE_REG(&adapter->hw, IXGBE_FCBUFF, 0); | 116 | IXGBE_WRITE_REG(&adapter->hw, IXGBE_FCBUFF, 0); |
116 | IXGBE_WRITE_REG(&adapter->hw, IXGBE_FCDMARW, | 117 | IXGBE_WRITE_REG(&adapter->hw, IXGBE_FCDMARW, |
117 | (xid | IXGBE_FCDMARW_WE)); | 118 | (xid | IXGBE_FCDMARW_WE)); |
119 | |||
120 | /* guaranteed to be invalidated after 100us */ | ||
121 | IXGBE_WRITE_REG(&adapter->hw, IXGBE_FCDMARW, | ||
122 | (xid | IXGBE_FCDMARW_RE)); | ||
123 | fcbuff = IXGBE_READ_REG(&adapter->hw, IXGBE_FCBUFF); | ||
118 | spin_unlock_bh(&fcoe->lock); | 124 | spin_unlock_bh(&fcoe->lock); |
125 | if (fcbuff & IXGBE_FCBUFF_VALID) | ||
126 | udelay(100); | ||
119 | } | 127 | } |
120 | if (ddp->sgl) | 128 | if (ddp->sgl) |
121 | pci_unmap_sg(adapter->pdev, ddp->sgl, ddp->sgc, | 129 | pci_unmap_sg(adapter->pdev, ddp->sgl, ddp->sgc, |