[RFC 2/6] udmabuf: add ability to set access flags on udmabuf

Gurchetan Singh gurchetansingh at chromium.org
Thu Aug 1 02:25:13 UTC 2019


The main use for udmabuf is sending guest memory pages
to the host.

It's generally a bad idea to have to separate mappings with
different attributes. For example, a WC mapping the guest
kernel and cached mapping on the host is problematic.

Add creation time flags so the user has responsibility for
the specific use case.

Signed-off-by: Gurchetan Singh <gurchetansingh at chromium.org>
---
 drivers/dma-buf/udmabuf.c    | 7 ++++++-
 include/uapi/linux/udmabuf.h | 5 ++++-
 2 files changed, 10 insertions(+), 2 deletions(-)

diff --git a/drivers/dma-buf/udmabuf.c b/drivers/dma-buf/udmabuf.c
index b345e91d831a..4ecf2a94fed3 100644
--- a/drivers/dma-buf/udmabuf.c
+++ b/drivers/dma-buf/udmabuf.c
@@ -186,7 +186,12 @@ static long udmabuf_create(const struct udmabuf_create_list *head,
 	exp_info.ops  = &udmabuf_ops;
 	exp_info.size = ubuf->pagecount << PAGE_SHIFT;
 	exp_info.priv = ubuf;
-	exp_info.flags = O_RDWR;
+
+	if ((head->flags & UDMABUF_FLAGS_PROT_READ) &&
+	    (head->flags & UDMABUF_FLAGS_PROT_WRITE))
+		exp_info.flags = O_RDWR;
+	else if (head->flags & UDMABUF_FLAGS_PROT_WRITE)
+		exp_info.flags = O_WRONLY;
 
 	buf = dma_buf_export(&exp_info);
 	if (IS_ERR(buf)) {
diff --git a/include/uapi/linux/udmabuf.h b/include/uapi/linux/udmabuf.h
index 46b6532ed855..21290cb9696c 100644
--- a/include/uapi/linux/udmabuf.h
+++ b/include/uapi/linux/udmabuf.h
@@ -5,7 +5,10 @@
 #include <linux/types.h>
 #include <linux/ioctl.h>
 
-#define UDMABUF_FLAGS_CLOEXEC	0x01
+#define UDMABUF_FLAGS_CLOEXEC    0x01
+#define UDMABUF_FLAGS_PROT_NONE  0x02
+#define UDMABUF_FLAGS_PROT_READ  0x04
+#define UDMABUF_FLAGS_PROT_WRITE 0x08
 
 struct udmabuf_create {
 	__u32 memfd;
-- 
2.17.1



More information about the dri-devel mailing list