From: Christoph Hellwig <hch@lst.de> To: Andrew Morton <akpm@linux-foundation.org>, Jani Nikula <jani.nikula@linux.intel.com>, Joonas Lahtinen <joonas.lahtinen@linux.intel.com>, Rodrigo Vivi <rodrigo.vivi@intel.com> Cc: Chris Wilson <chris@chris-wilson.co.uk>, Daniel Vetter <daniel.vetter@ffwll.ch>, Peter Zijlstra <peterz@infradead.org>, intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org, linux-mm@kvack.org Subject: [PATCH 2/4] mm: add a io_mapping_map_user helper Date: Fri, 26 Mar 2021 06:55:03 +0100 [thread overview] Message-ID: <20210326055505.1424432-3-hch@lst.de> (raw) In-Reply-To: <20210326055505.1424432-1-hch@lst.de> Add a helper that calls remap_pfn_range for an struct io_mapping, relying on the pgprot pre-validation done when creating the mapping instead of doing it at runtime. Signed-off-by: Christoph Hellwig <hch@lst.de> --- include/linux/io-mapping.h | 3 +++ mm/Kconfig | 3 +++ mm/Makefile | 1 + mm/io-mapping.c | 29 +++++++++++++++++++++++++++++ 4 files changed, 36 insertions(+) create mode 100644 mm/io-mapping.c diff --git a/include/linux/io-mapping.h b/include/linux/io-mapping.h index c093e81310a9b3..e9743cfd858527 100644 --- a/include/linux/io-mapping.h +++ b/include/linux/io-mapping.h @@ -220,3 +220,6 @@ io_mapping_free(struct io_mapping *iomap) } #endif /* _LINUX_IO_MAPPING_H */ + +int io_mapping_map_user(struct io_mapping *iomap, struct vm_area_struct *vma, + unsigned long addr, unsigned long pfn, unsigned long size); diff --git a/mm/Kconfig b/mm/Kconfig index 24c045b24b9506..6b0f2cfbfac0f3 100644 --- a/mm/Kconfig +++ b/mm/Kconfig @@ -872,4 +872,7 @@ config MAPPING_DIRTY_HELPERS config KMAP_LOCAL bool +# struct io_mapping based helper. Selected by drivers that need them +config IO_MAPPING + bool endmenu diff --git a/mm/Makefile b/mm/Makefile index 72227b24a61688..c0135e385984bb 100644 --- a/mm/Makefile +++ b/mm/Makefile @@ -120,3 +120,4 @@ obj-$(CONFIG_MEMFD_CREATE) += memfd.o obj-$(CONFIG_MAPPING_DIRTY_HELPERS) += mapping_dirty_helpers.o obj-$(CONFIG_PTDUMP_CORE) += ptdump.o obj-$(CONFIG_PAGE_REPORTING) += page_reporting.o +obj-$(CONFIG_IO_MAPPING) += io-mapping.o diff --git a/mm/io-mapping.c b/mm/io-mapping.c new file mode 100644 index 00000000000000..01b3627999304e --- /dev/null +++ b/mm/io-mapping.c @@ -0,0 +1,29 @@ +// SPDX-License-Identifier: GPL-2.0-only + +#include <linux/mm.h> +#include <linux/io-mapping.h> + +/** + * io_mapping_map_user - remap an I/O mapping to userspace + * @iomap: the source io_mapping + * @vma: user vma to map to + * @addr: target user address to start at + * @pfn: physical address of kernel memory + * @size: size of map area + * + * Note: this is only safe if the mm semaphore is held when called. + */ +int io_mapping_map_user(struct io_mapping *iomap, struct vm_area_struct *vma, + unsigned long addr, unsigned long pfn, unsigned long size) +{ + vm_flags_t expected_flags = VM_PFNMAP | VM_DONTEXPAND | VM_DONTDUMP; + + if (WARN_ON_ONCE((vma->vm_flags & expected_flags) != expected_flags)) + return -EINVAL; + + /* We rely on prevalidation of the io-mapping to skip track_pfn(). */ + return remap_pfn_range_notrack(vma, addr, pfn, size, + __pgprot((pgprot_val(iomap->prot) & _PAGE_CACHE_MASK) | + (pgprot_val(vma->vm_page_prot) & ~_PAGE_CACHE_MASK))); +} +EXPORT_SYMBOL_GPL(io_mapping_map_user); -- 2.30.1
WARNING: multiple messages have this Message-ID (diff)
From: Christoph Hellwig <hch@lst.de> To: Andrew Morton <akpm@linux-foundation.org>, Jani Nikula <jani.nikula@linux.intel.com>, Joonas Lahtinen <joonas.lahtinen@linux.intel.com>, Rodrigo Vivi <rodrigo.vivi@intel.com> Cc: Peter Zijlstra <peterz@infradead.org>, Daniel Vetter <daniel.vetter@ffwll.ch>, intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org, Chris Wilson <chris@chris-wilson.co.uk>, linux-mm@kvack.org Subject: [Intel-gfx] [PATCH 2/4] mm: add a io_mapping_map_user helper Date: Fri, 26 Mar 2021 06:55:03 +0100 [thread overview] Message-ID: <20210326055505.1424432-3-hch@lst.de> (raw) In-Reply-To: <20210326055505.1424432-1-hch@lst.de> Add a helper that calls remap_pfn_range for an struct io_mapping, relying on the pgprot pre-validation done when creating the mapping instead of doing it at runtime. Signed-off-by: Christoph Hellwig <hch@lst.de> --- include/linux/io-mapping.h | 3 +++ mm/Kconfig | 3 +++ mm/Makefile | 1 + mm/io-mapping.c | 29 +++++++++++++++++++++++++++++ 4 files changed, 36 insertions(+) create mode 100644 mm/io-mapping.c diff --git a/include/linux/io-mapping.h b/include/linux/io-mapping.h index c093e81310a9b3..e9743cfd858527 100644 --- a/include/linux/io-mapping.h +++ b/include/linux/io-mapping.h @@ -220,3 +220,6 @@ io_mapping_free(struct io_mapping *iomap) } #endif /* _LINUX_IO_MAPPING_H */ + +int io_mapping_map_user(struct io_mapping *iomap, struct vm_area_struct *vma, + unsigned long addr, unsigned long pfn, unsigned long size); diff --git a/mm/Kconfig b/mm/Kconfig index 24c045b24b9506..6b0f2cfbfac0f3 100644 --- a/mm/Kconfig +++ b/mm/Kconfig @@ -872,4 +872,7 @@ config MAPPING_DIRTY_HELPERS config KMAP_LOCAL bool +# struct io_mapping based helper. Selected by drivers that need them +config IO_MAPPING + bool endmenu diff --git a/mm/Makefile b/mm/Makefile index 72227b24a61688..c0135e385984bb 100644 --- a/mm/Makefile +++ b/mm/Makefile @@ -120,3 +120,4 @@ obj-$(CONFIG_MEMFD_CREATE) += memfd.o obj-$(CONFIG_MAPPING_DIRTY_HELPERS) += mapping_dirty_helpers.o obj-$(CONFIG_PTDUMP_CORE) += ptdump.o obj-$(CONFIG_PAGE_REPORTING) += page_reporting.o +obj-$(CONFIG_IO_MAPPING) += io-mapping.o diff --git a/mm/io-mapping.c b/mm/io-mapping.c new file mode 100644 index 00000000000000..01b3627999304e --- /dev/null +++ b/mm/io-mapping.c @@ -0,0 +1,29 @@ +// SPDX-License-Identifier: GPL-2.0-only + +#include <linux/mm.h> +#include <linux/io-mapping.h> + +/** + * io_mapping_map_user - remap an I/O mapping to userspace + * @iomap: the source io_mapping + * @vma: user vma to map to + * @addr: target user address to start at + * @pfn: physical address of kernel memory + * @size: size of map area + * + * Note: this is only safe if the mm semaphore is held when called. + */ +int io_mapping_map_user(struct io_mapping *iomap, struct vm_area_struct *vma, + unsigned long addr, unsigned long pfn, unsigned long size) +{ + vm_flags_t expected_flags = VM_PFNMAP | VM_DONTEXPAND | VM_DONTDUMP; + + if (WARN_ON_ONCE((vma->vm_flags & expected_flags) != expected_flags)) + return -EINVAL; + + /* We rely on prevalidation of the io-mapping to skip track_pfn(). */ + return remap_pfn_range_notrack(vma, addr, pfn, size, + __pgprot((pgprot_val(iomap->prot) & _PAGE_CACHE_MASK) | + (pgprot_val(vma->vm_page_prot) & ~_PAGE_CACHE_MASK))); +} +EXPORT_SYMBOL_GPL(io_mapping_map_user); -- 2.30.1 _______________________________________________ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/intel-gfx
next prev parent reply other threads:[~2021-03-26 5:55 UTC|newest] Thread overview: 63+ messages / expand[flat|nested] mbox.gz Atom feed top 2021-03-26 5:55 add remap_pfn_range_notrack instead of reinventing it in i915 v2 Christoph Hellwig 2021-03-26 5:55 ` [Intel-gfx] " Christoph Hellwig 2021-03-26 5:55 ` [PATCH 1/4] mm: add remap_pfn_range_notrack Christoph Hellwig 2021-03-26 5:55 ` [Intel-gfx] " Christoph Hellwig 2021-03-26 5:55 ` Christoph Hellwig [this message] 2021-03-26 5:55 ` [Intel-gfx] [PATCH 2/4] mm: add a io_mapping_map_user helper Christoph Hellwig 2021-10-20 15:40 ` Lucas De Marchi 2021-10-20 19:37 ` Peter Zijlstra 2021-10-21 6:18 ` Christoph Hellwig 2021-03-26 5:55 ` [PATCH 3/4] i915: use io_mapping_map_user Christoph Hellwig 2021-03-26 5:55 ` [Intel-gfx] " Christoph Hellwig 2021-03-26 5:55 ` [PATCH 4/4] i915: fix remap_io_sg to verify the pgprot Christoph Hellwig 2021-03-26 5:55 ` [Intel-gfx] " Christoph Hellwig 2021-05-08 19:33 ` youling257 2021-05-08 19:33 ` youling257 2021-05-08 19:33 ` youling257 2021-05-10 8:58 ` Christoph Hellwig 2021-05-10 8:58 ` Christoph Hellwig 2021-05-16 16:06 ` Serge Belyshev 2021-05-16 16:06 ` [Intel-gfx] " Serge Belyshev 2021-05-16 16:06 ` Serge Belyshev 2021-05-17 12:37 ` Christoph Hellwig 2021-05-17 12:37 ` [Intel-gfx] " Christoph Hellwig 2021-05-17 13:09 ` Serge Belyshev 2021-05-17 13:09 ` [Intel-gfx] " Serge Belyshev 2021-05-17 13:09 ` Serge Belyshev 2021-05-17 13:11 ` Christoph Hellwig 2021-05-17 13:11 ` [Intel-gfx] " Christoph Hellwig 2021-05-17 17:06 ` Matthew Auld 2021-05-17 17:06 ` Matthew Auld 2021-05-17 17:06 ` Matthew Auld 2021-05-18 13:21 ` Christoph Hellwig 2021-05-18 13:21 ` Christoph Hellwig 2021-05-18 15:00 ` Matthew Auld 2021-05-18 15:00 ` Matthew Auld 2021-05-18 15:00 ` Matthew Auld 2021-05-19 5:46 ` Thomas Hellström (Intel) 2021-05-19 5:46 ` Thomas Hellström (Intel) 2021-05-17 21:46 ` Thomas Hellström 2021-05-17 21:46 ` Thomas Hellström 2021-05-17 21:46 ` Thomas Hellström 2021-05-18 6:46 ` Thomas Hellström 2021-05-18 6:46 ` Thomas Hellström 2021-05-18 6:46 ` Thomas Hellström 2021-05-18 13:24 ` Christoph Hellwig 2021-05-18 13:24 ` Christoph Hellwig 2021-05-18 13:33 ` Thomas Hellström 2021-05-18 13:33 ` Thomas Hellström 2021-05-18 13:33 ` Thomas Hellström 2021-05-18 13:23 ` Christoph Hellwig 2021-05-18 13:23 ` Christoph Hellwig 2021-05-19 5:51 ` Thomas Hellström 2021-05-19 5:51 ` Thomas Hellström 2021-05-19 5:51 ` Thomas Hellström 2021-03-26 7:28 ` [Intel-gfx] ✗ Fi.CI.CHECKPATCH: warning for series starting with [1/4] mm: add remap_pfn_range_notrack Patchwork 2021-03-26 7:31 ` [Intel-gfx] ✗ Fi.CI.SPARSE: " Patchwork 2021-03-26 7:34 ` [Intel-gfx] ✗ Fi.CI.DOCS: " Patchwork 2021-03-26 7:59 ` [Intel-gfx] ✗ Fi.CI.BAT: failure " Patchwork 2021-04-08 10:36 ` add remap_pfn_range_notrack instead of reinventing it in i915 v2 Daniel Vetter 2021-04-08 10:36 ` [Intel-gfx] " Daniel Vetter 2021-04-08 10:36 ` Daniel Vetter 2021-04-08 11:28 ` Christoph Hellwig 2021-04-08 11:28 ` [Intel-gfx] " Christoph Hellwig
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20210326055505.1424432-3-hch@lst.de \ --to=hch@lst.de \ --cc=akpm@linux-foundation.org \ --cc=chris@chris-wilson.co.uk \ --cc=daniel.vetter@ffwll.ch \ --cc=dri-devel@lists.freedesktop.org \ --cc=intel-gfx@lists.freedesktop.org \ --cc=jani.nikula@linux.intel.com \ --cc=joonas.lahtinen@linux.intel.com \ --cc=linux-mm@kvack.org \ --cc=peterz@infradead.org \ --cc=rodrigo.vivi@intel.com \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.