On 2019-05-06 7:24 a.m., Christian König wrote: > [CAUTION: External Email] > > We are getting a dma-buf implementation completely separate from drm prime, > so rename the files now and cleanup the code a bit. > > No functional change. > > Signed-off-by: Christian König <christian.koenig@xxxxxxx> Acked-by: Felix Kuehling <Felix.Kuehling@xxxxxxx> > --- > drivers/gpu/drm/amd/amdgpu/Makefile | 2 +- > drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c | 1 + > .../gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c | 1 + > .../{amdgpu_prime.c => amdgpu_dma_buf.c} | 131 +++++++++--------- > drivers/gpu/drm/amd/amdgpu/amdgpu_dma_buf.h | 46 ++++++ > drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c | 2 +- > drivers/gpu/drm/amd/amdgpu/amdgpu_gem.h | 16 --- > 7 files changed, 116 insertions(+), 83 deletions(-) > rename drivers/gpu/drm/amd/amdgpu/{amdgpu_prime.c => amdgpu_dma_buf.c} (93%) > create mode 100644 drivers/gpu/drm/amd/amdgpu/amdgpu_dma_buf.h > > diff --git a/drivers/gpu/drm/amd/amdgpu/Makefile b/drivers/gpu/drm/amd/amdgpu/Makefile > index 7d539ba6400d..11a651ff7f0d 100644 > --- a/drivers/gpu/drm/amd/amdgpu/Makefile > +++ b/drivers/gpu/drm/amd/amdgpu/Makefile > @@ -49,7 +49,7 @@ amdgpu-y += amdgpu_device.o amdgpu_kms.o \ > amdgpu_cs.o amdgpu_bios.o amdgpu_benchmark.o amdgpu_test.o \ > amdgpu_pm.o atombios_dp.o amdgpu_afmt.o amdgpu_trace_points.o \ > atombios_encoders.o amdgpu_sa.o atombios_i2c.o \ > - amdgpu_prime.o amdgpu_vm.o amdgpu_ib.o amdgpu_pll.o \ > + amdgpu_dma_buf.o amdgpu_vm.o amdgpu_ib.o amdgpu_pll.o \ > amdgpu_ucode.o amdgpu_bo_list.o amdgpu_ctx.o amdgpu_sync.o \ > amdgpu_gtt_mgr.o amdgpu_vram_mgr.o amdgpu_virt.o amdgpu_atomfirmware.o \ > amdgpu_vf_error.o amdgpu_sched.o amdgpu_debugfs.o amdgpu_ids.o \ > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c > index aeead072fa79..e829c53accf5 100644 > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c > @@ -25,6 +25,7 @@ > #include <drm/drmP.h> > #include "amdgpu.h" > #include "amdgpu_gfx.h" > +#include "amdgpu_dma_buf.h" > #include <linux/module.h> > #include <linux/dma-buf.h> > > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c > index 047bba8c62d6..2bc80942e5d5 100644 > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c > @@ -30,6 +30,7 @@ > #include "amdgpu_object.h" > #include "amdgpu_vm.h" > #include "amdgpu_amdkfd.h" > +#include "amdgpu_dma_buf.h" > > /* Special VM and GART address alignment needed for VI pre-Fiji due to > * a HW bug. > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_dma_buf.c > similarity index 93% > rename from drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c > rename to drivers/gpu/drm/amd/amdgpu/amdgpu_dma_buf.c > index a38e0fb4a6fe..4711cf1b5bd2 100644 > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_dma_buf.c > @@ -1,5 +1,5 @@ > /* > - * Copyright 2012 Advanced Micro Devices, Inc. > + * Copyright 2019 Advanced Micro Devices, Inc. > * > * Permission is hereby granted, free of charge, to any person obtaining a > * copy of this software and associated documentation files (the "Software"), > @@ -103,7 +103,8 @@ void amdgpu_gem_prime_vunmap(struct drm_gem_object *obj, void *vaddr) > * Returns: > * 0 on success or a negative error code on failure. > */ > -int amdgpu_gem_prime_mmap(struct drm_gem_object *obj, struct vm_area_struct *vma) > +int amdgpu_gem_prime_mmap(struct drm_gem_object *obj, > + struct vm_area_struct *vma) > { > struct amdgpu_bo *bo = gem_to_amdgpu_bo(obj); > struct amdgpu_device *adev = amdgpu_ttm_adev(bo->tbo.bdev); > @@ -137,57 +138,6 @@ int amdgpu_gem_prime_mmap(struct drm_gem_object *obj, struct vm_area_struct *vma > return ret; > } > > -/** > - * amdgpu_gem_prime_import_sg_table - &drm_driver.gem_prime_import_sg_table > - * implementation > - * @dev: DRM device > - * @attach: DMA-buf attachment > - * @sg: Scatter/gather table > - * > - * Imports shared DMA buffer memory exported by another device. > - * > - * Returns: > - * A new GEM BO of the given DRM device, representing the memory > - * described by the given DMA-buf attachment and scatter/gather table. > - */ > -struct drm_gem_object * > -amdgpu_gem_prime_import_sg_table(struct drm_device *dev, > - struct dma_buf_attachment *attach, > - struct sg_table *sg) > -{ > - struct reservation_object *resv = attach->dmabuf->resv; > - struct amdgpu_device *adev = dev->dev_private; > - struct amdgpu_bo *bo; > - struct amdgpu_bo_param bp; > - int ret; > - > - memset(&bp, 0, sizeof(bp)); > - bp.size = attach->dmabuf->size; > - bp.byte_align = PAGE_SIZE; > - bp.domain = AMDGPU_GEM_DOMAIN_CPU; > - bp.flags = 0; > - bp.type = ttm_bo_type_sg; > - bp.resv = resv; > - ww_mutex_lock(&resv->lock, NULL); > - ret = amdgpu_bo_create(adev, &bp, &bo); > - if (ret) > - goto error; > - > - bo->tbo.sg = sg; > - bo->tbo.ttm->sg = sg; > - bo->allowed_domains = AMDGPU_GEM_DOMAIN_GTT; > - bo->preferred_domains = AMDGPU_GEM_DOMAIN_GTT; > - if (attach->dmabuf->ops != &amdgpu_dmabuf_ops) > - bo->prime_shared_count = 1; > - > - ww_mutex_unlock(&resv->lock); > - return &bo->gem_base; > - > -error: > - ww_mutex_unlock(&resv->lock); > - return ERR_PTR(ret); > -} > - > static int > __reservation_object_make_exclusive(struct reservation_object *obj) > { > @@ -231,7 +181,7 @@ __reservation_object_make_exclusive(struct reservation_object *obj) > } > > /** > - * amdgpu_gem_map_attach - &dma_buf_ops.attach implementation > + * amdgpu_dma_buf_map_attach - &dma_buf_ops.attach implementation > * @dma_buf: Shared DMA buffer > * @attach: DMA-buf attachment > * > @@ -242,8 +192,8 @@ __reservation_object_make_exclusive(struct reservation_object *obj) > * Returns: > * 0 on success or a negative error code on failure. > */ > -static int amdgpu_gem_map_attach(struct dma_buf *dma_buf, > - struct dma_buf_attachment *attach) > +static int amdgpu_dma_buf_map_attach(struct dma_buf *dma_buf, > + struct dma_buf_attachment *attach) > { > struct drm_gem_object *obj = dma_buf->priv; > struct amdgpu_bo *bo = gem_to_amdgpu_bo(obj); > @@ -291,15 +241,15 @@ static int amdgpu_gem_map_attach(struct dma_buf *dma_buf, > } > > /** > - * amdgpu_gem_map_detach - &dma_buf_ops.detach implementation > + * amdgpu_dma_buf_map_detach - &dma_buf_ops.detach implementation > * @dma_buf: Shared DMA buffer > * @attach: DMA-buf attachment > * > * This is called when a shared DMA buffer no longer needs to be accessible by > * another device. For now, simply unpins the buffer from GTT. > */ > -static void amdgpu_gem_map_detach(struct dma_buf *dma_buf, > - struct dma_buf_attachment *attach) > +static void amdgpu_dma_buf_map_detach(struct dma_buf *dma_buf, > + struct dma_buf_attachment *attach) > { > struct drm_gem_object *obj = dma_buf->priv; > struct amdgpu_bo *bo = gem_to_amdgpu_bo(obj); > @@ -334,7 +284,7 @@ struct reservation_object *amdgpu_gem_prime_res_obj(struct drm_gem_object *obj) > } > > /** > - * amdgpu_gem_begin_cpu_access - &dma_buf_ops.begin_cpu_access implementation > + * amdgpu_dma_buf_begin_cpu_access - &dma_buf_ops.begin_cpu_access implementation > * @dma_buf: Shared DMA buffer > * @direction: Direction of DMA transfer > * > @@ -345,8 +295,8 @@ struct reservation_object *amdgpu_gem_prime_res_obj(struct drm_gem_object *obj) > * Returns: > * 0 on success or a negative error code on failure. > */ > -static int amdgpu_gem_begin_cpu_access(struct dma_buf *dma_buf, > - enum dma_data_direction direction) > +static int amdgpu_dma_buf_begin_cpu_access(struct dma_buf *dma_buf, > + enum dma_data_direction direction) > { > struct amdgpu_bo *bo = gem_to_amdgpu_bo(dma_buf->priv); > struct amdgpu_device *adev = amdgpu_ttm_adev(bo->tbo.bdev); > @@ -374,12 +324,12 @@ static int amdgpu_gem_begin_cpu_access(struct dma_buf *dma_buf, > } > > const struct dma_buf_ops amdgpu_dmabuf_ops = { > - .attach = amdgpu_gem_map_attach, > - .detach = amdgpu_gem_map_detach, > + .attach = amdgpu_dma_buf_map_attach, > + .detach = amdgpu_dma_buf_map_detach, > .map_dma_buf = drm_gem_map_dma_buf, > .unmap_dma_buf = drm_gem_unmap_dma_buf, > .release = drm_gem_dmabuf_release, > - .begin_cpu_access = amdgpu_gem_begin_cpu_access, > + .begin_cpu_access = amdgpu_dma_buf_begin_cpu_access, > .mmap = drm_gem_dmabuf_mmap, > .vmap = drm_gem_dmabuf_vmap, > .vunmap = drm_gem_dmabuf_vunmap, > @@ -417,6 +367,57 @@ struct dma_buf *amdgpu_gem_prime_export(struct drm_device *dev, > return buf; > } > > +/** > + * amdgpu_gem_prime_import_sg_table - &drm_driver.gem_prime_import_sg_table > + * implementation > + * @dev: DRM device > + * @attach: DMA-buf attachment > + * @sg: Scatter/gather table > + * > + * Imports shared DMA buffer memory exported by another device. > + * > + * Returns: > + * A new GEM BO of the given DRM device, representing the memory > + * described by the given DMA-buf attachment and scatter/gather table. > + */ > +struct drm_gem_object * > +amdgpu_gem_prime_import_sg_table(struct drm_device *dev, > + struct dma_buf_attachment *attach, > + struct sg_table *sg) > +{ > + struct reservation_object *resv = attach->dmabuf->resv; > + struct amdgpu_device *adev = dev->dev_private; > + struct amdgpu_bo *bo; > + struct amdgpu_bo_param bp; > + int ret; > + > + memset(&bp, 0, sizeof(bp)); > + bp.size = attach->dmabuf->size; > + bp.byte_align = PAGE_SIZE; > + bp.domain = AMDGPU_GEM_DOMAIN_CPU; > + bp.flags = 0; > + bp.type = ttm_bo_type_sg; > + bp.resv = resv; > + ww_mutex_lock(&resv->lock, NULL); > + ret = amdgpu_bo_create(adev, &bp, &bo); > + if (ret) > + goto error; > + > + bo->tbo.sg = sg; > + bo->tbo.ttm->sg = sg; > + bo->allowed_domains = AMDGPU_GEM_DOMAIN_GTT; > + bo->preferred_domains = AMDGPU_GEM_DOMAIN_GTT; > + if (attach->dmabuf->ops != &amdgpu_dmabuf_ops) > + bo->prime_shared_count = 1; > + > + ww_mutex_unlock(&resv->lock); > + return &bo->gem_base; > + > +error: > + ww_mutex_unlock(&resv->lock); > + return ERR_PTR(ret); > +} > + > /** > * amdgpu_gem_prime_import - &drm_driver.gem_prime_import implementation > * @dev: DRM device > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_dma_buf.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_dma_buf.h > new file mode 100644 > index 000000000000..c7056cbe8685 > --- /dev/null > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_dma_buf.h > @@ -0,0 +1,46 @@ > +/* > + * Copyright 2019 Advanced Micro Devices, Inc. > + * > + * Permission is hereby granted, free of charge, to any person obtaining a > + * copy of this software and associated documentation files (the "Software"), > + * to deal in the Software without restriction, including without limitation > + * the rights to use, copy, modify, merge, publish, distribute, sublicense, > + * and/or sell copies of the Software, and to permit persons to whom the > + * Software is furnished to do so, subject to the following conditions: > + * > + * The above copyright notice and this permission notice shall be included in > + * all copies or substantial portions of the Software. > + * > + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR > + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, > + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL > + * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR > + * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, > + * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR > + * OTHER DEALINGS IN THE SOFTWARE. > + * > + */ > +#ifndef __AMDGPU_DMA_BUF_H__ > +#define __AMDGPU_DMA_BUF_H__ > + > +#include <drm/drm_gem.h> > + > +struct sg_table *amdgpu_gem_prime_get_sg_table(struct drm_gem_object *obj); > +struct drm_gem_object * > +amdgpu_gem_prime_import_sg_table(struct drm_device *dev, > + struct dma_buf_attachment *attach, > + struct sg_table *sg); > +struct dma_buf *amdgpu_gem_prime_export(struct drm_device *dev, > + struct drm_gem_object *gobj, > + int flags); > +struct drm_gem_object *amdgpu_gem_prime_import(struct drm_device *dev, > + struct dma_buf *dma_buf); > +struct reservation_object *amdgpu_gem_prime_res_obj(struct drm_gem_object *); > +void *amdgpu_gem_prime_vmap(struct drm_gem_object *obj); > +void amdgpu_gem_prime_vunmap(struct drm_gem_object *obj, void *vaddr); > +int amdgpu_gem_prime_mmap(struct drm_gem_object *obj, > + struct vm_area_struct *vma); > + > +extern const struct dma_buf_ops amdgpu_dmabuf_ops; > + > +#endif > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c > index 13a68f62bcc8..f4bc2d5e81b1 100644 > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c > @@ -36,7 +36,7 @@ > > #include "amdgpu.h" > #include "amdgpu_irq.h" > -#include "amdgpu_gem.h" > +#include "amdgpu_dma_buf.h" > > #include "amdgpu_amdkfd.h" > > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.h > index f1ddfc50bcc7..b8ba6e27c61f 100644 > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.h > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.h > @@ -39,22 +39,6 @@ int amdgpu_gem_object_open(struct drm_gem_object *obj, > void amdgpu_gem_object_close(struct drm_gem_object *obj, > struct drm_file *file_priv); > unsigned long amdgpu_gem_timeout(uint64_t timeout_ns); > -struct sg_table *amdgpu_gem_prime_get_sg_table(struct drm_gem_object *obj); > -struct drm_gem_object * > -amdgpu_gem_prime_import_sg_table(struct drm_device *dev, > - struct dma_buf_attachment *attach, > - struct sg_table *sg); > -struct dma_buf *amdgpu_gem_prime_export(struct drm_device *dev, > - struct drm_gem_object *gobj, > - int flags); > -struct drm_gem_object *amdgpu_gem_prime_import(struct drm_device *dev, > - struct dma_buf *dma_buf); > -struct reservation_object *amdgpu_gem_prime_res_obj(struct drm_gem_object *); > -void *amdgpu_gem_prime_vmap(struct drm_gem_object *obj); > -void amdgpu_gem_prime_vunmap(struct drm_gem_object *obj, void *vaddr); > -int amdgpu_gem_prime_mmap(struct drm_gem_object *obj, struct vm_area_struct *vma); > - > -extern const struct dma_buf_ops amdgpu_dmabuf_ops; > > /* > * GEM objects. > -- > 2.17.1 > > _______________________________________________ > amd-gfx mailing list > amd-gfx@xxxxxxxxxxxxxxxxxxxxx > https://lists.freedesktop.org/mailman/listinfo/amd-gfx _______________________________________________ amd-gfx mailing list amd-gfx@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/amd-gfx