]> git.kernelconcepts.de Git - karo-tx-linux.git/commitdiff
Merge branch 'devel-stable' into for-next
authorRussell King <rmk+kernel@arm.linux.org.uk>
Tue, 12 Nov 2013 10:58:59 +0000 (10:58 +0000)
committerRussell King <rmk+kernel@arm.linux.org.uk>
Tue, 12 Nov 2013 10:58:59 +0000 (10:58 +0000)
Conflicts:
arch/arm/include/asm/atomic.h
arch/arm/include/asm/hardirq.h
arch/arm/kernel/smp.c

13 files changed:
1  2 
arch/arm/Kconfig
arch/arm/Makefile
arch/arm/common/mcpm_entry.c
arch/arm/include/asm/Kbuild
arch/arm/include/asm/atomic.h
arch/arm/include/asm/hardirq.h
arch/arm/include/asm/mcpm.h
arch/arm/include/asm/spinlock.h
arch/arm/kernel/head.S
arch/arm/kernel/setup.c
arch/arm/kernel/smp.c
arch/arm/net/bpf_jit_32.c
tools/perf/config/feature-tests.mak

Simple merge
Simple merge
Simple merge
Simple merge
index f8a4336ed8fcacd82b86d66a65940d867b5eac92,134aa28b6f6438752164ba7dae3f78f274b3af37..62d2cb53b06935aed4430bf33c6a127239801ff1
@@@ -256,10 -283,11 +259,11 @@@ static inline long long atomic64_read(c
        return result;
  }
  
 -static inline void atomic64_set(atomic64_t *v, u64 i)
 +static inline void atomic64_set(atomic64_t *v, long long i)
  {
 -      u64 tmp;
 +      long long tmp;
  
+       prefetchw(&v->counter);
        __asm__ __volatile__("@ atomic64_set\n"
  "1:   ldrexd  %0, %H0, [%2]\n"
  "     strexd  %0, %3, %H3, [%2]\n"
  }
  #endif
  
 -static inline void atomic64_add(u64 i, atomic64_t *v)
 +static inline void atomic64_add(long long i, atomic64_t *v)
  {
 -      u64 result;
 +      long long result;
        unsigned long tmp;
  
+       prefetchw(&v->counter);
        __asm__ __volatile__("@ atomic64_add\n"
  "1:   ldrexd  %0, %H0, [%3]\n"
- "     adds    %0, %0, %4\n"
- "     adc     %H0, %H0, %H4\n"
+ "     adds    %Q0, %Q0, %Q4\n"
+ "     adc     %R0, %R0, %R4\n"
  "     strexd  %1, %0, %H0, [%3]\n"
  "     teq     %1, #0\n"
  "     bne     1b"
@@@ -311,15 -340,16 +316,16 @@@ static inline long long atomic64_add_re
        return result;
  }
  
 -static inline void atomic64_sub(u64 i, atomic64_t *v)
 +static inline void atomic64_sub(long long i, atomic64_t *v)
  {
 -      u64 result;
 +      long long result;
        unsigned long tmp;
  
+       prefetchw(&v->counter);
        __asm__ __volatile__("@ atomic64_sub\n"
  "1:   ldrexd  %0, %H0, [%3]\n"
- "     subs    %0, %0, %4\n"
- "     sbc     %H0, %H0, %H4\n"
+ "     subs    %Q0, %Q0, %Q4\n"
+ "     sbc     %R0, %R0, %R4\n"
  "     strexd  %1, %0, %H0, [%3]\n"
  "     teq     %1, #0\n"
  "     bne     1b"
index 3d7351c844aac0ae2392d441796ce9904dcaf717,3d7351c844aac0ae2392d441796ce9904dcaf717..fe3ea776dc34267724f377465134e52b39434fed
@@@ -5,7 -5,7 +5,7 @@@
  #include <linux/threads.h>
  #include <asm/irq.h>
  
--#define NR_IPI        7
++#define NR_IPI        8
  
  typedef struct {
        unsigned int __softirq_pending;
Simple merge
Simple merge
Simple merge
Simple merge
index e115cbb0d25a52d52bad80376c228c2b818816e6,5c820cbcf918140873650f9a4a61376d4c951bcf..dc894ab3622b1effac1b885bd919bf629f66dc5d
@@@ -67,7 -66,7 +67,8 @@@ enum ipi_msg_type 
        IPI_CALL_FUNC,
        IPI_CALL_FUNC_SINGLE,
        IPI_CPU_STOP,
 +      IPI_IRQ_WORK,
+       IPI_COMPLETION,
  };
  
  static DECLARE_COMPLETION(cpu_running);
@@@ -466,7 -457,7 +467,8 @@@ static const char *ipi_types[NR_IPI] = 
        S(IPI_CALL_FUNC, "Function call interrupts"),
        S(IPI_CALL_FUNC_SINGLE, "Single function call interrupts"),
        S(IPI_CPU_STOP, "CPU stop interrupts"),
 +      S(IPI_IRQ_WORK, "IRQ work interrupts"),
+       S(IPI_COMPLETION, "completion interrupts"),
  };
  
  void show_ipi_list(struct seq_file *p, int prec)
@@@ -576,14 -580,12 +591,20 @@@ void handle_IPI(int ipinr, struct pt_re
                irq_exit();
                break;
  
 +#ifdef CONFIG_IRQ_WORK
 +      case IPI_IRQ_WORK:
 +              irq_enter();
 +              irq_work_run();
 +              irq_exit();
 +              break;
 +#endif
 +
+       case IPI_COMPLETION:
+               irq_enter();
+               ipi_complete(cpu);
+               irq_exit();
+               break;
        default:
                printk(KERN_CRIT "CPU%u: Unknown IPI message 0x%x\n",
                       cpu, ipinr);
Simple merge
Simple merge