Messages in this thread Patch in this message | | | From | Donghai Qiao <> | Subject | [PATCH v3 06/11] smp: use smp_call_csd() from irq_work.c and core.c | Date | Tue, 17 May 2022 14:03:21 -0400 |
| |
irq_work.c and core.c should use the cross interface rather than using a unpublished internal function __smp_call_single_queue.
But this change also exposed unpublished types SMP_CALL_TYPE_TTWU and SMP_CALL_TYPE_IRQ_WORK. However, this is a temporarily change so that all kernel clients can call the interface as the first step. A permanent solution should implement new cross call func() for both and from there the TTWU and IRQ_WORK types of requests can be processed. That way, the special TTWU and IRQ_WORK types will not be visible from the cross call interface. Because this needs to change core.s and irq_work.c, this should be done with a follow up patch set to reduce the level of risk.
Signed-off-by: Donghai Qiao <dqiao@redhat.com> --- v1 -> v2: Removed 'x' from the function names and change XCALL to SMP_CALL from the new macros v2 -> v3: Modifed the commit comments kernel/irq_work.c | 4 ++-- kernel/sched/core.c | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/kernel/irq_work.c b/kernel/irq_work.c index 7afa40fe5cc4..aa67ea2ccb8f 100644 --- a/kernel/irq_work.c +++ b/kernel/irq_work.c @@ -159,8 +159,8 @@ bool irq_work_queue_on(struct irq_work *work, int cpu) if (!irq_work_claim(work)) goto out; } - - __smp_call_single_queue(cpu, &work->node.llist); + smp_call_csd(cpu, (call_single_data_t *)&work->node.llist, + SMP_CALL_TYPE_IRQ_WORK); } else { __irq_work_queue_local(work); } diff --git a/kernel/sched/core.c b/kernel/sched/core.c index 51efaabac3e4..6d1d30bd6220 100644 --- a/kernel/sched/core.c +++ b/kernel/sched/core.c @@ -3780,7 +3780,7 @@ static void __ttwu_queue_wakelist(struct task_struct *p, int cpu, int wake_flags p->sched_remote_wakeup = !!(wake_flags & WF_MIGRATED); WRITE_ONCE(rq->ttwu_pending, 1); - __smp_call_single_queue(cpu, &p->wake_entry.llist); + smp_call_csd(cpu, (call_single_data_t *)&p->wake_entry.llist, SMP_CALL_TYPE_TTWU); } void wake_up_if_idle(int cpu) -- 2.27.0
| |