All of lore.kernel.org
 help / color / mirror / Atom feed
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

  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: link
Be 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.