All of lore.kernel.org
 help / color / mirror / Atom feed
From: Oleksandr Andrushchenko <andr2000@gmail.com>
To: xen-devel@lists.xenproject.org, linux-kernel@vger.kernel.org,
	dri-devel@lists.freedesktop.org, linux-media@vger.kernel.org,
	jgross@suse.com, boris.ostrovsky@oracle.com,
	konrad.wilk@oracle.com
Cc: daniel.vetter@intel.com, andr2000@gmail.com,
	dongwon.kim@intel.com, matthew.d.roper@intel.com,
	Oleksandr Andrushchenko <oleksandr_andrushchenko@epam.com>
Subject: [PATCH v2 9/9] xen/gntdev: Expose gntdev's dma-buf API for in-kernel use
Date: Fri,  1 Jun 2018 14:41:32 +0300	[thread overview]
Message-ID: <20180601114132.22596-10-andr2000@gmail.com> (raw)
In-Reply-To: <20180601114132.22596-1-andr2000@gmail.com>

From: Oleksandr Andrushchenko <oleksandr_andrushchenko@epam.com>

Allow creating grant device context for use by kernel modules which
require functionality, provided by gntdev. Export symbols for dma-buf
API provided by the module.

Signed-off-by: Oleksandr Andrushchenko <oleksandr_andrushchenko@epam.com>
---
 drivers/xen/gntdev-dmabuf.c |  6 +++
 drivers/xen/gntdev.c        | 92 +++++++++++++++++++++++--------------
 include/xen/grant_dev.h     | 37 +++++++++++++++
 3 files changed, 101 insertions(+), 34 deletions(-)
 create mode 100644 include/xen/grant_dev.h

diff --git a/drivers/xen/gntdev-dmabuf.c b/drivers/xen/gntdev-dmabuf.c
index b5569a220f03..3890ac9dfab6 100644
--- a/drivers/xen/gntdev-dmabuf.c
+++ b/drivers/xen/gntdev-dmabuf.c
@@ -196,6 +196,7 @@ int gntdev_dmabuf_exp_wait_released(struct gntdev_dmabuf_priv *priv, int fd,
 	dmabuf_exp_wait_obj_free(priv, obj);
 	return ret;
 }
+EXPORT_SYMBOL_GPL(gntdev_dmabuf_exp_wait_released);
 
 /* ------------------------------------------------------------------ */
 /* DMA buffer export support.                                         */
@@ -621,6 +622,7 @@ gntdev_dmabuf_imp_to_refs(struct gntdev_dmabuf_priv *priv, struct device *dev,
 	dma_buf_put(dma_buf);
 	return ret;
 }
+EXPORT_SYMBOL_GPL(gntdev_dmabuf_imp_to_refs);
 
 u32 *gntdev_dmabuf_imp_get_refs(struct gntdev_dmabuf *gntdev_dmabuf)
 {
@@ -629,6 +631,7 @@ u32 *gntdev_dmabuf_imp_get_refs(struct gntdev_dmabuf *gntdev_dmabuf)
 
 	return NULL;
 }
+EXPORT_SYMBOL_GPL(gntdev_dmabuf_imp_get_refs);
 
 /*
  * Find the hyper dma-buf by its file descriptor and remove
@@ -678,6 +681,7 @@ int gntdev_dmabuf_imp_release(struct gntdev_dmabuf_priv *priv, u32 fd)
 	dmabuf_imp_free_storage(gntdev_dmabuf);
 	return 0;
 }
+EXPORT_SYMBOL_GPL(gntdev_dmabuf_imp_release);
 
 struct gntdev_dmabuf_priv *gntdev_dmabuf_init(void)
 {
@@ -694,8 +698,10 @@ struct gntdev_dmabuf_priv *gntdev_dmabuf_init(void)
 
 	return priv;
 }
+EXPORT_SYMBOL_GPL(gntdev_dmabuf_init);
 
 void gntdev_dmabuf_fini(struct gntdev_dmabuf_priv *priv)
 {
 	kfree(priv);
 }
+EXPORT_SYMBOL_GPL(gntdev_dmabuf_fini);
diff --git a/drivers/xen/gntdev.c b/drivers/xen/gntdev.c
index cf255d45f20f..63902f5298c9 100644
--- a/drivers/xen/gntdev.c
+++ b/drivers/xen/gntdev.c
@@ -621,14 +621,37 @@ static const struct mmu_notifier_ops gntdev_mmu_ops = {
 
 /* ------------------------------------------------------------------ */
 
