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

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
Loading
Loading
Loading
Loading
+8 −1
Original line number Diff line number Diff line
@@ -64,8 +64,13 @@ int drm_gem_ttm_vmap(struct drm_gem_object *gem,
		     struct iosys_map *map)
{
	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);

@@ -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);

	dma_resv_lock(gem->resv, NULL);
	ttm_bo_vunmap(bo, map);
	dma_resv_unlock(gem->resv);
}
EXPORT_SYMBOL(drm_gem_ttm_vunmap);

+3 −0
Original line number Diff line number Diff line
@@ -207,6 +207,7 @@ struct dcss_dev *dcss_dev_create(struct device *dev, bool hdmi_output)

	ret = dcss_submodules_init(dcss);
	if (ret) {
		of_node_put(dcss->of_port);
		dev_err(dev, "submodules initialization failed\n");
		goto clks_err;
	}
@@ -237,6 +238,8 @@ void dcss_dev_destroy(struct dcss_dev *dcss)
		dcss_clocks_disable(dcss);
	}

	of_node_put(dcss->of_port);

	pm_runtime_disable(dcss->dev);

	dcss_submodules_stop(dcss);
+1 −1
Original line number Diff line number Diff line
@@ -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);
	desc->delay.hpd_reliable = reliable_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 */
	ret = pm_runtime_get_sync(dev);
+3 −3
Original line number Diff line number Diff line
@@ -190,7 +190,7 @@ long drm_sched_entity_flush(struct drm_sched_entity *entity, long timeout)
}
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);

@@ -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,
						 finish_cb);

	init_irq_work(&job->work, drm_sched_entity_kill_jobs_irq_work);
	irq_work_queue(&job->work);
	INIT_WORK(&job->work, drm_sched_entity_kill_jobs_work);
	schedule_work(&job->work);
}

static struct dma_fence *
+2 −2
Original line number Diff line number Diff line
@@ -28,7 +28,7 @@
#include <linux/dma-fence.h>
#include <linux/completion.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)

@@ -295,7 +295,7 @@ struct drm_sched_job {
	 */
	union {
		struct dma_fence_cb		finish_cb;
		struct irq_work 		work;
		struct work_struct 		work;
	};

	uint64_t			id;