Re: [PATCH] drm/xen-front: Remove CMA support

From: Oleksandr Andrushchenko
Date: Wed Apr 18 2018 - 03:27:29 EST


On 04/17/2018 12:08 PM, Oleksandr Andrushchenko wrote:
On 04/17/2018 12:04 PM, Daniel Vetter wrote:
On Tue, Apr 17, 2018 at 10:40:12AM +0300, Oleksandr Andrushchenko wrote:
From: Oleksandr Andrushchenko <oleksandr_andrushchenko@xxxxxxxx>

Even if xen-front allocates its buffers from contiguous memory
those are still not contiguous in PA space, e.g. the buffer is only
contiguous in IPA space.
The only use-case for this mode was if xen-front is used to allocate
dumb buffers which later be used by some other driver requiring
contiguous memory, but there is no currently such a use-case or
it can be worked around with xen-front.
Please also mention the nents confusion here, and the patch that fixes it.
Or just outright take the commit message from my patch with all the
details:
ok, if you don't mind then I'll use your commit message entirely
ÂÂÂÂ drm/xen: Dissable CMA support
ÂÂÂÂ ÂÂÂÂ It turns out this was only needed to paper over a bug in the CMA
ÂÂÂÂ helpers, which was addressed in
ÂÂÂÂ ÂÂÂÂ commit 998fb1a0f478b83492220ff79583bf9ad538bdd8
ÂÂÂÂ Author: Liviu Dudau <Liviu.Dudau@xxxxxxx>
ÂÂÂÂ Date:ÂÂ Fri Nov 10 13:33:10 2017 +0000
ÂÂÂÂ ÂÂÂÂÂÂÂÂ drm: gem_cma_helper.c: Allow importing of contiguous scatterlists with nents > 1
ÂÂÂÂ ÂÂÂÂ Without this the following pipeline didn't work:
ÂÂÂÂ ÂÂÂÂ domU:
ÂÂÂÂ 1. xen-front allocates a non-contig buffer
ÂÂÂÂ 2. creates grants out of it
ÂÂÂÂ ÂÂÂÂ dom0:
ÂÂÂÂ 3. converts the grants into a dma-buf. Since they're non-contig, the
ÂÂÂÂ scatter-list is huge.
ÂÂÂÂ 4. imports it into rcar-du, which requires dma-contig memory for
ÂÂÂÂ scanout.
ÂÂÂÂ ÂÂÂÂ -> On this given platform there's an IOMMU, so in theory this should
ÂÂÂÂ work. But in practice this failed, because of the huge number of sg
ÂÂÂÂ entries, even though the IOMMU driver mapped it all into a dma-contig
ÂÂÂÂ range.
ÂÂÂÂ ÂÂÂÂ With a guest-contig buffer allocated in step 1, this problem doesn't
ÂÂÂÂ exist. But there's technically no reason to require guest-contig
ÂÂÂÂ memory for xen buffer sharing using grants.

With the commit message improved:

Acked-by: Daniel Vetter <daniel.vetter@xxxxxxxx>
Thank you,
I'll wait for a day and apply to drm-misc-next if this is ok
applied to drm-misc-next

Signed-off-by: Oleksandr Andrushchenko <oleksandr_andrushchenko@xxxxxxxx>
Suggested-by: Daniel Vetter <daniel.vetter@xxxxxxxx>
---
 Documentation/gpu/xen-front.rst | 12 ----
 drivers/gpu/drm/xen/Kconfig | 13 ----
 drivers/gpu/drm/xen/Makefile | 9 +--
 drivers/gpu/drm/xen/xen_drm_front.c | 62 +++-------------
 drivers/gpu/drm/xen/xen_drm_front.h | 42 ++---------
 drivers/gpu/drm/xen/xen_drm_front_gem.c | 12 +---
 drivers/gpu/drm/xen/xen_drm_front_gem.h | 3 -
 drivers/gpu/drm/xen/xen_drm_front_gem_cma.c | 79 ---------------------
 drivers/gpu/drm/xen/xen_drm_front_shbuf.c | 22 ------
 drivers/gpu/drm/xen/xen_drm_front_shbuf.h | 8 ---
 10 files changed, 21 insertions(+), 241 deletions(-)
 delete mode 100644 drivers/gpu/drm/xen/xen_drm_front_gem_cma.c

diff --git a/Documentation/gpu/xen-front.rst b/Documentation/gpu/xen-front.rst
index 009d942386c5..d988da7d1983 100644
--- a/Documentation/gpu/xen-front.rst
+++ b/Documentation/gpu/xen-front.rst
@@ -18,18 +18,6 @@ Buffers allocated by the frontend driver
 .. kernel-doc:: drivers/gpu/drm/xen/xen_drm_front.h
ÂÂÂÂ :doc: Buffers allocated by the frontend driver
 -With GEM CMA helpers
-~~~~~~~~~~~~~~~~~~~~
-
-.. kernel-doc:: drivers/gpu/drm/xen/xen_drm_front.h
-ÂÂ :doc: With GEM CMA helpers
-
-Without GEM CMA helpers
-~~~~~~~~~~~~~~~~~~~~~~~
-
-.. kernel-doc:: drivers/gpu/drm/xen/xen_drm_front.h
-ÂÂ :doc: Without GEM CMA helpers
-
 Buffers allocated by the backend
 --------------------------------
 diff --git a/drivers/gpu/drm/xen/Kconfig b/drivers/gpu/drm/xen/Kconfig
index 4f4abc91f3b6..4cca160782ab 100644
--- a/drivers/gpu/drm/xen/Kconfig
+++ b/drivers/gpu/drm/xen/Kconfig
@@ -15,16 +15,3 @@ config DRM_XEN_FRONTEND
ÂÂÂÂÂ help
ÂÂÂÂÂÂÂ Choose this option if you want to enable a para-virtualized
ÂÂÂÂÂÂÂ frontend DRM/KMS driver for Xen guest OSes.
-
-config DRM_XEN_FRONTEND_CMA
-ÂÂÂ bool "Use DRM CMA to allocate dumb buffers"
-ÂÂÂ depends on DRM_XEN_FRONTEND
-ÂÂÂ select DRM_KMS_CMA_HELPER
-ÂÂÂ select DRM_GEM_CMA_HELPER
-ÂÂÂ help
-ÂÂÂÂÂ Use DRM CMA helpers to allocate display buffers.
-ÂÂÂÂÂ This is useful for the use-cases when guest driver needs to
-ÂÂÂÂÂ share or export buffers to other drivers which only expect
-ÂÂÂÂÂ contiguous buffers.
-ÂÂÂÂÂ Note: in this mode driver cannot use buffers allocated
-ÂÂÂÂÂ by the backend.
diff --git a/drivers/gpu/drm/xen/Makefile b/drivers/gpu/drm/xen/Makefile
index 352730dc6c13..712afff5ffc3 100644
--- a/drivers/gpu/drm/xen/Makefile
+++ b/drivers/gpu/drm/xen/Makefile
@@ -5,12 +5,7 @@ drm_xen_front-objs := xen_drm_front.o \
ÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂ xen_drm_front_conn.o \
ÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂ xen_drm_front_evtchnl.o \
ÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂ xen_drm_front_shbuf.o \
-ÂÂÂÂÂÂÂÂÂÂÂÂÂ xen_drm_front_cfg.o
-
-ifeq ($(CONFIG_DRM_XEN_FRONTEND_CMA),y)
-ÂÂÂ drm_xen_front-objs += xen_drm_front_gem_cma.o
-else
-ÂÂÂ drm_xen_front-objs += xen_drm_front_gem.o
-endif
+ÂÂÂÂÂÂÂÂÂÂÂÂÂ xen_drm_front_cfg.o \
+ÂÂÂÂÂÂÂÂÂÂÂÂÂ xen_drm_front_gem.o
  obj-$(CONFIG_DRM_XEN_FRONTEND) += drm_xen_front.o
