diff options
| -rw-r--r-- | arch/mips/include/asm/i8253.h | 2 | ||||
| -rw-r--r-- | arch/mips/kernel/i8253.c | 14 | ||||
| -rw-r--r-- | arch/x86/include/asm/i8253.h | 2 | ||||
| -rw-r--r-- | arch/x86/kernel/apm_32.c | 4 | ||||
| -rw-r--r-- | arch/x86/kernel/i8253.c | 14 | ||||
| -rw-r--r-- | drivers/block/hd.c | 4 | ||||
| -rw-r--r-- | drivers/input/gameport/gameport.c | 4 | ||||
| -rw-r--r-- | drivers/input/joystick/analog.c | 4 | ||||
| -rw-r--r-- | drivers/input/misc/pcspkr.c | 6 | ||||
| -rw-r--r-- | kernel/lockdep.c | 81 | ||||
| -rw-r--r-- | kernel/lockdep_internals.h | 72 | ||||
| -rw-r--r-- | kernel/lockdep_proc.c | 58 | ||||
| -rw-r--r-- | sound/drivers/pcsp/pcsp.h | 2 | ||||
| -rw-r--r-- | sound/drivers/pcsp/pcsp_input.c | 4 | ||||
| -rw-r--r-- | sound/drivers/pcsp/pcsp_lib.c | 12 | 
15 files changed, 159 insertions, 124 deletions
| diff --git a/arch/mips/include/asm/i8253.h b/arch/mips/include/asm/i8253.h index 032ca73f181b..48bb82372994 100644 --- a/arch/mips/include/asm/i8253.h +++ b/arch/mips/include/asm/i8253.h | |||
| @@ -12,7 +12,7 @@ | |||
| 12 | #define PIT_CH0 0x40 | 12 | #define PIT_CH0 0x40 | 
| 13 | #define PIT_CH2 0x42 | 13 | #define PIT_CH2 0x42 | 
| 14 | 14 | ||
| 15 | extern spinlock_t i8253_lock; | 15 | extern raw_spinlock_t i8253_lock; | 
| 16 | 16 | ||
| 17 | extern void setup_pit_timer(void); | 17 | extern void setup_pit_timer(void); | 
| 18 | 18 | ||
| diff --git a/arch/mips/kernel/i8253.c b/arch/mips/kernel/i8253.c index ed5c441615e4..94794062a177 100644 --- a/arch/mips/kernel/i8253.c +++ b/arch/mips/kernel/i8253.c | |||
| @@ -15,7 +15,7 @@ | |||
| 15 | #include <asm/io.h> | 15 | #include <asm/io.h> | 
| 16 | #include <asm/time.h> | 16 | #include <asm/time.h> | 
| 17 | 17 | ||
| 18 | DEFINE_SPINLOCK(i8253_lock); | 18 | DEFINE_RAW_SPINLOCK(i8253_lock); | 
| 19 | EXPORT_SYMBOL(i8253_lock); | 19 | EXPORT_SYMBOL(i8253_lock); | 
| 20 | 20 | ||
| 21 | /* | 21 | /* | 
| @@ -26,7 +26,7 @@ EXPORT_SYMBOL(i8253_lock); | |||
| 26 | static void init_pit_timer(enum clock_event_mode mode, | 26 | static void init_pit_timer(enum clock_event_mode mode, | 
| 27 | struct clock_event_device *evt) | 27 | struct clock_event_device *evt) | 
| 28 | { | 28 | { | 
| 29 | spin_lock(&i8253_lock); | 29 | raw_spin_lock(&i8253_lock); | 
| 30 | 30 | ||
| 31 | switch(mode) { | 31 | switch(mode) { | 
| 32 | case CLOCK_EVT_MODE_PERIODIC: | 32 | case CLOCK_EVT_MODE_PERIODIC: | 
| @@ -55,7 +55,7 @@ static void init_pit_timer(enum clock_event_mode mode, | |||
| 55 | /* Nothing to do here */ | 55 | /* Nothing to do here */ | 
| 56 | break; | 56 | break; | 
| 57 | } | 57 | } | 
| 58 | spin_unlock(&i8253_lock); | 58 | raw_spin_unlock(&i8253_lock); | 
| 59 | } | 59 | } | 
| 60 | 60 | ||
| 61 | /* | 61 | /* | 
| @@ -65,10 +65,10 @@ static void init_pit_timer(enum clock_event_mode mode, | |||
| 65 | */ | 65 | */ | 
| 66 | static int pit_next_event(unsigned long delta, struct clock_event_device *evt) | 66 | static int pit_next_event(unsigned long delta, struct clock_event_device *evt) | 
| 67 | { | 67 | { | 
| 68 | spin_lock(&i8253_lock); | 68 | raw_spin_lock(&i8253_lock); | 
| 69 | outb_p(delta & 0xff , PIT_CH0); /* LSB */ | 69 | outb_p(delta & 0xff , PIT_CH0); /* LSB */ | 
| 70 | outb(delta >> 8 , PIT_CH0); /* MSB */ | 70 | outb(delta >> 8 , PIT_CH0); /* MSB */ | 
| 71 | spin_unlock(&i8253_lock); | 71 | raw_spin_unlock(&i8253_lock); | 
| 72 | 72 | ||
| 73 | return 0; | 73 | return 0; | 
| 74 | } | 74 | } | 
| @@ -137,7 +137,7 @@ static cycle_t pit_read(struct clocksource *cs) | |||
| 137 | static int old_count; | 137 | static int old_count; | 
| 138 | static u32 old_jifs; | 138 | static u32 old_jifs; | 
| 139 | 139 | ||
| 140 | spin_lock_irqsave(&i8253_lock, flags); | 140 | raw_spin_lock_irqsave(&i8253_lock, flags); | 
| 141 | /* | 141 | /* | 
| 142 | * Although our caller may have the read side of xtime_lock, | 142 | * Although our caller may have the read side of xtime_lock, | 
| 143 | * this is now a seqlock, and we are cheating in this routine | 143 | * this is now a seqlock, and we are cheating in this routine | 
| @@ -183,7 +183,7 @@ static cycle_t pit_read(struct clocksource *cs) | |||
| 183 | old_count = count; | 183 | old_count = count; | 
| 184 | old_jifs = jifs; | 184 | old_jifs = jifs; | 
| 185 | 185 | ||
| 186 | spin_unlock_irqrestore(&i8253_lock, flags); | 186 | raw_spin_unlock_irqrestore(&i8253_lock, flags); | 
| 187 | 187 | ||
| 188 | count = (LATCH - 1) - count; | 188 | count = (LATCH - 1) - count; | 
| 189 | 189 | ||
| diff --git a/arch/x86/include/asm/i8253.h b/arch/x86/include/asm/i8253.h index 1edbf89680fd..fc1f579fb965 100644 --- a/arch/x86/include/asm/i8253.h +++ b/arch/x86/include/asm/i8253.h | |||
| @@ -6,7 +6,7 @@ | |||
| 6 | #define PIT_CH0 0x40 | 6 | #define PIT_CH0 0x40 | 
| 7 | #define PIT_CH2 0x42 | 7 | #define PIT_CH2 0x42 | 
| 8 | 8 | ||
| 9 | extern spinlock_t i8253_lock; | 9 | extern raw_spinlock_t i8253_lock; | 
| 10 | 10 | ||
| 11 | extern struct clock_event_device *global_clock_event; | 11 | extern struct clock_event_device *global_clock_event; | 
| 12 | 12 | ||
| diff --git a/arch/x86/kernel/apm_32.c b/arch/x86/kernel/apm_32.c index 031aa887b0eb..c4f9182ca3ac 100644 --- a/arch/x86/kernel/apm_32.c +++ b/arch/x86/kernel/apm_32.c | |||
| @@ -1224,7 +1224,7 @@ static void reinit_timer(void) | |||
| 1224 | #ifdef INIT_TIMER_AFTER_SUSPEND | 1224 | #ifdef INIT_TIMER_AFTER_SUSPEND | 
| 1225 | unsigned long flags; | 1225 | unsigned long flags; | 
| 1226 | 1226 | ||
| 1227 | spin_lock_irqsave(&i8253_lock, flags); | 1227 | raw_spin_lock_irqsave(&i8253_lock, flags); | 
| 1228 | /* set the clock to HZ */ | 1228 | /* set the clock to HZ */ | 
| 1229 | outb_pit(0x34, PIT_MODE); /* binary, mode 2, LSB/MSB, ch 0 */ | 1229 | outb_pit(0x34, PIT_MODE); /* binary, mode 2, LSB/MSB, ch 0 */ | 
| 1230 | udelay(10); | 1230 | udelay(10); | 
| @@ -1232,7 +1232,7 @@ static void reinit_timer(void) | |||
| 1232 | udelay(10); | 1232 | udelay(10); | 
| 1233 | outb_pit(LATCH >> 8, PIT_CH0); /* MSB */ | 1233 | outb_pit(LATCH >> 8, PIT_CH0); /* MSB */ | 
| 1234 | udelay(10); | 1234 | udelay(10); | 
| 1235 | spin_unlock_irqrestore(&i8253_lock, flags); | 1235 | raw_spin_unlock_irqrestore(&i8253_lock, flags); | 
| 1236 | #endif | 1236 | #endif | 
| 1237 | } | 1237 | } | 
| 1238 | 1238 | ||
| diff --git a/arch/x86/kernel/i8253.c b/arch/x86/kernel/i8253.c index 23c167925a5c..2dfd31597443 100644 --- a/arch/x86/kernel/i8253.c +++ b/arch/x86/kernel/i8253.c | |||
| @@ -16,7 +16,7 @@ | |||
| 16 | #include <asm/hpet.h> | 16 | #include <asm/hpet.h> | 
| 17 | #include <asm/smp.h> | 17 | #include <asm/smp.h> | 
| 18 | 18 | ||
| 19 | DEFINE_SPINLOCK(i8253_lock); | 19 | DEFINE_RAW_SPINLOCK(i8253_lock); | 
| 20 | EXPORT_SYMBOL(i8253_lock); | 20 | EXPORT_SYMBOL(i8253_lock); | 
| 21 | 21 | ||
| 22 | /* | 22 | /* | 
| @@ -33,7 +33,7 @@ struct clock_event_device *global_clock_event; | |||
| 33 | static void init_pit_timer(enum clock_event_mode mode, | 33 | static void init_pit_timer(enum clock_event_mode mode, | 
| 34 | struct clock_event_device *evt) | 34 | struct clock_event_device *evt) | 
| 35 | { | 35 | { | 
| 36 | spin_lock(&i8253_lock); | 36 | raw_spin_lock(&i8253_lock); | 
| 37 | 37 | ||
| 38 | switch (mode) { | 38 | switch (mode) { | 
| 39 | case CLOCK_EVT_MODE_PERIODIC: | 39 | case CLOCK_EVT_MODE_PERIODIC: | 
| @@ -62,7 +62,7 @@ static void init_pit_timer(enum clock_event_mode mode, | |||
| 62 | /* Nothing to do here */ | 62 | /* Nothing to do here */ | 
| 63 | break; | 63 | break; | 
| 64 | } | 64 | } | 
| 65 | spin_unlock(&i8253_lock); | 65 | raw_spin_unlock(&i8253_lock); | 
| 66 | } | 66 | } | 
| 67 | 67 | ||
| 68 | /* | 68 | /* | 
| @@ -72,10 +72,10 @@ static void init_pit_timer(enum clock_event_mode mode, | |||
| 72 | */ | 72 | */ | 
| 73 | static int pit_next_event(unsigned long delta, struct clock_event_device *evt) | 73 | static int pit_next_event(unsigned long delta, struct clock_event_device *evt) | 
| 74 | { | 74 | { | 
| 75 | spin_lock(&i8253_lock); | 75 | raw_spin_lock(&i8253_lock); | 
| 76 | outb_pit(delta & 0xff , PIT_CH0); /* LSB */ | 76 | outb_pit(delta & 0xff , PIT_CH0); /* LSB */ | 
| 77 | outb_pit(delta >> 8 , PIT_CH0); /* MSB */ | 77 | outb_pit(delta >> 8 , PIT_CH0); /* MSB */ | 
| 78 | spin_unlock(&i8253_lock); | 78 | raw_spin_unlock(&i8253_lock); | 
| 79 | 79 | ||
| 80 | return 0; | 80 | return 0; | 
| 81 | } | 81 | } | 
| @@ -130,7 +130,7 @@ static cycle_t pit_read(struct clocksource *cs) | |||
| 130 | int count; | 130 | int count; | 
| 131 | u32 jifs; | 131 | u32 jifs; | 
| 132 | 132 | ||
| 133 | spin_lock_irqsave(&i8253_lock, flags); | 133 | raw_spin_lock_irqsave(&i8253_lock, flags); | 
| 134 | /* | 134 | /* | 
| 135 | * Although our caller may have the read side of xtime_lock, | 135 | * Although our caller may have the read side of xtime_lock, | 
| 136 | * this is now a seqlock, and we are cheating in this routine | 136 | * this is now a seqlock, and we are cheating in this routine | 
| @@ -176,7 +176,7 @@ static cycle_t pit_read(struct clocksource *cs) | |||
| 176 | old_count = count; | 176 | old_count = count; | 
| 177 | old_jifs = jifs; | 177 | old_jifs = jifs; | 
| 178 | 178 | ||
| 179 | spin_unlock_irqrestore(&i8253_lock, flags); | 179 | raw_spin_unlock_irqrestore(&i8253_lock, flags); | 
| 180 | 180 | ||
| 181 | count = (LATCH - 1) - count; | 181 | count = (LATCH - 1) - count; | 
| 182 | 182 | ||
| diff --git a/drivers/block/hd.c b/drivers/block/hd.c index 034e6dfc878c..81c78b3ce2df 100644 --- a/drivers/block/hd.c +++ b/drivers/block/hd.c | |||
| @@ -164,12 +164,12 @@ unsigned long read_timer(void) | |||
| 164 | unsigned long t, flags; | 164 | unsigned long t, flags; | 
| 165 | int i; | 165 | int i; | 
| 166 | 166 | ||
| 167 | spin_lock_irqsave(&i8253_lock, flags); | 167 | raw_spin_lock_irqsave(&i8253_lock, flags); | 
| 168 | t = jiffies * 11932; | 168 | t = jiffies * 11932; | 
| 169 | outb_p(0, 0x43); | 169 | outb_p(0, 0x43); | 
| 170 | i = inb_p(0x40); | 170 | i = inb_p(0x40); | 
| 171 | i |= inb(0x40) << 8; | 171 | i |= inb(0x40) << 8; | 
| 172 | spin_unlock_irqrestore(&i8253_lock, flags); | 172 | raw_spin_unlock_irqrestore(&i8253_lock, flags); | 
| 173 | return(t - i); | 173 | return(t - i); | 
| 174 | } | 174 | } | 
| 175 | #endif | 175 | #endif | 
| diff --git a/drivers/input/gameport/gameport.c b/drivers/input/gameport/gameport.c index 7e18bcf05a66..46239e47a260 100644 --- a/drivers/input/gameport/gameport.c +++ b/drivers/input/gameport/gameport.c | |||
| @@ -59,11 +59,11 @@ static unsigned int get_time_pit(void) | |||
| 59 | unsigned long flags; | 59 | unsigned long flags; | 
| 60 | unsigned int count; | 60 | unsigned int count; | 
| 61 | 61 | ||
| 62 | spin_lock_irqsave(&i8253_lock, flags); | 62 | raw_spin_lock_irqsave(&i8253_lock, flags); | 
| 63 | outb_p(0x00, 0x43); | 63 | outb_p(0x00, 0x43); | 
| 64 | count = inb_p(0x40); | 64 | count = inb_p(0x40); | 
| 65 | count |= inb_p(0x40) << 8; | 65 | count |= inb_p(0x40) << 8; | 
| 66 | spin_unlock_irqrestore(&i8253_lock, flags); | 66 | raw_spin_unlock_irqrestore(&i8253_lock, flags); | 
| 67 | 67 | ||
| 68 | return count; | 68 | return count; | 
| 69 | } | 69 | } | 
| diff --git a/drivers/input/joystick/analog.c b/drivers/input/joystick/analog.c index 1c0b529c06aa..4afe0a3b4884 100644 --- a/drivers/input/joystick/analog.c +++ b/drivers/input/joystick/analog.c | |||
| @@ -146,11 +146,11 @@ static unsigned int get_time_pit(void) | |||
| 146 | unsigned long flags; | 146 | unsigned long flags; | 
| 147 | unsigned int count; | 147 | unsigned int count; | 
| 148 | 148 | ||
| 149 | spin_lock_irqsave(&i8253_lock, flags); | 149 | raw_spin_lock_irqsave(&i8253_lock, flags); | 
| 150 | outb_p(0x00, 0x43); | 150 | outb_p(0x00, 0x43); | 
| 151 | count = inb_p(0x40); | 151 | count = inb_p(0x40); | 
| 152 | count |= inb_p(0x40) << 8; | 152 | count |= inb_p(0x40) << 8; | 
| 153 | spin_unlock_irqrestore(&i8253_lock, flags); | 153 | raw_spin_unlock_irqrestore(&i8253_lock, flags); | 
| 154 | 154 | ||
| 155 | return count; | 155 | return count; | 
| 156 | } | 156 | } | 
| diff --git a/drivers/input/misc/pcspkr.c b/drivers/input/misc/pcspkr.c index ea4e1fd12651..f080dd31499b 100644 --- a/drivers/input/misc/pcspkr.c +++ b/drivers/input/misc/pcspkr.c | |||
| @@ -30,7 +30,7 @@ MODULE_ALIAS("platform:pcspkr"); | |||
| 30 | #include <asm/i8253.h> | 30 | #include <asm/i8253.h> | 
| 31 | #else | 31 | #else | 
| 32 | #include <asm/8253pit.h> | 32 | #include <asm/8253pit.h> | 
| 33 | static DEFINE_SPINLOCK(i8253_lock); | 33 | static DEFINE_RAW_SPINLOCK(i8253_lock); | 
| 34 | #endif | 34 | #endif | 
| 35 | 35 | ||
| 36 | static int pcspkr_event(struct input_dev *dev, unsigned int type, unsigned int code, int value) | 36 | static int pcspkr_event(struct input_dev *dev, unsigned int type, unsigned int code, int value) | 
| @@ -50,7 +50,7 @@ static int pcspkr_event(struct input_dev *dev, unsigned int type, unsigned int c | |||
| 50 | if (value > 20 && value < 32767) | 50 | if (value > 20 && value < 32767) | 
| 51 | count = PIT_TICK_RATE / value; | 51 | count = PIT_TICK_RATE / value; | 
| 52 | 52 | ||
| 53 | spin_lock_irqsave(&i8253_lock, flags); | 53 | raw_spin_lock_irqsave(&i8253_lock, flags); | 
| 54 | 54 | ||
| 55 | if (count) { | 55 | if (count) { | 
| 56 | /* set command for counter 2, 2 byte write */ | 56 | /* set command for counter 2, 2 byte write */ | 
| @@ -65,7 +65,7 @@ static int pcspkr_event(struct input_dev *dev, unsigned int type, unsigned int c | |||
| 65 | outb(inb_p(0x61) & 0xFC, 0x61); | 65 | outb(inb_p(0x61) & 0xFC, 0x61); | 
| 66 | } | 66 | } | 
| 67 | 67 | ||
| 68 | spin_unlock_irqrestore(&i8253_lock, flags); | 68 | raw_spin_unlock_irqrestore(&i8253_lock, flags); | 
| 69 | 69 | ||
| 70 | return 0; | 70 | return 0; | 
| 71 | } | 71 | } | 
| diff --git a/kernel/lockdep.c b/kernel/lockdep.c index 2594e1ce41cb..51080807dc8c 100644 --- a/kernel/lockdep.c +++ b/kernel/lockdep.c | |||
| @@ -431,20 +431,7 @@ static struct stack_trace lockdep_init_trace = { | |||
| 431 | /* | 431 | /* | 
| 432 | * Various lockdep statistics: | 432 | * Various lockdep statistics: | 
| 433 | */ | 433 | */ | 
| 434 | atomic_t chain_lookup_hits; | 434 | DEFINE_PER_CPU(struct lockdep_stats, lockdep_stats); | 
| 435 | atomic_t chain_lookup_misses; | ||
| 436 | atomic_t hardirqs_on_events; | ||
| 437 | atomic_t hardirqs_off_events; | ||
| 438 | atomic_t redundant_hardirqs_on; | ||
| 439 | atomic_t redundant_hardirqs_off; | ||
| 440 | atomic_t softirqs_on_events; | ||
| 441 | atomic_t softirqs_off_events; | ||
| 442 | atomic_t redundant_softirqs_on; | ||
| 443 | atomic_t redundant_softirqs_off; | ||
| 444 | atomic_t nr_unused_locks; | ||
| 445 | atomic_t nr_cyclic_checks; | ||
| 446 | atomic_t nr_find_usage_forwards_checks; | ||
| 447 | atomic_t nr_find_usage_backwards_checks; | ||
| 448 | #endif | 435 | #endif | 
| 449 | 436 | ||
| 450 | /* | 437 | /* | 
| @@ -748,7 +735,7 @@ register_lock_class(struct lockdep_map *lock, unsigned int subclass, int force) | |||
| 748 | return NULL; | 735 | return NULL; | 
| 749 | } | 736 | } | 
| 750 | class = lock_classes + nr_lock_classes++; | 737 | class = lock_classes + nr_lock_classes++; | 
| 751 | debug_atomic_inc(&nr_unused_locks); | 738 | debug_atomic_inc(nr_unused_locks); | 
| 752 | class->key = key; | 739 | class->key = key; | 
| 753 | class->name = lock->name; | 740 | class->name = lock->name; | 
| 754 | class->subclass = subclass; | 741 | class->subclass = subclass; | 
| @@ -818,7 +805,8 @@ static struct lock_list *alloc_list_entry(void) | |||
| 818 | * Add a new dependency to the head of the list: | 805 | * Add a new dependency to the head of the list: | 
| 819 | */ | 806 | */ | 
| 820 | static int add_lock_to_list(struct lock_class *class, struct lock_class *this, | 807 | static int add_lock_to_list(struct lock_class *class, struct lock_class *this, | 
| 821 | struct list_head *head, unsigned long ip, int distance) | 808 | struct list_head *head, unsigned long ip, | 
| 809 | int distance, struct stack_trace *trace) | ||
| 822 | { | 810 | { | 
| 823 | struct lock_list *entry; | 811 | struct lock_list *entry; | 
| 824 | /* | 812 | /* | 
| @@ -829,11 +817,9 @@ static int add_lock_to_list(struct lock_class *class, struct lock_class *this, | |||
| 829 | if (!entry) | 817 | if (!entry) | 
| 830 | return 0; | 818 | return 0; | 
| 831 | 819 | ||
| 832 | if (!save_trace(&entry->trace)) | ||
| 833 | return 0; | ||
| 834 | |||
| 835 | entry->class = this; | 820 | entry->class = this; | 
| 836 | entry->distance = distance; | 821 | entry->distance = distance; | 
| 822 | entry->trace = *trace; | ||
| 837 | /* | 823 | /* | 
| 838 | * Since we never remove from the dependency list, the list can | 824 | * Since we never remove from the dependency list, the list can | 
| 839 | * be walked lockless by other CPUs, it's only allocation | 825 | * be walked lockless by other CPUs, it's only allocation | 
| @@ -1205,7 +1191,7 @@ check_noncircular(struct lock_list *root, struct lock_class *target, | |||
| 1205 | { | 1191 | { | 
| 1206 | int result; | 1192 | int result; | 
| 1207 | 1193 | ||
| 1208 | debug_atomic_inc(&nr_cyclic_checks); | 1194 | debug_atomic_inc(nr_cyclic_checks); | 
| 1209 | 1195 | ||
| 1210 | result = __bfs_forwards(root, target, class_equal, target_entry); | 1196 | result = __bfs_forwards(root, target, class_equal, target_entry); | 
| 1211 | 1197 | ||
| @@ -1242,7 +1228,7 @@ find_usage_forwards(struct lock_list *root, enum lock_usage_bit bit, | |||
| 1242 | { | 1228 | { | 
| 1243 | int result; | 1229 | int result; | 
| 1244 | 1230 | ||
| 1245 | debug_atomic_inc(&nr_find_usage_forwards_checks); | 1231 | debug_atomic_inc(nr_find_usage_forwards_checks); | 
| 1246 | 1232 | ||
| 1247 | result = __bfs_forwards(root, (void *)bit, usage_match, target_entry); | 1233 | result = __bfs_forwards(root, (void *)bit, usage_match, target_entry); | 
| 1248 | 1234 | ||
| @@ -1265,7 +1251,7 @@ find_usage_backwards(struct lock_list *root, enum lock_usage_bit bit, | |||
| 1265 | { | 1251 | { | 
| 1266 | int result; | 1252 | int result; | 
| 1267 | 1253 | ||
| 1268 | debug_atomic_inc(&nr_find_usage_backwards_checks); | 1254 | debug_atomic_inc(nr_find_usage_backwards_checks); | 
| 1269 | 1255 | ||
| 1270 | result = __bfs_backwards(root, (void *)bit, usage_match, target_entry); | 1256 | result = __bfs_backwards(root, (void *)bit, usage_match, target_entry); | 
| 1271 | 1257 | ||
| @@ -1635,12 +1621,20 @@ check_deadlock(struct task_struct *curr, struct held_lock *next, | |||
| 1635 | */ | 1621 | */ | 
| 1636 | static int | 1622 | static int | 
| 1637 | check_prev_add(struct task_struct *curr, struct held_lock *prev, | 1623 | check_prev_add(struct task_struct *curr, struct held_lock *prev, | 
| 1638 | struct held_lock *next, int distance) | 1624 | struct held_lock *next, int distance, int trylock_loop) | 
| 1639 | { | 1625 | { | 
| 1640 | struct lock_list *entry; | 1626 | struct lock_list *entry; | 
| 1641 | int ret; | 1627 | int ret; | 
| 1642 | struct lock_list this; | 1628 | struct lock_list this; | 
| 1643 | struct lock_list *uninitialized_var(target_entry); | 1629 | struct lock_list *uninitialized_var(target_entry); | 
| 1630 | /* | ||
| 1631 | * Static variable, serialized by the graph_lock(). | ||
| 1632 | * | ||
| 1633 | * We use this static variable to save the stack trace in case | ||
| 1634 | * we call into this function multiple times due to encountering | ||
| 1635 | * trylocks in the held lock stack. | ||
| 1636 | */ | ||
| 1637 | static struct stack_trace trace; | ||
| 1644 | 1638 | ||
| 1645 | /* | 1639 | /* | 
| 1646 | * Prove that the new <prev> -> <next> dependency would not | 1640 | * Prove that the new <prev> -> <next> dependency would not | 
| @@ -1688,20 +1682,23 @@ check_prev_add(struct task_struct *curr, struct held_lock *prev, | |||
| 1688 | } | 1682 | } | 
| 1689 | } | 1683 | } | 
| 1690 | 1684 | ||
| 1685 | if (!trylock_loop && !save_trace(&trace)) | ||
| 1686 | return 0; | ||
| 1687 | |||
| 1691 | /* | 1688 | /* | 
| 1692 | * Ok, all validations passed, add the new lock | 1689 | * Ok, all validations passed, add the new lock | 
| 1693 | * to the previous lock's dependency list: | 1690 | * to the previous lock's dependency list: | 
| 1694 | */ | 1691 | */ | 
| 1695 | ret = add_lock_to_list(hlock_class(prev), hlock_class(next), | 1692 | ret = add_lock_to_list(hlock_class(prev), hlock_class(next), | 
| 1696 | &hlock_class(prev)->locks_after, | 1693 | &hlock_class(prev)->locks_after, | 
| 1697 | next->acquire_ip, distance); | 1694 | next->acquire_ip, distance, &trace); | 
| 1698 | 1695 | ||
| 1699 | if (!ret) | 1696 | if (!ret) | 
| 1700 | return 0; | 1697 | return 0; | 
| 1701 | 1698 | ||
| 1702 | ret = add_lock_to_list(hlock_class(next), hlock_class(prev), | 1699 | ret = add_lock_to_list(hlock_class(next), hlock_class(prev), | 
| 1703 | &hlock_class(next)->locks_before, | 1700 | &hlock_class(next)->locks_before, | 
| 1704 | next->acquire_ip, distance); | 1701 | next->acquire_ip, distance, &trace); | 
| 1705 | if (!ret) | 1702 | if (!ret) | 
| 1706 | return 0; | 1703 | return 0; | 
| 1707 | 1704 | ||
| @@ -1731,6 +1728,7 @@ static int | |||
| 1731 | check_prevs_add(struct task_struct *curr, struct held_lock *next) | 1728 | check_prevs_add(struct task_struct *curr, struct held_lock *next) | 
| 1732 | { | 1729 | { | 
| 1733 | int depth = curr->lockdep_depth; | 1730 | int depth = curr->lockdep_depth; | 
| 1731 | int trylock_loop = 0; | ||
| 1734 | struct held_lock *hlock; | 1732 | struct held_lock *hlock; | 
| 1735 | 1733 | ||
| 1736 | /* | 1734 | /* | 
| @@ -1756,7 +1754,8 @@ check_prevs_add(struct task_struct *curr, struct held_lock *next) | |||
| 1756 | * added: | 1754 | * added: | 
| 1757 | */ | 1755 | */ | 
| 1758 | if (hlock->read != 2) { | 1756 | if (hlock->read != 2) { | 
| 1759 | if (!check_prev_add(curr, hlock, next, distance)) | 1757 | if (!check_prev_add(curr, hlock, next, | 
| 1758 | distance, trylock_loop)) | ||
| 1760 | return 0; | 1759 | return 0; | 
| 1761 | /* | 1760 | /* | 
| 1762 | * Stop after the first non-trylock entry, | 1761 | * Stop after the first non-trylock entry, | 
| @@ -1779,6 +1778,7 @@ check_prevs_add(struct task_struct *curr, struct held_lock *next) | |||
| 1779 | if (curr->held_locks[depth].irq_context != | 1778 | if (curr->held_locks[depth].irq_context != | 
| 1780 | curr->held_locks[depth-1].irq_context) | 1779 | curr->held_locks[depth-1].irq_context) | 
| 1781 | break; | 1780 | break; | 
| 1781 | trylock_loop = 1; | ||
| 1782 | } | 1782 | } | 
| 1783 | return 1; | 1783 | return 1; | 
| 1784 | out_bug: | 1784 | out_bug: | 
| @@ -1825,7 +1825,7 @@ static inline int lookup_chain_cache(struct task_struct *curr, | |||
| 1825 | list_for_each_entry(chain, hash_head, entry) { | 1825 | list_for_each_entry(chain, hash_head, entry) { | 
| 1826 | if (chain->chain_key == chain_key) { | 1826 | if (chain->chain_key == chain_key) { | 
| 1827 | cache_hit: | 1827 | cache_hit: | 
| 1828 | debug_atomic_inc(&chain_lookup_hits); | 1828 | debug_atomic_inc(chain_lookup_hits); | 
| 1829 | if (very_verbose(class)) | 1829 | if (very_verbose(class)) | 
| 1830 | printk("\nhash chain already cached, key: " | 1830 | printk("\nhash chain already cached, key: " | 
| 1831 | "%016Lx tail class: [%p] %s\n", | 1831 | "%016Lx tail class: [%p] %s\n", | 
| @@ -1890,7 +1890,7 @@ cache_hit: | |||
| 1890 | chain_hlocks[chain->base + j] = class - lock_classes; | 1890 | chain_hlocks[chain->base + j] = class - lock_classes; | 
| 1891 | } | 1891 | } | 
| 1892 | list_add_tail_rcu(&chain->entry, hash_head); | 1892 | list_add_tail_rcu(&chain->entry, hash_head); | 
| 1893 | debug_atomic_inc(&chain_lookup_misses); | 1893 | debug_atomic_inc(chain_lookup_misses); | 
| 1894 | inc_chains(); | 1894 | inc_chains(); | 
| 1895 | 1895 | ||
| 1896 | return 1; | 1896 | return 1; | 
| @@ -2311,7 +2311,12 @@ void trace_hardirqs_on_caller(unsigned long ip) | |||
| 2311 | return; | 2311 | return; | 
| 2312 | 2312 | ||
| 2313 | if (unlikely(curr->hardirqs_enabled)) { | 2313 | if (unlikely(curr->hardirqs_enabled)) { | 
| 2314 | debug_atomic_inc(&redundant_hardirqs_on); | 2314 | /* | 
| 2315 | * Neither irq nor preemption are disabled here | ||
| 2316 | * so this is racy by nature but loosing one hit | ||
| 2317 | * in a stat is not a big deal. | ||
| 2318 | */ | ||
| 2319 | __debug_atomic_inc(redundant_hardirqs_on); | ||
| 2315 | return; | 2320 | return; | 
| 2316 | } | 2321 | } | 
| 2317 | /* we'll do an OFF -> ON transition: */ | 2322 | /* we'll do an OFF -> ON transition: */ | 
| @@ -2338,7 +2343,7 @@ void trace_hardirqs_on_caller(unsigned long ip) | |||
| 2338 | 2343 | ||
| 2339 | curr->hardirq_enable_ip = ip; | 2344 | curr->hardirq_enable_ip = ip; | 
| 2340 | curr->hardirq_enable_event = ++curr->irq_events; | 2345 | curr->hardirq_enable_event = ++curr->irq_events; | 
| 2341 | debug_atomic_inc(&hardirqs_on_events); | 2346 | debug_atomic_inc(hardirqs_on_events); | 
| 2342 | } | 2347 | } | 
| 2343 | EXPORT_SYMBOL(trace_hardirqs_on_caller); | 2348 | EXPORT_SYMBOL(trace_hardirqs_on_caller); | 
| 2344 | 2349 | ||
| @@ -2370,9 +2375,9 @@ void trace_hardirqs_off_caller(unsigned long ip) | |||
| 2370 | curr->hardirqs_enabled = 0; | 2375 | curr->hardirqs_enabled = 0; | 
| 2371 | curr->hardirq_disable_ip = ip; | 2376 | curr->hardirq_disable_ip = ip; | 
| 2372 | curr->hardirq_disable_event = ++curr->irq_events; | 2377 | curr->hardirq_disable_event = ++curr->irq_events; | 
| 2373 | debug_atomic_inc(&hardirqs_off_events); | 2378 | debug_atomic_inc(hardirqs_off_events); | 
| 2374 | } else | 2379 | } else | 
| 2375 | debug_atomic_inc(&redundant_hardirqs_off); | 2380 | debug_atomic_inc(redundant_hardirqs_off); | 
| 2376 | } | 2381 | } | 
| 2377 | EXPORT_SYMBOL(trace_hardirqs_off_caller); | 2382 | EXPORT_SYMBOL(trace_hardirqs_off_caller); | 
| 2378 | 2383 | ||
| @@ -2396,7 +2401,7 @@ void trace_softirqs_on(unsigned long ip) | |||
| 2396 | return; | 2401 | return; | 
| 2397 | 2402 | ||
| 2398 | if (curr->softirqs_enabled) { | 2403 | if (curr->softirqs_enabled) { | 
| 2399 | debug_atomic_inc(&redundant_softirqs_on); | 2404 | debug_atomic_inc(redundant_softirqs_on); | 
| 2400 | return; | 2405 | return; | 
| 2401 | } | 2406 | } | 
| 2402 | 2407 | ||
| @@ -2406,7 +2411,7 @@ void trace_softirqs_on(unsigned long ip) | |||
| 2406 | curr->softirqs_enabled = 1; | 2411 | curr->softirqs_enabled = 1; | 
| 2407 | curr->softirq_enable_ip = ip; | 2412 | curr->softirq_enable_ip = ip; | 
| 2408 | curr->softirq_enable_event = ++curr->irq_events; | 2413 | curr->softirq_enable_event = ++curr->irq_events; | 
| 2409 | debug_atomic_inc(&softirqs_on_events); | 2414 | debug_atomic_inc(softirqs_on_events); | 
| 2410 | /* | 2415 | /* | 
| 2411 | * We are going to turn softirqs on, so set the | 2416 | * We are going to turn softirqs on, so set the | 
| 2412 | * usage bit for all held locks, if hardirqs are | 2417 | * usage bit for all held locks, if hardirqs are | 
| @@ -2436,10 +2441,10 @@ void trace_softirqs_off(unsigned long ip) | |||
| 2436 | curr->softirqs_enabled = 0; | 2441 | curr->softirqs_enabled = 0; | 
| 2437 | curr->softirq_disable_ip = ip; | 2442 | curr->softirq_disable_ip = ip; | 
| 2438 | curr->softirq_disable_event = ++curr->irq_events; | 2443 | curr->softirq_disable_event = ++curr->irq_events; | 
| 2439 | debug_atomic_inc(&softirqs_off_events); | 2444 | debug_atomic_inc(softirqs_off_events); | 
| 2440 | DEBUG_LOCKS_WARN_ON(!softirq_count()); | 2445 | DEBUG_LOCKS_WARN_ON(!softirq_count()); | 
| 2441 | } else | 2446 | } else | 
| 2442 | debug_atomic_inc(&redundant_softirqs_off); | 2447 | debug_atomic_inc(redundant_softirqs_off); | 
| 2443 | } | 2448 | } | 
| 2444 | 2449 | ||
| 2445 | static void __lockdep_trace_alloc(gfp_t gfp_mask, unsigned long flags) | 2450 | static void __lockdep_trace_alloc(gfp_t gfp_mask, unsigned long flags) | 
| @@ -2644,7 +2649,7 @@ static int mark_lock(struct task_struct *curr, struct held_lock *this, | |||
| 2644 | return 0; | 2649 | return 0; | 
| 2645 | break; | 2650 | break; | 
| 2646 | case LOCK_USED: | 2651 | case LOCK_USED: | 
| 2647 | debug_atomic_dec(&nr_unused_locks); | 2652 | debug_atomic_dec(nr_unused_locks); | 
| 2648 | break; | 2653 | break; | 
| 2649 | default: | 2654 | default: | 
| 2650 | if (!debug_locks_off_graph_unlock()) | 2655 | if (!debug_locks_off_graph_unlock()) | 
| @@ -2750,7 +2755,7 @@ static int __lock_acquire(struct lockdep_map *lock, unsigned int subclass, | |||
| 2750 | if (!class) | 2755 | if (!class) | 
| 2751 | return 0; | 2756 | return 0; | 
| 2752 | } | 2757 | } | 
| 2753 | debug_atomic_inc((atomic_t *)&class->ops); | 2758 | atomic_inc((atomic_t *)&class->ops); | 
| 2754 | if (very_verbose(class)) { | 2759 | if (very_verbose(class)) { | 
| 2755 | printk("\nacquire class [%p] %s", class->key, class->name); | 2760 | printk("\nacquire class [%p] %s", class->key, class->name); | 
| 2756 | if (class->name_version > 1) | 2761 | if (class->name_version > 1) | 
| diff --git a/kernel/lockdep_internals.h b/kernel/lockdep_internals.h index a2ee95ad1313..4f560cfedc8f 100644 --- a/kernel/lockdep_internals.h +++ b/kernel/lockdep_internals.h | |||
| @@ -110,30 +110,60 @@ lockdep_count_backward_deps(struct lock_class *class) | |||
| 110 | #endif | 110 | #endif | 
| 111 | 111 | ||
| 112 | #ifdef CONFIG_DEBUG_LOCKDEP | 112 | #ifdef CONFIG_DEBUG_LOCKDEP | 
| 113 | |||
| 114 | #include <asm/local.h> | ||
| 113 | /* | 115 | /* | 
| 114 | * Various lockdep statistics: | 116 | * Various lockdep statistics. | 
| 117 | * We want them per cpu as they are often accessed in fast path | ||
| 118 | * and we want to avoid too much cache bouncing. | ||
| 115 | */ | 119 | */ | 
| 116 | extern atomic_t chain_lookup_hits; | 120 | struct lockdep_stats { | 
| 117 | extern atomic_t chain_lookup_misses; | 121 | int chain_lookup_hits; | 
| 118 | extern atomic_t hardirqs_on_events; | 122 | int chain_lookup_misses; | 
| 119 | extern atomic_t hardirqs_off_events; | 123 | int hardirqs_on_events; | 
| 120 | extern atomic_t redundant_hardirqs_on; | 124 | int hardirqs_off_events; | 
| 121 | extern atomic_t redundant_hardirqs_off; | 125 | int redundant_hardirqs_on; | 
| 122 | extern atomic_t softirqs_on_events; | 126 | int redundant_hardirqs_off; | 
| 123 | extern atomic_t softirqs_off_events; | 127 | int softirqs_on_events; | 
| 124 | extern atomic_t redundant_softirqs_on; | 128 | int softirqs_off_events; | 
| 125 | extern atomic_t redundant_softirqs_off; | 129 | int redundant_softirqs_on; | 
| 126 | extern atomic_t nr_unused_locks; | 130 | int redundant_softirqs_off; | 
| 127 | extern atomic_t nr_cyclic_checks; | 131 | int nr_unused_locks; | 
| 128 | extern atomic_t nr_cyclic_check_recursions; | 132 | int nr_cyclic_checks; | 
| 129 | extern atomic_t nr_find_usage_forwards_checks; | 133 | int nr_cyclic_check_recursions; | 
| 130 | extern atomic_t nr_find_usage_forwards_recursions; | 134 | int nr_find_usage_forwards_checks; | 
| 131 | extern atomic_t nr_find_usage_backwards_checks; | 135 | int nr_find_usage_forwards_recursions; | 
| 132 | extern atomic_t nr_find_usage_backwards_recursions; | 136 | int nr_find_usage_backwards_checks; | 
| 133 | # define debug_atomic_inc(ptr) atomic_inc(ptr) | 137 | int nr_find_usage_backwards_recursions; | 
| 134 | # define debug_atomic_dec(ptr) atomic_dec(ptr) | 138 | }; | 
| 135 | # define debug_atomic_read(ptr) atomic_read(ptr) | 139 | |
| 140 | DECLARE_PER_CPU(struct lockdep_stats, lockdep_stats); | ||
| 141 | |||
| 142 | #define __debug_atomic_inc(ptr) \ | ||
| 143 | this_cpu_inc(lockdep_stats.ptr); | ||
| 144 | |||
| 145 | #define debug_atomic_inc(ptr) { \ | ||
| 146 | WARN_ON_ONCE(!irqs_disabled()); \ | ||
| 147 | __this_cpu_inc(lockdep_stats.ptr); \ | ||
| 148 | } | ||
| 149 | |||
| 150 | #define debug_atomic_dec(ptr) { \ | ||
| 151 | WARN_ON_ONCE(!irqs_disabled()); \ | ||
| 152 | __this_cpu_dec(lockdep_stats.ptr); \ | ||
| 153 | } | ||
| 154 | |||
| 155 | #define debug_atomic_read(ptr) ({ \ | ||
| 156 | struct lockdep_stats *__cpu_lockdep_stats; \ | ||
| 157 | unsigned long long __total = 0; \ | ||
| 158 | int __cpu; \ | ||
| 159 | for_each_possible_cpu(__cpu) { \ | ||
| 160 | __cpu_lockdep_stats = &per_cpu(lockdep_stats, __cpu); \ | ||
| 161 | __total += __cpu_lockdep_stats->ptr; \ | ||
| 162 | } \ | ||
| 163 | __total; \ | ||
| 164 | }) | ||
| 136 | #else | 165 | #else | 
| 166 | # define __debug_atomic_inc(ptr) do { } while (0) | ||
| 137 | # define debug_atomic_inc(ptr) do { } while (0) | 167 | # define debug_atomic_inc(ptr) do { } while (0) | 
| 138 | # define debug_atomic_dec(ptr) do { } while (0) | 168 | # define debug_atomic_dec(ptr) do { } while (0) | 
| 139 | # define debug_atomic_read(ptr) 0 | 169 | # define debug_atomic_read(ptr) 0 | 
| diff --git a/kernel/lockdep_proc.c b/kernel/lockdep_proc.c index d4aba4f3584c..59b76c8ce9d7 100644 --- a/kernel/lockdep_proc.c +++ b/kernel/lockdep_proc.c | |||
| @@ -184,34 +184,34 @@ static const struct file_operations proc_lockdep_chains_operations = { | |||
| 184 | static void lockdep_stats_debug_show(struct seq_file *m) | 184 | static void lockdep_stats_debug_show(struct seq_file *m) | 
| 185 | { | 185 | { | 
| 186 | #ifdef CONFIG_DEBUG_LOCKDEP | 186 | #ifdef CONFIG_DEBUG_LOCKDEP | 
| 187 | unsigned int hi1 = debug_atomic_read(&hardirqs_on_events), | 187 | unsigned long long hi1 = debug_atomic_read(hardirqs_on_events), | 
| 188 | hi2 = debug_atomic_read(&hardirqs_off_events), | 188 | hi2 = debug_atomic_read(hardirqs_off_events), | 
| 189 | hr1 = debug_atomic_read(&redundant_hardirqs_on), | 189 | hr1 = debug_atomic_read(redundant_hardirqs_on), | 
| 190 | hr2 = debug_atomic_read(&redundant_hardirqs_off), | 190 | hr2 = debug_atomic_read(redundant_hardirqs_off), | 
| 191 | si1 = debug_atomic_read(&softirqs_on_events), | 191 | si1 = debug_atomic_read(softirqs_on_events), | 
| 192 | si2 = debug_atomic_read(&softirqs_off_events), | 192 | si2 = debug_atomic_read(softirqs_off_events), | 
| 193 | sr1 = debug_atomic_read(&redundant_softirqs_on), | 193 | sr1 = debug_atomic_read(redundant_softirqs_on), | 
| 194 | sr2 = debug_atomic_read(&redundant_softirqs_off); | 194 | sr2 = debug_atomic_read(redundant_softirqs_off); | 
| 195 | 195 | ||
| 196 | seq_printf(m, " chain lookup misses: %11u\n", | 196 | seq_printf(m, " chain lookup misses: %11llu\n", | 
| 197 | debug_atomic_read(&chain_lookup_misses)); | 197 | debug_atomic_read(chain_lookup_misses)); | 
| 198 | seq_printf(m, " chain lookup hits: %11u\n", | 198 | seq_printf(m, " chain lookup hits: %11llu\n", | 
| 199 | debug_atomic_read(&chain_lookup_hits)); | 199 | debug_atomic_read(chain_lookup_hits)); | 
| 200 | seq_printf(m, " cyclic checks: %11u\n", | 200 | seq_printf(m, " cyclic checks: %11llu\n", | 
| 201 | debug_atomic_read(&nr_cyclic_checks)); | 201 | debug_atomic_read(nr_cyclic_checks)); | 
| 202 | seq_printf(m, " find-mask forwards checks: %11u\n", | 202 | seq_printf(m, " find-mask forwards checks: %11llu\n", | 
| 203 | debug_atomic_read(&nr_find_usage_forwards_checks)); | 203 | debug_atomic_read(nr_find_usage_forwards_checks)); | 
| 204 | seq_printf(m, " find-mask backwards checks: %11u\n", | 204 | seq_printf(m, " find-mask backwards checks: %11llu\n", | 
| 205 | debug_atomic_read(&nr_find_usage_backwards_checks)); | 205 | debug_atomic_read(nr_find_usage_backwards_checks)); | 
| 206 | 206 | ||
| 207 | seq_printf(m, " hardirq on events: %11u\n", hi1); | 207 | seq_printf(m, " hardirq on events: %11llu\n", hi1); | 
| 208 | seq_printf(m, " hardirq off events: %11u\n", hi2); | 208 | seq_printf(m, " hardirq off events: %11llu\n", hi2); | 
| 209 | seq_printf(m, " redundant hardirq ons: %11u\n", hr1); | 209 | seq_printf(m, " redundant hardirq ons: %11llu\n", hr1); | 
| 210 | seq_printf(m, " redundant hardirq offs: %11u\n", hr2); | 210 | seq_printf(m, " redundant hardirq offs: %11llu\n", hr2); | 
| 211 | seq_printf(m, " softirq on events: %11u\n", si1); | 211 | seq_printf(m, " softirq on events: %11llu\n", si1); | 
| 212 | seq_printf(m, " softirq off events: %11u\n", si2); | 212 | seq_printf(m, " softirq off events: %11llu\n", si2); | 
| 213 | seq_printf(m, " redundant softirq ons: %11u\n", sr1); | 213 | seq_printf(m, " redundant softirq ons: %11llu\n", sr1); | 
| 214 | seq_printf(m, " redundant softirq offs: %11u\n", sr2); | 214 | seq_printf(m, " redundant softirq offs: %11llu\n", sr2); | 
| 215 | #endif | 215 | #endif | 
| 216 | } | 216 | } | 
| 217 | 217 | ||
| @@ -263,7 +263,7 @@ static int lockdep_stats_show(struct seq_file *m, void *v) | |||
| 263 | #endif | 263 | #endif | 
| 264 | } | 264 | } | 
| 265 | #ifdef CONFIG_DEBUG_LOCKDEP | 265 | #ifdef CONFIG_DEBUG_LOCKDEP | 
| 266 | DEBUG_LOCKS_WARN_ON(debug_atomic_read(&nr_unused_locks) != nr_unused); | 266 | DEBUG_LOCKS_WARN_ON(debug_atomic_read(nr_unused_locks) != nr_unused); | 
| 267 | #endif | 267 | #endif | 
| 268 | seq_printf(m, " lock-classes: %11lu [max: %lu]\n", | 268 | seq_printf(m, " lock-classes: %11lu [max: %lu]\n", | 
| 269 | nr_lock_classes, MAX_LOCKDEP_KEYS); | 269 | nr_lock_classes, MAX_LOCKDEP_KEYS); | 
| diff --git a/sound/drivers/pcsp/pcsp.h b/sound/drivers/pcsp/pcsp.h index 1e123077923d..4ff6c8cc5077 100644 --- a/sound/drivers/pcsp/pcsp.h +++ b/sound/drivers/pcsp/pcsp.h | |||
| @@ -16,7 +16,7 @@ | |||
| 16 | #include <asm/i8253.h> | 16 | #include <asm/i8253.h> | 
| 17 | #else | 17 | #else | 
| 18 | #include <asm/8253pit.h> | 18 | #include <asm/8253pit.h> | 
| 19 | static DEFINE_SPINLOCK(i8253_lock); | 19 | static DEFINE_RAW_SPINLOCK(i8253_lock); | 
| 20 | #endif | 20 | #endif | 
| 21 | 21 | ||
| 22 | #define PCSP_SOUND_VERSION 0x400 /* read 4.00 */ | 22 | #define PCSP_SOUND_VERSION 0x400 /* read 4.00 */ | 
| diff --git a/sound/drivers/pcsp/pcsp_input.c b/sound/drivers/pcsp/pcsp_input.c index 0444cdeb4bec..b5e2b54c2604 100644 --- a/sound/drivers/pcsp/pcsp_input.c +++ b/sound/drivers/pcsp/pcsp_input.c | |||
| @@ -21,7 +21,7 @@ static void pcspkr_do_sound(unsigned int count) | |||
| 21 | { | 21 | { | 
| 22 | unsigned long flags; | 22 | unsigned long flags; | 
| 23 | 23 | ||
| 24 | spin_lock_irqsave(&i8253_lock, flags); | 24 | raw_spin_lock_irqsave(&i8253_lock, flags); | 
| 25 | 25 | ||
| 26 | if (count) { | 26 | if (count) { | 
| 27 | /* set command for counter 2, 2 byte write */ | 27 | /* set command for counter 2, 2 byte write */ | 
| @@ -36,7 +36,7 @@ static void pcspkr_do_sound(unsigned int count) | |||
| 36 | outb(inb_p(0x61) & 0xFC, 0x61); | 36 | outb(inb_p(0x61) & 0xFC, 0x61); | 
| 37 | } | 37 | } | 
| 38 | 38 | ||
| 39 | spin_unlock_irqrestore(&i8253_lock, flags); | 39 | raw_spin_unlock_irqrestore(&i8253_lock, flags); | 
| 40 | } | 40 | } | 
| 41 | 41 | ||
| 42 | void pcspkr_stop_sound(void) | 42 | void pcspkr_stop_sound(void) | 
| diff --git a/sound/drivers/pcsp/pcsp_lib.c b/sound/drivers/pcsp/pcsp_lib.c index d77ffa9a9387..ce9e7d170c0d 100644 --- a/sound/drivers/pcsp/pcsp_lib.c +++ b/sound/drivers/pcsp/pcsp_lib.c | |||
| @@ -66,7 +66,7 @@ static u64 pcsp_timer_update(struct snd_pcsp *chip) | |||
| 66 | timer_cnt = val * CUR_DIV() / 256; | 66 | timer_cnt = val * CUR_DIV() / 256; | 
| 67 | 67 | ||
| 68 | if (timer_cnt && chip->enable) { | 68 | if (timer_cnt && chip->enable) { | 
| 69 | spin_lock_irqsave(&i8253_lock, flags); | 69 | raw_spin_lock_irqsave(&i8253_lock, flags); | 
| 70 | if (!nforce_wa) { | 70 | if (!nforce_wa) { | 
| 71 | outb_p(chip->val61, 0x61); | 71 | outb_p(chip->val61, 0x61); | 
| 72 | outb_p(timer_cnt, 0x42); | 72 | outb_p(timer_cnt, 0x42); | 
| @@ -75,7 +75,7 @@ static u64 pcsp_timer_update(struct snd_pcsp *chip) | |||
| 75 | outb(chip->val61 ^ 2, 0x61); | 75 | outb(chip->val61 ^ 2, 0x61); | 
| 76 | chip->thalf = 1; | 76 | chip->thalf = 1; | 
| 77 | } | 77 | } | 
| 78 | spin_unlock_irqrestore(&i8253_lock, flags); | 78 | raw_spin_unlock_irqrestore(&i8253_lock, flags); | 
| 79 | } | 79 | } | 
| 80 | 80 | ||
| 81 | chip->ns_rem = PCSP_PERIOD_NS(); | 81 | chip->ns_rem = PCSP_PERIOD_NS(); | 
| @@ -159,10 +159,10 @@ static int pcsp_start_playing(struct snd_pcsp *chip) | |||
| 159 | return -EIO; | 159 | return -EIO; | 
| 160 | } | 160 | } | 
| 161 | 161 | ||
| 162 | spin_lock(&i8253_lock); | 162 | raw_spin_lock(&i8253_lock); | 
| 163 | chip->val61 = inb(0x61) | 0x03; | 163 | chip->val61 = inb(0x61) | 0x03; | 
| 164 | outb_p(0x92, 0x43); /* binary, mode 1, LSB only, ch 2 */ | 164 | outb_p(0x92, 0x43); /* binary, mode 1, LSB only, ch 2 */ | 
| 165 | spin_unlock(&i8253_lock); | 165 | raw_spin_unlock(&i8253_lock); | 
| 166 | atomic_set(&chip->timer_active, 1); | 166 | atomic_set(&chip->timer_active, 1); | 
| 167 | chip->thalf = 0; | 167 | chip->thalf = 0; | 
| 168 | 168 | ||
| @@ -179,11 +179,11 @@ static void pcsp_stop_playing(struct snd_pcsp *chip) | |||
| 179 | return; | 179 | return; | 
| 180 | 180 | ||
| 181 | atomic_set(&chip->timer_active, 0); | 181 | atomic_set(&chip->timer_active, 0); | 
| 182 | spin_lock(&i8253_lock); | 182 | raw_spin_lock(&i8253_lock); | 
| 183 | /* restore the timer */ | 183 | /* restore the timer */ | 
| 184 | outb_p(0xb6, 0x43); /* binary, mode 3, LSB/MSB, ch 2 */ | 184 | outb_p(0xb6, 0x43); /* binary, mode 3, LSB/MSB, ch 2 */ | 
| 185 | outb(chip->val61 & 0xFC, 0x61); | 185 | outb(chip->val61 & 0xFC, 0x61); | 
| 186 | spin_unlock(&i8253_lock); | 186 | raw_spin_unlock(&i8253_lock); | 
| 187 | } | 187 | } | 
| 188 | 188 | ||
| 189 | /* | 189 | /* | 
