IB/hfi1: Fix user-space buffers mapping with IOMMU enabled
The dma_XXX API functions return bus addresses which are physical addresses when IOMMU is disabled. Buffer mapping to user-space is done via remap_pfn_range() with PFN based on bus address instead of physical. This results in wrong pages being mapped to user-space when IOMMU is enabled. Reviewed-by: Mitko Haralanov <mitko.haralanov@intel.com> Reviewed-by: Dennis Dalessandro <dennis.dalessandro@intel.com> Signed-off-by: Tymoteusz Kielan <tymoteusz.kielan@intel.com> Signed-off-by: Andrzej Kacprowski <andrzej.kacprowski@intel.com> Signed-off-by: Dennis Dalessandro <dennis.dalessandro@intel.com> Signed-off-by: Doug Ledford <dledford@redhat.com>
Šī revīzija ir iekļauta:

revīziju iesūtīja
Doug Ledford

vecāks
0b115ef100
revīzija
60368186fd
@@ -67,9 +67,9 @@ TRACE_EVENT(hfi1_uctxtdata,
|
||||
__field(u64, hw_free)
|
||||
__field(void __iomem *, piobase)
|
||||
__field(u16, rcvhdrq_cnt)
|
||||
__field(u64, rcvhdrq_phys)
|
||||
__field(u64, rcvhdrq_dma)
|
||||
__field(u32, eager_cnt)
|
||||
__field(u64, rcvegr_phys)
|
||||
__field(u64, rcvegr_dma)
|
||||
),
|
||||
TP_fast_assign(DD_DEV_ASSIGN(dd);
|
||||
__entry->ctxt = uctxt->ctxt;
|
||||
@@ -77,10 +77,9 @@ TRACE_EVENT(hfi1_uctxtdata,
|
||||
__entry->hw_free = le64_to_cpu(*uctxt->sc->hw_free);
|
||||
__entry->piobase = uctxt->sc->base_addr;
|
||||
__entry->rcvhdrq_cnt = uctxt->rcvhdrq_cnt;
|
||||
__entry->rcvhdrq_phys = uctxt->rcvhdrq_phys;
|
||||
__entry->rcvhdrq_dma = uctxt->rcvhdrq_dma;
|
||||
__entry->eager_cnt = uctxt->egrbufs.alloced;
|
||||
__entry->rcvegr_phys =
|
||||
uctxt->egrbufs.rcvtids[0].phys;
|
||||
__entry->rcvegr_dma = uctxt->egrbufs.rcvtids[0].dma;
|
||||
),
|
||||
TP_printk("[%s] ctxt %u " UCTXT_FMT,
|
||||
__get_str(dev),
|
||||
@@ -89,9 +88,9 @@ TRACE_EVENT(hfi1_uctxtdata,
|
||||
__entry->hw_free,
|
||||
__entry->piobase,
|
||||
__entry->rcvhdrq_cnt,
|
||||
__entry->rcvhdrq_phys,
|
||||
__entry->rcvhdrq_dma,
|
||||
__entry->eager_cnt,
|
||||
__entry->rcvegr_phys
|
||||
__entry->rcvegr_dma
|
||||
)
|
||||
);
|
||||
|
||||
|
Atsaukties uz šo jaunā problēmā
Block a user