diff --git a/drivers/gpu/drm/xen/xen_drm_front.c b/drivers/gpu/drm/xen/xen_drm_front.c
index 4a08b77f1c9e..1b0ea9ac330e 100644
--- a/drivers/gpu/drm/xen/xen_drm_front.c
+++ b/drivers/gpu/drm/xen/xen_drm_front.c
@@ -12,7 +12,6 @@
 #include <drm/drm_atomic_helper.h>
 #include <drm/drm_crtc_helper.h>
 #include <drm/drm_gem.h>
-#include <drm/drm_gem_cma_helper.h>
  #include <linux/of_device.h>
 @@ -167,10 +166,9 @@ int xen_drm_front_mode_set(struct xen_drm_front_drm_pipeline *pipeline,
ÂÂÂÂÂ return ret;
 }
 -static int be_dbuf_create_int(struct xen_drm_front_info *front_info,
+int xen_drm_front_dbuf_create(struct xen_drm_front_info *front_info,
ÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂ u64 dbuf_cookie, u32 width, u32 height,
-ÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂ u32 bpp, u64 size, struct page **pages,
-ÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂ struct sg_table *sgt)
+ÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂ u32 bpp, u64 size, struct page **pages)
 {
ÂÂÂÂÂ struct xen_drm_front_evtchnl *evtchnl;
ÂÂÂÂÂ struct xen_drm_front_shbuf *shbuf;
@@ -187,7 +185,6 @@ static int be_dbuf_create_int(struct xen_drm_front_info *front_info,
ÂÂÂÂÂ buf_cfg.xb_dev = front_info->xb_dev;
ÂÂÂÂÂ buf_cfg.pages = pages;
ÂÂÂÂÂ buf_cfg.size = size;
-ÂÂÂ buf_cfg.sgt = sgt;
ÂÂÂÂÂ buf_cfg.be_alloc = front_info->cfg.be_alloc;
 Â shbuf = xen_drm_front_shbuf_alloc(&buf_cfg);
@@ -237,22 +234,6 @@ static int be_dbuf_create_int(struct xen_drm_front_info *front_info,
ÂÂÂÂÂ return ret;
 }
 -int xen_drm_front_dbuf_create_from_sgt(struct xen_drm_front_info *front_info,
-ÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂ u64 dbuf_cookie, u32 width, u32 height,
-ÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂ u32 bpp, u64 size, struct sg_table *sgt)
-{
-ÂÂÂ return be_dbuf_create_int(front_info, dbuf_cookie, width, height,
-ÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂ bpp, size, NULL, sgt);
-}
-
-int xen_drm_front_dbuf_create_from_pages(struct xen_drm_front_info *front_info,
-ÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂ u64 dbuf_cookie, u32 width, u32 height,
-ÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂ u32 bpp, u64 size, struct page **pages)
-{
-ÂÂÂ return be_dbuf_create_int(front_info, dbuf_cookie, width, height,
-ÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂ bpp, size, pages, NULL);
-}
-
 static int xen_drm_front_dbuf_destroy(struct xen_drm_front_info *front_info,
ÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂ u64 dbuf_cookie)
 {
@@ -434,24 +415,11 @@ static int xen_drm_drv_dumb_create(struct drm_file *filp,
ÂÂÂÂÂÂÂÂÂ goto fail;
ÂÂÂÂÂ }
 - /*
-ÂÂÂÂ * In case of CONFIG_DRM_XEN_FRONTEND_CMA gem_obj is constructed
-ÂÂÂÂ * via DRM CMA helpers and doesn't have ->pages allocated
-ÂÂÂÂ * (xendrm_gem_get_pages will return NULL), but instead can provide
-ÂÂÂÂ * sg table
-ÂÂÂÂ */
-ÂÂÂ if (xen_drm_front_gem_get_pages(obj))
-ÂÂÂÂÂÂÂ ret = xen_drm_front_dbuf_create_from_pages(drm_info->front_info,
-ÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂ xen_drm_front_dbuf_to_cookie(obj),
-ÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂ args->width, args->height, args->bpp,
-ÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂ args->size,
-ÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂ xen_drm_front_gem_get_pages(obj));
-ÂÂÂ else
-ÂÂÂÂÂÂÂ ret = xen_drm_front_dbuf_create_from_sgt(drm_info->front_info,
-ÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂ xen_drm_front_dbuf_to_cookie(obj),
-ÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂ args->width, args->height, args->bpp,
-ÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂ args->size,
-ÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂ xen_drm_front_gem_get_sg_table(obj));
+ÂÂÂ ret = xen_drm_front_dbuf_create(drm_info->front_info,
+ÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂ xen_drm_front_dbuf_to_cookie(obj),
+ÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂ args->width, args->height, args->bpp,
+ÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂ args->size,
+ÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂ xen_drm_front_gem_get_pages(obj));
ÂÂÂÂÂ if (ret)
ÂÂÂÂÂÂÂÂÂ goto fail_backend;
 @@ -523,11 +491,7 @@ static const struct file_operations xen_drm_dev_fops = {
ÂÂÂÂÂ .pollÂÂÂÂÂÂÂÂÂÂ = drm_poll,
ÂÂÂÂÂ .readÂÂÂÂÂÂÂÂÂÂ = drm_read,
ÂÂÂÂÂ .llseekÂÂÂÂÂÂÂÂ = no_llseek,
-#ifdef CONFIG_DRM_XEN_FRONTEND_CMA
-ÂÂÂ .mmapÂÂÂÂÂÂÂÂÂÂ = drm_gem_cma_mmap,
-#else
ÂÂÂÂÂ .mmapÂÂÂÂÂÂÂÂÂÂ = xen_drm_front_gem_mmap,
-#endif
 };
  static const struct vm_operations_struct xen_drm_drv_vm_ops = {
@@ -547,6 +511,9 @@ static struct drm_driver xen_drm_driver = {
ÂÂÂÂÂ .gem_prime_exportÂÂÂÂÂÂÂÂÂ = drm_gem_prime_export,
ÂÂÂÂÂ .gem_prime_import_sg_table = xen_drm_front_gem_import_sg_table,
ÂÂÂÂÂ .gem_prime_get_sg_tableÂÂÂ = xen_drm_front_gem_get_sg_table,
+ÂÂÂ .gem_prime_vmapÂÂÂÂÂÂÂÂÂÂÂ = xen_drm_front_gem_prime_vmap,
+ÂÂÂ .gem_prime_vunmapÂÂÂÂÂÂÂÂÂ = xen_drm_front_gem_prime_vunmap,
+ÂÂÂ .gem_prime_mmapÂÂÂÂÂÂÂÂÂÂÂ = xen_drm_front_gem_prime_mmap,
ÂÂÂÂÂ .dumb_createÂÂÂÂÂÂÂÂÂÂÂÂÂÂ = xen_drm_drv_dumb_create,
ÂÂÂÂÂ .fopsÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂ = &xen_drm_dev_fops,
ÂÂÂÂÂ .nameÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂ = "xendrm-du",
@@ -555,15 +522,6 @@ static struct drm_driver xen_drm_driver = {
ÂÂÂÂÂ .majorÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂ = 1,
ÂÂÂÂÂ .minorÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂ = 0,
 -#ifdef CONFIG_DRM_XEN_FRONTEND_CMA
-ÂÂÂ .gem_prime_vmapÂÂÂÂÂÂÂÂÂÂÂ = drm_gem_cma_prime_vmap,
-ÂÂÂ .gem_prime_vunmapÂÂÂÂÂÂÂÂÂ = drm_gem_cma_prime_vunmap,
-ÂÂÂ .gem_prime_mmapÂÂÂÂÂÂÂÂÂÂÂ = drm_gem_cma_prime_mmap,
-#else
-ÂÂÂ .gem_prime_vmapÂÂÂÂÂÂÂÂÂÂÂ = xen_drm_front_gem_prime_vmap,
-ÂÂÂ .gem_prime_vunmapÂÂÂÂÂÂÂÂÂ = xen_drm_front_gem_prime_vunmap,
-ÂÂÂ .gem_prime_mmapÂÂÂÂÂÂÂÂÂÂÂ = xen_drm_front_gem_prime_mmap,
-#endif
 };
  static int xen_drm_drv_init(struct xen_drm_front_info *front_info)
diff --git a/drivers/gpu/drm/xen/xen_drm_front.h b/drivers/gpu/drm/xen/xen_drm_front.h
index 16554b2463d8..2c2479b571ae 100644
--- a/drivers/gpu/drm/xen/xen_drm_front.h
+++ b/drivers/gpu/drm/xen/xen_drm_front.h
@@ -23,40 +23,14 @@
ÂÂ *
ÂÂ * Depending on the requirements for the para-virtualized environment, namely
ÂÂ * requirements dictated by the accompanying DRM/(v)GPU drivers running in both
- * host and guest environments, number of operating modes of para-virtualized
- * display driver are supported:
- *
- * - display buffers can be allocated by either frontend driver or backend
- * - display buffers can be allocated to be contiguous in memory or not
- *
- * Note! Frontend driver itself has no dependency on contiguous memory for
- * its operation.
+ * host and guest environments, display buffers can be allocated by either
+ * frontend driver or backend.
ÂÂ */
  /**
ÂÂ * DOC: Buffers allocated by the frontend driver
ÂÂ *
- * The below modes of operation are configured at compile-time via
- * frontend driver's kernel configuration:
- */
-
-/**
- * DOC: With GEM CMA helpers
- *
- * This use-case is useful when used with accompanying DRM/vGPU driver in
- * guest domain which was designed to only work with contiguous buffers,
- * e.g. DRM driver based on GEM CMA helpers: such drivers can only import
- * contiguous PRIME buffers, thus requiring frontend driver to provide
- * such. In order to implement this mode of operation para-virtualized
- * frontend driver can be configured to use GEM CMA helpers.
- */
-
-/**
- * DOC: Without GEM CMA helpers
- *
- * If accompanying drivers can cope with non-contiguous memory then, to
- * lower pressure on CMA subsystem of the kernel, driver can allocate
- * buffers from system memory.
+ * In this mode of operation driver allocates buffers from system memory.
ÂÂ *
ÂÂ * Note! If used with accompanying DRM/(v)GPU drivers this mode of operation
ÂÂ * may require IOMMU support on the platform, so accompanying DRM/vGPU
@@ -164,13 +138,9 @@ int xen_drm_front_mode_set(struct xen_drm_front_drm_pipeline *pipeline,
ÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂ u32 x, u32 y, u32 width, u32 height,
ÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂ u32 bpp, u64 fb_cookie);
 -int xen_drm_front_dbuf_create_from_sgt(struct xen_drm_front_info *front_info,
-ÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂ u64 dbuf_cookie, u32 width, u32 height,
-ÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂ u32 bpp, u64 size, struct sg_table *sgt);
-
-int xen_drm_front_dbuf_create_from_pages(struct xen_drm_front_info *front_info,
-ÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂ u64 dbuf_cookie, u32 width, u32 height,
-ÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂ u32 bpp, u64 size, struct page **pages);
+int xen_drm_front_dbuf_create(struct xen_drm_front_info *front_info,
+ÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂ u64 dbuf_cookie, u32 width, u32 height,
+ÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂ u32 bpp, u64 size, struct page **pages);
  int xen_drm_front_fb_attach(struct xen_drm_front_info *front_info,
ÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂ u64 dbuf_cookie, u64 fb_cookie, u32 width,
diff --git a/drivers/gpu/drm/xen/xen_drm_front_gem.c b/drivers/gpu/drm/xen/xen_drm_front_gem.c
index 3b04a2269d7a..c85bfe7571cb 100644
--- a/drivers/gpu/drm/xen/xen_drm_front_gem.c
+++ b/drivers/gpu/drm/xen/xen_drm_front_gem.c
@@ -210,15 +210,9 @@ xen_drm_front_gem_import_sg_table(struct drm_device *dev,
ÂÂÂÂÂ if (ret < 0)
ÂÂÂÂÂÂÂÂÂ return ERR_PTR(ret);
 - /*
-ÂÂÂÂ * N.B. Although we have an API to create display buffer from sgt
-ÂÂÂÂ * we use pages API, because we still need those for GEM handling,
-ÂÂÂÂ * e.g. for mapping etc.
-ÂÂÂÂ */
-ÂÂÂ ret = xen_drm_front_dbuf_create_from_pages(drm_info->front_info,
- xen_drm_front_dbuf_to_cookie(&xen_obj->base),
-ÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂ 0, 0, 0, size,
-ÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂ xen_obj->pages);
+ÂÂÂ ret = xen_drm_front_dbuf_create(drm_info->front_info,
+ xen_drm_front_dbuf_to_cookie(&xen_obj->base),
+ÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂ 0, 0, 0, size, xen_obj->pages);
ÂÂÂÂÂ if (ret < 0)
ÂÂÂÂÂÂÂÂÂ return ERR_PTR(ret);
 diff --git a/drivers/gpu/drm/xen/xen_drm_front_gem.h b/drivers/gpu/drm/xen/xen_drm_front_gem.h
index 55e531f5a763..d5ab734fdafe 100644
--- a/drivers/gpu/drm/xen/xen_drm_front_gem.h
+++ b/drivers/gpu/drm/xen/xen_drm_front_gem.h
@@ -27,8 +27,6 @@ struct page **xen_drm_front_gem_get_pages(struct drm_gem_object *obj);
  void xen_drm_front_gem_free_object_unlocked(struct drm_gem_object *gem_obj);
 -#ifndef CONFIG_DRM_XEN_FRONTEND_CMA
-
 int xen_drm_front_gem_mmap(struct file *filp, struct vm_area_struct *vma);
  void *xen_drm_front_gem_prime_vmap(struct drm_gem_object *gem_obj);
@@ -38,6 +36,5 @@ void xen_drm_front_gem_prime_vunmap(struct drm_gem_object *gem_obj,
  int xen_drm_front_gem_prime_mmap(struct drm_gem_object *gem_obj,
ÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂ struct vm_area_struct *vma);
-#endif
  #endif /* __XEN_DRM_FRONT_GEM_H */
diff --git a/drivers/gpu/drm/xen/xen_drm_front_gem_cma.c b/drivers/gpu/drm/xen/xen_drm_front_gem_cma.c
deleted file mode 100644
index ba30a4bc2a39..000000000000
--- a/drivers/gpu/drm/xen/xen_drm_front_gem_cma.c
+++ /dev/null
@@ -1,79 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0 OR MIT
-
-/*
- *Â Xen para-virtual DRM device
- *
- * Copyright (C) 2016-2018 EPAM Systems Inc.
- *
- * Author: Oleksandr Andrushchenko <oleksandr_andrushchenko@xxxxxxxx>
- */
-
-#include <drm/drmP.h>
-#include <drm/drm_gem.h>
-#include <drm/drm_fb_cma_helper.h>
-#include <drm/drm_gem_cma_helper.h>
-
-#include "xen_drm_front.h"
-#include "xen_drm_front_gem.h"
-
-struct drm_gem_object *
-xen_drm_front_gem_import_sg_table(struct drm_device *dev,
-ÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂ struct dma_buf_attachment *attach,
-ÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂ struct sg_table *sgt)
-{
-ÂÂÂ struct xen_drm_front_drm_info *drm_info = dev->dev_private;
-ÂÂÂ struct drm_gem_object *gem_obj;
-ÂÂÂ struct drm_gem_cma_object *cma_obj;
-ÂÂÂ int ret;
-
-ÂÂÂ gem_obj = drm_gem_cma_prime_import_sg_table(dev, attach, sgt);
-ÂÂÂ if (IS_ERR_OR_NULL(gem_obj))
-ÂÂÂÂÂÂÂ return gem_obj;
-
-ÂÂÂ cma_obj = to_drm_gem_cma_obj(gem_obj);
-
-ÂÂÂ ret = xen_drm_front_dbuf_create_from_sgt(drm_info->front_info,
- xen_drm_front_dbuf_to_cookie(gem_obj),
-ÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂ 0, 0, 0, gem_obj->size,
- drm_gem_cma_prime_get_sg_table(gem_obj));
-ÂÂÂ if (ret < 0)
-ÂÂÂÂÂÂÂ return ERR_PTR(ret);
-
-ÂÂÂ DRM_DEBUG("Imported CMA buffer of size %zu\n", gem_obj->size);
-
-ÂÂÂ return gem_obj;
-}
-
-struct sg_table *xen_drm_front_gem_get_sg_table(struct drm_gem_object *gem_obj)
-{
-ÂÂÂ return drm_gem_cma_prime_get_sg_table(gem_obj);
-}
-
-struct drm_gem_object *xen_drm_front_gem_create(struct drm_device *dev,
-ÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂ size_t size)
-{
-ÂÂÂ struct xen_drm_front_drm_info *drm_info = dev->dev_private;
-ÂÂÂ struct drm_gem_cma_object *cma_obj;
-
-ÂÂÂ if (drm_info->front_info->cfg.be_alloc) {
-ÂÂÂÂÂÂÂ /* This use-case is not yet supported and probably won't be */
-ÂÂÂÂÂÂÂ DRM_ERROR("Backend allocated buffers and CMA helpers are not supported at the same time\n");
-ÂÂÂÂÂÂÂ return ERR_PTR(-EINVAL);
-ÂÂÂ }
-
-ÂÂÂ cma_obj = drm_gem_cma_create(dev, size);
-ÂÂÂ if (IS_ERR_OR_NULL(cma_obj))
-ÂÂÂÂÂÂÂ return ERR_CAST(cma_obj);
-
-ÂÂÂ return &cma_obj->base;
-}
-
-void xen_drm_front_gem_free_object_unlocked(struct drm_gem_object *gem_obj)
-{
-ÂÂÂ drm_gem_cma_free_object(gem_obj);
-}
-
-struct page **xen_drm_front_gem_get_pages(struct drm_gem_object *gem_obj)
-{
-ÂÂÂ return NULL;
-}
diff --git a/drivers/gpu/drm/xen/xen_drm_front_shbuf.c b/drivers/gpu/drm/xen/xen_drm_front_shbuf.c
index 19914dde4b3d..d5705251a0d6 100644
--- a/drivers/gpu/drm/xen/xen_drm_front_shbuf.c
+++ b/drivers/gpu/drm/xen/xen_drm_front_shbuf.c
@@ -89,10 +89,6 @@ void xen_drm_front_shbuf_free(struct xen_drm_front_shbuf *buf)
ÂÂÂÂÂ }
ÂÂÂÂÂ kfree(buf->grefs);
ÂÂÂÂÂ kfree(buf->directory);
-ÂÂÂ if (buf->sgt) {
-ÂÂÂÂÂÂÂ sg_free_table(buf->sgt);
-ÂÂÂÂÂÂÂ kvfree(buf->pages);
-ÂÂÂ }
ÂÂÂÂÂ kfree(buf);
 }
 @@ -350,17 +346,6 @@ static int grant_references(struct xen_drm_front_shbuf *buf)
  static int alloc_storage(struct xen_drm_front_shbuf *buf)
 {
-ÂÂÂ if (buf->sgt) {
-ÂÂÂÂÂÂÂ buf->pages = kvmalloc_array(buf->num_pages,
-ÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂ sizeof(struct page *), GFP_KERNEL);
-ÂÂÂÂÂÂÂ if (!buf->pages)
-ÂÂÂÂÂÂÂÂÂÂÂ return -ENOMEM;
-
-ÂÂÂÂÂÂÂ if (drm_prime_sg_to_page_addr_arrays(buf->sgt, buf->pages,
-ÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂ NULL, buf->num_pages) < 0)
-ÂÂÂÂÂÂÂÂÂÂÂ return -EINVAL;
-ÂÂÂ }
-
ÂÂÂÂÂ buf->grefs = kcalloc(buf->num_grefs, sizeof(*buf->grefs), GFP_KERNEL);
ÂÂÂÂÂ if (!buf->grefs)
ÂÂÂÂÂÂÂÂÂ return -ENOMEM;
@@ -396,12 +381,6 @@ xen_drm_front_shbuf_alloc(struct xen_drm_front_shbuf_cfg *cfg)
ÂÂÂÂÂ struct xen_drm_front_shbuf *buf;
ÂÂÂÂÂ int ret;
 - /* either pages or sgt, not both */
-ÂÂÂ if (unlikely(cfg->pages && cfg->sgt)) {
-ÂÂÂÂÂÂÂ DRM_ERROR("Cannot handle buffer allocation with both pages and sg table provided\n");
-ÂÂÂÂÂÂÂ return NULL;
-ÂÂÂ }
-
ÂÂÂÂÂ buf = kzalloc(sizeof(*buf), GFP_KERNEL);
ÂÂÂÂÂ if (!buf)
ÂÂÂÂÂÂÂÂÂ return NULL;
@@ -413,7 +392,6 @@ xen_drm_front_shbuf_alloc(struct xen_drm_front_shbuf_cfg *cfg)
 Â buf->xb_dev = cfg->xb_dev;
ÂÂÂÂÂ buf->num_pages = DIV_ROUND_UP(cfg->size, PAGE_SIZE);
-ÂÂÂ buf->sgt = cfg->sgt;
ÂÂÂÂÂ buf->pages = cfg->pages;
 Â buf->ops->calc_num_grefs(buf);
diff --git a/drivers/gpu/drm/xen/xen_drm_front_shbuf.h b/drivers/gpu/drm/xen/xen_drm_front_shbuf.h
index 8c037fd7608b..7545c692539e 100644
--- a/drivers/gpu/drm/xen/xen_drm_front_shbuf.h
+++ b/drivers/gpu/drm/xen/xen_drm_front_shbuf.h
@@ -29,16 +29,9 @@ struct xen_drm_front_shbuf {
ÂÂÂÂÂ grant_ref_t *grefs;
ÂÂÂÂÂ unsigned char *directory;
 - /*
-ÂÂÂÂ * there are 2 ways to provide backing storage for this shared buffer:
-ÂÂÂÂ * either pages or sgt. if buffer created from sgt then we own
-ÂÂÂÂ * the pages and must free those ourselves on closure
-ÂÂÂÂ */
ÂÂÂÂÂ int num_pages;
ÂÂÂÂÂ struct page **pages;
 - struct sg_table *sgt;
-
ÂÂÂÂÂ struct xenbus_device *xb_dev;
 Â /* these are the ops used internally depending on be_alloc mode */
@@ -52,7 +45,6 @@ struct xen_drm_front_shbuf_cfg {
ÂÂÂÂÂ struct xenbus_device *xb_dev;
ÂÂÂÂÂ size_t size;
ÂÂÂÂÂ struct page **pages;
-ÂÂÂ struct sg_table *sgt;
ÂÂÂÂÂ bool be_alloc;
 };
 --
2.17.0

_______________________________________________
dri-devel mailing list
dri-devel@xxxxxxxxxxxxxxxxxxxxx
https://lists.freedesktop.org/mailman/listinfo/dri-devel