diff options
Diffstat (limited to 'drivers/infiniband/hw/ipath/ipath_file_ops.c')
-rw-r--r-- | drivers/infiniband/hw/ipath/ipath_file_ops.c | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/drivers/infiniband/hw/ipath/ipath_file_ops.c b/drivers/infiniband/hw/ipath/ipath_file_ops.c index 5de3243a47c..92dae6f5b39 100644 --- a/drivers/infiniband/hw/ipath/ipath_file_ops.c +++ b/drivers/infiniband/hw/ipath/ipath_file_ops.c | |||
@@ -2149,11 +2149,15 @@ static int ipath_get_slave_info(struct ipath_portdata *pd, | |||
2149 | 2149 | ||
2150 | static int ipath_force_pio_avail_update(struct ipath_devdata *dd) | 2150 | static int ipath_force_pio_avail_update(struct ipath_devdata *dd) |
2151 | { | 2151 | { |
2152 | u64 reg = dd->ipath_sendctrl; | 2152 | unsigned long flags; |
2153 | 2153 | ||
2154 | clear_bit(IPATH_S_PIOBUFAVAILUPD, ®); | 2154 | spin_lock_irqsave(&dd->ipath_sendctrl_lock, flags); |
2155 | ipath_write_kreg(dd, dd->ipath_kregs->kr_sendctrl, reg); | 2155 | ipath_write_kreg(dd, dd->ipath_kregs->kr_sendctrl, |
2156 | dd->ipath_sendctrl & ~INFINIPATH_S_PIOBUFAVAILUPD); | ||
2157 | ipath_read_kreg64(dd, dd->ipath_kregs->kr_scratch); | ||
2156 | ipath_write_kreg(dd, dd->ipath_kregs->kr_sendctrl, dd->ipath_sendctrl); | 2158 | ipath_write_kreg(dd, dd->ipath_kregs->kr_sendctrl, dd->ipath_sendctrl); |
2159 | ipath_read_kreg64(dd, dd->ipath_kregs->kr_scratch); | ||
2160 | spin_unlock_irqrestore(&dd->ipath_sendctrl_lock, flags); | ||
2157 | 2161 | ||
2158 | return 0; | 2162 | return 0; |
2159 | } | 2163 | } |