mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-13 14:04:05 +08:00
sparc64: define untagged_addr()
Add a helper to untag a user pointer. This is needed for ADI support in get_user_pages_fast. Link: http://lkml.kernel.org/r/20190625143715.1689-9-hch@lst.de Signed-off-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Khalid Aziz <khalid.aziz@oracle.com> Cc: David Miller <davem@davemloft.net> Cc: Andrey Konovalov <andreyknvl@google.com> Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org> Cc: James Hogan <jhogan@kernel.org> Cc: Jason Gunthorpe <jgg@mellanox.com> Cc: Michael Ellerman <mpe@ellerman.id.au> Cc: Nicholas Piggin <npiggin@gmail.com> Cc: Paul Burton <paul.burton@mips.com> Cc: Paul Mackerras <paulus@samba.org> Cc: Ralf Baechle <ralf@linux-mips.org> Cc: Rich Felker <dalias@libc.org> Cc: Yoshinori Sato <ysato@users.sourceforge.jp> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
d85507901f
commit
5875509d2f
@ -1078,6 +1078,28 @@ static inline int io_remap_pfn_range(struct vm_area_struct *vma,
|
||||
}
|
||||
#define io_remap_pfn_range io_remap_pfn_range
|
||||
|
||||
static inline unsigned long untagged_addr(unsigned long start)
|
||||
{
|
||||
if (adi_capable()) {
|
||||
long addr = start;
|
||||
|
||||
/* If userspace has passed a versioned address, kernel
|
||||
* will not find it in the VMAs since it does not store
|
||||
* the version tags in the list of VMAs. Storing version
|
||||
* tags in list of VMAs is impractical since they can be
|
||||
* changed any time from userspace without dropping into
|
||||
* kernel. Any address search in VMAs will be done with
|
||||
* non-versioned addresses. Ensure the ADI version bits
|
||||
* are dropped here by sign extending the last bit before
|
||||
* ADI bits. IOMMU does not implement version tags.
|
||||
*/
|
||||
return (addr << (long)adi_nbits()) >> (long)adi_nbits();
|
||||
}
|
||||
|
||||
return start;
|
||||
}
|
||||
#define untagged_addr untagged_addr
|
||||
|
||||
#include <asm/tlbflush.h>
|
||||
#include <asm-generic/pgtable.h>
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user