Lines Matching refs:action

147 	struct irqaction *action = desc->action;  in irq_set_thread_affinity()  local
149 while (action) { in irq_set_thread_affinity()
150 if (action->thread) in irq_set_thread_affinity()
151 set_bit(IRQTF_AFFINITY, &action->thread_flags); in irq_set_thread_affinity()
152 action = action->next; in irq_set_thread_affinity()
634 if (!desc->action || in can_request_irq()
635 irqflags & desc->action->flags & IRQF_SHARED) in can_request_irq()
739 static int irq_wait_for_interrupt(struct irqaction *action) in irq_wait_for_interrupt() argument
746 &action->thread_flags)) { in irq_wait_for_interrupt()
763 struct irqaction *action) in irq_finalize_oneshot() argument
766 action->handler == irq_forced_secondary_handler) in irq_finalize_oneshot()
798 if (test_bit(IRQTF_RUNTHREAD, &action->thread_flags)) in irq_finalize_oneshot()
801 desc->threads_oneshot &= ~action->thread_mask; in irq_finalize_oneshot()
817 irq_thread_check_affinity(struct irq_desc *desc, struct irqaction *action) in irq_thread_check_affinity() argument
822 if (!test_and_clear_bit(IRQTF_AFFINITY, &action->thread_flags)) in irq_thread_check_affinity()
830 set_bit(IRQTF_AFFINITY, &action->thread_flags); in irq_thread_check_affinity()
851 irq_thread_check_affinity(struct irq_desc *desc, struct irqaction *action) { } in irq_thread_check_affinity() argument
861 irq_forced_thread_fn(struct irq_desc *desc, struct irqaction *action) in irq_forced_thread_fn() argument
866 ret = action->thread_fn(action->irq, action->dev_id); in irq_forced_thread_fn()
867 irq_finalize_oneshot(desc, action); in irq_forced_thread_fn()
878 struct irqaction *action) in irq_thread_fn() argument
882 ret = action->thread_fn(action->irq, action->dev_id); in irq_thread_fn()
883 irq_finalize_oneshot(desc, action); in irq_thread_fn()
897 struct irqaction *action; in irq_thread_dtor() local
902 action = kthread_data(tsk); in irq_thread_dtor()
905 tsk->comm, tsk->pid, action->irq); in irq_thread_dtor()
908 desc = irq_to_desc(action->irq); in irq_thread_dtor()
913 if (test_and_clear_bit(IRQTF_RUNTHREAD, &action->thread_flags)) in irq_thread_dtor()
917 irq_finalize_oneshot(desc, action); in irq_thread_dtor()
920 static void irq_wake_secondary(struct irq_desc *desc, struct irqaction *action) in irq_wake_secondary() argument
922 struct irqaction *secondary = action->secondary; in irq_wake_secondary()
938 struct irqaction *action = data; in irq_thread() local
939 struct irq_desc *desc = irq_to_desc(action->irq); in irq_thread()
941 struct irqaction *action); in irq_thread()
944 &action->thread_flags)) in irq_thread()
952 irq_thread_check_affinity(desc, action); in irq_thread()
954 while (!irq_wait_for_interrupt(action)) { in irq_thread()
957 irq_thread_check_affinity(desc, action); in irq_thread()
959 action_ret = handler_fn(desc, action); in irq_thread()
963 irq_wake_secondary(desc, action); in irq_thread()
990 struct irqaction *action; in irq_wake_thread() local
997 for (action = desc->action; action; action = action->next) { in irq_wake_thread()
998 if (action->dev_id == dev_id) { in irq_wake_thread()
999 if (action->thread) in irq_wake_thread()
1000 __irq_wake_thread(desc, action); in irq_wake_thread()
1182 old_ptr = &desc->action; in __setup_irq()
1429 struct irqaction *action, **action_ptr; in __free_irq() local
1444 action_ptr = &desc->action; in __free_irq()
1446 action = *action_ptr; in __free_irq()
1448 if (!action) { in __free_irq()
1455 if (action->dev_id == dev_id) in __free_irq()
1457 action_ptr = &action->next; in __free_irq()
1461 *action_ptr = action->next; in __free_irq()
1463 irq_pm_remove_action(desc, action); in __free_irq()
1466 if (!desc->action) { in __free_irq()
1481 unregister_handler_proc(irq, action); in __free_irq()
1495 if (action->flags & IRQF_SHARED) { in __free_irq()
1497 action->handler(irq, dev_id); in __free_irq()
1502 if (action->thread) { in __free_irq()
1503 kthread_stop(action->thread); in __free_irq()
1504 put_task_struct(action->thread); in __free_irq()
1505 if (action->secondary && action->secondary->thread) { in __free_irq()
1506 kthread_stop(action->secondary->thread); in __free_irq()
1507 put_task_struct(action->secondary->thread); in __free_irq()
1512 kfree(action->secondary); in __free_irq()
1513 return action; in __free_irq()
1608 struct irqaction *action; in request_threaded_irq() local
1640 action = kzalloc(sizeof(struct irqaction), GFP_KERNEL); in request_threaded_irq()
1641 if (!action) in request_threaded_irq()
1644 action->handler = handler; in request_threaded_irq()
1645 action->thread_fn = thread_fn; in request_threaded_irq()
1646 action->flags = irqflags; in request_threaded_irq()
1647 action->name = devname; in request_threaded_irq()
1648 action->dev_id = dev_id; in request_threaded_irq()
1651 retval = __setup_irq(irq, desc, action); in request_threaded_irq()
1655 kfree(action->secondary); in request_threaded_irq()
1656 kfree(action); in request_threaded_irq()
1766 struct irqaction *action; in __free_percpu_irq() local
1776 action = desc->action; in __free_percpu_irq()
1777 if (!action || action->percpu_dev_id != dev_id) { in __free_percpu_irq()
1789 desc->action = NULL; in __free_percpu_irq()
1793 unregister_handler_proc(irq, action); in __free_percpu_irq()
1796 return action; in __free_percpu_irq()
1883 struct irqaction *action; in request_percpu_irq() local
1895 action = kzalloc(sizeof(struct irqaction), GFP_KERNEL); in request_percpu_irq()
1896 if (!action) in request_percpu_irq()
1899 action->handler = handler; in request_percpu_irq()
1900 action->flags = IRQF_PERCPU | IRQF_NO_SUSPEND; in request_percpu_irq()
1901 action->name = devname; in request_percpu_irq()
1902 action->percpu_dev_id = dev_id; in request_percpu_irq()
1905 retval = __setup_irq(irq, desc, action); in request_percpu_irq()
1909 kfree(action); in request_percpu_irq()