linux/drivers/infiniband/hw
Mike Marciniszyn cb51c5d2cd IB/hfi1: Fix bar0 mapping to use write combining
When the debugpat kernel boot flag is turned on the following
traces are printed:

[ 1884.793168] x86/PAT: Overlap at 0x90000000-0x92000000
[ 1884.803510] x86/PAT: reserve_memtype added [mem 0x91200000-0x9127ffff],
track uncached-minus, req write-combining, ret uncached-minus
[ 1884.818167] hfi1 0000:05:00.0: hfi1_0: WC Remapped RcvArray:
ffffc9000a980000

The ioremap_wc() clearly is not returning a write combining mapping due
to an overlap where the RcvArray is mapped in a uncached mapping prior
to creating the proposed write combining mapping.

The patch replaces the single base register for uncached CSRs that
used to overlap the RcvArray with two mappings.   One, kregbase1, from the
bar0 up to the RcvArray and another, kregbase2, from the end of the
RcvArray to the pio send buffer space.  A new dd field, base2_start,
is used to convert the zero-based offset in the CSR routines to the
correct kregbase1/kregbase2 mapping.  A single direct write of the
RcvArray CSRs is replaced with hfi1_put_tid() to insure correct access
using the new disjoint mapping.

Additionally, the kregend field is deleted since it is only ever written.

patdebug now shows the RcvArray as write combining:
[   35.688990] x86/PAT: reserve_memtype added [mem 0x91200000-0x9127ffff],
track write-combining, req write-combining, ret write-combining

To insulate from any potential issues with write combining, all
writeq are now flushed in hfi1_put_tid() and rcv_array_wc_fill().

Reviewed-by: Mitko Haralanov <mitko.haralanov@intel.com>
Reviewed-by: Ashutosh Dixit <ashutosh.dixit@intel.com>
Signed-off-by: Mike Marciniszyn <mike.marciniszyn@intel.com>
Signed-off-by: Dennis Dalessandro <dennis.dalessandro@intel.com>
Signed-off-by: Doug Ledford <dledford@redhat.com>
2017-07-31 15:17:54 -04:00
..
bnxt_re RDMA/bnxt_re: Allow posting when QPs are in error 2017-07-24 08:45:12 -04:00
cxgb3 RDMA: Remove useless MODULE_VERSION 2017-07-24 08:45:11 -04:00
cxgb4 RDMA: Remove useless MODULE_VERSION 2017-07-24 08:45:11 -04:00
hfi1 IB/hfi1: Fix bar0 mapping to use write combining 2017-07-31 15:17:54 -04:00
hns IB/hns: include linux/interrupt.h 2017-07-31 14:44:47 -04:00
i40iw RDMA: Remove useless MODULE_VERSION 2017-07-24 08:45:11 -04:00
mlx4 Merge branch 'misc' into k.o/for-next 2017-07-27 09:00:38 -04:00
mlx5 Merge branch 'misc' into k.o/for-next 2017-07-27 09:00:38 -04:00
mthca RDMA: Remove useless MODULE_VERSION 2017-07-24 08:45:11 -04:00
nes RDMA: Remove useless MODULE_VERSION 2017-07-24 08:45:11 -04:00
ocrdma RDMA: Remove useless MODULE_VERSION 2017-07-24 08:45:11 -04:00
qedr RDMA/qedr: notify user application of supported WIDs 2017-07-27 08:59:52 -04:00
qib Merge branch 'misc' into k.o/for-next 2017-07-27 09:00:38 -04:00
usnic RDMA: Remove useless MODULE_VERSION 2017-07-24 08:45:11 -04:00
vmw_pvrdma RDMA: Remove useless MODULE_VERSION 2017-07-24 08:45:11 -04:00
Makefile RDMA/bnxt_re: Add bnxt_re driver build support 2017-02-14 09:51:28 -05:00