From: Dario Faggioli Date: Wed, 30 Aug 2017 11:06:20 +0000 (+0100) Subject: xen: in do_softirq() sample smp_processor_id() only once. X-Git-Tag: archive/raspbian/4.11.1-1+rpi1~1^2~66^2~1522 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=57450cfe48b56db90166c52d45a411a9279a12e1;p=xen.git xen: in do_softirq() sample smp_processor_id() only once. In fact, right now, we read it at every iteration of the loop. The reason it's done like this is how context switch was handled on IA64 (see commit ae9bfcdc, "[XEN] Various softirq cleanups" [1]). However: 1) we don't have IA64 any longer, and all the achitectures that we do support, are ok with sampling once and for all; 2) sampling at every iteration (slightly) affect performance; 3) sampling at every iteration is misleading, as it makes people believe that it is currently possible that SCHEDULE_SOFTIRQ moves the execution flow on another CPU (and the comment, by reinforcing this belief, makes things even worse!). Therefore, let's: - do the sampling only once, and remove the comment; - leave an ASSERT() around, so that, if context switching logic changes (in current or new arches), we will notice. [1] Some more (historical) information here: http://old-list-archives.xenproject.org/archives/html/xen-devel/2006-06/msg01262.html Signed-off-by: Dario Faggioli Reviewed-by: George Dunlap Reviewed-by: Tim Deegan --- diff --git a/xen/common/softirq.c b/xen/common/softirq.c index ac12cf85e5..67c84ba379 100644 --- a/xen/common/softirq.c +++ b/xen/common/softirq.c @@ -27,16 +27,12 @@ static DEFINE_PER_CPU(unsigned int, batching); static void __do_softirq(unsigned long ignore_mask) { - unsigned int i, cpu; + unsigned int i, cpu = smp_processor_id(); unsigned long pending; for ( ; ; ) { - /* - * Initialise @cpu on every iteration: SCHEDULE_SOFTIRQ may move - * us to another processor. - */ - cpu = smp_processor_id(); + ASSERT(cpu == smp_processor_id()); if ( rcu_pending(cpu) ) rcu_check_callbacks(cpu);