]> Git Repo - J-linux.git/commitdiff
Merge tag 'drm-msm-fixes-2021-01-07' of https://gitlab.freedesktop.org/drm/msm into...
authorDaniel Vetter <[email protected]>
Fri, 8 Jan 2021 08:53:02 +0000 (09:53 +0100)
committerDaniel Vetter <[email protected]>
Fri, 8 Jan 2021 08:53:03 +0000 (09:53 +0100)
A few misc fixes from Rob, mostly fallout from the locking rework that
landed in the merge window, plus a few smaller things.

Signed-off-by: Daniel Vetter <[email protected]>
From: Rob Clark <[email protected]>
Link: https://patchwork.freedesktop.org/patch/msgid/CAF6AEGtWMhzyD6kejmViZeZ+zfJxRvfq-R2t_zA+DcDiTxsYRQ@mail.gmail.com
1  2 
drivers/gpu/drm/msm/msm_drv.c
drivers/gpu/drm/msm/msm_gem.c

index 535a0263ceeb461d111a92e53851a25841e169de,549ffb60e9ca133041c9859c7a24d9c5f23ed202..108c405e03dd92e0535cd88c05b019c4be77fc39
@@@ -402,7 -402,7 +402,7 @@@ static int msm_init_vram(struct drm_dev
        return ret;
  }
  
 -static int msm_drm_init(struct device *dev, struct drm_driver *drv)
 +static int msm_drm_init(struct device *dev, const struct drm_driver *drv)
  {
        struct platform_device *pdev = to_platform_device(dev);
        struct drm_device *ddev;
  
        drm_mode_config_init(ddev);
  
-       /* Bind all our sub-components: */
-       ret = component_bind_all(dev, ddev);
+       ret = msm_init_vram(ddev);
        if (ret)
                goto err_destroy_mdss;
  
-       ret = msm_init_vram(ddev);
+       /* Bind all our sub-components: */
+       ret = component_bind_all(dev, ddev);
        if (ret)
-               goto err_msm_uninit;
+               goto err_destroy_mdss;
  
        dma_set_max_seg_size(dev, UINT_MAX);
  
@@@ -978,6 -978,12 +978,6 @@@ static const struct drm_ioctl_desc msm_
        DRM_IOCTL_DEF_DRV(MSM_SUBMITQUEUE_QUERY, msm_ioctl_submitqueue_query, DRM_RENDER_ALLOW),
  };
  
 -static const struct vm_operations_struct vm_ops = {
 -      .fault = msm_gem_fault,
 -      .open = drm_gem_vm_open,
 -      .close = drm_gem_vm_close,
 -};
 -
  static const struct file_operations fops = {
        .owner              = THIS_MODULE,
        .open               = drm_open,
        .mmap               = msm_gem_mmap,
  };
  
 -static struct drm_driver msm_driver = {
 +static const struct drm_driver msm_driver = {
        .driver_features    = DRIVER_GEM |
                                DRIVER_RENDER |
                                DRIVER_ATOMIC |
        .irq_preinstall     = msm_irq_preinstall,
        .irq_postinstall    = msm_irq_postinstall,
        .irq_uninstall      = msm_irq_uninstall,
 -      .gem_free_object_unlocked = msm_gem_free_object,
 -      .gem_vm_ops         = &vm_ops,
        .dumb_create        = msm_gem_dumb_create,
        .dumb_map_offset    = msm_gem_dumb_map_offset,
        .prime_handle_to_fd = drm_gem_prime_handle_to_fd,
        .prime_fd_to_handle = drm_gem_prime_fd_to_handle,
 -      .gem_prime_pin      = msm_gem_prime_pin,
 -      .gem_prime_unpin    = msm_gem_prime_unpin,
 -      .gem_prime_get_sg_table = msm_gem_prime_get_sg_table,
        .gem_prime_import_sg_table = msm_gem_prime_import_sg_table,
 -      .gem_prime_vmap     = msm_gem_prime_vmap,
 -      .gem_prime_vunmap   = msm_gem_prime_vunmap,
        .gem_prime_mmap     = msm_gem_prime_mmap,
  #ifdef CONFIG_DEBUG_FS
        .debugfs_init       = msm_debugfs_init,
index 9a7c49bc394f81aa34014900bc8a497eb386aa1d,114c0711a302d1e63e8a5fde6afc1931f5245283..9d10739c4eb2dab23cb27257e2f8a0addc31ec68
@@@ -96,6 -96,8 +96,8 @@@ static struct page **get_pages(struct d
  {
        struct msm_gem_object *msm_obj = to_msm_bo(obj);
  
+       WARN_ON(!msm_gem_is_locked(obj));
        if (!msm_obj->pages) {
                struct drm_device *dev = obj->dev;
                struct page **p;
@@@ -211,8 -213,10 +213,8 @@@ int msm_gem_mmap_obj(struct drm_gem_obj
                 * address_space (so unmap_mapping_range does what we want,
                 * in particular in the case of mmap'd dmabufs)
                 */
 -              fput(vma->vm_file);
 -              get_file(obj->filp);
                vma->vm_pgoff = 0;
 -              vma->vm_file  = obj->filp;
 +              vma_set_file(vma, obj->filp);
  
                vma->vm_page_prot = vm_get_page_prot(vma->vm_flags);
        }
@@@ -233,7 -237,7 +235,7 @@@ int msm_gem_mmap(struct file *filp, str
        return msm_gem_mmap_obj(vma->vm_private_data, vma);
  }
  
 -vm_fault_t msm_gem_fault(struct vm_fault *vmf)
 +static vm_fault_t msm_gem_fault(struct vm_fault *vmf)
  {
        struct vm_area_struct *vma = vmf->vma;
        struct drm_gem_object *obj = vma->vm_private_data;
@@@ -988,6 -992,8 +990,8 @@@ void msm_gem_free_object(struct drm_gem
                if (msm_obj->pages)
                        kvfree(msm_obj->pages);
  
+               put_iova_vmas(obj);
                /* dma_buf_detach() grabs resv lock, so we need to unlock
                 * prior to drm_prime_gem_destroy
                 */
        } else {
                msm_gem_vunmap(obj);
                put_pages(obj);
+               put_iova_vmas(obj);
                msm_gem_unlock(obj);
        }
  
-       put_iova_vmas(obj);
        drm_gem_object_release(obj);
  
        kfree(msm_obj);
@@@ -1031,22 -1036,6 +1034,22 @@@ int msm_gem_new_handle(struct drm_devic
        return ret;
  }
  
 +static const struct vm_operations_struct vm_ops = {
 +      .fault = msm_gem_fault,
 +      .open = drm_gem_vm_open,
 +      .close = drm_gem_vm_close,
 +};
 +
 +static const struct drm_gem_object_funcs msm_gem_object_funcs = {
 +      .free = msm_gem_free_object,
 +      .pin = msm_gem_prime_pin,
 +      .unpin = msm_gem_prime_unpin,
 +      .get_sg_table = msm_gem_prime_get_sg_table,
 +      .vmap = msm_gem_prime_vmap,
 +      .vunmap = msm_gem_prime_vunmap,
 +      .vm_ops = &vm_ops,
 +};
 +
  static int msm_gem_new_impl(struct drm_device *dev,
                uint32_t size, uint32_t flags,
                struct drm_gem_object **obj)
        INIT_LIST_HEAD(&msm_obj->vmas);
  
        *obj = &msm_obj->base;
 +      (*obj)->funcs = &msm_gem_object_funcs;
  
        return 0;
  }
@@@ -1115,6 -1103,8 +1118,8 @@@ static struct drm_gem_object *_msm_gem_
                struct msm_gem_vma *vma;
                struct page **pages;
  
+               drm_gem_private_object_init(dev, obj, size);
                msm_gem_lock(obj);
  
                vma = add_vma(obj, NULL);
  
                to_msm_bo(obj)->vram_node = &vma->node;
  
-               drm_gem_private_object_init(dev, obj, size);
+               msm_gem_lock(obj);
                pages = get_pages(obj);
+               msm_gem_unlock(obj);
                if (IS_ERR(pages)) {
                        ret = PTR_ERR(pages);
                        goto fail;
This page took 0.070613 seconds and 4 git commands to generate.