diff options
author | Ram Vepa <ram.vepa@qlogic.com> | 2011-12-23 08:01:43 -0500 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2012-01-12 11:35:04 -0800 |
commit | 0853141b9eff15c72dde6868ee5351db3f7d12f1 (patch) | |
tree | 1fe1380073a216fa02bc3331c0f62d6adff475c8 /drivers/infiniband/hw/qib/qib_iba6120.c | |
parent | e50262ea574d1daf62529e2b282b8551790f7f38 (diff) | |
download | kernel_samsung_smdk4412-0853141b9eff15c72dde6868ee5351db3f7d12f1.zip kernel_samsung_smdk4412-0853141b9eff15c72dde6868ee5351db3f7d12f1.tar.gz kernel_samsung_smdk4412-0853141b9eff15c72dde6868ee5351db3f7d12f1.tar.bz2 |
IB/qib: Fix a possible data corruption when receiving packets
commit eddfb675256f49d14e8c5763098afe3eb2c93701 upstream.
Prevent a receive data corruption by ensuring that the write to update
the rcvhdrheadn register to generate an interrupt is at the very end
of the receive processing.
Signed-off-by: Ramkrishna Vepa <ram.vepa@qlogic.com>
Signed-off-by: Mike Marciniszyn <mike.marciniszyn@qlogic.com>
Signed-off-by: Roland Dreier <roland@purestorage.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'drivers/infiniband/hw/qib/qib_iba6120.c')
-rw-r--r-- | drivers/infiniband/hw/qib/qib_iba6120.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/drivers/infiniband/hw/qib/qib_iba6120.c b/drivers/infiniband/hw/qib/qib_iba6120.c index d8ca0a0..65df26c 100644 --- a/drivers/infiniband/hw/qib/qib_iba6120.c +++ b/drivers/infiniband/hw/qib/qib_iba6120.c @@ -2076,9 +2076,11 @@ static void qib_6120_config_ctxts(struct qib_devdata *dd) static void qib_update_6120_usrhead(struct qib_ctxtdata *rcd, u64 hd, u32 updegr, u32 egrhd, u32 npkts) { - qib_write_ureg(rcd->dd, ur_rcvhdrhead, hd, rcd->ctxt); if (updegr) qib_write_ureg(rcd->dd, ur_rcvegrindexhead, egrhd, rcd->ctxt); + mmiowb(); + qib_write_ureg(rcd->dd, ur_rcvhdrhead, hd, rcd->ctxt); + mmiowb(); } static u32 qib_6120_hdrqempty(struct qib_ctxtdata *rcd) |