Lines Matching refs:action
192 struct irqaction *action; in irq_set_thread_affinity() local
194 for_each_action_of_desc(desc, action) { in irq_set_thread_affinity()
195 if (action->thread) in irq_set_thread_affinity()
196 set_bit(IRQTF_AFFINITY, &action->thread_flags); in irq_set_thread_affinity()
197 if (action->secondary && action->secondary->thread) in irq_set_thread_affinity()
198 set_bit(IRQTF_AFFINITY, &action->secondary->thread_flags); in irq_set_thread_affinity()
946 if (!desc->action || in can_request_irq()
947 irqflags & desc->action->flags & IRQF_SHARED) in can_request_irq()
1052 static int irq_wait_for_interrupt(struct irqaction *action) in irq_wait_for_interrupt() argument
1060 &action->thread_flags)) { in irq_wait_for_interrupt()
1069 &action->thread_flags)) { in irq_wait_for_interrupt()
1083 struct irqaction *action) in irq_finalize_oneshot() argument
1086 action->handler == irq_forced_secondary_handler) in irq_finalize_oneshot()
1118 if (test_bit(IRQTF_RUNTHREAD, &action->thread_flags)) in irq_finalize_oneshot()
1121 desc->threads_oneshot &= ~action->thread_mask; in irq_finalize_oneshot()
1137 irq_thread_check_affinity(struct irq_desc *desc, struct irqaction *action) in irq_thread_check_affinity() argument
1142 if (!test_and_clear_bit(IRQTF_AFFINITY, &action->thread_flags)) in irq_thread_check_affinity()
1150 set_bit(IRQTF_AFFINITY, &action->thread_flags); in irq_thread_check_affinity()
1175 irq_thread_check_affinity(struct irq_desc *desc, struct irqaction *action) { } in irq_thread_check_affinity() argument
1185 irq_forced_thread_fn(struct irq_desc *desc, struct irqaction *action) in irq_forced_thread_fn() argument
1192 ret = action->thread_fn(action->irq, action->dev_id); in irq_forced_thread_fn()
1196 irq_finalize_oneshot(desc, action); in irq_forced_thread_fn()
1209 struct irqaction *action) in irq_thread_fn() argument
1213 ret = action->thread_fn(action->irq, action->dev_id); in irq_thread_fn()
1217 irq_finalize_oneshot(desc, action); in irq_thread_fn()
1231 struct irqaction *action; in irq_thread_dtor() local
1236 action = kthread_data(tsk); in irq_thread_dtor()
1239 tsk->comm, tsk->pid, action->irq); in irq_thread_dtor()
1242 desc = irq_to_desc(action->irq); in irq_thread_dtor()
1247 if (test_and_clear_bit(IRQTF_RUNTHREAD, &action->thread_flags)) in irq_thread_dtor()
1251 irq_finalize_oneshot(desc, action); in irq_thread_dtor()
1254 static void irq_wake_secondary(struct irq_desc *desc, struct irqaction *action) in irq_wake_secondary() argument
1256 struct irqaction *secondary = action->secondary; in irq_wake_secondary()
1270 struct irqaction *action) in irq_thread_set_ready() argument
1272 set_bit(IRQTF_READY, &action->thread_flags); in irq_thread_set_ready()
1281 struct irqaction *action) in wake_up_and_wait_for_irq_thread_ready() argument
1283 if (!action || !action->thread) in wake_up_and_wait_for_irq_thread_ready()
1286 wake_up_process(action->thread); in wake_up_and_wait_for_irq_thread_ready()
1288 test_bit(IRQTF_READY, &action->thread_flags)); in wake_up_and_wait_for_irq_thread_ready()
1297 struct irqaction *action = data; in irq_thread() local
1298 struct irq_desc *desc = irq_to_desc(action->irq); in irq_thread()
1300 struct irqaction *action); in irq_thread()
1302 irq_thread_set_ready(desc, action); in irq_thread()
1307 &action->thread_flags)) in irq_thread()
1315 irq_thread_check_affinity(desc, action); in irq_thread()
1317 while (!irq_wait_for_interrupt(action)) { in irq_thread()
1320 irq_thread_check_affinity(desc, action); in irq_thread()
1322 action_ret = handler_fn(desc, action); in irq_thread()
1324 irq_wake_secondary(desc, action); in irq_thread()
1348 struct irqaction *action; in irq_wake_thread() local
1355 for_each_action_of_desc(desc, action) { in irq_wake_thread()
1356 if (action->dev_id == dev_id) { in irq_wake_thread()
1357 if (action->thread) in irq_wake_thread()
1358 __irq_wake_thread(desc, action); in irq_wake_thread()
1597 if (!desc->action) { in __setup_irq()
1613 old_ptr = &desc->action; in __setup_irq()
1844 if (!desc->action) in __setup_irq()
1877 struct irqaction *action, **action_ptr; in __free_irq() local
1890 action_ptr = &desc->action; in __free_irq()
1892 action = *action_ptr; in __free_irq()
1894 if (!action) { in __free_irq()
1902 if (action->dev_id == dev_id) in __free_irq()
1904 action_ptr = &action->next; in __free_irq()
1908 *action_ptr = action->next; in __free_irq()
1910 irq_pm_remove_action(desc, action); in __free_irq()
1913 if (!desc->action) { in __free_irq()
1942 unregister_handler_proc(irq, action); in __free_irq()
1960 if (action->flags & IRQF_SHARED) { in __free_irq()
1962 action->handler(irq, dev_id); in __free_irq()
1973 if (action->thread) { in __free_irq()
1974 kthread_stop(action->thread); in __free_irq()
1975 put_task_struct(action->thread); in __free_irq()
1976 if (action->secondary && action->secondary->thread) { in __free_irq()
1977 kthread_stop(action->secondary->thread); in __free_irq()
1978 put_task_struct(action->secondary->thread); in __free_irq()
1983 if (!desc->action) { in __free_irq()
2006 kfree(action->secondary); in __free_irq()
2007 return action; in __free_irq()
2029 struct irqaction *action; in free_irq() local
2040 action = __free_irq(desc, dev_id); in free_irq()
2042 if (!action) in free_irq()
2045 devname = action->name; in free_irq()
2046 kfree(action); in free_irq()
2058 if (!WARN_ON(desc->action == NULL)) { in __cleanup_nmi()
2059 irq_pm_remove_action(desc, desc->action); in __cleanup_nmi()
2060 devname = desc->action->name; in __cleanup_nmi()
2061 unregister_handler_proc(irq, desc->action); in __cleanup_nmi()
2063 kfree(desc->action); in __cleanup_nmi()
2064 desc->action = NULL; in __cleanup_nmi()
2150 struct irqaction *action; in request_threaded_irq() local
2190 action = kzalloc(sizeof(struct irqaction), GFP_KERNEL); in request_threaded_irq()
2191 if (!action) in request_threaded_irq()
2194 action->handler = handler; in request_threaded_irq()
2195 action->thread_fn = thread_fn; in request_threaded_irq()
2196 action->flags = irqflags; in request_threaded_irq()
2197 action->name = devname; in request_threaded_irq()
2198 action->dev_id = dev_id; in request_threaded_irq()
2202 kfree(action); in request_threaded_irq()
2206 retval = __setup_irq(irq, desc, action); in request_threaded_irq()
2210 kfree(action->secondary); in request_threaded_irq()
2211 kfree(action); in request_threaded_irq()
2307 struct irqaction *action; in request_nmi() local
2334 action = kzalloc(sizeof(struct irqaction), GFP_KERNEL); in request_nmi()
2335 if (!action) in request_nmi()
2338 action->handler = handler; in request_nmi()
2339 action->flags = irqflags | IRQF_NO_THREAD | IRQF_NOBALANCING; in request_nmi()
2340 action->name = name; in request_nmi()
2341 action->dev_id = dev_id; in request_nmi()
2347 retval = __setup_irq(irq, desc, action); in request_nmi()
2369 kfree(action); in request_nmi()
2463 struct irqaction *action; in __free_percpu_irq() local
2473 action = desc->action; in __free_percpu_irq()
2474 if (!action || action->percpu_dev_id != dev_id) { in __free_percpu_irq()
2486 desc->action = NULL; in __free_percpu_irq()
2492 unregister_handler_proc(irq, action); in __free_percpu_irq()
2496 return action; in __free_percpu_irq()
2604 struct irqaction *action; in __request_percpu_irq() local
2619 action = kzalloc(sizeof(struct irqaction), GFP_KERNEL); in __request_percpu_irq()
2620 if (!action) in __request_percpu_irq()
2623 action->handler = handler; in __request_percpu_irq()
2624 action->flags = flags | IRQF_PERCPU | IRQF_NO_SUSPEND; in __request_percpu_irq()
2625 action->name = devname; in __request_percpu_irq()
2626 action->percpu_dev_id = dev_id; in __request_percpu_irq()
2630 kfree(action); in __request_percpu_irq()
2634 retval = __setup_irq(irq, desc, action); in __request_percpu_irq()
2638 kfree(action); in __request_percpu_irq()
2669 struct irqaction *action; in request_percpu_nmi() local
2689 action = kzalloc(sizeof(struct irqaction), GFP_KERNEL); in request_percpu_nmi()
2690 if (!action) in request_percpu_nmi()
2693 action->handler = handler; in request_percpu_nmi()
2694 action->flags = IRQF_PERCPU | IRQF_NO_SUSPEND | IRQF_NO_THREAD in request_percpu_nmi()
2696 action->name = name; in request_percpu_nmi()
2697 action->percpu_dev_id = dev_id; in request_percpu_nmi()
2703 retval = __setup_irq(irq, desc, action); in request_percpu_nmi()
2716 kfree(action); in request_percpu_nmi()