[PATCH v2 1/2] accel/ivpu: replace use of system_unbound_wq with system_dfl_wq

Marco Crivellari posted 2 patches 3 months, 1 week ago
[PATCH v2 1/2] accel/ivpu: replace use of system_unbound_wq with system_dfl_wq
Posted by Marco Crivellari 3 months, 1 week ago
Currently if a user enqueue a work item using schedule_delayed_work() the
used wq is "system_wq" (per-cpu wq) while queue_delayed_work() use
WORK_CPU_UNBOUND (used when a cpu is not specified). The same applies to
schedule_work() that is using system_wq and queue_work(), that makes use
again of WORK_CPU_UNBOUND.

This lack of consistency cannot be addressed without refactoring the API.

system_unbound_wq should be the default workqueue so as not to enforce
locality constraints for random work whenever it's not required.

Adding system_dfl_wq to encourage its use when unbound work should be used.

The old system_unbound_wq will be kept for a few release cycles.

Suggested-by: Tejun Heo <tj@kernel.org>
Signed-off-by: Marco Crivellari <marco.crivellari@suse.com>
---
 drivers/accel/ivpu/ivpu_pm.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/accel/ivpu/ivpu_pm.c b/drivers/accel/ivpu/ivpu_pm.c
index 475ddc94f1cf..ffa2ba7cafe2 100644
--- a/drivers/accel/ivpu/ivpu_pm.c
+++ b/drivers/accel/ivpu/ivpu_pm.c
@@ -186,7 +186,7 @@ void ivpu_pm_trigger_recovery(struct ivpu_device *vdev, const char *reason)
 	if (atomic_cmpxchg(&vdev->pm->reset_pending, 0, 1) == 0) {
 		ivpu_hw_diagnose_failure(vdev);
 		ivpu_hw_irq_disable(vdev); /* Disable IRQ early to protect from IRQ storm */
-		queue_work(system_unbound_wq, &vdev->pm->recovery_work);
+		queue_work(system_dfl_wq, &vdev->pm->recovery_work);
 	}
 }
 
-- 
2.51.0
Re: [PATCH v2 1/2] accel/ivpu: replace use of system_unbound_wq with system_dfl_wq
Posted by Karol Wachowski 3 months, 1 week ago
On 10/29/2025 5:56 PM, Marco Crivellari wrote:
> Currently if a user enqueue a work item using schedule_delayed_work() the
> used wq is "system_wq" (per-cpu wq) while queue_delayed_work() use
> WORK_CPU_UNBOUND (used when a cpu is not specified). The same applies to
> schedule_work() that is using system_wq and queue_work(), that makes use
> again of WORK_CPU_UNBOUND.
>
> This lack of consistency cannot be addressed without refactoring the API.
>
> system_unbound_wq should be the default workqueue so as not to enforce
> locality constraints for random work whenever it's not required.
>
> Adding system_dfl_wq to encourage its use when unbound work should be used.
>
> The old system_unbound_wq will be kept for a few release cycles.
>
> Suggested-by: Tejun Heo <tj@kernel.org>
> Signed-off-by: Marco Crivellari <marco.crivellari@suse.com>
> ---
>  drivers/accel/ivpu/ivpu_pm.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/drivers/accel/ivpu/ivpu_pm.c b/drivers/accel/ivpu/ivpu_pm.c
> index 475ddc94f1cf..ffa2ba7cafe2 100644
> --- a/drivers/accel/ivpu/ivpu_pm.c
> +++ b/drivers/accel/ivpu/ivpu_pm.c
> @@ -186,7 +186,7 @@ void ivpu_pm_trigger_recovery(struct ivpu_device *vdev, const char *reason)
>  	if (atomic_cmpxchg(&vdev->pm->reset_pending, 0, 1) == 0) {
>  		ivpu_hw_diagnose_failure(vdev);
>  		ivpu_hw_irq_disable(vdev); /* Disable IRQ early to protect from IRQ storm */
> -		queue_work(system_unbound_wq, &vdev->pm->recovery_work);
> +		queue_work(system_dfl_wq, &vdev->pm->recovery_work);
>  	}
>  }
Reviewed-by: Karol Wachowski <karol.wachowski@linux.intel.com>
>
Re: [PATCH v2 1/2] accel/ivpu: replace use of system_unbound_wq with system_dfl_wq
Posted by Karol Wachowski 3 months, 1 week ago
On 10/29/2025 9:01 PM, Karol Wachowski wrote:
> On 10/29/2025 5:56 PM, Marco Crivellari wrote:
>> Currently if a user enqueue a work item using schedule_delayed_work() the
>> used wq is "system_wq" (per-cpu wq) while queue_delayed_work() use
>> WORK_CPU_UNBOUND (used when a cpu is not specified). The same applies to
>> schedule_work() that is using system_wq and queue_work(), that makes use
>> again of WORK_CPU_UNBOUND.
>>
>> This lack of consistency cannot be addressed without refactoring the API.
>>
>> system_unbound_wq should be the default workqueue so as not to enforce
>> locality constraints for random work whenever it's not required.
>>
>> Adding system_dfl_wq to encourage its use when unbound work should be used.
>>
>> The old system_unbound_wq will be kept for a few release cycles.
>>
>> Suggested-by: Tejun Heo <tj@kernel.org>
>> Signed-off-by: Marco Crivellari <marco.crivellari@suse.com>
>> ---
>>  drivers/accel/ivpu/ivpu_pm.c | 2 +-
>>  1 file changed, 1 insertion(+), 1 deletion(-)
>>
>> diff --git a/drivers/accel/ivpu/ivpu_pm.c b/drivers/accel/ivpu/ivpu_pm.c
>> index 475ddc94f1cf..ffa2ba7cafe2 100644
>> --- a/drivers/accel/ivpu/ivpu_pm.c
>> +++ b/drivers/accel/ivpu/ivpu_pm.c
>> @@ -186,7 +186,7 @@ void ivpu_pm_trigger_recovery(struct ivpu_device *vdev, const char *reason)
>>  	if (atomic_cmpxchg(&vdev->pm->reset_pending, 0, 1) == 0) {
>>  		ivpu_hw_diagnose_failure(vdev);
>>  		ivpu_hw_irq_disable(vdev); /* Disable IRQ early to protect from IRQ storm */
>> -		queue_work(system_unbound_wq, &vdev->pm->recovery_work);
>> +		queue_work(system_dfl_wq, &vdev->pm->recovery_work);
>>  	}
>>  }
> Reviewed-by: Karol Wachowski <karol.wachowski@linux.intel.com>
>>  
Pushed to drm-misc-next.
-Karol