Commit 356583b9 authored by Dave Airlie's avatar Dave Airlie
Browse files

Merge tag 'drm-misc-fixes-2020-11-05' of git://anongit.freedesktop.org/drm/drm-misc into drm-fixes



Some patches for vc4 to fix some resources cleanup issues, two fixes for
panfrost for madvise and the shrinker and a constification of fonts
structure

Signed-off-by: default avatarDave Airlie <airlied@redhat.com>

From: Maxime Ripard <maxime@cerno.tech>
Link: https://patchwork.freedesktop.org/patch/msgid/20201105101354.socyu26jwyns7lfj@gilmour.lan
parents f56fb012 9522750c
Loading
Loading
Loading
Loading
+3 −2
Original line number Diff line number Diff line
@@ -626,6 +626,7 @@ static int panfrost_probe(struct platform_device *pdev)
err_out1:
	pm_runtime_disable(pfdev->dev);
	panfrost_device_fini(pfdev);
	pm_runtime_set_suspended(pfdev->dev);
err_out0:
	drm_dev_put(ddev);
	return err;
@@ -640,9 +641,9 @@ static int panfrost_remove(struct platform_device *pdev)
	panfrost_gem_shrinker_cleanup(ddev);

	pm_runtime_get_sync(pfdev->dev);
	panfrost_device_fini(pfdev);
	pm_runtime_put_sync_suspend(pfdev->dev);
	pm_runtime_disable(pfdev->dev);
	panfrost_device_fini(pfdev);
	pm_runtime_set_suspended(pfdev->dev);

	drm_dev_put(ddev);
	return 0;
+1 −3
Original line number Diff line number Diff line
@@ -105,14 +105,12 @@ void panfrost_gem_mapping_put(struct panfrost_gem_mapping *mapping)
	kref_put(&mapping->refcount, panfrost_gem_mapping_release);
}

void panfrost_gem_teardown_mappings(struct panfrost_gem_object *bo)
void panfrost_gem_teardown_mappings_locked(struct panfrost_gem_object *bo)
{
	struct panfrost_gem_mapping *mapping;

	mutex_lock(&bo->mappings.lock);
	list_for_each_entry(mapping, &bo->mappings.list, node)
		panfrost_gem_teardown_mapping(mapping);
	mutex_unlock(&bo->mappings.lock);
}

int panfrost_gem_open(struct drm_gem_object *obj, struct drm_file *file_priv)
+1 −1
Original line number Diff line number Diff line
@@ -82,7 +82,7 @@ struct panfrost_gem_mapping *
panfrost_gem_mapping_get(struct panfrost_gem_object *bo,
			 struct panfrost_file_priv *priv);
void panfrost_gem_mapping_put(struct panfrost_gem_mapping *mapping);
void panfrost_gem_teardown_mappings(struct panfrost_gem_object *bo);
void panfrost_gem_teardown_mappings_locked(struct panfrost_gem_object *bo);

void panfrost_gem_shrinker_init(struct drm_device *dev);
void panfrost_gem_shrinker_cleanup(struct drm_device *dev);
+11 −3
Original line number Diff line number Diff line
@@ -40,18 +40,26 @@ static bool panfrost_gem_purge(struct drm_gem_object *obj)
{
	struct drm_gem_shmem_object *shmem = to_drm_gem_shmem_obj(obj);
	struct panfrost_gem_object *bo = to_panfrost_bo(obj);
	bool ret = false;

	if (atomic_read(&bo->gpu_usecount))
		return false;

	if (!mutex_trylock(&shmem->pages_lock))
	if (!mutex_trylock(&bo->mappings.lock))
		return false;

	panfrost_gem_teardown_mappings(bo);
	if (!mutex_trylock(&shmem->pages_lock))
		goto unlock_mappings;

	panfrost_gem_teardown_mappings_locked(bo);
	drm_gem_shmem_purge_locked(obj);
	ret = true;

	mutex_unlock(&shmem->pages_lock);
	return true;

unlock_mappings:
	mutex_unlock(&bo->mappings.lock);
	return ret;
}

static unsigned long
+5 −4
Original line number Diff line number Diff line
@@ -449,7 +449,7 @@ struct vc4_bo *vc4_bo_create(struct drm_device *dev, size_t unaligned_size,
	}

	if (IS_ERR(cma_obj)) {
		struct drm_printer p = drm_info_printer(vc4->dev->dev);
		struct drm_printer p = drm_info_printer(vc4->base.dev);
		DRM_ERROR("Failed to allocate from CMA:\n");
		vc4_bo_stats_print(&p, vc4);
		return ERR_PTR(-ENOMEM);
@@ -590,7 +590,7 @@ static void vc4_bo_cache_time_work(struct work_struct *work)
{
	struct vc4_dev *vc4 =
		container_of(work, struct vc4_dev, bo_cache.time_work);
	struct drm_device *dev = vc4->dev;
	struct drm_device *dev = &vc4->base;

	mutex_lock(&vc4->bo_lock);
	vc4_bo_cache_free_old(dev);
@@ -1005,6 +1005,7 @@ int vc4_get_tiling_ioctl(struct drm_device *dev, void *data,
	return 0;
}

static void vc4_bo_cache_destroy(struct drm_device *dev, void *unused);
int vc4_bo_cache_init(struct drm_device *dev)
{
	struct vc4_dev *vc4 = to_vc4_dev(dev);
@@ -1033,10 +1034,10 @@ int vc4_bo_cache_init(struct drm_device *dev)
	INIT_WORK(&vc4->bo_cache.time_work, vc4_bo_cache_time_work);
	timer_setup(&vc4->bo_cache.time_timer, vc4_bo_cache_time_timer, 0);

	return 0;
	return drmm_add_action_or_reset(dev, vc4_bo_cache_destroy, NULL);
}

void vc4_bo_cache_destroy(struct drm_device *dev)
static void vc4_bo_cache_destroy(struct drm_device *dev, void *unused)
{
	struct vc4_dev *vc4 = to_vc4_dev(dev);
	int i;
Loading