Commit 7f5ec14a authored by Dave Airlie's avatar Dave Airlie

Merge tag 'drm-misc-fixes-2022-07-21' of git://anongit.freedesktop.org/drm/drm-misc into drm-fixes

A scheduling-while-atomic fix for drm/scheduler, a locking fix for TTM,
a typo fix for panel-edp and a resource removal fix for imx/dcss
Signed-off-by: default avatarDave Airlie <airlied@redhat.com>

From: Maxime Ripard <maxime@cerno.tech>
Link: https://patchwork.freedesktop.org/patch/msgid/20220721085550.hrwbukj34y56rzva@houat
parents 1c46f3c0 02c87df2
...@@ -64,8 +64,13 @@ int drm_gem_ttm_vmap(struct drm_gem_object *gem, ...@@ -64,8 +64,13 @@ int drm_gem_ttm_vmap(struct drm_gem_object *gem,
struct iosys_map *map) struct iosys_map *map)
{ {
struct ttm_buffer_object *bo = drm_gem_ttm_of_gem(gem); struct ttm_buffer_object *bo = drm_gem_ttm_of_gem(gem);
int ret;
dma_resv_lock(gem->resv, NULL);
ret = ttm_bo_vmap(bo, map);
dma_resv_unlock(gem->resv);
return ttm_bo_vmap(bo, map); return ret;
} }
EXPORT_SYMBOL(drm_gem_ttm_vmap); EXPORT_SYMBOL(drm_gem_ttm_vmap);
...@@ -82,7 +87,9 @@ void drm_gem_ttm_vunmap(struct drm_gem_object *gem, ...@@ -82,7 +87,9 @@ void drm_gem_ttm_vunmap(struct drm_gem_object *gem,
{ {
struct ttm_buffer_object *bo = drm_gem_ttm_of_gem(gem); struct ttm_buffer_object *bo = drm_gem_ttm_of_gem(gem);
dma_resv_lock(gem->resv, NULL);
ttm_bo_vunmap(bo, map); ttm_bo_vunmap(bo, map);
dma_resv_unlock(gem->resv);
} }
EXPORT_SYMBOL(drm_gem_ttm_vunmap); EXPORT_SYMBOL(drm_gem_ttm_vunmap);
......
...@@ -207,6 +207,7 @@ struct dcss_dev *dcss_dev_create(struct device *dev, bool hdmi_output) ...@@ -207,6 +207,7 @@ struct dcss_dev *dcss_dev_create(struct device *dev, bool hdmi_output)
ret = dcss_submodules_init(dcss); ret = dcss_submodules_init(dcss);
if (ret) { if (ret) {
of_node_put(dcss->of_port);
dev_err(dev, "submodules initialization failed\n"); dev_err(dev, "submodules initialization failed\n");
goto clks_err; goto clks_err;
} }
...@@ -237,6 +238,8 @@ void dcss_dev_destroy(struct dcss_dev *dcss) ...@@ -237,6 +238,8 @@ void dcss_dev_destroy(struct dcss_dev *dcss)
dcss_clocks_disable(dcss); dcss_clocks_disable(dcss);
} }
of_node_put(dcss->of_port);
pm_runtime_disable(dcss->dev); pm_runtime_disable(dcss->dev);
dcss_submodules_stop(dcss); dcss_submodules_stop(dcss);
......
...@@ -713,7 +713,7 @@ static int generic_edp_panel_probe(struct device *dev, struct panel_edp *panel) ...@@ -713,7 +713,7 @@ static int generic_edp_panel_probe(struct device *dev, struct panel_edp *panel)
of_property_read_u32(dev->of_node, "hpd-reliable-delay-ms", &reliable_ms); of_property_read_u32(dev->of_node, "hpd-reliable-delay-ms", &reliable_ms);
desc->delay.hpd_reliable = reliable_ms; desc->delay.hpd_reliable = reliable_ms;
of_property_read_u32(dev->of_node, "hpd-absent-delay-ms", &absent_ms); of_property_read_u32(dev->of_node, "hpd-absent-delay-ms", &absent_ms);
desc->delay.hpd_reliable = absent_ms; desc->delay.hpd_absent = absent_ms;
/* Power the panel on so we can read the EDID */ /* Power the panel on so we can read the EDID */
ret = pm_runtime_get_sync(dev); ret = pm_runtime_get_sync(dev);
......
...@@ -190,7 +190,7 @@ long drm_sched_entity_flush(struct drm_sched_entity *entity, long timeout) ...@@ -190,7 +190,7 @@ long drm_sched_entity_flush(struct drm_sched_entity *entity, long timeout)
} }
EXPORT_SYMBOL(drm_sched_entity_flush); EXPORT_SYMBOL(drm_sched_entity_flush);
static void drm_sched_entity_kill_jobs_irq_work(struct irq_work *wrk) static void drm_sched_entity_kill_jobs_work(struct work_struct *wrk)
{ {
struct drm_sched_job *job = container_of(wrk, typeof(*job), work); struct drm_sched_job *job = container_of(wrk, typeof(*job), work);
...@@ -207,8 +207,8 @@ static void drm_sched_entity_kill_jobs_cb(struct dma_fence *f, ...@@ -207,8 +207,8 @@ static void drm_sched_entity_kill_jobs_cb(struct dma_fence *f,
struct drm_sched_job *job = container_of(cb, struct drm_sched_job, struct drm_sched_job *job = container_of(cb, struct drm_sched_job,
finish_cb); finish_cb);
init_irq_work(&job->work, drm_sched_entity_kill_jobs_irq_work); INIT_WORK(&job->work, drm_sched_entity_kill_jobs_work);
irq_work_queue(&job->work); schedule_work(&job->work);
} }
static struct dma_fence * static struct dma_fence *
......
...@@ -28,7 +28,7 @@ ...@@ -28,7 +28,7 @@
#include <linux/dma-fence.h> #include <linux/dma-fence.h>
#include <linux/completion.h> #include <linux/completion.h>
#include <linux/xarray.h> #include <linux/xarray.h>
#include <linux/irq_work.h> #include <linux/workqueue.h>
#define MAX_WAIT_SCHED_ENTITY_Q_EMPTY msecs_to_jiffies(1000) #define MAX_WAIT_SCHED_ENTITY_Q_EMPTY msecs_to_jiffies(1000)
...@@ -295,7 +295,7 @@ struct drm_sched_job { ...@@ -295,7 +295,7 @@ struct drm_sched_job {
*/ */
union { union {
struct dma_fence_cb finish_cb; struct dma_fence_cb finish_cb;
struct irq_work work; struct work_struct work;
}; };
uint64_t id; uint64_t id;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment