[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-changelog] [xen master] xen: in do_softirq() sample smp_processor_id() only once.



commit 57450cfe48b56db90166c52d45a411a9279a12e1
Author:     Dario Faggioli <dario.faggioli@xxxxxxxxxx>
AuthorDate: Wed Aug 30 12:06:20 2017 +0100
Commit:     George Dunlap <george.dunlap@xxxxxxxxxx>
CommitDate: Wed Aug 30 12:06:20 2017 +0100

    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 <dario.faggioli@xxxxxxxxxx>
    Reviewed-by: George Dunlap <george.dunlap@xxxxxxxxxxxxx>
    Reviewed-by: Tim Deegan <tim@xxxxxxx>
---
 xen/common/softirq.c | 8 ++------
 1 file changed, 2 insertions(+), 6 deletions(-)

diff --git a/xen/common/softirq.c b/xen/common/softirq.c
index ac12cf8..67c84ba 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);
--
generated by git-patchbot for /home/xen/git/xen.git#master

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxx
https://lists.xenproject.org/xen-changelog

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.