Merge commit 'v2.6.34-rc6' into core/locking
authorIngo Molnar <mingo@elte.hu>
Mon, 3 May 2010 07:17:01 +0000 (09:17 +0200)
committerIngo Molnar <mingo@elte.hu>
Mon, 3 May 2010 07:17:01 +0000 (09:17 +0200)
1  2 
drivers/block/hd.c
kernel/lockdep.c
sound/drivers/pcsp/pcsp_lib.c

diff --combined drivers/block/hd.c
@@@ -34,7 -34,6 +34,6 @@@
  #include <linux/fs.h>
  #include <linux/kernel.h>
  #include <linux/genhd.h>
- #include <linux/slab.h>
  #include <linux/string.h>
  #include <linux/ioport.h>
  #include <linux/init.h>
@@@ -165,12 -164,12 +164,12 @@@ unsigned long read_timer(void
        unsigned long t, flags;
        int i;
  
 -      spin_lock_irqsave(&i8253_lock, flags);
 +      raw_spin_lock_irqsave(&i8253_lock, flags);
        t = jiffies * 11932;
        outb_p(0, 0x43);
        i = inb_p(0x40);
        i |= inb(0x40) << 8;
 -      spin_unlock_irqrestore(&i8253_lock, flags);
 +      raw_spin_unlock_irqrestore(&i8253_lock, flags);
        return(t - i);
  }
  #endif
diff --combined kernel/lockdep.c
@@@ -43,6 -43,7 +43,7 @@@
  #include <linux/ftrace.h>
  #include <linux/stringify.h>
  #include <linux/bitops.h>
+ #include <linux/gfp.h>
  
  #include <asm/sections.h>
  
@@@ -430,7 -431,20 +431,7 @@@ static struct stack_trace lockdep_init_
  /*
   * Various lockdep statistics:
   */
 -atomic_t chain_lookup_hits;
 -atomic_t chain_lookup_misses;
 -atomic_t hardirqs_on_events;
 -atomic_t hardirqs_off_events;
 -atomic_t redundant_hardirqs_on;
 -atomic_t redundant_hardirqs_off;
 -atomic_t softirqs_on_events;
 -atomic_t softirqs_off_events;
 -atomic_t redundant_softirqs_on;
 -atomic_t redundant_softirqs_off;
 -atomic_t nr_unused_locks;
 -atomic_t nr_cyclic_checks;
 -atomic_t nr_find_usage_forwards_checks;
 -atomic_t nr_find_usage_backwards_checks;
 +DEFINE_PER_CPU(struct lockdep_stats, lockdep_stats);
  #endif
  
  /*
@@@ -569,9 -583,6 +570,6 @@@ static int static_obj(void *obj
        unsigned long start = (unsigned long) &_stext,
                      end   = (unsigned long) &_end,
                      addr  = (unsigned long) obj;
- #ifdef CONFIG_SMP
-       int i;
- #endif
  
        /*
         * static variable?
        if (arch_is_kernel_data(addr))
                return 1;
  
- #ifdef CONFIG_SMP
        /*
-        * percpu var?
+        * in-kernel percpu var?
         */
-       for_each_possible_cpu(i) {
-               start = (unsigned long) &__per_cpu_start + per_cpu_offset(i);
-               end   = (unsigned long) &__per_cpu_start + PERCPU_ENOUGH_ROOM
-                                       + per_cpu_offset(i);
-               if ((addr >= start) && (addr < end))
-                       return 1;
-       }
- #endif
+       if (is_kernel_percpu_address(addr))
+               return 1;
  
        /*
-        * module var?
+        * module static or percpu var?
         */
