Commit 9870d350 authored by Marco Crivellari's avatar Marco Crivellari Committed by Jakub Kicinski
Browse files

net: replace use of system_unbound_wq with system_dfl_wq



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 consistentcy 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: default avatarTejun Heo <tj@kernel.org>
Signed-off-by: default avatarMarco Crivellari <marco.crivellari@suse.com>
Link: https://patch.msgid.link/20250918142427.309519-2-marco.crivellari@suse.com


Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parent dfff1808
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -369,7 +369,7 @@ static void macvlan_broadcast_enqueue(struct macvlan_port *port,
	}
	spin_unlock(&port->bc_queue.lock);

	queue_work(system_unbound_wq, &port->bc_work);
	queue_work(system_dfl_wq, &port->bc_work);

	if (err)
		goto free_nskb;
+3 −3
Original line number Diff line number Diff line
@@ -851,7 +851,7 @@ static void nsim_dev_trap_report_work(struct work_struct *work)
	nsim_dev = nsim_trap_data->nsim_dev;

	if (!devl_trylock(priv_to_devlink(nsim_dev))) {
		queue_delayed_work(system_unbound_wq,
		queue_delayed_work(system_dfl_wq,
				   &nsim_dev->trap_data->trap_report_dw, 1);
		return;
	}
@@ -867,7 +867,7 @@ static void nsim_dev_trap_report_work(struct work_struct *work)
		cond_resched();
	}
	devl_unlock(priv_to_devlink(nsim_dev));
	queue_delayed_work(system_unbound_wq,
	queue_delayed_work(system_dfl_wq,
			   &nsim_dev->trap_data->trap_report_dw,
			   msecs_to_jiffies(NSIM_TRAP_REPORT_INTERVAL_MS));
}
@@ -924,7 +924,7 @@ static int nsim_dev_traps_init(struct devlink *devlink)

	INIT_DELAYED_WORK(&nsim_dev->trap_data->trap_report_dw,
			  nsim_dev_trap_report_work);
	queue_delayed_work(system_unbound_wq,
	queue_delayed_work(system_dfl_wq,
			   &nsim_dev->trap_data->trap_report_dw,
			   msecs_to_jiffies(NSIM_TRAP_REPORT_INTERVAL_MS));

+2 −2
Original line number Diff line number Diff line
@@ -157,9 +157,9 @@ static void linkwatch_schedule_work(int urgent)
	 * override the existing timer.
	 */
	if (test_bit(LW_URGENT, &linkwatch_flags))
		mod_delayed_work(system_unbound_wq, &linkwatch_work, 0);
		mod_delayed_work(system_dfl_wq, &linkwatch_work, 0);
	else
		queue_delayed_work(system_unbound_wq, &linkwatch_work, delay);
		queue_delayed_work(system_dfl_wq, &linkwatch_work, delay);
}


+1 −1
Original line number Diff line number Diff line
@@ -592,7 +592,7 @@ static DECLARE_WORK(unix_gc_work, __unix_gc);
void unix_gc(void)
{
	WRITE_ONCE(gc_in_progress, true);
	queue_work(system_unbound_wq, &unix_gc_work);
	queue_work(system_dfl_wq, &unix_gc_work);
}

#define UNIX_INFLIGHT_TRIGGER_GC 16000