mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-07 03:15:31 +09:00
infiniband: Fix alignment of mmap cookies to support VIPT caching
[ Upstream commit cb88645596 ]
When vmalloc_user is used to create memory that is supposed to be mmap'd
to user space, it is necessary for the mmap cookie (eg the offset) to be
aligned to SHMLBA.
This creates a situation where all virtual mappings of the same physical
page share the same virtual cache index and guarantees VIPT coherence.
Otherwise the cache is non-coherent and the kernel will not see writes
by userspace when reading the shared page (or vice-versa).
Reported-by: Josh Beavers <josh.beavers@gmail.com>
Signed-off-by: Jason Gunthorpe <jgunthorpe@obsidianresearch.com>
Signed-off-by: Doug Ledford <dledford@redhat.com>
Signed-off-by: Sasha Levin <alexander.levin@verizon.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
cd083d5bca
commit
f4fcc56632
@@ -170,9 +170,9 @@ struct rvt_mmap_info *rvt_create_mmap_info(struct rvt_dev_info *rdi,
|
||||
|
||||
spin_lock_irq(&rdi->mmap_offset_lock);
|
||||
if (rdi->mmap_offset == 0)
|
||||
rdi->mmap_offset = PAGE_SIZE;
|
||||
rdi->mmap_offset = ALIGN(PAGE_SIZE, SHMLBA);
|
||||
ip->offset = rdi->mmap_offset;
|
||||
rdi->mmap_offset += size;
|
||||
rdi->mmap_offset += ALIGN(size, SHMLBA);
|
||||
spin_unlock_irq(&rdi->mmap_offset_lock);
|
||||
|
||||
INIT_LIST_HEAD(&ip->pending_mmaps);
|
||||
|
||||
@@ -156,10 +156,10 @@ struct rxe_mmap_info *rxe_create_mmap_info(struct rxe_dev *rxe,
|
||||
spin_lock_bh(&rxe->mmap_offset_lock);
|
||||
|
||||
if (rxe->mmap_offset == 0)
|
||||
rxe->mmap_offset = PAGE_SIZE;
|
||||
rxe->mmap_offset = ALIGN(PAGE_SIZE, SHMLBA);
|
||||
|
||||
ip->info.offset = rxe->mmap_offset;
|
||||
rxe->mmap_offset += size;
|
||||
rxe->mmap_offset += ALIGN(size, SHMLBA);
|
||||
|
||||
spin_unlock_bh(&rxe->mmap_offset_lock);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user