1. 26 11月, 2013 22 次提交
  2. 15 11月, 2013 1 次提交
  3. 14 11月, 2013 3 次提交
    • T
      preempt: Make PREEMPT_ACTIVE generic · 00d1a39e
      Thomas Gleixner 提交于
      No point in having this bit defined by architecture.
      Signed-off-by: NThomas Gleixner <tglx@linutronix.de>
      Acked-by: NPeter Zijlstra <peterz@infradead.org>
      Link: http://lkml.kernel.org/r/20130917183629.090698799@linutronix.de
      00d1a39e
    • T
      hardirq: Make hardirq bits generic · 54197e43
      Thomas Gleixner 提交于
      There is no reason for per arch hardirq bits. Make them all generic
      Signed-off-by: NThomas Gleixner <tglx@linutronix.de>
      Acked-by: NPeter Zijlstra <peterz@infradead.org>
      Link: http://lkml.kernel.org/r/20130917183628.534494408@linutronix.de
      54197e43
    • T
      m68k: Simplify low level interrupt handling code · 09f90f66
      Thomas Gleixner 提交于
      The low level interrupt entry code of m68k contains the following:
      
          add_preempt_count(HARDIRQ_OFFSET);
      
          do_IRQ();
      	irq_enter();
      	    add_preempt_count(HARDIRQ_OFFSET);
      	handle_interrupt();    
      	irq_exit();    
      	    sub_preempt_count(HARDIRQ_OFFSET);
      	    if (in_interrupt())
             	       return; <---- On m68k always taken!
      	    if (local_softirq_pending())
             	       do_softirq();
      
          sub_preempt_count(HARDIRQ_OFFSET);
          if (in_hardirq())
             return;
          if (status_on_stack_has_interrupt_priority_mask > 0)
             return;
          if (local_softirq_pending())
             do_softirq();
      
          ret_from_exception:
      	if (interrupted_context_is_kernel)
      	   return:
      	....
      
      I tried to find a proper explanation for this, but the changelog is
      sparse and there are no mails explaining it further. But obviously
      this relates to the interrupt priority levels of the m68k and tries to
      be extra clever with nested interrupts. Though this cleverness just
      adds code bloat to the interrupt hotpath.
      
      For the common case of non nested interrupts the code runs through two
      extra conditionals to the only important one, which checks whether the
      return is to kernel or user space.
      
      For the nested case the checks for in_hardirq() and the priority mask
      value on stack catch only the case where the nested interrupt happens
      inside the hard irq context of the first interrupt. If the nested
      interrupt happens while the first interrupt handles soft interrupts,
      then these extra checks buy nothing. The nested interrupt will fall
      through to the final kernel/user space return check at
      ret_from_exception.
      
      Changing the code flow in the following way:
      
          do_IRQ();
      	irq_enter();
      	    add_preempt_count(HARDIRQ_OFFSET);
      	handle_interrupt();    
      	irq_exit();    
      	    sub_preempt_count(HARDIRQ_OFFSET);
      	    if (in_interrupt())
             	       return;
      	    if (local_softirq_pending())
             	       do_softirq();
      
          ret_from_exception:
      	if (interrupted_context_is_kernel)
      	   return:
      
      makes the region protected by the hardirq count slightly smaller and
      the softirq handling is invoked with a minimal deeper stack. But
      otherwise it's completely functional equivalent and saves 104 bytes of
      text in arch/m68k/kernel/entry.o.
      
      This modification allows us further to get rid of the limitations
      which m68k puts on the preempt_count layout, so we can make the
      preempt count bits completely generic.
      Signed-off-by: NThomas Gleixner <tglx@linutronix.de>
      Tested-by: NMichael Schmitz <schmitz@biophys.uni-duesseldorf.de>
      Acked-by: NGeert Uytterhoeven <geert@linux-m68k.org>
      Cc: Linux/m68k <linux-m68k@vger.kernel.org>
      Cc: Andreas Schwab <schwab@linux-m68k.org>
      Link: http://lkml.kernel.org/r/alpine.DEB.2.02.1311112052360.30673@ionos.tec.linutronix.de
      09f90f66
  4. 24 10月, 2013 1 次提交
  5. 26 9月, 2013 1 次提交
  6. 25 9月, 2013 1 次提交
  7. 13 9月, 2013 2 次提交
  8. 10 9月, 2013 1 次提交
  9. 26 8月, 2013 5 次提交
  10. 23 8月, 2013 2 次提交
    • G
      m68k/atari: ARAnyM - Always use physical addresses in NatFeat calls · 55490050
      Geert Uytterhoeven 提交于
      Pointers passed to ARAnyM NatFeat calls should be physical addresses,
      not virtual addresses. This worked before because on Atari, physical and
      virtual kernel addresses are the same, as long as normal kernel memory
      is concerned.
      
      Correct the few remaining places where virtual addresses were used.
      Signed-off-by: NGeert Uytterhoeven <geert@linux-m68k.org>
      55490050
    • G
      m68k: Ignore disabled HSYNC interrupt on Atari for irqs_disabled() · 3c776a07
      Geert Uytterhoeven 提交于
      When running a multi-platform kernel on Atari, warning messages like
      the following may be printed:
      
          WARNING: at /root/linux-3.10.1/init/main.c:698 do_one_initcall+0x12e/0x13a()
          initcall param_sysfs_init+0x0/0x1a4 returned with disabled interrupts
      
      This is caused by the different definitions of ALLOWINT for Atari and
      other platforms:
      
          #if defined(MACH_ATARI_ONLY)
          #define ALLOWINT        (~0x500)
          #else
          #define ALLOWINT        (~0x700)
          #endif
      
      On Atari, we want to disable the high-frequency HSYNC interrupt:
        - On Atari-only kernels, this is handled completely through ALLOWINT,
        - On multi-platform kernels, this is handled by disabling the HSYNC
          interrupt from the interrupt handler.
      
      However, as in the latter case arch_irqs_disabled_flags() didn't ignore the
      disabling of the HSYNC interrupt, irqs_disabled() would detect false
      positives.
      
      Ignore the HSYNC interrupt when running on Atari to fix this.
      For single-platform kernels this test is optimized away by the compiler.
      Reported-by: NThorsten Glaser <tg@debian.org>
      Signed-off-by: NGeert Uytterhoeven <geert@linux-m68k.org>
      Tested-by: NThorsten Glaser <tg@debian.org>
      3c776a07
  11. 14 8月, 2013 1 次提交
    • F
      m68k: hardirq_count() only need preempt_mask.h · a703f9b7
      Frederic Weisbecker 提交于
      The m68k irqflags implementation needs to check hardirq
      context in some cases.
      
      As it is a very low level header file, it's better to
      include preempt_mask.h rather than hardirq.h when the
      only purpose is to use irq context APIs. This way we
      can avoid future header circular dependencies when
      vtime.h will expand to use static keys.
      Signed-off-by: NFrederic Weisbecker <fweisbec@gmail.com>
      Cc: Steven Rostedt <rostedt@goodmis.org>
      Cc: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
      Cc: Ingo Molnar <mingo@kernel.org>
      Cc: Thomas Gleixner <tglx@linutronix.de>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Borislav Petkov <bp@alien8.de>
      Cc: Li Zhong <zhong@linux.vnet.ibm.com>
      Cc: Mike Galbraith <efault@gmx.de>
      Cc: Kevin Hilman <khilman@linaro.org>
      Cc: Geert Uytterhoeven <geert@linux-m68k.org>
      a703f9b7