-static int gntdev_open(struct inode *inode, struct file *flip)
+void gntdev_free_context(struct gntdev_priv *priv)
+{
+	struct grant_map *map;
+
+	pr_debug("priv %p\n", priv);
+
+	mutex_lock(&priv->lock);
+	while (!list_empty(&priv->maps)) {
+		map = list_entry(priv->maps.next, struct grant_map, next);
+		list_del(&map->next);
+		gntdev_put_map(NULL /* already removed */, map);
+	}
+	WARN_ON(!list_empty(&priv->freeable_maps));
+
+	mutex_unlock(&priv->lock);
+
+#ifdef CONFIG_XEN_GNTDEV_DMABUF
+	gntdev_dmabuf_fini(priv->dmabuf_priv);
+#endif
+
+	kfree(priv);
+}
+EXPORT_SYMBOL_GPL(gntdev_free_context);
+
+struct gntdev_priv *gntdev_alloc_context(struct device *dev)
 {
 	struct gntdev_priv *priv;
-	int ret = 0;
 
 	priv = kzalloc(sizeof(*priv), GFP_KERNEL);
 	if (!priv)
-		return -ENOMEM;
+		return ERR_PTR(-ENOMEM);
 
 	INIT_LIST_HEAD(&priv->maps);
 	INIT_LIST_HEAD(&priv->freeable_maps);
@@ -637,12 +660,40 @@ static int gntdev_open(struct inode *inode, struct file *flip)
 #ifdef CONFIG_XEN_GNTDEV_DMABUF
 	priv->dmabuf_priv = gntdev_dmabuf_init();
 	if (IS_ERR(priv->dmabuf_priv)) {
-		ret = PTR_ERR(priv->dmabuf_priv);
+		struct gntdev_priv *ret;
+
+		ret = ERR_CAST(priv->dmabuf_priv);
 		kfree(priv);
 		return ret;
 	}
 #endif
 
+#ifdef CONFIG_XEN_GRANT_DMA_ALLOC
+	priv->dma_dev = dev;
+
+	/*
+	 * The device is not spawn from a device tree, so arch_setup_dma_ops
+	 * is not called, thus leaving the device with dummy DMA ops.
+	 * Fix this call of_dma_configure() with a NULL node to set
+	 * default DMA ops.
+	 */
+	of_dma_configure(priv->dma_dev, NULL);
+#endif
+	pr_debug("priv %p\n", priv);
+
+	return priv;
+}
+EXPORT_SYMBOL_GPL(gntdev_alloc_context);
+
+static int gntdev_open(struct inode *inode, struct file *flip)
+{
+	struct gntdev_priv *priv;
+	int ret = 0;
+
+	priv = gntdev_alloc_context(gntdev_miscdev.this_device);
+	if (IS_ERR(priv))
+		return PTR_ERR(priv);
+
 	if (use_ptemod) {
 		priv->mm = get_task_mm(current);
 		if (!priv->mm) {
@@ -655,23 +706,11 @@ static int gntdev_open(struct inode *inode, struct file *flip)
 	}
 
 	if (ret) {
-		kfree(priv);
+		gntdev_free_context(priv);
 		return ret;
 	}
 
 	flip->private_data = priv;
-#ifdef CONFIG_XEN_GRANT_DMA_ALLOC
-	priv->dma_dev = gntdev_miscdev.this_device;
-
-	/*
-	 * The device is not spawn from a device tree, so arch_setup_dma_ops
-	 * is not called, thus leaving the device with dummy DMA ops.
-	 * Fix this call of_dma_configure() with a NULL node to set
-	 * default DMA ops.
-	 */
-	of_dma_configure(priv->dma_dev, NULL);
-#endif
-	pr_debug("priv %p\n", priv);
 
 	return 0;
 }
@@ -679,27 +718,11 @@ static int gntdev_open(struct inode *inode, struct file *flip)
 static int gntdev_release(struct inode *inode, struct file *flip)
 {
 	struct gntdev_priv *priv = flip->private_data;
-	struct grant_map *map;
-
-	pr_debug("priv %p\n", priv);
-
-	mutex_lock(&priv->lock);
-	while (!list_empty(&priv->maps)) {
-		map = list_entry(priv->maps.next, struct grant_map, next);
-		list_del(&map->next);
-		gntdev_put_map(NULL /* already removed */, map);
-	}
-	WARN_ON(!list_empty(&priv->freeable_maps));
-	mutex_unlock(&priv->lock);
-
-#ifdef CONFIG_XEN_GNTDEV_DMABUF
-	gntdev_dmabuf_fini(priv->dmabuf_priv);
-#endif
 
 	if (use_ptemod)
 		mmu_notifier_unregister(&priv->mn, priv->mm);
 
-	kfree(priv);
+	gntdev_free_context(priv);
 	return 0;
 }
 
@@ -1156,6 +1179,7 @@ int gntdev_dmabuf_exp_from_refs(struct gntdev_priv *priv, int flags,
 	gntdev_remove_map(priv, map);
 	return ret;
 }
+EXPORT_SYMBOL_GPL(gntdev_dmabuf_exp_from_refs);
 
 /* ------------------------------------------------------------------ */
 /* DMA buffer IOCTL support.                                          */
diff --git a/include/xen/grant_dev.h b/include/xen/grant_dev.h
new file mode 100644
index 000000000000..b7d0abd1ab16
--- /dev/null
+++ b/include/xen/grant_dev.h
@@ -0,0 +1,37 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+
+/*
+ * Grant device kernel API
+ *
+ * Copyright (C) 2018 EPAM Systems Inc.
+ *
+ * Author: Oleksandr Andrushchenko <oleksandr_andrushchenko@epam.com>
+ */
+
+#ifndef _GRANT_DEV_H
+#define _GRANT_DEV_H
+
+#include <linux/types.h>
+
+struct device;
+struct gntdev_priv;
+#ifdef CONFIG_XEN_GNTDEV_DMABUF
+struct xen_dmabuf;
+#endif
+
+struct gntdev_priv *gntdev_alloc_context(struct device *dev);
+void gntdev_free_context(struct gntdev_priv *priv);
+
+#ifdef CONFIG_XEN_GNTDEV_DMABUF
+int gntdev_dmabuf_exp_from_refs(struct gntdev_priv *priv, int flags,
+				int count, u32 domid, u32 *refs, u32 *fd);
+int gntdev_dmabuf_exp_wait_released(struct gntdev_priv *priv, int fd,
+				    int wait_to_ms);
+
+struct xen_dmabuf *gntdev_dmabuf_imp_to_refs(struct gntdev_priv *priv,
+					     int fd, int count, int domid);
+u32 *gntdev_dmabuf_imp_get_refs(struct xen_dmabuf *xen_dmabuf);
+int gntdev_dmabuf_imp_release(struct gntdev_priv *priv, u32 fd);
+#endif
+
+#endif
-- 
2.17.0

  parent reply	other threads:[~2018-06-01 11:41 UTC|newest]

Thread overview: 135+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-06-01 11:41 [PATCH v2 0/9] xen: dma-buf support for grant device Oleksandr Andrushchenko
2018-06-01 11:41 ` Oleksandr Andrushchenko
2018-06-01 11:41 ` [PATCH v2 1/9] xen/grant-table: Export gnttab_{alloc|free}_pages as GPL Oleksandr Andrushchenko
2018-06-01 11:41 ` Oleksandr Andrushchenko
2018-06-01 11:41   ` Oleksandr Andrushchenko
2018-06-04  9:27   ` Juergen Gross
2018-06-04  9:27   ` Juergen Gross
2018-06-19 13:04   ` Juergen Gross
2018-06-19 13:04   ` Juergen Gross
2018-06-01 11:41 ` [PATCH v2 2/9] xen/grant-table: Make set/clear page private code shared Oleksandr Andrushchenko
2018-06-01 11:41   ` Oleksandr Andrushchenko
2018-06-01 11:44   ` Oleksandr Andrushchenko
2018-06-01 11:44     ` Oleksandr Andrushchenko
2018-06-01 11:44   ` Oleksandr Andrushchenko
2018-06-04 15:43   ` Boris Ostrovsky
2018-06-04 15:43   ` Boris Ostrovsky
2018-06-01 11:41 ` Oleksandr Andrushchenko
2018-06-01 11:41 ` [PATCH v2 3/9] xen/balloon: Share common memory reservation routines Oleksandr Andrushchenko
2018-06-01 11:41 ` Oleksandr Andrushchenko
2018-06-01 11:41   ` Oleksandr Andrushchenko
2018-06-04 16:37   ` Boris Ostrovsky
2018-06-04 16:37   ` Boris Ostrovsky
2018-06-04 17:07     ` Oleksandr Andrushchenko
2018-06-04 17:07       ` Oleksandr Andrushchenko
2018-06-04 17:07     ` Oleksandr Andrushchenko
2018-06-06  7:24     ` Oleksandr Andrushchenko
2018-06-06  7:24     ` Oleksandr Andrushchenko
2018-06-06  7:24       ` Oleksandr Andrushchenko
2018-06-06 21:09       ` Boris Ostrovsky
2018-06-07  5:32         ` Oleksandr Andrushchenko
2018-06-07  5:32         ` Oleksandr Andrushchenko
2018-06-07  5:32           ` Oleksandr Andrushchenko
2018-06-06 21:09       ` Boris Ostrovsky
2018-06-01 11:41 ` [PATCH v2 4/9] xen/grant-table: Allow allocating buffers suitable for DMA Oleksandr Andrushchenko
2018-06-01 11:41 ` Oleksandr Andrushchenko
2018-06-01 11:41   ` Oleksandr Andrushchenko
2018-06-04 18:46   ` Boris Ostrovsky
2018-06-06  7:51     ` Oleksandr Andrushchenko
2018-06-06  7:51     ` Oleksandr Andrushchenko
2018-06-06  7:51       ` Oleksandr Andrushchenko
2018-06-04 18:46   ` Boris Ostrovsky
2018-06-01 11:41 ` [PATCH v2 5/9] xen/gntdev: Allow mappings for DMA buffers Oleksandr Andrushchenko
2018-06-01 11:41   ` Oleksandr Andrushchenko
2018-06-04 20:12   ` Boris Ostrovsky
2018-06-06  8:14     ` Oleksandr Andrushchenko
2018-06-06  8:14     ` [Xen-devel] " Oleksandr Andrushchenko
2018-06-06  8:14       ` Oleksandr Andrushchenko
2018-06-06 21:19       ` Boris Ostrovsky
2018-06-06 21:19       ` [Xen-devel] " Boris Ostrovsky
2018-06-07  6:39         ` Oleksandr Andrushchenko
2018-06-07  6:39         ` [Xen-devel] " Oleksandr Andrushchenko
2018-06-07  6:39           ` Oleksandr Andrushchenko
2018-06-07 21:46           ` Boris Ostrovsky
2018-06-07 21:46           ` [Xen-devel] " Boris Ostrovsky
2018-06-08 11:33             ` Oleksandr Andrushchenko
2018-06-08 17:59               ` Stefano Stabellini
2018-06-08 17:59                 ` Stefano Stabellini
2018-06-08 19:21                 ` Boris Ostrovsky
2018-06-11 13:13                   ` Oleksandr Andrushchenko
2018-06-11 13:13                     ` Oleksandr Andrushchenko
2018-06-11 16:51                     ` Stefano Stabellini
2018-06-11 16:51                     ` [Xen-devel] " Stefano Stabellini
2018-06-11 16:51                       ` Stefano Stabellini
2018-06-11 17:16                       ` Oleksandr Andrushchenko
2018-06-11 17:46                         ` Julien Grall
2018-06-11 17:49                           ` Oleksandr Andrushchenko
2018-06-11 17:56                             ` Julien Grall
2018-06-11 17:56                             ` Julien Grall
2018-06-11 17:49                           ` Oleksandr Andrushchenko
2018-06-11 17:46                         ` Julien Grall
2018-06-11 17:16                       ` Oleksandr Andrushchenko
2018-06-11 17:41                       ` Julien Grall
2018-06-11 17:41                       ` [Xen-devel] " Julien Grall
2018-06-11 13:13                   ` Oleksandr Andrushchenko
2018-06-08 19:21                 ` Boris Ostrovsky
2018-06-08 17:59               ` Stefano Stabellini
2018-06-08 11:33             ` Oleksandr Andrushchenko
2018-06-04 20:12   ` Boris Ostrovsky
2018-06-01 11:41 ` Oleksandr Andrushchenko
2018-06-01 11:41 ` [PATCH v2 6/9] xen/gntdev: Add initial support for dma-buf UAPI Oleksandr Andrushchenko
2018-06-04 20:49   ` Boris Ostrovsky
2018-06-06  9:06     ` Oleksandr Andrushchenko
2018-06-06  9:06     ` Oleksandr Andrushchenko
2018-06-06  9:06       ` Oleksandr Andrushchenko
2018-06-06 21:32       ` Boris Ostrovsky
2018-06-06 21:32       ` Boris Ostrovsky
2018-06-07  7:17         ` Oleksandr Andrushchenko
2018-06-07  7:17         ` Oleksandr Andrushchenko
2018-06-07 22:26           ` Boris Ostrovsky
2018-06-07 22:26           ` Boris Ostrovsky
2018-06-08 11:38             ` Oleksandr Andrushchenko
2018-06-08 11:38               ` Oleksandr Andrushchenko
2018-06-08 11:38             ` Oleksandr Andrushchenko
2018-06-04 20:49   ` Boris Ostrovsky
2018-06-01 11:41 ` Oleksandr Andrushchenko
2018-06-01 11:41 ` [PATCH v2 7/9] xen/gntdev: Implement dma-buf export functionality Oleksandr Andrushchenko
2018-06-01 11:41   ` Oleksandr Andrushchenko
2018-06-04 22:07   ` Boris Ostrovsky
2018-06-04 22:07   ` Boris Ostrovsky
2018-06-06 12:10     ` Oleksandr Andrushchenko
2018-06-06 12:10     ` Oleksandr Andrushchenko
2018-06-06 12:10       ` Oleksandr Andrushchenko
2018-06-06 21:48       ` Boris Ostrovsky
2018-06-07  8:44         ` Oleksandr Andrushchenko
2018-06-07  8:44         ` Oleksandr Andrushchenko
2018-06-07  8:44           ` Oleksandr Andrushchenko
2018-06-07 22:30           ` Boris Ostrovsky
2018-06-07 22:30           ` Boris Ostrovsky
2018-06-08 11:34             ` Oleksandr Andrushchenko
2018-06-08 11:34             ` Oleksandr Andrushchenko
2018-06-08 11:34               ` Oleksandr Andrushchenko
2018-06-06 21:48       ` Boris Ostrovsky
2018-06-01 11:41 ` Oleksandr Andrushchenko
2018-06-01 11:41 ` [PATCH v2 8/9] xen/gntdev: Implement dma-buf import functionality Oleksandr Andrushchenko
2018-06-01 11:41 ` Oleksandr Andrushchenko
2018-06-01 11:41   ` Oleksandr Andrushchenko
2018-06-04 22:28   ` Boris Ostrovsky
2018-06-04 22:28   ` Boris Ostrovsky
2018-06-06 12:38     ` Oleksandr Andrushchenko
2018-06-06 12:38     ` Oleksandr Andrushchenko
2018-06-01 11:41 ` Oleksandr Andrushchenko [this message]
2018-06-04 22:36   ` [PATCH v2 9/9] xen/gntdev: Expose gntdev's dma-buf API for in-kernel use Boris Ostrovsky
2018-06-04 22:36   ` Boris Ostrovsky
2018-06-06 12:46     ` Oleksandr Andrushchenko
2018-06-06 12:46       ` Oleksandr Andrushchenko
2018-06-06 21:51       ` Boris Ostrovsky
2018-06-06 21:51       ` [Xen-devel] " Boris Ostrovsky
2018-06-06 22:05         ` Dongwon Kim
2018-06-06 22:05         ` [Xen-devel] " Dongwon Kim
2018-06-06 22:05           ` Dongwon Kim
2018-06-07  7:33           ` Oleksandr Andrushchenko
2018-06-07  7:33           ` [Xen-devel] " Oleksandr Andrushchenko
2018-06-07  7:33             ` Oleksandr Andrushchenko
2018-06-06 12:46     ` Oleksandr Andrushchenko
2018-06-01 11:41 ` Oleksandr Andrushchenko

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=20180601114132.22596-10-andr2000@gmail.com \
    --to=andr2000@gmail.com \
    --cc=boris.ostrovsky@oracle.com \
    --cc=daniel.vetter@intel.com \
    --cc=dongwon.kim@intel.com \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=jgross@suse.com \
    --cc=konrad.wilk@oracle.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-media@vger.kernel.org \
    --cc=matthew.d.roper@intel.com \
    --cc=oleksandr_andrushchenko@epam.com \
    --cc=xen-devel@lists.xenproject.org \
    /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.