Message ID | 20230524090521.596399-4-luciano.coelho@intel.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | drm/i915: implement internal workqueues | expand |
On 24/05/2023 10:05, Luca Coelho wrote: > Instead of using a global workqueue for the SW fence selftest, > allocate a separate one temporarily only while running the test. > > Cc: Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp> > Cc: Tvrtko Ursulin <tvrtko.ursulin@intel.com> > Cc: Jani Nikula <jani.nikula@intel.com> > Cc: Ville Syrjälä <ville.syrjala@linux.intel.com> > Signed-off-by: Luca Coelho <luciano.coelho@intel.com> > --- > drivers/gpu/drm/i915/selftests/i915_sw_fence.c | 16 +++++++++++++--- > 1 file changed, 13 insertions(+), 3 deletions(-) > > diff --git a/drivers/gpu/drm/i915/selftests/i915_sw_fence.c b/drivers/gpu/drm/i915/selftests/i915_sw_fence.c > index daa985e5a19b..8f5ce71fa453 100644 > --- a/drivers/gpu/drm/i915/selftests/i915_sw_fence.c > +++ b/drivers/gpu/drm/i915/selftests/i915_sw_fence.c > @@ -523,12 +523,19 @@ static void task_ipc(struct work_struct *work) > static int test_ipc(void *arg) > { > struct task_ipc ipc; > + struct workqueue_struct *wq; > int ret = 0; > > + wq = alloc_workqueue("i1915-selftest", 0, 0); > + if (wq == NULL) > + return -ENOMEM; > + > /* Test use of i915_sw_fence as an interprocess signaling mechanism */ > ipc.in = alloc_fence(); > - if (!ipc.in) > - return -ENOMEM; > + if (!ipc.in) { > + ret = -ENOMEM; > + goto err_work; > + } > ipc.out = alloc_fence(); > if (!ipc.out) { > ret = -ENOMEM; > @@ -540,7 +547,7 @@ static int test_ipc(void *arg) > > ipc.value = 0; > INIT_WORK_ONSTACK(&ipc.work, task_ipc); > - schedule_work(&ipc.work); > + queue_work(wq, &ipc.work); > > wait_for_completion(&ipc.started); > > @@ -563,6 +570,9 @@ static int test_ipc(void *arg) > free_fence(ipc.out); > err_in: > free_fence(ipc.in); > +err_work: > + destroy_workqueue(wq); > + > return ret; > } > Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com> Regards, Tvrtko
diff --git a/drivers/gpu/drm/i915/selftests/i915_sw_fence.c b/drivers/gpu/drm/i915/selftests/i915_sw_fence.c index daa985e5a19b..8f5ce71fa453 100644 --- a/drivers/gpu/drm/i915/selftests/i915_sw_fence.c +++ b/drivers/gpu/drm/i915/selftests/i915_sw_fence.c @@ -523,12 +523,19 @@ static void task_ipc(struct work_struct *work) static int test_ipc(void *arg) { struct task_ipc ipc; + struct workqueue_struct *wq; int ret = 0; + wq = alloc_workqueue("i1915-selftest", 0, 0); + if (wq == NULL) + return -ENOMEM; + /* Test use of i915_sw_fence as an interprocess signaling mechanism */ ipc.in = alloc_fence(); - if (!ipc.in) - return -ENOMEM; + if (!ipc.in) { + ret = -ENOMEM; + goto err_work; + } ipc.out = alloc_fence(); if (!ipc.out) { ret = -ENOMEM; @@ -540,7 +547,7 @@ static int test_ipc(void *arg) ipc.value = 0; INIT_WORK_ONSTACK(&ipc.work, task_ipc); - schedule_work(&ipc.work); + queue_work(wq, &ipc.work); wait_for_completion(&ipc.started); @@ -563,6 +570,9 @@ static int test_ipc(void *arg) free_fence(ipc.out); err_in: free_fence(ipc.in); +err_work: + destroy_workqueue(wq); + return ret; }
Instead of using a global workqueue for the SW fence selftest, allocate a separate one temporarily only while running the test. Cc: Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp> Cc: Tvrtko Ursulin <tvrtko.ursulin@intel.com> Cc: Jani Nikula <jani.nikula@intel.com> Cc: Ville Syrjälä <ville.syrjala@linux.intel.com> Signed-off-by: Luca Coelho <luciano.coelho@intel.com> --- drivers/gpu/drm/i915/selftests/i915_sw_fence.c | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-)