1 /* 2 * linux/kernel/irq/manage.c 3 * 4 * Copyright (C) 1992, 1998-2006 Linus Torvalds, Ingo Molnar 5 * Copyright (C) 2005-2006 Thomas Gleixner 6 * 7 * This file contains driver APIs to the irq subsystem. 8 */ 9 10 #define pr_fmt(fmt) "genirq: " fmt 11 12 #include <linux/irq.h> 13 #include <linux/kthread.h> 14 #include <linux/module.h> 15 #include <linux/random.h> 16 #include <linux/interrupt.h> 17 #include <linux/slab.h> 18 #include <linux/sched.h> 19 #include <linux/sched/rt.h> 20 #include <linux/sched/task.h> 21 #include <uapi/linux/sched/types.h> 22 #include <linux/task_work.h> 23 24 #include "internals.h" 25 26 #ifdef CONFIG_IRQ_FORCED_THREADING 27 __read_mostly bool force_irqthreads; 28 29 static int __init setup_forced_irqthreads(char *arg) 30 { 31 force_irqthreads = true; 32 return 0; 33 } 34 early_param("threadirqs", setup_forced_irqthreads); 35 #endif 36 37 static void __synchronize_hardirq(struct irq_desc *desc) 38 { 39 bool inprogress; 40 41 do { 42 unsigned long flags; 43 44 /* 45 * Wait until we're out of the critical section. This might 46 * give the wrong answer due to the lack of memory barriers. 47 */ 48 while (irqd_irq_inprogress(&desc->irq_data)) 49 cpu_relax(); 50 51 /* Ok, that indicated we're done: double-check carefully. */ 52 raw_spin_lock_irqsave(&desc->lock, flags); 53 inprogress = irqd_irq_inprogress(&desc->irq_data); 54 raw_spin_unlock_irqrestore(&desc->lock, flags); 55 56 /* Oops, that failed? */ 57 } while (inprogress); 58 } 59 60 /** 61 * synchronize_hardirq - wait for pending hard IRQ handlers (on other CPUs) 62 * @irq: interrupt number to wait for 63 * 64 * This function waits for any pending hard IRQ handlers for this 65 * interrupt to complete before returning. If you use this 66 * function while holding a resource the IRQ handler may need you 67 * will deadlock. It does not take associated threaded handlers 68 * into account. 69 * 70 * Do not use this for shutdown scenarios where you must be sure 71 * that all parts (hardirq and threaded handler) have completed. 72 * 73 * Returns: false if a threaded handler is active. 74 * 75 * This function may be called - with care - from IRQ context. 76 */ 77 bool synchronize_hardirq(unsigned int irq) 78 { 79 struct irq_desc *desc = irq_to_desc(irq); 80 81 if (desc) { 82 __synchronize_hardirq(desc); 83 return !atomic_read(&desc->threads_active); 84 } 85 86 return true; 87 } 88 EXPORT_SYMBOL(synchronize_hardirq); 89 90 /** 91 * synchronize_irq - wait for pending IRQ handlers (on other CPUs) 92 * @irq: interrupt number to wait for 93 * 94 * This function waits for any pending IRQ handlers for this interrupt 95 * to complete before returning. If you use this function while 96 * holding a resource the IRQ handler may need you will deadlock. 97 * 98 * This function may be called - with care - from IRQ context. 99 */ 100 void synchronize_irq(unsigned int irq) 101 { 102 struct irq_desc *desc = irq_to_desc(irq); 103 104 if (desc) { 105 __synchronize_hardirq(desc); 106 /* 107 * We made sure that no hardirq handler is 108 * running. Now verify that no threaded handlers are 109 * active. 110 */ 111 wait_event(desc->wait_for_threads, 112 !atomic_read(&desc->threads_active)); 113 } 114 } 115 EXPORT_SYMBOL(synchronize_irq); 116 117 #ifdef CONFIG_SMP 118 cpumask_var_t irq_default_affinity; 119 120 static bool __irq_can_set_affinity(struct irq_desc *desc) 121 { 122 if (!desc || !irqd_can_balance(&desc->irq_data) || 123 !desc->irq_data.chip || !desc->irq_data.chip->irq_set_affinity) 124 return false; 125 return true; 126 } 127 128 /** 129 * irq_can_set_affinity - Check if the affinity of a given irq can be set 130 * @irq: Interrupt to check 131 * 132 */ 133 int irq_can_set_affinity(unsigned int irq) 134 { 135 return __irq_can_set_affinity(irq_to_desc(irq)); 136 } 137 138 /** 139 * irq_can_set_affinity_usr - Check if affinity of a irq can be set from user space 140 * @irq: Interrupt to check 141 * 142 * Like irq_can_set_affinity() above, but additionally checks for the 143 * AFFINITY_MANAGED flag. 144 */ 145 bool irq_can_set_affinity_usr(unsigned int irq) 146 { 147 struct irq_desc *desc = irq_to_desc(irq); 148 149 return __irq_can_set_affinity(desc) && 150 !irqd_affinity_is_managed(&desc->irq_data); 151 } 152 153 /** 154 * irq_set_thread_affinity - Notify irq threads to adjust affinity 155 * @desc: irq descriptor which has affitnity changed 156 * 157 * We just set IRQTF_AFFINITY and delegate the affinity setting 158 * to the interrupt thread itself. We can not call 159 * set_cpus_allowed_ptr() here as we hold desc->lock and this 160 * code can be called from hard interrupt context. 161 */ 162 void irq_set_thread_affinity(struct irq_desc *desc) 163 { 164 struct irqaction *action; 165 166 for_each_action_of_desc(desc, action) 167 if (action->thread) 168 set_bit(IRQTF_AFFINITY, &action->thread_flags); 169 } 170 171 int irq_do_set_affinity(struct irq_data *data, const struct cpumask *mask, 172 bool force) 173 { 174 struct irq_desc *desc = irq_data_to_desc(data); 175 struct irq_chip *chip = irq_data_get_irq_chip(data); 176 int ret; 177 178 ret = chip->irq_set_affinity(data, mask, force); 179 switch (ret) { 180 case IRQ_SET_MASK_OK: 181 case IRQ_SET_MASK_OK_DONE: 182 cpumask_copy(desc->irq_common_data.affinity, mask); 183 case IRQ_SET_MASK_OK_NOCOPY: 184 irq_set_thread_affinity(desc); 185 ret = 0; 186 } 187 188 return ret; 189 } 190 191 int irq_set_affinity_locked(struct irq_data *data, const struct cpumask *mask, 192 bool force) 193 { 194 struct irq_chip *chip = irq_data_get_irq_chip(data); 195 struct irq_desc *desc = irq_data_to_desc(data); 196 int ret = 0; 197 198 if (!chip || !chip->irq_set_affinity) 199 return -EINVAL; 200 201 if (irq_can_move_pcntxt(data)) { 202 ret = irq_do_set_affinity(data, mask, force); 203 } else { 204 irqd_set_move_pending(data); 205 irq_copy_pending(desc, mask); 206 } 207 208 if (desc->affinity_notify) { 209 kref_get(&desc->affinity_notify->kref); 210 schedule_work(&desc->affinity_notify->work); 211 } 212 irqd_set(data, IRQD_AFFINITY_SET); 213 214 return ret; 215 } 216 217 int __irq_set_affinity(unsigned int irq, const struct cpumask *mask, bool force) 218 { 219 struct irq_desc *desc = irq_to_desc(irq); 220 unsigned long flags; 221 int ret; 222 223 if (!desc) 224 return -EINVAL; 225 226 raw_spin_lock_irqsave(&desc->lock, flags); 227 ret = irq_set_affinity_locked(irq_desc_get_irq_data(desc), mask, force); 228 raw_spin_unlock_irqrestore(&desc->lock, flags); 229 return ret; 230 } 231 232 int irq_set_affinity_hint(unsigned int irq, const struct cpumask *m) 233 { 234 unsigned long flags; 235 struct irq_desc *desc = irq_get_desc_lock(irq, &flags, IRQ_GET_DESC_CHECK_GLOBAL); 236 237 if (!desc) 238 return -EINVAL; 239 desc->affinity_hint = m; 240 irq_put_desc_unlock(desc, flags); 241 /* set the initial affinity to prevent every interrupt being on CPU0 */ 242 if (m) 243 __irq_set_affinity(irq, m, false); 244 return 0; 245 } 246 EXPORT_SYMBOL_GPL(irq_set_affinity_hint); 247 248 static void irq_affinity_notify(struct work_struct *work) 249 { 250 struct irq_affinity_notify *notify = 251 container_of(work, struct irq_affinity_notify, work); 252 struct irq_desc *desc = irq_to_desc(notify->irq); 253 cpumask_var_t cpumask; 254 unsigned long flags; 255 256 if (!desc || !alloc_cpumask_var(&cpumask, GFP_KERNEL)) 257 goto out; 258 259 raw_spin_lock_irqsave(&desc->lock, flags); 260 if (irq_move_pending(&desc->irq_data)) 261 irq_get_pending(cpumask, desc); 262 else 263 cpumask_copy(cpumask, desc->irq_common_data.affinity); 264 raw_spin_unlock_irqrestore(&desc->lock, flags); 265 266 notify->notify(notify, cpumask); 267 268 free_cpumask_var(cpumask); 269 out: 270 kref_put(¬ify->kref, notify->release); 271 } 272 273 /** 274 * irq_set_affinity_notifier - control notification of IRQ affinity changes 275 * @irq: Interrupt for which to enable/disable notification 276 * @notify: Context for notification, or %NULL to disable 277 * notification. Function pointers must be initialised; 278 * the other fields will be initialised by this function. 279 * 280 * Must be called in process context. Notification may only be enabled 281 * after the IRQ is allocated and must be disabled before the IRQ is 282 * freed using free_irq(). 283 */ 284 int 285 irq_set_affinity_notifier(unsigned int irq, struct irq_affinity_notify *notify) 286 { 287 struct irq_desc *desc = irq_to_desc(irq); 288 struct irq_affinity_notify *old_notify; 289 unsigned long flags; 290 291 /* The release function is promised process context */ 292 might_sleep(); 293 294 if (!desc) 295 return -EINVAL; 296 297 /* Complete initialisation of *notify */ 298 if (notify) { 299 notify->irq = irq; 300 kref_init(¬ify->kref); 301 INIT_WORK(¬ify->work, irq_affinity_notify); 302 } 303 304 raw_spin_lock_irqsave(&desc->lock, flags); 305 old_notify = desc->affinity_notify; 306 desc->affinity_notify = notify; 307 raw_spin_unlock_irqrestore(&desc->lock, flags); 308 309 if (old_notify) 310 kref_put(&old_notify->kref, old_notify->release); 311 312 return 0; 313 } 314 EXPORT_SYMBOL_GPL(irq_set_affinity_notifier); 315 316 #ifndef CONFIG_AUTO_IRQ_AFFINITY 317 /* 318 * Generic version of the affinity autoselector. 319 */ 320 int irq_setup_affinity(struct irq_desc *desc) 321 { 322 struct cpumask *set = irq_default_affinity; 323 int ret, node = irq_desc_get_node(desc); 324 static DEFINE_RAW_SPINLOCK(mask_lock); 325 static struct cpumask mask; 326 327 /* Excludes PER_CPU and NO_BALANCE interrupts */ 328 if (!__irq_can_set_affinity(desc)) 329 return 0; 330 331 raw_spin_lock(&mask_lock); 332 /* 333 * Preserve the managed affinity setting and a userspace affinity 334 * setup, but make sure that one of the targets is online. 335 */ 336 if (irqd_affinity_is_managed(&desc->irq_data) || 337 irqd_has_set(&desc->irq_data, IRQD_AFFINITY_SET)) { 338 if (cpumask_intersects(desc->irq_common_data.affinity, 339 cpu_online_mask)) 340 set = desc->irq_common_data.affinity; 341 else 342 irqd_clear(&desc->irq_data, IRQD_AFFINITY_SET); 343 } 344 345 cpumask_and(&mask, cpu_online_mask, set); 346 if (node != NUMA_NO_NODE) { 347 const struct cpumask *nodemask = cpumask_of_node(node); 348 349 /* make sure at least one of the cpus in nodemask is online */ 350 if (cpumask_intersects(&mask, nodemask)) 351 cpumask_and(&mask, &mask, nodemask); 352 } 353 ret = irq_do_set_affinity(&desc->irq_data, &mask, false); 354 raw_spin_unlock(&mask_lock); 355 return ret; 356 } 357 #else 358 /* Wrapper for ALPHA specific affinity selector magic */ 359 int irq_setup_affinity(struct irq_desc *desc) 360 { 361 return irq_select_affinity(irq_desc_get_irq(desc)); 362 } 363 #endif 364 365 /* 366 * Called when a bogus affinity is set via /proc/irq 367 */ 368 int irq_select_affinity_usr(unsigned int irq) 369 { 370 struct irq_desc *desc = irq_to_desc(irq); 371 unsigned long flags; 372 int ret; 373 374 raw_spin_lock_irqsave(&desc->lock, flags); 375 ret = irq_setup_affinity(desc); 376 raw_spin_unlock_irqrestore(&desc->lock, flags); 377 return ret; 378 } 379 #endif 380 381 /** 382 * irq_set_vcpu_affinity - Set vcpu affinity for the interrupt 383 * @irq: interrupt number to set affinity 384 * @vcpu_info: vCPU specific data 385 * 386 * This function uses the vCPU specific data to set the vCPU 387 * affinity for an irq. The vCPU specific data is passed from 388 * outside, such as KVM. One example code path is as below: 389 * KVM -> IOMMU -> irq_set_vcpu_affinity(). 390 */ 391 int irq_set_vcpu_affinity(unsigned int irq, void *vcpu_info) 392 { 393 unsigned long flags; 394 struct irq_desc *desc = irq_get_desc_lock(irq, &flags, 0); 395 struct irq_data *data; 396 struct irq_chip *chip; 397 int ret = -ENOSYS; 398 399 if (!desc) 400 return -EINVAL; 401 402 data = irq_desc_get_irq_data(desc); 403 do { 404 chip = irq_data_get_irq_chip(data); 405 if (chip && chip->irq_set_vcpu_affinity) 406 break; 407 #ifdef CONFIG_IRQ_DOMAIN_HIERARCHY 408 data = data->parent_data; 409 #else 410 data = NULL; 411 #endif 412 } while (data); 413 414 if (data) 415 ret = chip->irq_set_vcpu_affinity(data, vcpu_info); 416 irq_put_desc_unlock(desc, flags); 417 418 return ret; 419 } 420 EXPORT_SYMBOL_GPL(irq_set_vcpu_affinity); 421 422 void __disable_irq(struct irq_desc *desc) 423 { 424 if (!desc->depth++) 425 irq_disable(desc); 426 } 427 428 static int __disable_irq_nosync(unsigned int irq) 429 { 430 unsigned long flags; 431 struct irq_desc *desc = irq_get_desc_buslock(irq, &flags, IRQ_GET_DESC_CHECK_GLOBAL); 432 433 if (!desc) 434 return -EINVAL; 435 __disable_irq(desc); 436 irq_put_desc_busunlock(desc, flags); 437 return 0; 438 } 439 440 /** 441 * disable_irq_nosync - disable an irq without waiting 442 * @irq: Interrupt to disable 443 * 444 * Disable the selected interrupt line. Disables and Enables are 445 * nested. 446 * Unlike disable_irq(), this function does not ensure existing 447 * instances of the IRQ handler have completed before returning. 448 * 449 * This function may be called from IRQ context. 450 */ 451 void disable_irq_nosync(unsigned int irq) 452 { 453 __disable_irq_nosync(irq); 454 } 455 EXPORT_SYMBOL(disable_irq_nosync); 456 457 /** 458 * disable_irq - disable an irq and wait for completion 459 * @irq: Interrupt to disable 460 * 461 * Disable the selected interrupt line. Enables and Disables are 462 * nested. 463 * This function waits for any pending IRQ handlers for this interrupt 464 * to complete before returning. If you use this function while 465 * holding a resource the IRQ handler may need you will deadlock. 466 * 467 * This function may be called - with care - from IRQ context. 468 */ 469 void disable_irq(unsigned int irq) 470 { 471 if (!__disable_irq_nosync(irq)) 472 synchronize_irq(irq); 473 } 474 EXPORT_SYMBOL(disable_irq); 475 476 /** 477 * disable_hardirq - disables an irq and waits for hardirq completion 478 * @irq: Interrupt to disable 479 * 480 * Disable the selected interrupt line. Enables and Disables are 481 * nested. 482 * This function waits for any pending hard IRQ handlers for this 483 * interrupt to complete before returning. If you use this function while 484 * holding a resource the hard IRQ handler may need you will deadlock. 485 * 486 * When used to optimistically disable an interrupt from atomic context 487 * the return value must be checked. 488 * 489 * Returns: false if a threaded handler is active. 490 * 491 * This function may be called - with care - from IRQ context. 492 */ 493 bool disable_hardirq(unsigned int irq) 494 { 495 if (!__disable_irq_nosync(irq)) 496 return synchronize_hardirq(irq); 497 498 return false; 499 } 500 EXPORT_SYMBOL_GPL(disable_hardirq); 501 502 void __enable_irq(struct irq_desc *desc) 503 { 504 switch (desc->depth) { 505 case 0: 506 err_out: 507 WARN(1, KERN_WARNING "Unbalanced enable for IRQ %d\n", 508 irq_desc_get_irq(desc)); 509 break; 510 case 1: { 511 if (desc->istate & IRQS_SUSPENDED) 512 goto err_out; 513 /* Prevent probing on this irq: */ 514 irq_settings_set_noprobe(desc); 515 /* 516 * Call irq_startup() not irq_enable() here because the 517 * interrupt might be marked NOAUTOEN. So irq_startup() 518 * needs to be invoked when it gets enabled the first 519 * time. If it was already started up, then irq_startup() 520 * will invoke irq_enable() under the hood. 521 */ 522 irq_startup(desc, IRQ_RESEND, IRQ_START_COND); 523 break; 524 } 525 default: 526 desc->depth--; 527 } 528 } 529 530 /** 531 * enable_irq - enable handling of an irq 532 * @irq: Interrupt to enable 533 * 534 * Undoes the effect of one call to disable_irq(). If this 535 * matches the last disable, processing of interrupts on this 536 * IRQ line is re-enabled. 537 * 538 * This function may be called from IRQ context only when 539 * desc->irq_data.chip->bus_lock and desc->chip->bus_sync_unlock are NULL ! 540 */ 541 void enable_irq(unsigned int irq) 542 { 543 unsigned long flags; 544 struct irq_desc *desc = irq_get_desc_buslock(irq, &flags, IRQ_GET_DESC_CHECK_GLOBAL); 545 546 if (!desc) 547 return; 548 if (WARN(!desc->irq_data.chip, 549 KERN_ERR "enable_irq before setup/request_irq: irq %u\n", irq)) 550 goto out; 551 552 __enable_irq(desc); 553 out: 554 irq_put_desc_busunlock(desc, flags); 555 } 556 EXPORT_SYMBOL(enable_irq); 557 558 static int set_irq_wake_real(unsigned int irq, unsigned int on) 559 { 560 struct irq_desc *desc = irq_to_desc(irq); 561 int ret = -ENXIO; 562 563 if (irq_desc_get_chip(desc)->flags & IRQCHIP_SKIP_SET_WAKE) 564 return 0; 565 566 if (desc->irq_data.chip->irq_set_wake) 567 ret = desc->irq_data.chip->irq_set_wake(&desc->irq_data, on); 568 569 return ret; 570 } 571 572 /** 573 * irq_set_irq_wake - control irq power management wakeup 574 * @irq: interrupt to control 575 * @on: enable/disable power management wakeup 576 * 577 * Enable/disable power management wakeup mode, which is 578 * disabled by default. Enables and disables must match, 579 * just as they match for non-wakeup mode support. 580 * 581 * Wakeup mode lets this IRQ wake the system from sleep 582 * states like "suspend to RAM". 583 */ 584 int irq_set_irq_wake(unsigned int irq, unsigned int on) 585 { 586 unsigned long flags; 587 struct irq_desc *desc = irq_get_desc_buslock(irq, &flags, IRQ_GET_DESC_CHECK_GLOBAL); 588 int ret = 0; 589 590 if (!desc) 591 return -EINVAL; 592 593 /* wakeup-capable irqs can be shared between drivers that 594 * don't need to have the same sleep mode behaviors. 595 */ 596 if (on) { 597 if (desc->wake_depth++ == 0) { 598 ret = set_irq_wake_real(irq, on); 599 if (ret) 600 desc->wake_depth = 0; 601 else 602 irqd_set(&desc->irq_data, IRQD_WAKEUP_STATE); 603 } 604 } else { 605 if (desc->wake_depth == 0) { 606 WARN(1, "Unbalanced IRQ %d wake disable\n", irq); 607 } else if (--desc->wake_depth == 0) { 608 ret = set_irq_wake_real(irq, on); 609 if (ret) 610 desc->wake_depth = 1; 611 else 612 irqd_clear(&desc->irq_data, IRQD_WAKEUP_STATE); 613 } 614 } 615 irq_put_desc_busunlock(desc, flags); 616 return ret; 617 } 618 EXPORT_SYMBOL(irq_set_irq_wake); 619 620 /* 621 * Internal function that tells the architecture code whether a 622 * particular irq has been exclusively allocated or is available 623 * for driver use. 624 */ 625 int can_request_irq(unsigned int irq, unsigned long irqflags) 626 { 627 unsigned long flags; 628 struct irq_desc *desc = irq_get_desc_lock(irq, &flags, 0); 629 int canrequest = 0; 630 631 if (!desc) 632 return 0; 633 634 if (irq_settings_can_request(desc)) { 635 if (!desc->action || 636 irqflags & desc->action->flags & IRQF_SHARED) 637 canrequest = 1; 638 } 639 irq_put_desc_unlock(desc, flags); 640 return canrequest; 641 } 642 643 int __irq_set_trigger(struct irq_desc *desc, unsigned long flags) 644 { 645 struct irq_chip *chip = desc->irq_data.chip; 646 int ret, unmask = 0; 647 648 if (!chip || !chip->irq_set_type) { 649 /* 650 * IRQF_TRIGGER_* but the PIC does not support multiple 651 * flow-types? 652 */ 653 pr_debug("No set_type function for IRQ %d (%s)\n", 654 irq_desc_get_irq(desc), 655 chip ? (chip->name ? : "unknown") : "unknown"); 656 return 0; 657 } 658 659 if (chip->flags & IRQCHIP_SET_TYPE_MASKED) { 660 if (!irqd_irq_masked(&desc->irq_data)) 661 mask_irq(desc); 662 if (!irqd_irq_disabled(&desc->irq_data)) 663 unmask = 1; 664 } 665 666 /* Mask all flags except trigger mode */ 667 flags &= IRQ_TYPE_SENSE_MASK; 668 ret = chip->irq_set_type(&desc->irq_data, flags); 669 670 switch (ret) { 671 case IRQ_SET_MASK_OK: 672 case IRQ_SET_MASK_OK_DONE: 673 irqd_clear(&desc->irq_data, IRQD_TRIGGER_MASK); 674 irqd_set(&desc->irq_data, flags); 675 676 case IRQ_SET_MASK_OK_NOCOPY: 677 flags = irqd_get_trigger_type(&desc->irq_data); 678 irq_settings_set_trigger_mask(desc, flags); 679 irqd_clear(&desc->irq_data, IRQD_LEVEL); 680 irq_settings_clr_level(desc); 681 if (flags & IRQ_TYPE_LEVEL_MASK) { 682 irq_settings_set_level(desc); 683 irqd_set(&desc->irq_data, IRQD_LEVEL); 684 } 685 686 ret = 0; 687 break; 688 default: 689 pr_err("Setting trigger mode %lu for irq %u failed (%pF)\n", 690 flags, irq_desc_get_irq(desc), chip->irq_set_type); 691 } 692 if (unmask) 693 unmask_irq(desc); 694 return ret; 695 } 696 697 #ifdef CONFIG_HARDIRQS_SW_RESEND 698 int irq_set_parent(int irq, int parent_irq) 699 { 700 unsigned long flags; 701 struct irq_desc *desc = irq_get_desc_lock(irq, &flags, 0); 702 703 if (!desc) 704 return -EINVAL; 705 706 desc->parent_irq = parent_irq; 707 708 irq_put_desc_unlock(desc, flags); 709 return 0; 710 } 711 EXPORT_SYMBOL_GPL(irq_set_parent); 712 #endif 713 714 /* 715 * Default primary interrupt handler for threaded interrupts. Is 716 * assigned as primary handler when request_threaded_irq is called 717 * with handler == NULL. Useful for oneshot interrupts. 718 */ 719 static irqreturn_t irq_default_primary_handler(int irq, void *dev_id) 720 { 721 return IRQ_WAKE_THREAD; 722 } 723 724 /* 725 * Primary handler for nested threaded interrupts. Should never be 726 * called. 727 */ 728 static irqreturn_t irq_nested_primary_handler(int irq, void *dev_id) 729 { 730 WARN(1, "Primary handler called for nested irq %d\n", irq); 731 return IRQ_NONE; 732 } 733 734 static irqreturn_t irq_forced_secondary_handler(int irq, void *dev_id) 735 { 736 WARN(1, "Secondary action handler called for irq %d\n", irq); 737 return IRQ_NONE; 738 } 739 740 static int irq_wait_for_interrupt(struct irqaction *action) 741 { 742 set_current_state(TASK_INTERRUPTIBLE); 743 744 while (!kthread_should_stop()) { 745 746 if (test_and_clear_bit(IRQTF_RUNTHREAD, 747 &action->thread_flags)) { 748 __set_current_state(TASK_RUNNING); 749 return 0; 750 } 751 schedule(); 752 set_current_state(TASK_INTERRUPTIBLE); 753 } 754 __set_current_state(TASK_RUNNING); 755 return -1; 756 } 757 758 /* 759 * Oneshot interrupts keep the irq line masked until the threaded 760 * handler finished. unmask if the interrupt has not been disabled and 761 * is marked MASKED. 762 */ 763 static void irq_finalize_oneshot(struct irq_desc *desc, 764 struct irqaction *action) 765 { 766 if (!(desc->istate & IRQS_ONESHOT) || 767 action->handler == irq_forced_secondary_handler) 768 return; 769 again: 770 chip_bus_lock(desc); 771 raw_spin_lock_irq(&desc->lock); 772 773 /* 774 * Implausible though it may be we need to protect us against 775 * the following scenario: 776 * 777 * The thread is faster done than the hard interrupt handler 778 * on the other CPU. If we unmask the irq line then the 779 * interrupt can come in again and masks the line, leaves due 780 * to IRQS_INPROGRESS and the irq line is masked forever. 781 * 782 * This also serializes the state of shared oneshot handlers 783 * versus "desc->threads_onehsot |= action->thread_mask;" in 784 * irq_wake_thread(). See the comment there which explains the 785 * serialization. 786 */ 787 if (unlikely(irqd_irq_inprogress(&desc->irq_data))) { 788 raw_spin_unlock_irq(&desc->lock); 789 chip_bus_sync_unlock(desc); 790 cpu_relax(); 791 goto again; 792 } 793 794 /* 795 * Now check again, whether the thread should run. Otherwise 796 * we would clear the threads_oneshot bit of this thread which 797 * was just set. 798 */ 799 if (test_bit(IRQTF_RUNTHREAD, &action->thread_flags)) 800 goto out_unlock; 801 802 desc->threads_oneshot &= ~action->thread_mask; 803 804 if (!desc->threads_oneshot && !irqd_irq_disabled(&desc->irq_data) && 805 irqd_irq_masked(&desc->irq_data)) 806 unmask_threaded_irq(desc); 807 808 out_unlock: 809 raw_spin_unlock_irq(&desc->lock); 810 chip_bus_sync_unlock(desc); 811 } 812 813 #ifdef CONFIG_SMP 814 /* 815 * Check whether we need to change the affinity of the interrupt thread. 816 */ 817 static void 818 irq_thread_check_affinity(struct irq_desc *desc, struct irqaction *action) 819 { 820 cpumask_var_t mask; 821 bool valid = true; 822 823 if (!test_and_clear_bit(IRQTF_AFFINITY, &action->thread_flags)) 824 return; 825 826 /* 827 * In case we are out of memory we set IRQTF_AFFINITY again and 828 * try again next time 829 */ 830 if (!alloc_cpumask_var(&mask, GFP_KERNEL)) { 831 set_bit(IRQTF_AFFINITY, &action->thread_flags); 832 return; 833 } 834 835 raw_spin_lock_irq(&desc->lock); 836 /* 837 * This code is triggered unconditionally. Check the affinity 838 * mask pointer. For CPU_MASK_OFFSTACK=n this is optimized out. 839 */ 840 if (cpumask_available(desc->irq_common_data.affinity)) 841 cpumask_copy(mask, desc->irq_common_data.affinity); 842 else 843 valid = false; 844 raw_spin_unlock_irq(&desc->lock); 845 846 if (valid) 847 set_cpus_allowed_ptr(current, mask); 848 free_cpumask_var(mask); 849 } 850 #else 851 static inline void 852 irq_thread_check_affinity(struct irq_desc *desc, struct irqaction *action) { } 853 #endif 854 855 /* 856 * Interrupts which are not explicitely requested as threaded 857 * interrupts rely on the implicit bh/preempt disable of the hard irq 858 * context. So we need to disable bh here to avoid deadlocks and other 859 * side effects. 860 */ 861 static irqreturn_t 862 irq_forced_thread_fn(struct irq_desc *desc, struct irqaction *action) 863 { 864 irqreturn_t ret; 865 866 local_bh_disable(); 867 ret = action->thread_fn(action->irq, action->dev_id); 868 irq_finalize_oneshot(desc, action); 869 local_bh_enable(); 870 return ret; 871 } 872 873 /* 874 * Interrupts explicitly requested as threaded interrupts want to be 875 * preemtible - many of them need to sleep and wait for slow busses to 876 * complete. 877 */ 878 static irqreturn_t irq_thread_fn(struct irq_desc *desc, 879 struct irqaction *action) 880 { 881 irqreturn_t ret; 882 883 ret = action->thread_fn(action->irq, action->dev_id); 884 irq_finalize_oneshot(desc, action); 885 return ret; 886 } 887 888 static void wake_threads_waitq(struct irq_desc *desc) 889 { 890 if (atomic_dec_and_test(&desc->threads_active)) 891 wake_up(&desc->wait_for_threads); 892 } 893 894 static void irq_thread_dtor(struct callback_head *unused) 895 { 896 struct task_struct *tsk = current; 897 struct irq_desc *desc; 898 struct irqaction *action; 899 900 if (WARN_ON_ONCE(!(current->flags & PF_EXITING))) 901 return; 902 903 action = kthread_data(tsk); 904 905 pr_err("exiting task \"%s\" (%d) is an active IRQ thread (irq %d)\n", 906 tsk->comm, tsk->pid, action->irq); 907 908 909 desc = irq_to_desc(action->irq); 910 /* 911 * If IRQTF_RUNTHREAD is set, we need to decrement 912 * desc->threads_active and wake possible waiters. 913 */ 914 if (test_and_clear_bit(IRQTF_RUNTHREAD, &action->thread_flags)) 915 wake_threads_waitq(desc); 916 917 /* Prevent a stale desc->threads_oneshot */ 918 irq_finalize_oneshot(desc, action); 919 } 920 921 static void irq_wake_secondary(struct irq_desc *desc, struct irqaction *action) 922 { 923 struct irqaction *secondary = action->secondary; 924 925 if (WARN_ON_ONCE(!secondary)) 926 return; 927 928 raw_spin_lock_irq(&desc->lock); 929 __irq_wake_thread(desc, secondary); 930 raw_spin_unlock_irq(&desc->lock); 931 } 932 933 /* 934 * Interrupt handler thread 935 */ 936 static int irq_thread(void *data) 937 { 938 struct callback_head on_exit_work; 939 struct irqaction *action = data; 940 struct irq_desc *desc = irq_to_desc(action->irq); 941 irqreturn_t (*handler_fn)(struct irq_desc *desc, 942 struct irqaction *action); 943 944 if (force_irqthreads && test_bit(IRQTF_FORCED_THREAD, 945 &action->thread_flags)) 946 handler_fn = irq_forced_thread_fn; 947 else 948 handler_fn = irq_thread_fn; 949 950 init_task_work(&on_exit_work, irq_thread_dtor); 951 task_work_add(current, &on_exit_work, false); 952 953 irq_thread_check_affinity(desc, action); 954 955 while (!irq_wait_for_interrupt(action)) { 956 irqreturn_t action_ret; 957 958 irq_thread_check_affinity(desc, action); 959 960 action_ret = handler_fn(desc, action); 961 if (action_ret == IRQ_HANDLED) 962 atomic_inc(&desc->threads_handled); 963 if (action_ret == IRQ_WAKE_THREAD) 964 irq_wake_secondary(desc, action); 965 966 wake_threads_waitq(desc); 967 } 968 969 /* 970 * This is the regular exit path. __free_irq() is stopping the 971 * thread via kthread_stop() after calling 972 * synchronize_irq(). So neither IRQTF_RUNTHREAD nor the 973 * oneshot mask bit can be set. We cannot verify that as we 974 * cannot touch the oneshot mask at this point anymore as 975 * __setup_irq() might have given out currents thread_mask 976 * again. 977 */ 978 task_work_cancel(current, irq_thread_dtor); 979 return 0; 980 } 981 982 /** 983 * irq_wake_thread - wake the irq thread for the action identified by dev_id 984 * @irq: Interrupt line 985 * @dev_id: Device identity for which the thread should be woken 986 * 987 */ 988 void irq_wake_thread(unsigned int irq, void *dev_id) 989 { 990 struct irq_desc *desc = irq_to_desc(irq); 991 struct irqaction *action; 992 unsigned long flags; 993 994 if (!desc || WARN_ON(irq_settings_is_per_cpu_devid(desc))) 995 return; 996 997 raw_spin_lock_irqsave(&desc->lock, flags); 998 for_each_action_of_desc(desc, action) { 999 if (action->dev_id == dev_id) { 1000 if (action->thread) 1001 __irq_wake_thread(desc, action); 1002 break; 1003 } 1004 } 1005 raw_spin_unlock_irqrestore(&desc->lock, flags); 1006 } 1007 EXPORT_SYMBOL_GPL(irq_wake_thread); 1008 1009 static int irq_setup_forced_threading(struct irqaction *new) 1010 { 1011 if (!force_irqthreads) 1012 return 0; 1013 if (new->flags & (IRQF_NO_THREAD | IRQF_PERCPU | IRQF_ONESHOT)) 1014 return 0; 1015 1016 new->flags |= IRQF_ONESHOT; 1017 1018 /* 1019 * Handle the case where we have a real primary handler and a 1020 * thread handler. We force thread them as well by creating a 1021 * secondary action. 1022 */ 1023 if (new->handler != irq_default_primary_handler && new->thread_fn) { 1024 /* Allocate the secondary action */ 1025 new->secondary = kzalloc(sizeof(struct irqaction), GFP_KERNEL); 1026 if (!new->secondary) 1027 return -ENOMEM; 1028 new->secondary->handler = irq_forced_secondary_handler; 1029 new->secondary->thread_fn = new->thread_fn; 1030 new->secondary->dev_id = new->dev_id; 1031 new->secondary->irq = new->irq; 1032 new->secondary->name = new->name; 1033 } 1034 /* Deal with the primary handler */ 1035 set_bit(IRQTF_FORCED_THREAD, &new->thread_flags); 1036 new->thread_fn = new->handler; 1037 new->handler = irq_default_primary_handler; 1038 return 0; 1039 } 1040 1041 static int irq_request_resources(struct irq_desc *desc) 1042 { 1043 struct irq_data *d = &desc->irq_data; 1044 struct irq_chip *c = d->chip; 1045 1046 return c->irq_request_resources ? c->irq_request_resources(d) : 0; 1047 } 1048 1049 static void irq_release_resources(struct irq_desc *desc) 1050 { 1051 struct irq_data *d = &desc->irq_data; 1052 struct irq_chip *c = d->chip; 1053 1054 if (c->irq_release_resources) 1055 c->irq_release_resources(d); 1056 } 1057 1058 static int 1059 setup_irq_thread(struct irqaction *new, unsigned int irq, bool secondary) 1060 { 1061 struct task_struct *t; 1062 struct sched_param param = { 1063 .sched_priority = MAX_USER_RT_PRIO/2, 1064 }; 1065 1066 if (!secondary) { 1067 t = kthread_create(irq_thread, new, "irq/%d-%s", irq, 1068 new->name); 1069 } else { 1070 t = kthread_create(irq_thread, new, "irq/%d-s-%s", irq, 1071 new->name); 1072 param.sched_priority -= 1; 1073 } 1074 1075 if (IS_ERR(t)) 1076 return PTR_ERR(t); 1077 1078 sched_setscheduler_nocheck(t, SCHED_FIFO, ¶m); 1079 1080 /* 1081 * We keep the reference to the task struct even if 1082 * the thread dies to avoid that the interrupt code 1083 * references an already freed task_struct. 1084 */ 1085 get_task_struct(t); 1086 new->thread = t; 1087 /* 1088 * Tell the thread to set its affinity. This is 1089 * important for shared interrupt handlers as we do 1090 * not invoke setup_affinity() for the secondary 1091 * handlers as everything is already set up. Even for 1092 * interrupts marked with IRQF_NO_BALANCE this is 1093 * correct as we want the thread to move to the cpu(s) 1094 * on which the requesting code placed the interrupt. 1095 */ 1096 set_bit(IRQTF_AFFINITY, &new->thread_flags); 1097 return 0; 1098 } 1099 1100 /* 1101 * Internal function to register an irqaction - typically used to 1102 * allocate special interrupts that are part of the architecture. 1103 * 1104 * Locking rules: 1105 * 1106 * desc->request_mutex Provides serialization against a concurrent free_irq() 1107 * chip_bus_lock Provides serialization for slow bus operations 1108 * desc->lock Provides serialization against hard interrupts 1109 * 1110 * chip_bus_lock and desc->lock are sufficient for all other management and 1111 * interrupt related functions. desc->request_mutex solely serializes 1112 * request/free_irq(). 1113 */ 1114 static int 1115 __setup_irq(unsigned int irq, struct irq_desc *desc, struct irqaction *new) 1116 { 1117 struct irqaction *old, **old_ptr; 1118 unsigned long flags, thread_mask = 0; 1119 int ret, nested, shared = 0; 1120 1121 if (!desc) 1122 return -EINVAL; 1123 1124 if (desc->irq_data.chip == &no_irq_chip) 1125 return -ENOSYS; 1126 if (!try_module_get(desc->owner)) 1127 return -ENODEV; 1128 1129 new->irq = irq; 1130 1131 /* 1132 * If the trigger type is not specified by the caller, 1133 * then use the default for this interrupt. 1134 */ 1135 if (!(new->flags & IRQF_TRIGGER_MASK)) 1136 new->flags |= irqd_get_trigger_type(&desc->irq_data); 1137 1138 /* 1139 * Check whether the interrupt nests into another interrupt 1140 * thread. 1141 */ 1142 nested = irq_settings_is_nested_thread(desc); 1143 if (nested) { 1144 if (!new->thread_fn) { 1145 ret = -EINVAL; 1146 goto out_mput; 1147 } 1148 /* 1149 * Replace the primary handler which was provided from 1150 * the driver for non nested interrupt handling by the 1151 * dummy function which warns when called. 1152 */ 1153 new->handler = irq_nested_primary_handler; 1154 } else { 1155 if (irq_settings_can_thread(desc)) { 1156 ret = irq_setup_forced_threading(new); 1157 if (ret) 1158 goto out_mput; 1159 } 1160 } 1161 1162 /* 1163 * Create a handler thread when a thread function is supplied 1164 * and the interrupt does not nest into another interrupt 1165 * thread. 1166 */ 1167 if (new->thread_fn && !nested) { 1168 ret = setup_irq_thread(new, irq, false); 1169 if (ret) 1170 goto out_mput; 1171 if (new->secondary) { 1172 ret = setup_irq_thread(new->secondary, irq, true); 1173 if (ret) 1174 goto out_thread; 1175 } 1176 } 1177 1178 /* 1179 * Drivers are often written to work w/o knowledge about the 1180 * underlying irq chip implementation, so a request for a 1181 * threaded irq without a primary hard irq context handler 1182 * requires the ONESHOT flag to be set. Some irq chips like 1183 * MSI based interrupts are per se one shot safe. Check the 1184 * chip flags, so we can avoid the unmask dance at the end of 1185 * the threaded handler for those. 1186 */ 1187 if (desc->irq_data.chip->flags & IRQCHIP_ONESHOT_SAFE) 1188 new->flags &= ~IRQF_ONESHOT; 1189 1190 /* 1191 * Protects against a concurrent __free_irq() call which might wait 1192 * for synchronize_irq() to complete without holding the optional 1193 * chip bus lock and desc->lock. 1194 */ 1195 mutex_lock(&desc->request_mutex); 1196 1197 /* 1198 * Acquire bus lock as the irq_request_resources() callback below 1199 * might rely on the serialization or the magic power management 1200 * functions which are abusing the irq_bus_lock() callback, 1201 */ 1202 chip_bus_lock(desc); 1203 1204 /* First installed action requests resources. */ 1205 if (!desc->action) { 1206 ret = irq_request_resources(desc); 1207 if (ret) { 1208 pr_err("Failed to request resources for %s (irq %d) on irqchip %s\n", 1209 new->name, irq, desc->irq_data.chip->name); 1210 goto out_bus_unlock; 1211 } 1212 } 1213 1214 /* 1215 * The following block of code has to be executed atomically 1216 * protected against a concurrent interrupt and any of the other 1217 * management calls which are not serialized via 1218 * desc->request_mutex or the optional bus lock. 1219 */ 1220 raw_spin_lock_irqsave(&desc->lock, flags); 1221 old_ptr = &desc->action; 1222 old = *old_ptr; 1223 if (old) { 1224 /* 1225 * Can't share interrupts unless both agree to and are 1226 * the same type (level, edge, polarity). So both flag 1227 * fields must have IRQF_SHARED set and the bits which 1228 * set the trigger type must match. Also all must 1229 * agree on ONESHOT. 1230 */ 1231 unsigned int oldtype = irqd_get_trigger_type(&desc->irq_data); 1232 1233 if (!((old->flags & new->flags) & IRQF_SHARED) || 1234 (oldtype != (new->flags & IRQF_TRIGGER_MASK)) || 1235 ((old->flags ^ new->flags) & IRQF_ONESHOT)) 1236 goto mismatch; 1237 1238 /* All handlers must agree on per-cpuness */ 1239 if ((old->flags & IRQF_PERCPU) != 1240 (new->flags & IRQF_PERCPU)) 1241 goto mismatch; 1242 1243 /* add new interrupt at end of irq queue */ 1244 do { 1245 /* 1246 * Or all existing action->thread_mask bits, 1247 * so we can find the next zero bit for this 1248 * new action. 1249 */ 1250 thread_mask |= old->thread_mask; 1251 old_ptr = &old->next; 1252 old = *old_ptr; 1253 } while (old); 1254 shared = 1; 1255 } 1256 1257 /* 1258 * Setup the thread mask for this irqaction for ONESHOT. For 1259 * !ONESHOT irqs the thread mask is 0 so we can avoid a 1260 * conditional in irq_wake_thread(). 1261 */ 1262 if (new->flags & IRQF_ONESHOT) { 1263 /* 1264 * Unlikely to have 32 resp 64 irqs sharing one line, 1265 * but who knows. 1266 */ 1267 if (thread_mask == ~0UL) { 1268 ret = -EBUSY; 1269 goto out_unlock; 1270 } 1271 /* 1272 * The thread_mask for the action is or'ed to 1273 * desc->thread_active to indicate that the 1274 * IRQF_ONESHOT thread handler has been woken, but not 1275 * yet finished. The bit is cleared when a thread 1276 * completes. When all threads of a shared interrupt 1277 * line have completed desc->threads_active becomes 1278 * zero and the interrupt line is unmasked. See 1279 * handle.c:irq_wake_thread() for further information. 1280 * 1281 * If no thread is woken by primary (hard irq context) 1282 * interrupt handlers, then desc->threads_active is 1283 * also checked for zero to unmask the irq line in the 1284 * affected hard irq flow handlers 1285 * (handle_[fasteoi|level]_irq). 1286 * 1287 * The new action gets the first zero bit of 1288 * thread_mask assigned. See the loop above which or's 1289 * all existing action->thread_mask bits. 1290 */ 1291 new->thread_mask = 1 << ffz(thread_mask); 1292 1293 } else if (new->handler == irq_default_primary_handler && 1294 !(desc->irq_data.chip->flags & IRQCHIP_ONESHOT_SAFE)) { 1295 /* 1296 * The interrupt was requested with handler = NULL, so 1297 * we use the default primary handler for it. But it 1298 * does not have the oneshot flag set. In combination 1299 * with level interrupts this is deadly, because the 1300 * default primary handler just wakes the thread, then 1301 * the irq lines is reenabled, but the device still 1302 * has the level irq asserted. Rinse and repeat.... 1303 * 1304 * While this works for edge type interrupts, we play 1305 * it safe and reject unconditionally because we can't 1306 * say for sure which type this interrupt really 1307 * has. The type flags are unreliable as the 1308 * underlying chip implementation can override them. 1309 */ 1310 pr_err("Threaded irq requested with handler=NULL and !ONESHOT for irq %d\n", 1311 irq); 1312 ret = -EINVAL; 1313 goto out_unlock; 1314 } 1315 1316 if (!shared) { 1317 init_waitqueue_head(&desc->wait_for_threads); 1318 1319 /* Setup the type (level, edge polarity) if configured: */ 1320 if (new->flags & IRQF_TRIGGER_MASK) { 1321 ret = __irq_set_trigger(desc, 1322 new->flags & IRQF_TRIGGER_MASK); 1323 1324 if (ret) 1325 goto out_unlock; 1326 } 1327 1328 desc->istate &= ~(IRQS_AUTODETECT | IRQS_SPURIOUS_DISABLED | \ 1329 IRQS_ONESHOT | IRQS_WAITING); 1330 irqd_clear(&desc->irq_data, IRQD_IRQ_INPROGRESS); 1331 1332 if (new->flags & IRQF_PERCPU) { 1333 irqd_set(&desc->irq_data, IRQD_PER_CPU); 1334 irq_settings_set_per_cpu(desc); 1335 } 1336 1337 if (new->flags & IRQF_ONESHOT) 1338 desc->istate |= IRQS_ONESHOT; 1339 1340 /* Exclude IRQ from balancing if requested */ 1341 if (new->flags & IRQF_NOBALANCING) { 1342 irq_settings_set_no_balancing(desc); 1343 irqd_set(&desc->irq_data, IRQD_NO_BALANCING); 1344 } 1345 1346 if (irq_settings_can_autoenable(desc)) { 1347 irq_startup(desc, IRQ_RESEND, IRQ_START_COND); 1348 } else { 1349 /* 1350 * Shared interrupts do not go well with disabling 1351 * auto enable. The sharing interrupt might request 1352 * it while it's still disabled and then wait for 1353 * interrupts forever. 1354 */ 1355 WARN_ON_ONCE(new->flags & IRQF_SHARED); 1356 /* Undo nested disables: */ 1357 desc->depth = 1; 1358 } 1359 1360 } else if (new->flags & IRQF_TRIGGER_MASK) { 1361 unsigned int nmsk = new->flags & IRQF_TRIGGER_MASK; 1362 unsigned int omsk = irqd_get_trigger_type(&desc->irq_data); 1363 1364 if (nmsk != omsk) 1365 /* hope the handler works with current trigger mode */ 1366 pr_warn("irq %d uses trigger mode %u; requested %u\n", 1367 irq, omsk, nmsk); 1368 } 1369 1370 *old_ptr = new; 1371 1372 irq_pm_install_action(desc, new); 1373 1374 /* Reset broken irq detection when installing new handler */ 1375 desc->irq_count = 0; 1376 desc->irqs_unhandled = 0; 1377 1378 /* 1379 * Check whether we disabled the irq via the spurious handler 1380 * before. Reenable it and give it another chance. 1381 */ 1382 if (shared && (desc->istate & IRQS_SPURIOUS_DISABLED)) { 1383 desc->istate &= ~IRQS_SPURIOUS_DISABLED; 1384 __enable_irq(desc); 1385 } 1386 1387 raw_spin_unlock_irqrestore(&desc->lock, flags); 1388 chip_bus_sync_unlock(desc); 1389 mutex_unlock(&desc->request_mutex); 1390 1391 irq_setup_timings(desc, new); 1392 1393 /* 1394 * Strictly no need to wake it up, but hung_task complains 1395 * when no hard interrupt wakes the thread up. 1396 */ 1397 if (new->thread) 1398 wake_up_process(new->thread); 1399 if (new->secondary) 1400 wake_up_process(new->secondary->thread); 1401 1402 register_irq_proc(irq, desc); 1403 irq_add_debugfs_entry(irq, desc); 1404 new->dir = NULL; 1405 register_handler_proc(irq, new); 1406 return 0; 1407 1408 mismatch: 1409 if (!(new->flags & IRQF_PROBE_SHARED)) { 1410 pr_err("Flags mismatch irq %d. %08x (%s) vs. %08x (%s)\n", 1411 irq, new->flags, new->name, old->flags, old->name); 1412 #ifdef CONFIG_DEBUG_SHIRQ 1413 dump_stack(); 1414 #endif 1415 } 1416 ret = -EBUSY; 1417 1418 out_unlock: 1419 raw_spin_unlock_irqrestore(&desc->lock, flags); 1420 1421 if (!desc->action) 1422 irq_release_resources(desc); 1423 out_bus_unlock: 1424 chip_bus_sync_unlock(desc); 1425 mutex_unlock(&desc->request_mutex); 1426 1427 out_thread: 1428 if (new->thread) { 1429 struct task_struct *t = new->thread; 1430 1431 new->thread = NULL; 1432 kthread_stop(t); 1433 put_task_struct(t); 1434 } 1435 if (new->secondary && new->secondary->thread) { 1436 struct task_struct *t = new->secondary->thread; 1437 1438 new->secondary->thread = NULL; 1439 kthread_stop(t); 1440 put_task_struct(t); 1441 } 1442 out_mput: 1443 module_put(desc->owner); 1444 return ret; 1445 } 1446 1447 /** 1448 * setup_irq - setup an interrupt 1449 * @irq: Interrupt line to setup 1450 * @act: irqaction for the interrupt 1451 * 1452 * Used to statically setup interrupts in the early boot process. 1453 */ 1454 int setup_irq(unsigned int irq, struct irqaction *act) 1455 { 1456 int retval; 1457 struct irq_desc *desc = irq_to_desc(irq); 1458 1459 if (!desc || WARN_ON(irq_settings_is_per_cpu_devid(desc))) 1460 return -EINVAL; 1461 1462 retval = irq_chip_pm_get(&desc->irq_data); 1463 if (retval < 0) 1464 return retval; 1465 1466 retval = __setup_irq(irq, desc, act); 1467 1468 if (retval) 1469 irq_chip_pm_put(&desc->irq_data); 1470 1471 return retval; 1472 } 1473 EXPORT_SYMBOL_GPL(setup_irq); 1474 1475 /* 1476 * Internal function to unregister an irqaction - used to free 1477 * regular and special interrupts that are part of the architecture. 1478 */ 1479 static struct irqaction *__free_irq(unsigned int irq, void *dev_id) 1480 { 1481 struct irq_desc *desc = irq_to_desc(irq); 1482 struct irqaction *action, **action_ptr; 1483 unsigned long flags; 1484 1485 WARN(in_interrupt(), "Trying to free IRQ %d from IRQ context!\n", irq); 1486 1487 if (!desc) 1488 return NULL; 1489 1490 mutex_lock(&desc->request_mutex); 1491 chip_bus_lock(desc); 1492 raw_spin_lock_irqsave(&desc->lock, flags); 1493 1494 /* 1495 * There can be multiple actions per IRQ descriptor, find the right 1496 * one based on the dev_id: 1497 */ 1498 action_ptr = &desc->action; 1499 for (;;) { 1500 action = *action_ptr; 1501 1502 if (!action) { 1503 WARN(1, "Trying to free already-free IRQ %d\n", irq); 1504 raw_spin_unlock_irqrestore(&desc->lock, flags); 1505 chip_bus_sync_unlock(desc); 1506 mutex_unlock(&desc->request_mutex); 1507 return NULL; 1508 } 1509 1510 if (action->dev_id == dev_id) 1511 break; 1512 action_ptr = &action->next; 1513 } 1514 1515 /* Found it - now remove it from the list of entries: */ 1516 *action_ptr = action->next; 1517 1518 irq_pm_remove_action(desc, action); 1519 1520 /* If this was the last handler, shut down the IRQ line: */ 1521 if (!desc->action) { 1522 irq_settings_clr_disable_unlazy(desc); 1523 irq_shutdown(desc); 1524 } 1525 1526 #ifdef CONFIG_SMP 1527 /* make sure affinity_hint is cleaned up */ 1528 if (WARN_ON_ONCE(desc->affinity_hint)) 1529 desc->affinity_hint = NULL; 1530 #endif 1531 1532 raw_spin_unlock_irqrestore(&desc->lock, flags); 1533 /* 1534 * Drop bus_lock here so the changes which were done in the chip 1535 * callbacks above are synced out to the irq chips which hang 1536 * behind a slow bus (I2C, SPI) before calling synchronize_irq(). 1537 * 1538 * Aside of that the bus_lock can also be taken from the threaded 1539 * handler in irq_finalize_oneshot() which results in a deadlock 1540 * because synchronize_irq() would wait forever for the thread to 1541 * complete, which is blocked on the bus lock. 1542 * 1543 * The still held desc->request_mutex() protects against a 1544 * concurrent request_irq() of this irq so the release of resources 1545 * and timing data is properly serialized. 1546 */ 1547 chip_bus_sync_unlock(desc); 1548 1549 unregister_handler_proc(irq, action); 1550 1551 /* Make sure it's not being used on another CPU: */ 1552 synchronize_irq(irq); 1553 1554 #ifdef CONFIG_DEBUG_SHIRQ 1555 /* 1556 * It's a shared IRQ -- the driver ought to be prepared for an IRQ 1557 * event to happen even now it's being freed, so let's make sure that 1558 * is so by doing an extra call to the handler .... 1559 * 1560 * ( We do this after actually deregistering it, to make sure that a 1561 * 'real' IRQ doesn't run in * parallel with our fake. ) 1562 */ 1563 if (action->flags & IRQF_SHARED) { 1564 local_irq_save(flags); 1565 action->handler(irq, dev_id); 1566 local_irq_restore(flags); 1567 } 1568 #endif 1569 1570 if (action->thread) { 1571 kthread_stop(action->thread); 1572 put_task_struct(action->thread); 1573 if (action->secondary && action->secondary->thread) { 1574 kthread_stop(action->secondary->thread); 1575 put_task_struct(action->secondary->thread); 1576 } 1577 } 1578 1579 /* Last action releases resources */ 1580 if (!desc->action) { 1581 /* 1582 * Reaquire bus lock as irq_release_resources() might 1583 * require it to deallocate resources over the slow bus. 1584 */ 1585 chip_bus_lock(desc); 1586 irq_release_resources(desc); 1587 chip_bus_sync_unlock(desc); 1588 irq_remove_timings(desc); 1589 } 1590 1591 mutex_unlock(&desc->request_mutex); 1592 1593 irq_chip_pm_put(&desc->irq_data); 1594 module_put(desc->owner); 1595 kfree(action->secondary); 1596 return action; 1597 } 1598 1599 /** 1600 * remove_irq - free an interrupt 1601 * @irq: Interrupt line to free 1602 * @act: irqaction for the interrupt 1603 * 1604 * Used to remove interrupts statically setup by the early boot process. 1605 */ 1606 void remove_irq(unsigned int irq, struct irqaction *act) 1607 { 1608 struct irq_desc *desc = irq_to_desc(irq); 1609 1610 if (desc && !WARN_ON(irq_settings_is_per_cpu_devid(desc))) 1611 __free_irq(irq, act->dev_id); 1612 } 1613 EXPORT_SYMBOL_GPL(remove_irq); 1614 1615 /** 1616 * free_irq - free an interrupt allocated with request_irq 1617 * @irq: Interrupt line to free 1618 * @dev_id: Device identity to free 1619 * 1620 * Remove an interrupt handler. The handler is removed and if the 1621 * interrupt line is no longer in use by any driver it is disabled. 1622 * On a shared IRQ the caller must ensure the interrupt is disabled 1623 * on the card it drives before calling this function. The function 1624 * does not return until any executing interrupts for this IRQ 1625 * have completed. 1626 * 1627 * This function must not be called from interrupt context. 1628 * 1629 * Returns the devname argument passed to request_irq. 1630 */ 1631 const void *free_irq(unsigned int irq, void *dev_id) 1632 { 1633 struct irq_desc *desc = irq_to_desc(irq); 1634 struct irqaction *action; 1635 const char *devname; 1636 1637 if (!desc || WARN_ON(irq_settings_is_per_cpu_devid(desc))) 1638 return NULL; 1639 1640 #ifdef CONFIG_SMP 1641 if (WARN_ON(desc->affinity_notify)) 1642 desc->affinity_notify = NULL; 1643 #endif 1644 1645 action = __free_irq(irq, dev_id); 1646 1647 if (!action) 1648 return NULL; 1649 1650 devname = action->name; 1651 kfree(action); 1652 return devname; 1653 } 1654 EXPORT_SYMBOL(free_irq); 1655 1656 /** 1657 * request_threaded_irq - allocate an interrupt line 1658 * @irq: Interrupt line to allocate 1659 * @handler: Function to be called when the IRQ occurs. 1660 * Primary handler for threaded interrupts 1661 * If NULL and thread_fn != NULL the default 1662 * primary handler is installed 1663 * @thread_fn: Function called from the irq handler thread 1664 * If NULL, no irq thread is created 1665 * @irqflags: Interrupt type flags 1666 * @devname: An ascii name for the claiming device 1667 * @dev_id: A cookie passed back to the handler function 1668 * 1669 * This call allocates interrupt resources and enables the 1670 * interrupt line and IRQ handling. From the point this 1671 * call is made your handler function may be invoked. Since 1672 * your handler function must clear any interrupt the board 1673 * raises, you must take care both to initialise your hardware 1674 * and to set up the interrupt handler in the right order. 1675 * 1676 * If you want to set up a threaded irq handler for your device 1677 * then you need to supply @handler and @thread_fn. @handler is 1678 * still called in hard interrupt context and has to check 1679 * whether the interrupt originates from the device. If yes it 1680 * needs to disable the interrupt on the device and return 1681 * IRQ_WAKE_THREAD which will wake up the handler thread and run 1682 * @thread_fn. This split handler design is necessary to support 1683 * shared interrupts. 1684 * 1685 * Dev_id must be globally unique. Normally the address of the 1686 * device data structure is used as the cookie. Since the handler 1687 * receives this value it makes sense to use it. 1688 * 1689 * If your interrupt is shared you must pass a non NULL dev_id 1690 * as this is required when freeing the interrupt. 1691 * 1692 * Flags: 1693 * 1694 * IRQF_SHARED Interrupt is shared 1695 * IRQF_TRIGGER_* Specify active edge(s) or level 1696 * 1697 */ 1698 int request_threaded_irq(unsigned int irq, irq_handler_t handler, 1699 irq_handler_t thread_fn, unsigned long irqflags, 1700 const char *devname, void *dev_id) 1701 { 1702 struct irqaction *action; 1703 struct irq_desc *desc; 1704 int retval; 1705 1706 if (irq == IRQ_NOTCONNECTED) 1707 return -ENOTCONN; 1708 1709 /* 1710 * Sanity-check: shared interrupts must pass in a real dev-ID, 1711 * otherwise we'll have trouble later trying to figure out 1712 * which interrupt is which (messes up the interrupt freeing 1713 * logic etc). 1714 * 1715 * Also IRQF_COND_SUSPEND only makes sense for shared interrupts and 1716 * it cannot be set along with IRQF_NO_SUSPEND. 1717 */ 1718 if (((irqflags & IRQF_SHARED) && !dev_id) || 1719 (!(irqflags & IRQF_SHARED) && (irqflags & IRQF_COND_SUSPEND)) || 1720 ((irqflags & IRQF_NO_SUSPEND) && (irqflags & IRQF_COND_SUSPEND))) 1721 return -EINVAL; 1722 1723 desc = irq_to_desc(irq); 1724 if (!desc) 1725 return -EINVAL; 1726 1727 if (!irq_settings_can_request(desc) || 1728 WARN_ON(irq_settings_is_per_cpu_devid(desc))) 1729 return -EINVAL; 1730 1731 if (!handler) { 1732 if (!thread_fn) 1733 return -EINVAL; 1734 handler = irq_default_primary_handler; 1735 } 1736 1737 action = kzalloc(sizeof(struct irqaction), GFP_KERNEL); 1738 if (!action) 1739 return -ENOMEM; 1740 1741 action->handler = handler; 1742 action->thread_fn = thread_fn; 1743 action->flags = irqflags; 1744 action->name = devname; 1745 action->dev_id = dev_id; 1746 1747 retval = irq_chip_pm_get(&desc->irq_data); 1748 if (retval < 0) { 1749 kfree(action); 1750 return retval; 1751 } 1752 1753 retval = __setup_irq(irq, desc, action); 1754 1755 if (retval) { 1756 irq_chip_pm_put(&desc->irq_data); 1757 kfree(action->secondary); 1758 kfree(action); 1759 } 1760 1761 #ifdef CONFIG_DEBUG_SHIRQ_FIXME 1762 if (!retval && (irqflags & IRQF_SHARED)) { 1763 /* 1764 * It's a shared IRQ -- the driver ought to be prepared for it 1765 * to happen immediately, so let's make sure.... 1766 * We disable the irq to make sure that a 'real' IRQ doesn't 1767 * run in parallel with our fake. 1768 */ 1769 unsigned long flags; 1770 1771 disable_irq(irq); 1772 local_irq_save(flags); 1773 1774 handler(irq, dev_id); 1775 1776 local_irq_restore(flags); 1777 enable_irq(irq); 1778 } 1779 #endif 1780 return retval; 1781 } 1782 EXPORT_SYMBOL(request_threaded_irq); 1783 1784 /** 1785 * request_any_context_irq - allocate an interrupt line 1786 * @irq: Interrupt line to allocate 1787 * @handler: Function to be called when the IRQ occurs. 1788 * Threaded handler for threaded interrupts. 1789 * @flags: Interrupt type flags 1790 * @name: An ascii name for the claiming device 1791 * @dev_id: A cookie passed back to the handler function 1792 * 1793 * This call allocates interrupt resources and enables the 1794 * interrupt line and IRQ handling. It selects either a 1795 * hardirq or threaded handling method depending on the 1796 * context. 1797 * 1798 * On failure, it returns a negative value. On success, 1799 * it returns either IRQC_IS_HARDIRQ or IRQC_IS_NESTED. 1800 */ 1801 int request_any_context_irq(unsigned int irq, irq_handler_t handler, 1802 unsigned long flags, const char *name, void *dev_id) 1803 { 1804 struct irq_desc *desc; 1805 int ret; 1806 1807 if (irq == IRQ_NOTCONNECTED) 1808 return -ENOTCONN; 1809 1810 desc = irq_to_desc(irq); 1811 if (!desc) 1812 return -EINVAL; 1813 1814 if (irq_settings_is_nested_thread(desc)) { 1815 ret = request_threaded_irq(irq, NULL, handler, 1816 flags, name, dev_id); 1817 return !ret ? IRQC_IS_NESTED : ret; 1818 } 1819 1820 ret = request_irq(irq, handler, flags, name, dev_id); 1821 return !ret ? IRQC_IS_HARDIRQ : ret; 1822 } 1823 EXPORT_SYMBOL_GPL(request_any_context_irq); 1824 1825 void enable_percpu_irq(unsigned int irq, unsigned int type) 1826 { 1827 unsigned int cpu = smp_processor_id(); 1828 unsigned long flags; 1829 struct irq_desc *desc = irq_get_desc_lock(irq, &flags, IRQ_GET_DESC_CHECK_PERCPU); 1830 1831 if (!desc) 1832 return; 1833 1834 /* 1835 * If the trigger type is not specified by the caller, then 1836 * use the default for this interrupt. 1837 */ 1838 type &= IRQ_TYPE_SENSE_MASK; 1839 if (type == IRQ_TYPE_NONE) 1840 type = irqd_get_trigger_type(&desc->irq_data); 1841 1842 if (type != IRQ_TYPE_NONE) { 1843 int ret; 1844 1845 ret = __irq_set_trigger(desc, type); 1846 1847 if (ret) { 1848 WARN(1, "failed to set type for IRQ%d\n", irq); 1849 goto out; 1850 } 1851 } 1852 1853 irq_percpu_enable(desc, cpu); 1854 out: 1855 irq_put_desc_unlock(desc, flags); 1856 } 1857 EXPORT_SYMBOL_GPL(enable_percpu_irq); 1858 1859 /** 1860 * irq_percpu_is_enabled - Check whether the per cpu irq is enabled 1861 * @irq: Linux irq number to check for 1862 * 1863 * Must be called from a non migratable context. Returns the enable 1864 * state of a per cpu interrupt on the current cpu. 1865 */ 1866 bool irq_percpu_is_enabled(unsigned int irq) 1867 { 1868 unsigned int cpu = smp_processor_id(); 1869 struct irq_desc *desc; 1870 unsigned long flags; 1871 bool is_enabled; 1872 1873 desc = irq_get_desc_lock(irq, &flags, IRQ_GET_DESC_CHECK_PERCPU); 1874 if (!desc) 1875 return false; 1876 1877 is_enabled = cpumask_test_cpu(cpu, desc->percpu_enabled); 1878 irq_put_desc_unlock(desc, flags); 1879 1880 return is_enabled; 1881 } 1882 EXPORT_SYMBOL_GPL(irq_percpu_is_enabled); 1883 1884 void disable_percpu_irq(unsigned int irq) 1885 { 1886 unsigned int cpu = smp_processor_id(); 1887 unsigned long flags; 1888 struct irq_desc *desc = irq_get_desc_lock(irq, &flags, IRQ_GET_DESC_CHECK_PERCPU); 1889 1890 if (!desc) 1891 return; 1892 1893 irq_percpu_disable(desc, cpu); 1894 irq_put_desc_unlock(desc, flags); 1895 } 1896 EXPORT_SYMBOL_GPL(disable_percpu_irq); 1897 1898 /* 1899 * Internal function to unregister a percpu irqaction. 1900 */ 1901 static struct irqaction *__free_percpu_irq(unsigned int irq, void __percpu *dev_id) 1902 { 1903 struct irq_desc *desc = irq_to_desc(irq); 1904 struct irqaction *action; 1905 unsigned long flags; 1906 1907 WARN(in_interrupt(), "Trying to free IRQ %d from IRQ context!\n", irq); 1908 1909 if (!desc) 1910 return NULL; 1911 1912 raw_spin_lock_irqsave(&desc->lock, flags); 1913 1914 action = desc->action; 1915 if (!action || action->percpu_dev_id != dev_id) { 1916 WARN(1, "Trying to free already-free IRQ %d\n", irq); 1917 goto bad; 1918 } 1919 1920 if (!cpumask_empty(desc->percpu_enabled)) { 1921 WARN(1, "percpu IRQ %d still enabled on CPU%d!\n", 1922 irq, cpumask_first(desc->percpu_enabled)); 1923 goto bad; 1924 } 1925 1926 /* Found it - now remove it from the list of entries: */ 1927 desc->action = NULL; 1928 1929 raw_spin_unlock_irqrestore(&desc->lock, flags); 1930 1931 unregister_handler_proc(irq, action); 1932 1933 irq_chip_pm_put(&desc->irq_data); 1934 module_put(desc->owner); 1935 return action; 1936 1937 bad: 1938 raw_spin_unlock_irqrestore(&desc->lock, flags); 1939 return NULL; 1940 } 1941 1942 /** 1943 * remove_percpu_irq - free a per-cpu interrupt 1944 * @irq: Interrupt line to free 1945 * @act: irqaction for the interrupt 1946 * 1947 * Used to remove interrupts statically setup by the early boot process. 1948 */ 1949 void remove_percpu_irq(unsigned int irq, struct irqaction *act) 1950 { 1951 struct irq_desc *desc = irq_to_desc(irq); 1952 1953 if (desc && irq_settings_is_per_cpu_devid(desc)) 1954 __free_percpu_irq(irq, act->percpu_dev_id); 1955 } 1956 1957 /** 1958 * free_percpu_irq - free an interrupt allocated with request_percpu_irq 1959 * @irq: Interrupt line to free 1960 * @dev_id: Device identity to free 1961 * 1962 * Remove a percpu interrupt handler. The handler is removed, but 1963 * the interrupt line is not disabled. This must be done on each 1964 * CPU before calling this function. The function does not return 1965 * until any executing interrupts for this IRQ have completed. 1966 * 1967 * This function must not be called from interrupt context. 1968 */ 1969 void free_percpu_irq(unsigned int irq, void __percpu *dev_id) 1970 { 1971 struct irq_desc *desc = irq_to_desc(irq); 1972 1973 if (!desc || !irq_settings_is_per_cpu_devid(desc)) 1974 return; 1975 1976 chip_bus_lock(desc); 1977 kfree(__free_percpu_irq(irq, dev_id)); 1978 chip_bus_sync_unlock(desc); 1979 } 1980 EXPORT_SYMBOL_GPL(free_percpu_irq); 1981 1982 /** 1983 * setup_percpu_irq - setup a per-cpu interrupt 1984 * @irq: Interrupt line to setup 1985 * @act: irqaction for the interrupt 1986 * 1987 * Used to statically setup per-cpu interrupts in the early boot process. 1988 */ 1989 int setup_percpu_irq(unsigned int irq, struct irqaction *act) 1990 { 1991 struct irq_desc *desc = irq_to_desc(irq); 1992 int retval; 1993 1994 if (!desc || !irq_settings_is_per_cpu_devid(desc)) 1995 return -EINVAL; 1996 1997 retval = irq_chip_pm_get(&desc->irq_data); 1998 if (retval < 0) 1999 return retval; 2000 2001 retval = __setup_irq(irq, desc, act); 2002 2003 if (retval) 2004 irq_chip_pm_put(&desc->irq_data); 2005 2006 return retval; 2007 } 2008 2009 /** 2010 * __request_percpu_irq - allocate a percpu interrupt line 2011 * @irq: Interrupt line to allocate 2012 * @handler: Function to be called when the IRQ occurs. 2013 * @flags: Interrupt type flags (IRQF_TIMER only) 2014 * @devname: An ascii name for the claiming device 2015 * @dev_id: A percpu cookie passed back to the handler function 2016 * 2017 * This call allocates interrupt resources and enables the 2018 * interrupt on the local CPU. If the interrupt is supposed to be 2019 * enabled on other CPUs, it has to be done on each CPU using 2020 * enable_percpu_irq(). 2021 * 2022 * Dev_id must be globally unique. It is a per-cpu variable, and 2023 * the handler gets called with the interrupted CPU's instance of 2024 * that variable. 2025 */ 2026 int __request_percpu_irq(unsigned int irq, irq_handler_t handler, 2027 unsigned long flags, const char *devname, 2028 void __percpu *dev_id) 2029 { 2030 struct irqaction *action; 2031 struct irq_desc *desc; 2032 int retval; 2033 2034 if (!dev_id) 2035 return -EINVAL; 2036 2037 desc = irq_to_desc(irq); 2038 if (!desc || !irq_settings_can_request(desc) || 2039 !irq_settings_is_per_cpu_devid(desc)) 2040 return -EINVAL; 2041 2042 if (flags && flags != IRQF_TIMER) 2043 return -EINVAL; 2044 2045 action = kzalloc(sizeof(struct irqaction), GFP_KERNEL); 2046 if (!action) 2047 return -ENOMEM; 2048 2049 action->handler = handler; 2050 action->flags = flags | IRQF_PERCPU | IRQF_NO_SUSPEND; 2051 action->name = devname; 2052 action->percpu_dev_id = dev_id; 2053 2054 retval = irq_chip_pm_get(&desc->irq_data); 2055 if (retval < 0) { 2056 kfree(action); 2057 return retval; 2058 } 2059 2060 retval = __setup_irq(irq, desc, action); 2061 2062 if (retval) { 2063 irq_chip_pm_put(&desc->irq_data); 2064 kfree(action); 2065 } 2066 2067 return retval; 2068 } 2069 EXPORT_SYMBOL_GPL(__request_percpu_irq); 2070 2071 /** 2072 * irq_get_irqchip_state - returns the irqchip state of a interrupt. 2073 * @irq: Interrupt line that is forwarded to a VM 2074 * @which: One of IRQCHIP_STATE_* the caller wants to know about 2075 * @state: a pointer to a boolean where the state is to be storeed 2076 * 2077 * This call snapshots the internal irqchip state of an 2078 * interrupt, returning into @state the bit corresponding to 2079 * stage @which 2080 * 2081 * This function should be called with preemption disabled if the 2082 * interrupt controller has per-cpu registers. 2083 */ 2084 int irq_get_irqchip_state(unsigned int irq, enum irqchip_irq_state which, 2085 bool *state) 2086 { 2087 struct irq_desc *desc; 2088 struct irq_data *data; 2089 struct irq_chip *chip; 2090 unsigned long flags; 2091 int err = -EINVAL; 2092 2093 desc = irq_get_desc_buslock(irq, &flags, 0); 2094 if (!desc) 2095 return err; 2096 2097 data = irq_desc_get_irq_data(desc); 2098 2099 do { 2100 chip = irq_data_get_irq_chip(data); 2101 if (chip->irq_get_irqchip_state) 2102 break; 2103 #ifdef CONFIG_IRQ_DOMAIN_HIERARCHY 2104 data = data->parent_data; 2105 #else 2106 data = NULL; 2107 #endif 2108 } while (data); 2109 2110 if (data) 2111 err = chip->irq_get_irqchip_state(data, which, state); 2112 2113 irq_put_desc_busunlock(desc, flags); 2114 return err; 2115 } 2116 EXPORT_SYMBOL_GPL(irq_get_irqchip_state); 2117 2118 /** 2119 * irq_set_irqchip_state - set the state of a forwarded interrupt. 2120 * @irq: Interrupt line that is forwarded to a VM 2121 * @which: State to be restored (one of IRQCHIP_STATE_*) 2122 * @val: Value corresponding to @which 2123 * 2124 * This call sets the internal irqchip state of an interrupt, 2125 * depending on the value of @which. 2126 * 2127 * This function should be called with preemption disabled if the 2128 * interrupt controller has per-cpu registers. 2129 */ 2130 int irq_set_irqchip_state(unsigned int irq, enum irqchip_irq_state which, 2131 bool val) 2132 { 2133 struct irq_desc *desc; 2134 struct irq_data *data; 2135 struct irq_chip *chip; 2136 unsigned long flags; 2137 int err = -EINVAL; 2138 2139 desc = irq_get_desc_buslock(irq, &flags, 0); 2140 if (!desc) 2141 return err; 2142 2143 data = irq_desc_get_irq_data(desc); 2144 2145 do { 2146 chip = irq_data_get_irq_chip(data); 2147 if (chip->irq_set_irqchip_state) 2148 break; 2149 #ifdef CONFIG_IRQ_DOMAIN_HIERARCHY 2150 data = data->parent_data; 2151 #else 2152 data = NULL; 2153 #endif 2154 } while (data); 2155 2156 if (data) 2157 err = chip->irq_set_irqchip_state(data, which, val); 2158 2159 irq_put_desc_busunlock(desc, flags); 2160 return err; 2161 } 2162 EXPORT_SYMBOL_GPL(irq_set_irqchip_state); 2163