1. 29 Dec, 2008 1 commit
    • Rusty Russell's avatar
      cpumask: smp_call_function_many() · 54b11e6d
      Rusty Russell authored
      Impact: Implementation change to remove cpumask_t from stack.
      
      Actually change smp_call_function_mask() to smp_call_function_many().
      We avoid cpumasks on the stack in this version.
      
      (S390 has its own version, but that's going away apparently).
      
      We have to do some dancing to figure out if 0 or 1 other cpus are in
      the mask supplied and the online mask without allocating a tmp
      cpumask.  It's still fairly cheap.
      
      We allocate the cpumask at the end of the call_function_data
      structure: if allocation fails we fallback to smp_call_function_single
      rather than using the baroque quiescing code (which needs a cpumask on
      stack).
      
      (Thanks to Hiroshi Shimamoto for spotting several bugs in previous versions!)
      Signed-off-by: default avatarRusty Russell <rusty@rustcorp.com.au>
      Signed-off-by: default avatarMike Travis <travis@sgi.com>
      Cc: Hiroshi Shimamoto <h-shimamoto@ct.jp.nec.com>
      Cc: npiggin@suse.de
      Cc: axboe@kernel.dk
      54b11e6d
  2. 19 Dec, 2008 1 commit
    • Mike Travis's avatar
      cpumask: add sysfs displays for configured and disabled cpu maps · e057d7ae
      Mike Travis authored
      Impact: add new sysfs files.
      
      Add sysfs files "kernel_max" and "offline" to display the max CPU index
      allowed (NR_CPUS-1), and the map of cpus that are offline.
      
      Cpus can be offlined via HOTPLUG, disabled by the BIOS ACPI tables, or
      if they exceed the number of cpus allowed by the NR_CPUS config option,
      or the "maxcpus=NUM" kernel start parameter.
      
      The "possible_cpus=NUM" parameter can also extend the number of possible
      cpus allowed, in which case the cpus not present at startup will be
      in the offline state.  (These cpus can be HOTPLUGGED ON after system
      startup [pending a follow-on patch to provide the capability via the
      /sys/devices/sys/cpu/cpuN/online mechanism to bring them online.])
      
      By design, the "offlined cpus > possible cpus" display will always
      use the following formats:
      
        * all possible cpus online:   "x$"    or "x-y$"
        * some possible cpus offline: ".*,x$" or ".*,x-y$"
      
      where:
        x == number of possible cpus (nr_cpu_ids); and
        y == number of cpus >= NR_CPUS or maxcpus (if y > x).
      
      One use of this feature is for distros to select (or configure) the
      appropriate kernel to install for the resident system.
      
      Notes:
        * cpus offlined <= possible cpus will be printed for all architectures.
        * cpus offlined >  possible cpus will only be printed for arches that
        	set 'total_cpus' [X86 only in this patch].
      
      Based on tip/cpus4096 + .../rusty/linux-2.6-for-ingo.git/master +
      	 x86-only-patches sent 12/15.
      Signed-off-by: default avatarMike Travis <travis@sgi.com>
      Signed-off-by: default avatarRusty Russell <rusty@rustcorp.com.au>
      e057d7ae
  3. 15 Dec, 2008 1 commit
  4. 06 Nov, 2008 1 commit
    • Rusty Russell's avatar
      cpumask: introduce new API, without changing anything · 2d3854a3
      Rusty Russell authored
      Impact: introduce new APIs
      
      We want to deprecate cpumasks on the stack, as we are headed for
      gynormous numbers of CPUs.  Eventually, we want to head towards an
      undefined 'struct cpumask' so they can never be declared on stack.
      
      1) New cpumask functions which take pointers instead of copies.
         (cpus_* -> cpumask_*)
      
      2) Several new helpers to reduce requirements for temporary cpumasks
         (cpumask_first_and, cpumask_next_and, cpumask_any_and)
      
      3) Helpers for declaring cpumasks on or offstack for large NR_CPUS
         (cpumask_var_t, alloc_cpumask_var and free_cpumask_var)
      
      4) 'struct cpumask' for explicitness and to mark new-style code.
      
      5) Make iterator functions stop at nr_cpu_ids (a runtime constant),
         not NR_CPUS for time efficiency and for smaller dynamic allocations
         in future.
      
      6) cpumask_copy() so we can allocate less than a full cpumask eventually
         (for alloc_cpumask_var), and so we can eliminate the 'struct cpumask'
         definition eventually.
      
      7) work_on_cpu() helper for doing task on a CPU, rather than saving old
         cpumask for current thread and manipulating it.
      
      8) smp_call_function_many() which is smp_call_function_mask() except
         taking a cpumask pointer.
      
      Note that this patch simply introduces the new functions and leaves
      the obsolescent ones in place.  This is to simplify the transition
      patches.
      Signed-off-by: default avatarRusty Russell <rusty@rustcorp.com.au>
      Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
      2d3854a3
  5. 17 Oct, 2008 1 commit
  6. 26 Jul, 2008 1 commit
  7. 04 Jul, 2008 1 commit
    • Heiko Carstens's avatar
      generic-ipi: fix s390 build bug · ba8dd03a
      Heiko Carstens authored
      forgot to remove #include <linux/spinlock.h> from linux/smp.h while
      fixing the original s390 build bug.
      
      Patch below fixes this build bug caused by header inclusion dependencies:
      
        CC      kernel/timer.o
      In file included from include/linux/spinlock.h:87,
                       from include/linux/smp.h:11,
                       from include/linux/kernel_stat.h:4,
                       from kernel/timer.c:22:
      include/asm/spinlock.h: In function '__raw_spin_lock':
      include/asm/spinlock.h:69: error: implicit declaration of function 'smp_processor_id'
      Signed-off-by: default avatarHeiko Carstens <heiko.carstens@de.ibm.com>
      Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
      ba8dd03a
  8. 26 Jun, 2008 3 commits
  9. 30 Jan, 2008 1 commit
    • Andi Kleen's avatar
      x86: optimize lock prefix switching to run less frequently · ca74a6f8
      Andi Kleen authored
      On VMs implemented using JITs that cache translated code changing the lock
      prefixes is a quite costly operation that forces the JIT to throw away and
      retranslate a lot of code.
      
      Previously a SMP kernel would rewrite the locks once for each CPU which
      is quite unnecessary. This patch changes the code to never switch at boot in
       the normal case (SMP kernel booting with >1 CPU) or only once for SMP kernel
      on UP.
      
      This makes a significant difference in boot up performance on AMD SimNow!
      Also I expect it to be a little faster on native systems too because a smp
      switch does a lot of text_poke()s which each synchronize the pipeline.
      
      v1->v2: Rename max_cpus
      v1->v2: Fix off by one in UP check (Thomas Gleixner)
      Signed-off-by: default avatarAndi Kleen <ak@suse.de>
      Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
      Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
      ca74a6f8
  10. 09 Nov, 2007 1 commit
    • Ingo Molnar's avatar
      KVM: fix !SMP build error · a5fbb6d1
      Ingo Molnar authored
      fix a !SMP build error:
      
      drivers/kvm/kvm_main.c: In function 'kvm_flush_remote_tlbs':
      drivers/kvm/kvm_main.c:220: error: implicit declaration of function 'smp_call_function_mask'
      
      (and also avoid unused function warning related to up_smp_call_function()
      not making use of the 'func' parameter.)
      Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
      a5fbb6d1
  11. 17 Jul, 2007 1 commit
  12. 16 Jul, 2007 1 commit
  13. 17 May, 2007 1 commit
  14. 09 May, 2007 1 commit
  15. 07 Dec, 2006 1 commit
  16. 26 Sep, 2006 1 commit
  17. 30 Jun, 2006 1 commit
    • Andrew Morton's avatar
      [PATCH] add smp_setup_processor_id() · 033ab7f8
      Andrew Morton authored
      Presently, smp_processor_id() isn't necessarily set up until setup_arch().
      But it's used in boot_cpu_init() and printk() and perhaps in other places,
      prior to setup_arch() being called.
      
      So provide a new smp_setup_processor_id() which is called before anything
      else, wire it up for Voyager (which boots on a CPU other than #0, and broke).
      
      Cc: James Bottomley <James.Bottomley@steeleye.com>
      Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
      033ab7f8
  18. 26 Apr, 2006 1 commit
  19. 26 Mar, 2006 1 commit
  20. 22 Mar, 2006 1 commit
    • Andrew Morton's avatar
      [PATCH] on_each_cpu(): disable local interrupts · 78eef01b
      Andrew Morton authored
      When on_each_cpu() runs the callback on other CPUs, it runs with local
      interrupts disabled.  So we should run the function with local interrupts
      disabled on this CPU, too.
      
      And do the same for UP, so the callback is run in the same environment on both
      UP and SMP.  (strictly it should do preempt_disable() too, but I think
      local_irq_disable is sufficiently equivalent).
      
      Also uninlines on_each_cpu().  softirq.c was the most appropriate file I could
      find, but it doesn't seem to justify creating a new file.
      
      Oh, and fix up that comment over (under?) x86's smp_call_function().  It
      drives me nuts.
      Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
      78eef01b
  21. 07 Feb, 2006 1 commit
  22. 23 Nov, 2005 1 commit
  23. 22 Nov, 2005 1 commit
  24. 28 Jul, 2005 2 commits
    • Linus Torvalds's avatar
      Revert broken "statement with no effect" warning fix · 2ac6608c
      Linus Torvalds authored
      It may shut up gcc, but it also incorrectly changes the semantics of the
      smp_call_function() helpers.
      
      You can fix the warning other ways if you are interested (create another
      inline function that takes no arguments and returns zero), but
      preferably gcc just shouldn't complain about unused return values from
      statement expressions in the first place.
      2ac6608c
    • Richard Henderson's avatar
      [PATCH] alpha: fix "statement with no effect" warnings · 79a88102
      Richard Henderson authored
      Apparently gcc 4.0 complains about "({ 0; });", which leads to -Werror
      breakage in one of the alpha oprofile modules.
      
      One might could argue that this is a gcc bug, in that statement-expressions
      should be considered to be function-like rather than statement-like for the
      purposes of this warning.  But it's just as easy to use an inline function
      in the first place, side-stepping the issue.
      Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
      79a88102
  25. 21 Jun, 2005 1 commit
    • Ingo Molnar's avatar
      [PATCH] smp_processor_id() cleanup · 39c715b7
      Ingo Molnar authored
      This patch implements a number of smp_processor_id() cleanup ideas that
      Arjan van de Ven and I came up with.
      
      The previous __smp_processor_id/_smp_processor_id/smp_processor_id API
      spaghetti was hard to follow both on the implementational and on the
      usage side.
      
      Some of the complexity arose from picking wrong names, some of the
      complexity comes from the fact that not all architectures defined
      __smp_processor_id.
      
      In the new code, there are two externally visible symbols:
      
       - smp_processor_id(): debug variant.
      
       - raw_smp_processor_id(): nondebug variant. Replaces all existing
         uses of _smp_processor_id() and __smp_processor_id(). Defined
         by every SMP architecture in include/asm-*/smp.h.
      
      There is one new internal symbol, dependent on DEBUG_PREEMPT:
      
       - debug_smp_processor_id(): internal debug variant, mapped to
                                   smp_processor_id().
      
      Also, i moved debug_smp_processor_id() from lib/kernel_lock.c into a new
      lib/smp_processor_id.c file.  All related comments got updated and/or
      clarified.
      
      I have build/boot tested the following 8 .config combinations on x86:
      
       {SMP,UP} x {PREEMPT,!PREEMPT} x {DEBUG_PREEMPT,!DEBUG_PREEMPT}
      
      I have also build/boot tested x64 on UP/PREEMPT/DEBUG_PREEMPT.  (Other
      architectures are untested, but should work just fine.)
      Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
      Signed-off-by: default avatarArjan van de Ven <arjan@infradead.org>
      Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
      39c715b7
  26. 16 Apr, 2005 1 commit
    • Linus Torvalds's avatar
      Linux-2.6.12-rc2 · 1da177e4
      Linus Torvalds authored
      Initial git repository build. I'm not bothering with the full history,
      even though we have it. We can create a separate "historical" git
      archive of that later if we want to, and in the meantime it's about
      3.2GB when imported into git - space that would just make the early
      git days unnecessarily complicated, when we don't have a lot of good
      infrastructure for it.
      
      Let it rip!
      1da177e4