-       return is_module_address(addr);
+       return is_module_address(addr) || is_module_percpu_address(addr);
  }
  
  /*
@@@ -745,7 -748,7 +735,7 @@@ register_lock_class(struct lockdep_map 
                return NULL;
        }
        class = lock_classes + nr_lock_classes++;
 -      debug_atomic_inc(&nr_unused_locks);
 +      debug_atomic_inc(nr_unused_locks);
        class->key = key;
        class->name = lock->name;
        class->subclass = subclass;
@@@ -1202,7 -1205,7 +1192,7 @@@ check_noncircular(struct lock_list *roo
  {
        int result;
  
 -      debug_atomic_inc(&nr_cyclic_checks);
 +      debug_atomic_inc(nr_cyclic_checks);
  
        result = __bfs_forwards(root, target, class_equal, target_entry);
  
@@@ -1239,7 -1242,7 +1229,7 @@@ find_usage_forwards(struct lock_list *r
  {
        int result;
  
 -      debug_atomic_inc(&nr_find_usage_forwards_checks);
 +      debug_atomic_inc(nr_find_usage_forwards_checks);
  
        result = __bfs_forwards(root, (void *)bit, usage_match, target_entry);
  
@@@ -1262,7 -1265,7 +1252,7 @@@ find_usage_backwards(struct lock_list *
  {
        int result;
  
 -      debug_atomic_inc(&nr_find_usage_backwards_checks);
 +      debug_atomic_inc(nr_find_usage_backwards_checks);
  
        result = __bfs_backwards(root, (void *)bit, usage_match, target_entry);
  
@@@ -1822,7 -1825,7 +1812,7 @@@ static inline int lookup_chain_cache(st
        list_for_each_entry(chain, hash_head, entry) {
                if (chain->chain_key == chain_key) {
  cache_hit:
 -                      debug_atomic_inc(&chain_lookup_hits);
 +                      debug_atomic_inc(chain_lookup_hits);
                        if (very_verbose(class))
                                printk("\nhash chain already cached, key: "
                                        "%016Lx tail class: [%p] %s\n",
                chain_hlocks[chain->base + j] = class - lock_classes;
        }
        list_add_tail_rcu(&chain->entry, hash_head);
 -      debug_atomic_inc(&chain_lookup_misses);
 +      debug_atomic_inc(chain_lookup_misses);
        inc_chains();
  
        return 1;
@@@ -2308,7 -2311,7 +2298,7 @@@ void trace_hardirqs_on_caller(unsigned 
                return;
  
        if (unlikely(curr->hardirqs_enabled)) {
 -              debug_atomic_inc(&redundant_hardirqs_on);
 +              debug_atomic_inc(redundant_hardirqs_on);
                return;
        }
        /* we'll do an OFF -> ON transition: */
  
        curr->hardirq_enable_ip = ip;
        curr->hardirq_enable_event = ++curr->irq_events;
 -      debug_atomic_inc(&hardirqs_on_events);
 +      debug_atomic_inc(hardirqs_on_events);
  }
  EXPORT_SYMBOL(trace_hardirqs_on_caller);
  
@@@ -2367,9 -2370,9 +2357,9 @@@ void trace_hardirqs_off_caller(unsigne
                curr->hardirqs_enabled = 0;
                curr->hardirq_disable_ip = ip;
                curr->hardirq_disable_event = ++curr->irq_events;
 -              debug_atomic_inc(&hardirqs_off_events);
 +              debug_atomic_inc(hardirqs_off_events);
        } else
 -              debug_atomic_inc(&redundant_hardirqs_off);
 +              debug_atomic_inc(redundant_hardirqs_off);
  }
  EXPORT_SYMBOL(trace_hardirqs_off_caller);
  
