mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-28 06:34:12 +08:00
Short summary of fixes pull:
* Return -ENOTTY for non-DRM ioctls * amdgpu: Fix COW checks * nouveau: init BO GME fields * panel: Avoid double free * ttm: Fix refcounting in ttm_global_init(); NULL checks * vc4: Fix interrupt handling -----BEGIN PGP SIGNATURE----- iQEzBAABCAAdFiEEchf7rIzpz2NEoWjlaA3BHVMLeiMFAmD5W0UACgkQaA3BHVML eiPH0AgAs9RuJzXPdSz4r6zkGQ1q2hGYhcev/BmV0HSxZ6X6YKbeYZqnWhwwARqc U/HdlVwSKVIDl9/izTDZYgTMf8zyDx+ZisP51FAccZP7bC0N9VgfXaUlQaMLrZIa JdKFgQNXWcaWAcMrdL4tSFKoUXWjsncvC6UrzV9I0bVn5CoWXE87M2Swk2f9J08/ kMcAXQclWOgP8ul251YRD3PvSZXZ6c4E1dM8xbELMz4lhSDuijCkb5Bb8peoSHD1 NbFVrbVy/3/onr/+GHGAcC15wmdzpBKPxnYmUNynfpAO/zOze/xhCEAZWJVE9GOt rX7+RrHDtWMStXQyoRlH7IU/rdpp7A== =G0lh -----END PGP SIGNATURE----- Merge tag 'drm-misc-fixes-2021-07-22' of git://anongit.freedesktop.org/drm/drm-misc into drm-fixes Short summary of fixes pull: * Return -ENOTTY for non-DRM ioctls * amdgpu: Fix COW checks * nouveau: init BO GME fields * panel: Avoid double free * ttm: Fix refcounting in ttm_global_init(); NULL checks * vc4: Fix interrupt handling Signed-off-by: Dave Airlie <airlied@redhat.com> From: Thomas Zimmermann <tzimmermann@suse.de> Link: https://patchwork.freedesktop.org/patch/msgid/YPlbkmH6S4VAHP9j@linux-uq9g.fritz.box
This commit is contained in:
commit
2e41a6696b
@ -255,6 +255,15 @@ static int amdgpu_gem_object_mmap(struct drm_gem_object *obj, struct vm_area_str
|
||||
if (bo->flags & AMDGPU_GEM_CREATE_NO_CPU_ACCESS)
|
||||
return -EPERM;
|
||||
|
||||
/* Workaround for Thunk bug creating PROT_NONE,MAP_PRIVATE mappings
|
||||
* for debugger access to invisible VRAM. Should have used MAP_SHARED
|
||||
* instead. Clearing VM_MAYWRITE prevents the mapping from ever
|
||||
* becoming writable and makes is_cow_mapping(vm_flags) false.
|
||||
*/
|
||||
if (is_cow_mapping(vma->vm_flags) &&
|
||||
!(vma->vm_flags & (VM_READ | VM_WRITE | VM_EXEC)))
|
||||
vma->vm_flags &= ~VM_MAYWRITE;
|
||||
|
||||
return drm_gem_ttm_mmap(obj, vma);
|
||||
}
|
||||
|
||||
|
@ -834,6 +834,9 @@ long drm_ioctl(struct file *filp,
|
||||
if (drm_dev_is_unplugged(dev))
|
||||
return -ENODEV;
|
||||
|
||||
if (DRM_IOCTL_TYPE(cmd) != DRM_IOCTL_BASE)
|
||||
return -ENOTTY;
|
||||
|
||||
is_driver_ioctl = nr >= DRM_COMMAND_BASE && nr < DRM_COMMAND_END;
|
||||
|
||||
if (is_driver_ioctl) {
|
||||
|
@ -149,6 +149,8 @@ nouveau_bo_del_ttm(struct ttm_buffer_object *bo)
|
||||
*/
|
||||
if (bo->base.dev)
|
||||
drm_gem_object_release(&bo->base);
|
||||
else
|
||||
dma_resv_fini(&bo->base._resv);
|
||||
|
||||
kfree(nvbo);
|
||||
}
|
||||
@ -330,6 +332,10 @@ nouveau_bo_new(struct nouveau_cli *cli, u64 size, int align,
|
||||
if (IS_ERR(nvbo))
|
||||
return PTR_ERR(nvbo);
|
||||
|
||||
nvbo->bo.base.size = size;
|
||||
dma_resv_init(&nvbo->bo.base._resv);
|
||||
drm_vma_node_reset(&nvbo->bo.base.vma_node);
|
||||
|
||||
ret = nouveau_bo_init(nvbo, size, align, domain, sg, robj);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
@ -447,7 +447,6 @@ static int rpi_touchscreen_remove(struct i2c_client *i2c)
|
||||
drm_panel_remove(&ts->base);
|
||||
|
||||
mipi_dsi_device_unregister(ts->dsi);
|
||||
kfree(ts->dsi);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -102,6 +102,9 @@ void ttm_bo_move_to_lru_tail(struct ttm_buffer_object *bo,
|
||||
return;
|
||||
}
|
||||
|
||||
if (!mem)
|
||||
return;
|
||||
|
||||
man = ttm_manager_type(bdev, mem->mem_type);
|
||||
list_move_tail(&bo->lru, &man->lru[bo->priority]);
|
||||
|
||||
|
@ -63,6 +63,9 @@ int ttm_mem_io_reserve(struct ttm_device *bdev,
|
||||
void ttm_mem_io_free(struct ttm_device *bdev,
|
||||
struct ttm_resource *mem)
|
||||
{
|
||||
if (!mem)
|
||||
return;
|
||||
|
||||
if (!mem->bus.offset && !mem->bus.addr)
|
||||
return;
|
||||
|
||||
|
@ -100,6 +100,8 @@ static int ttm_global_init(void)
|
||||
debugfs_create_atomic_t("buffer_objects", 0444, ttm_debugfs_root,
|
||||
&glob->bo_count);
|
||||
out:
|
||||
if (ret)
|
||||
--ttm_glob_use_count;
|
||||
mutex_unlock(&ttm_global_mutex);
|
||||
return ret;
|
||||
}
|
||||
|
@ -1857,38 +1857,46 @@ static int vc4_hdmi_cec_init(struct vc4_hdmi *vc4_hdmi)
|
||||
vc4_hdmi_cec_update_clk_div(vc4_hdmi);
|
||||
|
||||
if (vc4_hdmi->variant->external_irq_controller) {
|
||||
ret = devm_request_threaded_irq(&pdev->dev,
|
||||
platform_get_irq_byname(pdev, "cec-rx"),
|
||||
vc4_cec_irq_handler_rx_bare,
|
||||
vc4_cec_irq_handler_rx_thread, 0,
|
||||
"vc4 hdmi cec rx", vc4_hdmi);
|
||||
ret = request_threaded_irq(platform_get_irq_byname(pdev, "cec-rx"),
|
||||
vc4_cec_irq_handler_rx_bare,
|
||||
vc4_cec_irq_handler_rx_thread, 0,
|
||||
"vc4 hdmi cec rx", vc4_hdmi);
|
||||
if (ret)
|
||||
goto err_delete_cec_adap;
|
||||
|
||||
ret = devm_request_threaded_irq(&pdev->dev,
|
||||
platform_get_irq_byname(pdev, "cec-tx"),
|
||||
vc4_cec_irq_handler_tx_bare,
|
||||
vc4_cec_irq_handler_tx_thread, 0,
|
||||
"vc4 hdmi cec tx", vc4_hdmi);
|
||||
ret = request_threaded_irq(platform_get_irq_byname(pdev, "cec-tx"),
|
||||
vc4_cec_irq_handler_tx_bare,
|
||||
vc4_cec_irq_handler_tx_thread, 0,
|
||||
"vc4 hdmi cec tx", vc4_hdmi);
|
||||
if (ret)
|
||||
goto err_delete_cec_adap;
|
||||
goto err_remove_cec_rx_handler;
|
||||
} else {
|
||||
HDMI_WRITE(HDMI_CEC_CPU_MASK_SET, 0xffffffff);
|
||||
|
||||
ret = devm_request_threaded_irq(&pdev->dev, platform_get_irq(pdev, 0),
|
||||
vc4_cec_irq_handler,
|
||||
vc4_cec_irq_handler_thread, 0,
|
||||
"vc4 hdmi cec", vc4_hdmi);
|
||||
ret = request_threaded_irq(platform_get_irq(pdev, 0),
|
||||
vc4_cec_irq_handler,
|
||||
vc4_cec_irq_handler_thread, 0,
|
||||
"vc4 hdmi cec", vc4_hdmi);
|
||||
if (ret)
|
||||
goto err_delete_cec_adap;
|
||||
}
|
||||
|
||||
ret = cec_register_adapter(vc4_hdmi->cec_adap, &pdev->dev);
|
||||
if (ret < 0)
|
||||
goto err_delete_cec_adap;
|
||||
goto err_remove_handlers;
|
||||
|
||||
return 0;
|
||||
|
||||
err_remove_handlers:
|
||||
if (vc4_hdmi->variant->external_irq_controller)
|
||||
free_irq(platform_get_irq_byname(pdev, "cec-tx"), vc4_hdmi);
|
||||
else
|
||||
free_irq(platform_get_irq(pdev, 0), vc4_hdmi);
|
||||
|
||||
err_remove_cec_rx_handler:
|
||||
if (vc4_hdmi->variant->external_irq_controller)
|
||||
free_irq(platform_get_irq_byname(pdev, "cec-rx"), vc4_hdmi);
|
||||
|
||||
err_delete_cec_adap:
|
||||
cec_delete_adapter(vc4_hdmi->cec_adap);
|
||||
|
||||
@ -1897,6 +1905,15 @@ err_delete_cec_adap:
|
||||
|
||||
static void vc4_hdmi_cec_exit(struct vc4_hdmi *vc4_hdmi)
|
||||
{
|
||||
struct platform_device *pdev = vc4_hdmi->pdev;
|
||||
|
||||
if (vc4_hdmi->variant->external_irq_controller) {
|
||||
free_irq(platform_get_irq_byname(pdev, "cec-rx"), vc4_hdmi);
|
||||
free_irq(platform_get_irq_byname(pdev, "cec-tx"), vc4_hdmi);
|
||||
} else {
|
||||
free_irq(platform_get_irq(pdev, 0), vc4_hdmi);
|
||||
}
|
||||
|
||||
cec_unregister_adapter(vc4_hdmi->cec_adap);
|
||||
}
|
||||
#else
|
||||
|
@ -68,6 +68,7 @@ typedef int drm_ioctl_compat_t(struct file *filp, unsigned int cmd,
|
||||
unsigned long arg);
|
||||
|
||||
#define DRM_IOCTL_NR(n) _IOC_NR(n)
|
||||
#define DRM_IOCTL_TYPE(n) _IOC_TYPE(n)
|
||||
#define DRM_MAJOR 226
|
||||
|
||||
/**
|
||||
|
Loading…
Reference in New Issue
Block a user