diff options
Diffstat (limited to 'kernel/irq/chip.c')
-rw-r--r-- | kernel/irq/chip.c | 144 |
1 files changed, 89 insertions, 55 deletions
diff --git a/kernel/irq/chip.c b/kernel/irq/chip.c index c1660194d115..d70394f12ee9 100644 --- a/kernel/irq/chip.c +++ b/kernel/irq/chip.c | |||
@@ -18,11 +18,7 @@ | |||
18 | 18 | ||
19 | #include "internals.h" | 19 | #include "internals.h" |
20 | 20 | ||
21 | /** | 21 | static void dynamic_irq_init_x(unsigned int irq, bool keep_chip_data) |
22 | * dynamic_irq_init - initialize a dynamically allocated irq | ||
23 | * @irq: irq number to initialize | ||
24 | */ | ||
25 | void dynamic_irq_init(unsigned int irq) | ||
26 | { | 22 | { |
27 | struct irq_desc *desc; | 23 | struct irq_desc *desc; |
28 | unsigned long flags; | 24 | unsigned long flags; |
@@ -34,14 +30,15 @@ void dynamic_irq_init(unsigned int irq) | |||
34 | } | 30 | } |
35 | 31 | ||
36 | /* Ensure we don't have left over values from a previous use of this irq */ | 32 | /* Ensure we don't have left over values from a previous use of this irq */ |
37 | spin_lock_irqsave(&desc->lock, flags); | 33 | raw_spin_lock_irqsave(&desc->lock, flags); |
38 | desc->status = IRQ_DISABLED; | 34 | desc->status = IRQ_DISABLED; |
39 | desc->chip = &no_irq_chip; | 35 | desc->chip = &no_irq_chip; |
40 | desc->handle_irq = handle_bad_irq; | 36 | desc->handle_irq = handle_bad_irq; |
41 | desc->depth = 1; | 37 | desc->depth = 1; |
42 | desc->msi_desc = NULL; | 38 | desc->msi_desc = NULL; |
43 | desc->handler_data = NULL; | 39 | desc->handler_data = NULL; |
44 | desc->chip_data = NULL; | 40 | if (!keep_chip_data) |
41 | desc->chip_data = NULL; | ||
45 | desc->action = NULL; | 42 | desc->action = NULL; |
46 | desc->irq_count = 0; | 43 | desc->irq_count = 0; |
47 | desc->irqs_unhandled = 0; | 44 | desc->irqs_unhandled = 0; |
@@ -51,14 +48,30 @@ void dynamic_irq_init(unsigned int irq) | |||
51 | cpumask_clear(desc->pending_mask); | 48 | cpumask_clear(desc->pending_mask); |
52 | #endif | 49 | #endif |
53 | #endif | 50 | #endif |
54 | spin_unlock_irqrestore(&desc->lock, flags); | 51 | raw_spin_unlock_irqrestore(&desc->lock, flags); |
55 | } | 52 | } |
56 | 53 | ||
57 | /** | 54 | /** |
58 | * dynamic_irq_cleanup - cleanup a dynamically allocated irq | 55 | * dynamic_irq_init - initialize a dynamically allocated irq |
59 | * @irq: irq number to initialize | 56 | * @irq: irq number to initialize |
60 | */ | 57 | */ |
61 | void dynamic_irq_cleanup(unsigned int irq) | 58 | void dynamic_irq_init(unsigned int irq) |
59 | { | ||
60 | dynamic_irq_init_x(irq, false); | ||
61 | } | ||
62 | |||
63 | /** | ||
64 | * dynamic_irq_init_keep_chip_data - initialize a dynamically allocated irq | ||
65 | * @irq: irq number to initialize | ||
66 | * | ||
67 | * does not set irq_to_desc(irq)->chip_data to NULL | ||
68 | */ | ||
69 | void dynamic_irq_init_keep_chip_data(unsigned int irq) | ||
70 | { | ||
71 | dynamic_irq_init_x(irq, true); | ||
72 | } | ||
73 | |||
74 | static void dynamic_irq_cleanup_x(unsigned int irq, bool keep_chip_data) | ||
62 | { | 75 | { |
63 | struct irq_desc *desc = irq_to_desc(irq); | 76 | struct irq_desc *desc = irq_to_desc(irq); |
64 | unsigned long flags; | 77 | unsigned long flags; |
@@ -68,21 +81,42 @@ void dynamic_irq_cleanup(unsigned int irq) | |||
68 | return; | 81 | return; |
69 | } | 82 | } |
70 | 83 | ||
71 | spin_lock_irqsave(&desc->lock, flags); | 84 | raw_spin_lock_irqsave(&desc->lock, flags); |
72 | if (desc->action) { | 85 | if (desc->action) { |
73 | spin_unlock_irqrestore(&desc->lock, flags); | 86 | raw_spin_unlock_irqrestore(&desc->lock, flags); |
74 | WARN(1, KERN_ERR "Destroying IRQ%d without calling free_irq\n", | 87 | WARN(1, KERN_ERR "Destroying IRQ%d without calling free_irq\n", |
75 | irq); | 88 | irq); |
76 | return; | 89 | return; |
77 | } | 90 | } |
78 | desc->msi_desc = NULL; | 91 | desc->msi_desc = NULL; |
79 | desc->handler_data = NULL; | 92 | desc->handler_data = NULL; |
80 | desc->chip_data = NULL; | 93 | if (!keep_chip_data) |
94 | desc->chip_data = NULL; | ||
81 | desc->handle_irq = handle_bad_irq; | 95 | desc->handle_irq = handle_bad_irq; |
82 | desc->chip = &no_irq_chip; | 96 | desc->chip = &no_irq_chip; |
83 | desc->name = NULL; | 97 | desc->name = NULL; |
84 | clear_kstat_irqs(desc); | 98 | clear_kstat_irqs(desc); |
85 | spin_unlock_irqrestore(&desc->lock, flags); | 99 | raw_spin_unlock_irqrestore(&desc->lock, flags); |
100 | } | ||
101 | |||
102 | /** | ||
103 | * dynamic_irq_cleanup - cleanup a dynamically allocated irq | ||
104 | * @irq: irq number to initialize | ||
105 | */ | ||
106 | void dynamic_irq_cleanup(unsigned int irq) | ||
107 | { | ||
108 | dynamic_irq_cleanup_x(irq, false); | ||
109 | } | ||
110 | |||
111 | /** | ||
112 | * dynamic_irq_cleanup_keep_chip_data - cleanup a dynamically allocated irq | ||
113 | * @irq: irq number to initialize | ||
114 | * | ||
115 | * does not set irq_to_desc(irq)->chip_data to NULL | ||
116 | */ | ||
117 | void dynamic_irq_cleanup_keep_chip_data(unsigned int irq) | ||
118 | { | ||
119 | dynamic_irq_cleanup_x(irq, true); | ||
86 | } | 120 | } |
87 | 121 | ||
88 | 122 | ||
@@ -104,10 +138,10 @@ int set_irq_chip(unsigned int irq, struct irq_chip *chip) | |||
104 | if (!chip) | 138 | if (!chip) |
105 | chip = &no_irq_chip; | 139 | chip = &no_irq_chip; |
106 | 140 | ||
107 | spin_lock_irqsave(&desc->lock, flags); | 141 | raw_spin_lock_irqsave(&desc->lock, flags); |
108 | irq_chip_set_defaults(chip); | 142 | irq_chip_set_defaults(chip); |
109 | desc->chip = chip; | 143 | desc->chip = chip; |
110 | spin_unlock_irqrestore(&desc->lock, flags); | 144 | raw_spin_unlock_irqrestore(&desc->lock, flags); |
111 | 145 | ||
112 | return 0; | 146 | return 0; |
113 | } | 147 | } |
@@ -133,9 +167,9 @@ int set_irq_type(unsigned int irq, unsigned int type) | |||
133 | if (type == IRQ_TYPE_NONE) | 167 | if (type == IRQ_TYPE_NONE) |
134 | return 0; | 168 | return 0; |
135 | 169 | ||
136 | spin_lock_irqsave(&desc->lock, flags); | 170 | raw_spin_lock_irqsave(&desc->lock, flags); |
137 | ret = __irq_set_trigger(desc, irq, type); | 171 | ret = __irq_set_trigger(desc, irq, type); |
138 | spin_unlock_irqrestore(&desc->lock, flags); | 172 | raw_spin_unlock_irqrestore(&desc->lock, flags); |
139 | return ret; | 173 | return ret; |
140 | } | 174 | } |
141 | EXPORT_SYMBOL(set_irq_type); | 175 | EXPORT_SYMBOL(set_irq_type); |
@@ -158,19 +192,19 @@ int set_irq_data(unsigned int irq, void *data) | |||
158 | return -EINVAL; | 192 | return -EINVAL; |
159 | } | 193 | } |
160 | 194 | ||
161 | spin_lock_irqsave(&desc->lock, flags); | 195 | raw_spin_lock_irqsave(&desc->lock, flags); |
162 | desc->handler_data = data; | 196 | desc->handler_data = data; |
163 | spin_unlock_irqrestore(&desc->lock, flags); | 197 | raw_spin_unlock_irqrestore(&desc->lock, flags); |
164 | return 0; | 198 | return 0; |
165 | } | 199 | } |
166 | EXPORT_SYMBOL(set_irq_data); | 200 | EXPORT_SYMBOL(set_irq_data); |
167 | 201 | ||
168 | /** | 202 | /** |
169 | * set_irq_data - set irq type data for an irq | 203 | * set_irq_msi - set MSI descriptor data for an irq |
170 | * @irq: Interrupt number | 204 | * @irq: Interrupt number |
171 | * @entry: Pointer to MSI descriptor data | 205 | * @entry: Pointer to MSI descriptor data |
172 | * | 206 | * |
173 | * Set the hardware irq controller data for an irq | 207 | * Set the MSI descriptor entry for an irq |
174 | */ | 208 | */ |
175 | int set_irq_msi(unsigned int irq, struct msi_desc *entry) | 209 | int set_irq_msi(unsigned int irq, struct msi_desc *entry) |
176 | { | 210 | { |
@@ -183,11 +217,11 @@ int set_irq_msi(unsigned int irq, struct msi_desc *entry) | |||
183 | return -EINVAL; | 217 | return -EINVAL; |
184 | } | 218 | } |
185 | 219 | ||
186 | spin_lock_irqsave(&desc->lock, flags); | 220 | raw_spin_lock_irqsave(&desc->lock, flags); |
187 | desc->msi_desc = entry; | 221 | desc->msi_desc = entry; |
188 | if (entry) | 222 | if (entry) |
189 | entry->irq = irq; | 223 | entry->irq = irq; |
190 | spin_unlock_irqrestore(&desc->lock, flags); | 224 | raw_spin_unlock_irqrestore(&desc->lock, flags); |
191 | return 0; | 225 | return 0; |
192 | } | 226 | } |
193 | 227 | ||
@@ -214,9 +248,9 @@ int set_irq_chip_data(unsigned int irq, void *data) | |||
214 | return -EINVAL; | 248 | return -EINVAL; |
215 | } | 249 | } |
216 | 250 | ||
217 | spin_lock_irqsave(&desc->lock, flags); | 251 | raw_spin_lock_irqsave(&desc->lock, flags); |
218 | desc->chip_data = data; | 252 | desc->chip_data = data; |
219 | spin_unlock_irqrestore(&desc->lock, flags); | 253 | raw_spin_unlock_irqrestore(&desc->lock, flags); |
220 | 254 | ||
221 | return 0; | 255 | return 0; |
222 | } | 256 | } |
@@ -241,12 +275,12 @@ void set_irq_nested_thread(unsigned int irq, int nest) | |||
241 | if (!desc) | 275 | if (!desc) |
242 | return; | 276 | return; |
243 | 277 | ||
244 | spin_lock_irqsave(&desc->lock, flags); | 278 | raw_spin_lock_irqsave(&desc->lock, flags); |
245 | if (nest) | 279 | if (nest) |
246 | desc->status |= IRQ_NESTED_THREAD; | 280 | desc->status |= IRQ_NESTED_THREAD; |
247 | else | 281 | else |
248 | desc->status &= ~IRQ_NESTED_THREAD; | 282 | desc->status &= ~IRQ_NESTED_THREAD; |
249 | spin_unlock_irqrestore(&desc->lock, flags); | 283 | raw_spin_unlock_irqrestore(&desc->lock, flags); |
250 | } | 284 | } |
251 | EXPORT_SYMBOL_GPL(set_irq_nested_thread); | 285 | EXPORT_SYMBOL_GPL(set_irq_nested_thread); |
252 | 286 | ||
@@ -343,7 +377,7 @@ void handle_nested_irq(unsigned int irq) | |||
343 | 377 | ||
344 | might_sleep(); | 378 | might_sleep(); |
345 | 379 | ||
346 | spin_lock_irq(&desc->lock); | 380 | raw_spin_lock_irq(&desc->lock); |
347 | 381 | ||
348 | kstat_incr_irqs_this_cpu(irq, desc); | 382 | kstat_incr_irqs_this_cpu(irq, desc); |
349 | 383 | ||
@@ -352,17 +386,17 @@ void handle_nested_irq(unsigned int irq) | |||
352 | goto out_unlock; | 386 | goto out_unlock; |
353 | 387 | ||
354 | desc->status |= IRQ_INPROGRESS; | 388 | desc->status |= IRQ_INPROGRESS; |
355 | spin_unlock_irq(&desc->lock); | 389 | raw_spin_unlock_irq(&desc->lock); |
356 | 390 | ||
357 | action_ret = action->thread_fn(action->irq, action->dev_id); | 391 | action_ret = action->thread_fn(action->irq, action->dev_id); |
358 | if (!noirqdebug) | 392 | if (!noirqdebug) |
359 | note_interrupt(irq, desc, action_ret); | 393 | note_interrupt(irq, desc, action_ret); |
360 | 394 | ||
361 | spin_lock_irq(&desc->lock); | 395 | raw_spin_lock_irq(&desc->lock); |
362 | desc->status &= ~IRQ_INPROGRESS; | 396 | desc->status &= ~IRQ_INPROGRESS; |
363 | 397 | ||
364 | out_unlock: | 398 | out_unlock: |
365 | spin_unlock_irq(&desc->lock); | 399 | raw_spin_unlock_irq(&desc->lock); |
366 | } | 400 | } |
367 | EXPORT_SYMBOL_GPL(handle_nested_irq); | 401 | EXPORT_SYMBOL_GPL(handle_nested_irq); |
368 | 402 | ||
@@ -384,7 +418,7 @@ handle_simple_irq(unsigned int irq, struct irq_desc *desc) | |||
384 | struct irqaction *action; | 418 | struct irqaction *action; |
385 | irqreturn_t action_ret; | 419 | irqreturn_t action_ret; |
386 | 420 | ||
387 | spin_lock(&desc->lock); | 421 | raw_spin_lock(&desc->lock); |
388 | 422 | ||
389 | if (unlikely(desc->status & IRQ_INPROGRESS)) | 423 | if (unlikely(desc->status & IRQ_INPROGRESS)) |
390 | goto out_unlock; | 424 | goto out_unlock; |
@@ -396,16 +430,16 @@ handle_simple_irq(unsigned int irq, struct irq_desc *desc) | |||
396 | goto out_unlock; | 430 | goto out_unlock; |
397 | 431 | ||
398 | desc->status |= IRQ_INPROGRESS; | 432 | desc->status |= IRQ_INPROGRESS; |
399 | spin_unlock(&desc->lock); | 433 | raw_spin_unlock(&desc->lock); |
400 | 434 | ||
401 | action_ret = handle_IRQ_event(irq, action); | 435 | action_ret = handle_IRQ_event(irq, action); |
402 | if (!noirqdebug) | 436 | if (!noirqdebug) |
403 | note_interrupt(irq, desc, action_ret); | 437 | note_interrupt(irq, desc, action_ret); |
404 | 438 | ||
405 | spin_lock(&desc->lock); | 439 | raw_spin_lock(&desc->lock); |
406 | desc->status &= ~IRQ_INPROGRESS; | 440 | desc->status &= ~IRQ_INPROGRESS; |
407 | out_unlock: | 441 | out_unlock: |
408 | spin_unlock(&desc->lock); | 442 | raw_spin_unlock(&desc->lock); |
409 | } | 443 | } |
410 | 444 | ||
411 | /** | 445 | /** |
@@ -424,7 +458,7 @@ handle_level_irq(unsigned int irq, struct irq_desc *desc) | |||
424 | struct irqaction *action; | 458 | struct irqaction *action; |
425 | irqreturn_t action_ret; | 459 | irqreturn_t action_ret; |
426 | 460 | ||
427 | spin_lock(&desc->lock); | 461 | raw_spin_lock(&desc->lock); |
428 | mask_ack_irq(desc, irq); | 462 | mask_ack_irq(desc, irq); |
429 | 463 | ||
430 | if (unlikely(desc->status & IRQ_INPROGRESS)) | 464 | if (unlikely(desc->status & IRQ_INPROGRESS)) |
@@ -441,13 +475,13 @@ handle_level_irq(unsigned int irq, struct irq_desc *desc) | |||
441 | goto out_unlock; | 475 | goto out_unlock; |
442 | 476 | ||
443 | desc->status |= IRQ_INPROGRESS; | 477 | desc->status |= IRQ_INPROGRESS; |
444 | spin_unlock(&desc->lock); | 478 | raw_spin_unlock(&desc->lock); |
445 | 479 | ||
446 | action_ret = handle_IRQ_event(irq, action); | 480 | action_ret = handle_IRQ_event(irq, action); |
447 | if (!noirqdebug) | 481 | if (!noirqdebug) |
448 | note_interrupt(irq, desc, action_ret); | 482 | note_interrupt(irq, desc, action_ret); |
449 | 483 | ||
450 | spin_lock(&desc->lock); | 484 | raw_spin_lock(&desc->lock); |
451 | desc->status &= ~IRQ_INPROGRESS; | 485 | desc->status &= ~IRQ_INPROGRESS; |
452 | 486 | ||
453 | if (unlikely(desc->status & IRQ_ONESHOT)) | 487 | if (unlikely(desc->status & IRQ_ONESHOT)) |
@@ -455,7 +489,7 @@ handle_level_irq(unsigned int irq, struct irq_desc *desc) | |||
455 | else if (!(desc->status & IRQ_DISABLED) && desc->chip->unmask) | 489 | else if (!(desc->status & IRQ_DISABLED) && desc->chip->unmask) |
456 | desc->chip->unmask(irq); | 490 | desc->chip->unmask(irq); |
457 | out_unlock: | 491 | out_unlock: |
458 | spin_unlock(&desc->lock); | 492 | raw_spin_unlock(&desc->lock); |
459 | } | 493 | } |
460 | EXPORT_SYMBOL_GPL(handle_level_irq); | 494 | EXPORT_SYMBOL_GPL(handle_level_irq); |
461 | 495 | ||
@@ -475,7 +509,7 @@ handle_fasteoi_irq(unsigned int irq, struct irq_desc *desc) | |||
475 | struct irqaction *action; | 509 | struct irqaction *action; |
476 | irqreturn_t action_ret; | 510 | irqreturn_t action_ret; |
477 | 511 | ||
478 | spin_lock(&desc->lock); | 512 | raw_spin_lock(&desc->lock); |
479 | 513 | ||
480 | if (unlikely(desc->status & IRQ_INPROGRESS)) | 514 | if (unlikely(desc->status & IRQ_INPROGRESS)) |
481 | goto out; | 515 | goto out; |
@@ -497,18 +531,18 @@ handle_fasteoi_irq(unsigned int irq, struct irq_desc *desc) | |||
497 | 531 | ||
498 | desc->status |= IRQ_INPROGRESS; | 532 | desc->status |= IRQ_INPROGRESS; |
499 | desc->status &= ~IRQ_PENDING; | 533 | desc->status &= ~IRQ_PENDING; |
500 | spin_unlock(&desc->lock); | 534 | raw_spin_unlock(&desc->lock); |
501 | 535 | ||
502 | action_ret = handle_IRQ_event(irq, action); | 536 | action_ret = handle_IRQ_event(irq, action); |
503 | if (!noirqdebug) | 537 | if (!noirqdebug) |
504 | note_interrupt(irq, desc, action_ret); | 538 | note_interrupt(irq, desc, action_ret); |
505 | 539 | ||
506 | spin_lock(&desc->lock); | 540 | raw_spin_lock(&desc->lock); |
507 | desc->status &= ~IRQ_INPROGRESS; | 541 | desc->status &= ~IRQ_INPROGRESS; |
508 | out: | 542 | out: |
509 | desc->chip->eoi(irq); | 543 | desc->chip->eoi(irq); |
510 | 544 | ||
511 | spin_unlock(&desc->lock); | 545 | raw_spin_unlock(&desc->lock); |
512 | } | 546 | } |
513 | 547 | ||
514 | /** | 548 | /** |
@@ -530,7 +564,7 @@ out: | |||
530 | void | 564 | void |
531 | handle_edge_irq(unsigned int irq, struct irq_desc *desc) | 565 | handle_edge_irq(unsigned int irq, struct irq_desc *desc) |
532 | { | 566 | { |
533 | spin_lock(&desc->lock); | 567 | raw_spin_lock(&desc->lock); |
534 | 568 | ||
535 | desc->status &= ~(IRQ_REPLAY | IRQ_WAITING); | 569 | desc->status &= ~(IRQ_REPLAY | IRQ_WAITING); |
536 | 570 | ||
@@ -576,21 +610,21 @@ handle_edge_irq(unsigned int irq, struct irq_desc *desc) | |||
576 | } | 610 | } |
577 | 611 | ||
578 | desc->status &= ~IRQ_PENDING; | 612 | desc->status &= ~IRQ_PENDING; |
579 | spin_unlock(&desc->lock); | 613 | raw_spin_unlock(&desc->lock); |
580 | action_ret = handle_IRQ_event(irq, action); | 614 | action_ret = handle_IRQ_event(irq, action); |
581 | if (!noirqdebug) | 615 | if (!noirqdebug) |
582 | note_interrupt(irq, desc, action_ret); | 616 | note_interrupt(irq, desc, action_ret); |
583 | spin_lock(&desc->lock); | 617 | raw_spin_lock(&desc->lock); |
584 | 618 | ||
585 | } while ((desc->status & (IRQ_PENDING | IRQ_DISABLED)) == IRQ_PENDING); | 619 | } while ((desc->status & (IRQ_PENDING | IRQ_DISABLED)) == IRQ_PENDING); |
586 | 620 | ||
587 | desc->status &= ~IRQ_INPROGRESS; | 621 | desc->status &= ~IRQ_INPROGRESS; |
588 | out_unlock: | 622 | out_unlock: |
589 | spin_unlock(&desc->lock); | 623 | raw_spin_unlock(&desc->lock); |
590 | } | 624 | } |
591 | 625 | ||
592 | /** | 626 | /** |
593 | * handle_percpu_IRQ - Per CPU local irq handler | 627 | * handle_percpu_irq - Per CPU local irq handler |
594 | * @irq: the interrupt number | 628 | * @irq: the interrupt number |
595 | * @desc: the interrupt description structure for this irq | 629 | * @desc: the interrupt description structure for this irq |
596 | * | 630 | * |
@@ -643,7 +677,7 @@ __set_irq_handler(unsigned int irq, irq_flow_handler_t handle, int is_chained, | |||
643 | } | 677 | } |
644 | 678 | ||
645 | chip_bus_lock(irq, desc); | 679 | chip_bus_lock(irq, desc); |
646 | spin_lock_irqsave(&desc->lock, flags); | 680 | raw_spin_lock_irqsave(&desc->lock, flags); |
647 | 681 | ||
648 | /* Uninstall? */ | 682 | /* Uninstall? */ |
649 | if (handle == handle_bad_irq) { | 683 | if (handle == handle_bad_irq) { |
@@ -661,7 +695,7 @@ __set_irq_handler(unsigned int irq, irq_flow_handler_t handle, int is_chained, | |||
661 | desc->depth = 0; | 695 | desc->depth = 0; |
662 | desc->chip->startup(irq); | 696 | desc->chip->startup(irq); |
663 | } | 697 | } |
664 | spin_unlock_irqrestore(&desc->lock, flags); | 698 | raw_spin_unlock_irqrestore(&desc->lock, flags); |
665 | chip_bus_sync_unlock(irq, desc); | 699 | chip_bus_sync_unlock(irq, desc); |
666 | } | 700 | } |
667 | EXPORT_SYMBOL_GPL(__set_irq_handler); | 701 | EXPORT_SYMBOL_GPL(__set_irq_handler); |
@@ -692,9 +726,9 @@ void __init set_irq_noprobe(unsigned int irq) | |||
692 | return; | 726 | return; |
693 | } | 727 | } |
694 | 728 | ||
695 | spin_lock_irqsave(&desc->lock, flags); | 729 | raw_spin_lock_irqsave(&desc->lock, flags); |
696 | desc->status |= IRQ_NOPROBE; | 730 | desc->status |= IRQ_NOPROBE; |
697 | spin_unlock_irqrestore(&desc->lock, flags); | 731 | raw_spin_unlock_irqrestore(&desc->lock, flags); |
698 | } | 732 | } |
699 | 733 | ||
700 | void __init set_irq_probe(unsigned int irq) | 734 | void __init set_irq_probe(unsigned int irq) |
@@ -707,7 +741,7 @@ void __init set_irq_probe(unsigned int irq) | |||
707 | return; | 741 | return; |
708 | } | 742 | } |
709 | 743 | ||
710 | spin_lock_irqsave(&desc->lock, flags); | 744 | raw_spin_lock_irqsave(&desc->lock, flags); |
711 | desc->status &= ~IRQ_NOPROBE; | 745 | desc->status &= ~IRQ_NOPROBE; |
712 | spin_unlock_irqrestore(&desc->lock, flags); | 746 | raw_spin_unlock_irqrestore(&desc->lock, flags); |
713 | } | 747 | } |