@@@ -2393,7 -2396,7 +2383,7 @@@ void trace_softirqs_on(unsigned long ip
                return;
  
        if (curr->softirqs_enabled) {
 -              debug_atomic_inc(&redundant_softirqs_on);
 +              debug_atomic_inc(redundant_softirqs_on);
                return;
        }
  
        curr->softirqs_enabled = 1;
        curr->softirq_enable_ip = ip;
        curr->softirq_enable_event = ++curr->irq_events;
 -      debug_atomic_inc(&softirqs_on_events);
 +      debug_atomic_inc(softirqs_on_events);
        /*
         * We are going to turn softirqs on, so set the
         * usage bit for all held locks, if hardirqs are
@@@ -2433,10 -2436,10 +2423,10 @@@ void trace_softirqs_off(unsigned long i
                curr->softirqs_enabled = 0;
                curr->softirq_disable_ip = ip;
                curr->softirq_disable_event = ++curr->irq_events;
 -              debug_atomic_inc(&softirqs_off_events);
 +              debug_atomic_inc(softirqs_off_events);
                DEBUG_LOCKS_WARN_ON(!softirq_count());
        } else
 -              debug_atomic_inc(&redundant_softirqs_off);
 +              debug_atomic_inc(redundant_softirqs_off);
  }
  
  static void __lockdep_trace_alloc(gfp_t gfp_mask, unsigned long flags)
@@@ -2641,7 -2644,7 +2631,7 @@@ static int mark_lock(struct task_struc
                        return 0;
                break;
        case LOCK_USED:
 -              debug_atomic_dec(&nr_unused_locks);
 +              debug_atomic_dec(nr_unused_locks);
                break;
        default:
                if (!debug_locks_off_graph_unlock())
@@@ -2747,7 -2750,7 +2737,7 @@@ static int __lock_acquire(struct lockde
                if (!class)
                        return 0;
        }
 -      debug_atomic_inc((atomic_t *)&class->ops);
 +      atomic_inc((atomic_t *)&class->ops);
        if (very_verbose(class)) {
                printk("\nacquire class [%p] %s", class->key, class->name);
                if (class->name_version > 1)
@@@ -3198,8 -3201,6 +3188,6 @@@ void lock_acquire(struct lockdep_map *l
  {
        unsigned long flags;
  
-       trace_lock_acquire(lock, subclass, trylock, read, check, nest_lock, ip);
        if (unlikely(current->lockdep_recursion))
                return;
  
        check_flags(flags);
  
        current->lockdep_recursion = 1;
+       trace_lock_acquire(lock, subclass, trylock, read, check, nest_lock, ip);
        __lock_acquire(lock, subclass, trylock, read, check,
                       irqs_disabled_flags(flags), nest_lock, ip, 0);
        current->lockdep_recursion = 0;
@@@ -3219,14 -3221,13 +3208,13 @@@ void lock_release(struct lockdep_map *l
  {
        unsigned long flags;
  
-       trace_lock_release(lock, nested, ip);
        if (unlikely(current->lockdep_recursion))
                return;
  
        raw_local_irq_save(flags);
        check_flags(flags);
        current->lockdep_recursion = 1;
+       trace_lock_release(lock, nested, ip);
        __lock_release(lock, nested, ip);
        current->lockdep_recursion = 0;
        raw_local_irq_restore(flags);
@@@ -3400,8 -3401,6 +3388,6 @@@ void lock_contended(struct lockdep_map 
  {
        unsigned long flags;
  
-       trace_lock_contended(lock, ip);
        if (unlikely(!lock_stat))
                return;
  
        raw_local_irq_save(flags);
        check_flags(flags);
        current->lockdep_recursion = 1;
+       trace_lock_contended(lock, ip);
        __lock_contended(lock, ip);
        current->lockdep_recursion = 0;
        raw_local_irq_restore(flags);
@@@ -3809,6 -3809,7 +3796,7 @@@ void lockdep_rcu_dereference(const cha
        printk("%s:%d invoked rcu_dereference_check() without protection!\n",
                        file, line);
        printk("\nother info that might help us debug this:\n\n");
+       printk("\nrcu_scheduler_active = %d, debug_locks = %d\n", rcu_scheduler_active, debug_locks);
        lockdep_print_held_locks(curr);
        printk("\nstack backtrace:\n");
        dump_stack();
@@@ -7,6 -7,7 +7,7 @@@
   */
  
  #include <linux/module.h>
+ #include <linux/gfp.h>
  #include <linux/moduleparam.h>
  #include <linux/interrupt.h>
  #include <sound/pcm.h>
@@@ -65,7 -66,7 +66,7 @@@ static u64 pcsp_timer_update(struct snd
        timer_cnt = val * CUR_DIV() / 256;
  
        if (timer_cnt && chip->enable) {
 -              spin_lock_irqsave(&i8253_lock, flags);
 +              raw_spin_lock_irqsave(&i8253_lock, flags);
                if (!nforce_wa) {
                        outb_p(chip->val61, 0x61);
                        outb_p(timer_cnt, 0x42);
@@@ -74,7 -75,7 +75,7 @@@
                        outb(chip->val61 ^ 2, 0x61);
                        chip->thalf = 1;
                }
 -              spin_unlock_irqrestore(&i8253_lock, flags);
 +              raw_spin_unlock_irqrestore(&i8253_lock, flags);
        }
  
        chip->ns_rem = PCSP_PERIOD_NS();
@@@ -158,10 -159,10 +159,10 @@@ static int pcsp_start_playing(struct sn
                return -EIO;
        }
  
 -      spin_lock(&i8253_lock);
 +      raw_spin_lock(&i8253_lock);
        chip->val61 = inb(0x61) | 0x03;
        outb_p(0x92, 0x43);     /* binary, mode 1, LSB only, ch 2 */
 -      spin_unlock(&i8253_lock);
 +      raw_spin_unlock(&i8253_lock);
        atomic_set(&chip->timer_active, 1);
        chip->thalf = 0;
  
@@@ -178,11 -179,11 +179,11 @@@ static void pcsp_stop_playing(struct sn
                return;
  
        atomic_set(&chip->timer_active, 0);
 -      spin_lock(&i8253_lock);
 +      raw_spin_lock(&i8253_lock);
        /* restore the timer */
        outb_p(0xb6, 0x43);     /* binary, mode 3, LSB/MSB, ch 2 */
        outb(chip->val61 & 0xFC, 0x61);
 -      spin_unlock(&i8253_lock);
 +      raw_spin_unlock(&i8253_lock);
  }
  
  /*