aboutsummaryrefslogtreecommitdiffstats
path: root/common/recipes-kernel/linux/files/0320-drm-amdgpu-remove-page-flip-work-queue-v3.patch
diff options
context:
space:
mode:
Diffstat (limited to 'common/recipes-kernel/linux/files/0320-drm-amdgpu-remove-page-flip-work-queue-v3.patch')
-rw-r--r--common/recipes-kernel/linux/files/0320-drm-amdgpu-remove-page-flip-work-queue-v3.patch143
1 files changed, 143 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/files/0320-drm-amdgpu-remove-page-flip-work-queue-v3.patch b/common/recipes-kernel/linux/files/0320-drm-amdgpu-remove-page-flip-work-queue-v3.patch
new file mode 100644
index 00000000..c56786ca
--- /dev/null
+++ b/common/recipes-kernel/linux/files/0320-drm-amdgpu-remove-page-flip-work-queue-v3.patch
@@ -0,0 +1,143 @@
+From 33dc2e651e561844b00f5fa8fa09aa42b03e3c7b Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Christian=20K=C3=B6nig?= <christian.koenig@amd.com>
+Date: Thu, 11 Feb 2016 17:31:37 +0100
+Subject: [PATCH 0320/1110] drm/amdgpu: remove page flip work queue v3
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Just use the system queue now that we don't block any more.
+
+v2: handle DAL as well.
+v3: agd: split DAL changes out
+
+Signed-off-by: Christian König <christian.koenig@amd.com>
+Reviewed-by: Mykola Lysenko <mykola.lysenko@amd.com>
+Acked-by: Alex Deucher <alexander.deucher@amd.com> (v1)
+---
+ drivers/gpu/drm/amd/amdgpu/amdgpu_display.c | 4 +---
+ drivers/gpu/drm/amd/amdgpu/amdgpu_mode.h | 1 -
+ drivers/gpu/drm/amd/amdgpu/dce_v10_0.c | 4 +---
+ drivers/gpu/drm/amd/amdgpu/dce_v11_0.c | 4 +---
+ drivers/gpu/drm/amd/amdgpu/dce_v8_0.c | 4 +---
+ 5 files changed, 4 insertions(+), 13 deletions(-)
+
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_display.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_display.c
+index 35756ad..df65b11 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_display.c
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_display.c
+@@ -39,11 +39,9 @@ static void amdgpu_flip_callback(struct fence *f, struct fence_cb *cb)
+ {
+ struct amdgpu_flip_work *work =
+ container_of(cb, struct amdgpu_flip_work, cb);
+- struct amdgpu_device *adev = work->adev;
+- struct amdgpu_crtc *amdgpu_crtc = adev->mode_info.crtcs[work->crtc_id];
+
+ fence_put(f);
+- queue_work(amdgpu_crtc->pflip_queue, &work->flip_work);
++ schedule_work(&work->flip_work);
+ }
+
+ static bool amdgpu_flip_handle_fence(struct amdgpu_flip_work *work,
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_mode.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_mode.h
+index 3b2d75d..81bd964 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_mode.h
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_mode.h
+@@ -390,7 +390,6 @@ struct amdgpu_crtc {
+ struct drm_display_mode native_mode;
+ u32 pll_id;
+ /* page flipping */
+- struct workqueue_struct *pflip_queue;
+ struct amdgpu_flip_work *pflip_works;
+ enum amdgpu_flip_status pflip_status;
+ int deferred_flip_completion;
+diff --git a/drivers/gpu/drm/amd/amdgpu/dce_v10_0.c b/drivers/gpu/drm/amd/amdgpu/dce_v10_0.c
+index 093599a..a8ac8a3 100644
+--- a/drivers/gpu/drm/amd/amdgpu/dce_v10_0.c
++++ b/drivers/gpu/drm/amd/amdgpu/dce_v10_0.c
+@@ -2670,7 +2670,6 @@ static void dce_v10_0_crtc_destroy(struct drm_crtc *crtc)
+ struct amdgpu_crtc *amdgpu_crtc = to_amdgpu_crtc(crtc);
+
+ drm_crtc_cleanup(crtc);
+- destroy_workqueue(amdgpu_crtc->pflip_queue);
+ kfree(amdgpu_crtc);
+ }
+
+@@ -2890,7 +2889,6 @@ static int dce_v10_0_crtc_init(struct amdgpu_device *adev, int index)
+
+ drm_mode_crtc_set_gamma_size(&amdgpu_crtc->base, 256);
+ amdgpu_crtc->crtc_id = index;
+- amdgpu_crtc->pflip_queue = create_singlethread_workqueue("amdgpu-pageflip-queue");
+ adev->mode_info.crtcs[index] = amdgpu_crtc;
+
+ amdgpu_crtc->max_cursor_width = 128;
+@@ -3366,7 +3364,7 @@ static int dce_v10_0_pageflip_irq(struct amdgpu_device *adev,
+ spin_unlock_irqrestore(&adev->ddev->event_lock, flags);
+
+ drm_vblank_put(adev->ddev, amdgpu_crtc->crtc_id);
+- queue_work(amdgpu_crtc->pflip_queue, &works->unpin_work);
++ schedule_work(&works->unpin_work);
+
+ return 0;
+ }
+diff --git a/drivers/gpu/drm/amd/amdgpu/dce_v11_0.c b/drivers/gpu/drm/amd/amdgpu/dce_v11_0.c
+index 8e67249..a7699be 100644
+--- a/drivers/gpu/drm/amd/amdgpu/dce_v11_0.c
++++ b/drivers/gpu/drm/amd/amdgpu/dce_v11_0.c
+@@ -2661,7 +2661,6 @@ static void dce_v11_0_crtc_destroy(struct drm_crtc *crtc)
+ struct amdgpu_crtc *amdgpu_crtc = to_amdgpu_crtc(crtc);
+
+ drm_crtc_cleanup(crtc);
+- destroy_workqueue(amdgpu_crtc->pflip_queue);
+ kfree(amdgpu_crtc);
+ }
+
+@@ -2881,7 +2880,6 @@ static int dce_v11_0_crtc_init(struct amdgpu_device *adev, int index)
+
+ drm_mode_crtc_set_gamma_size(&amdgpu_crtc->base, 256);
+ amdgpu_crtc->crtc_id = index;
+- amdgpu_crtc->pflip_queue = create_singlethread_workqueue("amdgpu-pageflip-queue");
+ adev->mode_info.crtcs[index] = amdgpu_crtc;
+
+ amdgpu_crtc->max_cursor_width = 128;
+@@ -3361,7 +3359,7 @@ static int dce_v11_0_pageflip_irq(struct amdgpu_device *adev,
+ spin_unlock_irqrestore(&adev->ddev->event_lock, flags);
+
+ drm_vblank_put(adev->ddev, amdgpu_crtc->crtc_id);
+- queue_work(amdgpu_crtc->pflip_queue, &works->unpin_work);
++ schedule_work(&works->unpin_work);
+
+ return 0;
+ }
+diff --git a/drivers/gpu/drm/amd/amdgpu/dce_v8_0.c b/drivers/gpu/drm/amd/amdgpu/dce_v8_0.c
+index d0e128c..628d7b2 100644
+--- a/drivers/gpu/drm/amd/amdgpu/dce_v8_0.c
++++ b/drivers/gpu/drm/amd/amdgpu/dce_v8_0.c
+@@ -2582,7 +2582,6 @@ static void dce_v8_0_crtc_destroy(struct drm_crtc *crtc)
+ struct amdgpu_crtc *amdgpu_crtc = to_amdgpu_crtc(crtc);
+
+ drm_crtc_cleanup(crtc);
+- destroy_workqueue(amdgpu_crtc->pflip_queue);
+ kfree(amdgpu_crtc);
+ }
+
+@@ -2809,7 +2808,6 @@ static int dce_v8_0_crtc_init(struct amdgpu_device *adev, int index)
+
+ drm_mode_crtc_set_gamma_size(&amdgpu_crtc->base, 256);
+ amdgpu_crtc->crtc_id = index;
+- amdgpu_crtc->pflip_queue = create_singlethread_workqueue("amdgpu-pageflip-queue");
+ adev->mode_info.crtcs[index] = amdgpu_crtc;
+
+ amdgpu_crtc->max_cursor_width = CIK_CURSOR_WIDTH;
+@@ -3375,7 +3373,7 @@ static int dce_v8_0_pageflip_irq(struct amdgpu_device *adev,
+ spin_unlock_irqrestore(&adev->ddev->event_lock, flags);
+
+ drm_vblank_put(adev->ddev, amdgpu_crtc->crtc_id);
+- queue_work(amdgpu_crtc->pflip_queue, &works->unpin_work);
++ schedule_work(&works->unpin_work);
+
+ return 0;
+ }
+--
+2.7.4
+