[PATCH 2/5] drm: Remove the dma_alloc_coherent wrapper for internal usage

Alex Deucher alexdeucher at gmail.com
Mon Feb 3 21:50:48 UTC 2020


On Sun, Feb 2, 2020 at 12:16 PM Chris Wilson <chris at chris-wilson.co.uk> wrote:
>
> Internally for "consistent" maps, we create a temporary struct
> drm_dma_handle in order to user our own dma_alloc_coherent wrapper then
> destroy the temporary wrap. Simplify our logic by removing the temporary
> wrapper!
>
> Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>

Reviewed-by: Alex Deucher <alexander.deucher at amd.com>

> ---
>  drivers/gpu/drm/drm_bufs.c | 20 +++++++++-----------
>  drivers/gpu/drm/drm_pci.c  | 15 ++-------------
>  drivers/gpu/drm/drm_vm.c   | 10 ++++------
>  include/drm/drm_legacy.h   |  6 ------
>  4 files changed, 15 insertions(+), 36 deletions(-)
>
> diff --git a/drivers/gpu/drm/drm_bufs.c b/drivers/gpu/drm/drm_bufs.c
> index 8ce9d73fab4f..19297e58b232 100644
> --- a/drivers/gpu/drm/drm_bufs.c
> +++ b/drivers/gpu/drm/drm_bufs.c
> @@ -149,7 +149,6 @@ static int drm_addmap_core(struct drm_device *dev, resource_size_t offset,
>  {
>         struct drm_local_map *map;
>         struct drm_map_list *list;
> -       drm_dma_handle_t *dmah;
>         unsigned long user_token;
>         int ret;
>
> @@ -324,14 +323,14 @@ static int drm_addmap_core(struct drm_device *dev, resource_size_t offset,
>                  * As we're limiting the address to 2^32-1 (or less),
>                  * casting it down to 32 bits is no problem, but we
>                  * need to point to a 64bit variable first. */
> -               dmah = drm_pci_alloc(dev, map->size, map->size);
> -               if (!dmah) {
> +               map->handle = dma_alloc_coherent(&dev->pdev->dev,
> +                                                map->size,
> +                                                &map->offset,
> +                                                GFP_KERNEL);
> +               if (!map->handle) {
>                         kfree(map);
>                         return -ENOMEM;
>                 }
> -               map->handle = dmah->vaddr;
> -               map->offset = (unsigned long)dmah->busaddr;
> -               kfree(dmah);
>                 break;
>         default:
>                 kfree(map);
> @@ -513,7 +512,6 @@ int drm_legacy_getmap_ioctl(struct drm_device *dev, void *data,
>  int drm_legacy_rmmap_locked(struct drm_device *dev, struct drm_local_map *map)
>  {
>         struct drm_map_list *r_list = NULL, *list_t;
> -       drm_dma_handle_t dmah;
>         int found = 0;
>         struct drm_master *master;
>
> @@ -554,10 +552,10 @@ int drm_legacy_rmmap_locked(struct drm_device *dev, struct drm_local_map *map)
>         case _DRM_SCATTER_GATHER:
>                 break;
>         case _DRM_CONSISTENT:
> -               dmah.vaddr = map->handle;
> -               dmah.busaddr = map->offset;
> -               dmah.size = map->size;
> -               __drm_legacy_pci_free(dev, &dmah);
> +               dma_free_coherent(&dev->pdev->dev,
> +                                 map->size,
> +                                 map->handle,
> +                                 map->offset);
>                 break;
>         }
>         kfree(map);
> diff --git a/drivers/gpu/drm/drm_pci.c b/drivers/gpu/drm/drm_pci.c
> index d16dac4325f9..c6bb98729a26 100644
> --- a/drivers/gpu/drm/drm_pci.c
> +++ b/drivers/gpu/drm/drm_pci.c
> @@ -78,18 +78,6 @@ drm_dma_handle_t *drm_pci_alloc(struct drm_device * dev, size_t size, size_t ali
>
>  EXPORT_SYMBOL(drm_pci_alloc);
>
> -/*
> - * Free a PCI consistent memory block without freeing its descriptor.
> - *
> - * This function is for internal use in the Linux-specific DRM core code.
> - */
> -void __drm_legacy_pci_free(struct drm_device * dev, drm_dma_handle_t * dmah)
> -{
> -       if (dmah->vaddr)
> -               dma_free_coherent(&dev->pdev->dev, dmah->size, dmah->vaddr,
> -                                 dmah->busaddr);
> -}
> -
>  /**
>   * drm_pci_free - Free a PCI consistent memory block
>   * @dev: DRM device
> @@ -100,7 +88,8 @@ void __drm_legacy_pci_free(struct drm_device * dev, drm_dma_handle_t * dmah)
>   */
>  void drm_pci_free(struct drm_device * dev, drm_dma_handle_t * dmah)
>  {
> -       __drm_legacy_pci_free(dev, dmah);
> +       dma_free_coherent(&dev->pdev->dev, dmah->size, dmah->vaddr,
> +                         dmah->busaddr);
>         kfree(dmah);
>  }
>
> diff --git a/drivers/gpu/drm/drm_vm.c b/drivers/gpu/drm/drm_vm.c
> index 52e87e4869a5..64619fe90046 100644
> --- a/drivers/gpu/drm/drm_vm.c
> +++ b/drivers/gpu/drm/drm_vm.c
> @@ -269,8 +269,6 @@ static void drm_vm_shm_close(struct vm_area_struct *vma)
>                 }
>
>                 if (!found_maps) {
> -                       drm_dma_handle_t dmah;
> -
>                         switch (map->type) {
>                         case _DRM_REGISTERS:
>                         case _DRM_FRAME_BUFFER:
> @@ -284,10 +282,10 @@ static void drm_vm_shm_close(struct vm_area_struct *vma)
>                         case _DRM_SCATTER_GATHER:
>                                 break;
>                         case _DRM_CONSISTENT:
> -                               dmah.vaddr = map->handle;
> -                               dmah.busaddr = map->offset;
> -                               dmah.size = map->size;
> -                               __drm_legacy_pci_free(dev, &dmah);
> +                               dma_free_coherent(&dev->pdev->dev,
> +                                                 map->size,
> +                                                 map->handle,
> +                                                 map->offset);
>                                 break;
>                         }
>                         kfree(map);
> diff --git a/include/drm/drm_legacy.h b/include/drm/drm_legacy.h
> index 5745710453c8..dcef3598f49e 100644
> --- a/include/drm/drm_legacy.h
> +++ b/include/drm/drm_legacy.h
> @@ -194,17 +194,11 @@ void drm_legacy_idlelock_release(struct drm_lock_data *lock);
>
>  #ifdef CONFIG_PCI
>
> -void __drm_legacy_pci_free(struct drm_device *dev, drm_dma_handle_t * dmah);
>  int drm_legacy_pci_init(struct drm_driver *driver, struct pci_driver *pdriver);
>  void drm_legacy_pci_exit(struct drm_driver *driver, struct pci_driver *pdriver);
>
>  #else
>
> -static inline void __drm_legacy_pci_free(struct drm_device *dev,
> -                                        drm_dma_handle_t *dmah)
> -{
> -}
> -
>  static inline int drm_legacy_pci_init(struct drm_driver *driver,
>                                       struct pci_driver *pdriver)
>  {
> --
> 2.25.0
>
> _______________________________________________
> dri-devel mailing list
> dri-devel at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/dri-devel


More information about the dri-devel mailing list