[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