mirror of
https://github.com/torvalds/linux.git
synced 2026-09-24 06:24:02 +02:00
IB/hfi1: Resolve the credit-return buffer through the send context's node
hfi1_file_mmap()'s PIO_CRED case derives this context's credit-return
page offset, and the DMA handle for it, from dd->cr_base[uctxt->numa_id].
uctxt->numa_id is the node of whichever CPU the process happened to be
running on, but the entry itself lives in the credit-return allocation of
the send context's own node:
sc->hw_free = &sc->dd->cr_base[sc->node].va[gc].cr[index];
and user send contexts are allocated with sc_alloc(dd, SC_USER, ...,
dd->node), the HFI-local node. On a multi-socket host with the process
running off that node the two allocations differ, so the subtraction
produces an offset into an unrelated buffer and the DMA handle belongs to
the wrong allocation.
Use the send context's own node for all three references. The
continuation lines are reindented at the same time; they mixed spaces and
tabs.
Fixes: 7724105686 ("IB/hfi1: add driver files")
Cc: stable@vger.kernel.org
Signed-off-by: Shuhei Takeshita <jyohuku.alterego@gmail.com>
Link: https://patch.msgid.link/20260809032743.2671579-2-jyohuku.alterego@gmail.com
Signed-off-by: Leon Romanovsky <leon@kernel.org>
This commit is contained in:
parent
1caceeb2d7
commit
975396b9e5
|
|
@ -382,10 +382,10 @@ static int hfi1_file_mmap(struct file *fp, struct vm_area_struct *vma)
|
|||
* of enabled contexts > 64 and 128 respectively).
|
||||
*/
|
||||
cr_page_offset = ((u64)uctxt->sc->hw_free -
|
||||
(u64)dd->cr_base[uctxt->numa_id].va) &
|
||||
PAGE_MASK;
|
||||
memvirt = dd->cr_base[uctxt->numa_id].va + cr_page_offset;
|
||||
memdma = dd->cr_base[uctxt->numa_id].dma + cr_page_offset;
|
||||
(u64)dd->cr_base[uctxt->sc->node].va) &
|
||||
PAGE_MASK;
|
||||
memvirt = dd->cr_base[uctxt->sc->node].va + cr_page_offset;
|
||||
memdma = dd->cr_base[uctxt->sc->node].dma + cr_page_offset;
|
||||
memlen = PAGE_SIZE;
|
||||
flags &= ~VM_MAYWRITE;
|
||||
flags |= VM_DONTCOPY | VM_DONTEXPAND;
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user