]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
Merge remote-tracking branch 'tip/auto-latest'
authorStephen Rothwell <sfr@canb.auug.org.au>
Fri, 7 Oct 2011 04:06:54 +0000 (15:06 +1100)
committerStephen Rothwell <sfr@canb.auug.org.au>
Fri, 7 Oct 2011 04:06:59 +0000 (15:06 +1100)
Conflicts:
drivers/iommu/Makefile

20 files changed:
1  2 
Documentation/kernel-parameters.txt
arch/arm/common/gic.c
arch/arm/kernel/smp.c
arch/arm/kernel/traps.c
arch/arm/mach-footbridge/netwinder-hw.c
arch/arm/mach-integrator/core.c
arch/arm/mach-ixp4xx/common-pci.c
arch/arm/mm/cache-l2x0.c
arch/arm/mm/context.c
arch/ia64/configs/generic_defconfig
arch/x86/Kconfig
arch/x86/include/asm/cpufeature.h
drivers/acpi/processor_idle.c
drivers/cpufreq/cpufreq_ondemand.c
drivers/iommu/Kconfig
drivers/iommu/Makefile
drivers/iommu/intel-iommu.c
drivers/leds/Kconfig
include/linux/llist.h
kernel/sched.c

Simple merge
index 8b5be72eb9b9f729197d4fc3123b7d89efa9b3f1,6fba8bd5689e2b1e36932b79c36d4a85fedc2649..1619eebb625d2c7cc64e84f7f7562a52416238b1
@@@ -181,12 -180,12 +181,12 @@@ static int gic_set_affinity(struct irq_
                return -EINVAL;
  
        mask = 0xff << shift;
 -      bit = 1 << (cpu + shift);
 +      bit = 1 << (cpu_logical_map(cpu) + shift);
  
-       spin_lock(&irq_controller_lock);
+       raw_spin_lock(&irq_controller_lock);
        val = readl_relaxed(reg) & ~mask;
        writel_relaxed(val | bit, reg);
-       spin_unlock(&irq_controller_lock);
+       raw_spin_unlock(&irq_controller_lock);
  
        return IRQ_SET_MASK_OK;
  }
Simple merge
index 74969248c375ee3d5c60f0a98f2d5018252fa50f,81cc05a0274cb3f32a27ddb10ba42eac77772cbc..c32ba00e8437464f0069212c5ffa06472da741ed
@@@ -268,11 -267,9 +268,11 @@@ void die(const char *str, struct pt_reg
  
        oops_enter();
  
-       spin_lock_irq(&die_lock);
+       raw_spin_lock_irq(&die_lock);
        console_verbose();
        bust_spinlocks(1);
 +      if (!user_mode(regs))
 +              report_bug(regs->ARM_pc, regs);
        ret = __die(str, err, thread, regs);
  
        if (regs && kexec_should_crash(thread->task))
@@@ -304,26 -301,8 +304,26 @@@ void arm_notify_die(const char *str, st
        }
  }
  
 +#ifdef CONFIG_GENERIC_BUG
 +
 +int is_valid_bugaddr(unsigned long pc)
 +{
 +#ifdef CONFIG_THUMB2_KERNEL
 +      unsigned short bkpt;
 +#else
 +      unsigned long bkpt;
 +#endif
 +
 +      if (probe_kernel_address((unsigned *)pc, bkpt))
 +              return 0;
 +
 +      return bkpt == BUG_INSTR_VALUE;
 +}
 +
 +#endif
 +
  static LIST_HEAD(undef_hook);
- static DEFINE_SPINLOCK(undef_lock);
+ static DEFINE_RAW_SPINLOCK(undef_lock);
  
  void register_undef_hook(struct undef_hook *hook)
  {
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
index f798cdd3699e2081fbed2fec81eec9f409d155b2,6394994a2b9dafff89522e1bb22ad021c09d30fb..2f4448794bc793133d5f1e8a3145be4c1cc685b3
@@@ -1,8 -1,6 +1,9 @@@
  obj-$(CONFIG_IOMMU_API) += iommu.o
  obj-$(CONFIG_MSM_IOMMU) += msm_iommu.o msm_iommu_dev.o
  obj-$(CONFIG_AMD_IOMMU) += amd_iommu.o amd_iommu_init.o
- obj-$(CONFIG_DMAR) += dmar.o iova.o intel-iommu.o
- obj-$(CONFIG_INTR_REMAP) += dmar.o intr_remapping.o
+ obj-$(CONFIG_DMAR_TABLE) += dmar.o
+ obj-$(CONFIG_INTEL_IOMMU) += iova.o intel-iommu.o
+ obj-$(CONFIG_IRQ_REMAP) += intr_remapping.o
 +obj-$(CONFIG_OMAP_IOMMU) += omap-iommu.o
 +obj-$(CONFIG_OMAP_IOVMM) += omap-iovmm.o
 +obj-$(CONFIG_OMAP_IOMMU_DEBUG) += omap-iommu-debug.o
Simple merge
Simple merge
index aa0c8b5b3cd0d2b2df5804d1cf94aebb76580d2c,837fb4ae66fb112f42e94683e4946f657aa06696..7287734e08d1ac0fb662862491fb3719ba8fa9a4
@@@ -118,9 -138,44 +138,50 @@@ static inline bool llist_empty(const st
        return ACCESS_ONCE(head->first) == NULL;
  }
  
- void llist_add(struct llist_node *new, struct llist_head *head);
- void llist_add_batch(struct llist_node *new_first, struct llist_node *new_last,
-                    struct llist_head *head);
- struct llist_node *llist_del_first(struct llist_head *head);
- struct llist_node *llist_del_all(struct llist_head *head);
+ static inline struct llist_node *llist_next(struct llist_node *node)
+ {
+       return node->next;
+ }
+ /**
+  * llist_add - add a new entry
+  * @new:      new entry to be added
+  * @head:     the head for your lock-less list
+  *
+  * Return whether list is empty before adding.
+  */
+ static inline bool llist_add(struct llist_node *new, struct llist_head *head)
+ {
+       struct llist_node *entry, *old_entry;
+       entry = head->first;
+       for (;;) {
+               old_entry = entry;
+               new->next = entry;
+               entry = cmpxchg(&head->first, old_entry, new);
+               if (entry == old_entry)
+                       break;
+       }
+       return old_entry == NULL;
+ }
+ /**
+  * llist_del_all - delete all entries from lock-less list
+  * @head:     the head of lock-less list to delete all entries
+  *
+  * If list is empty, return NULL, otherwise, delete all entries and
+  * return the pointer to the first entry.  The order of entries
+  * deleted is from the newest to the oldest added one.
+  */
+ static inline struct llist_node *llist_del_all(struct llist_head *head)
+ {
+       return xchg(&head->first, NULL);
+ }
++
++extern bool llist_add_batch(struct llist_node *new_first,
++                          struct llist_node *new_last,
++                          struct llist_head *head);
++extern struct llist_node *llist_del_first(struct llist_head *head);
++
  #endif /* LLIST_H */
diff --cc kernel/sched.c
Simple merge