Lines Matching refs:desc

44 	struct irq_desc *desc = irq_get_desc_lock(irq, &flags, 0);
46 if (!desc)
49 desc->irq_data.chip = (struct irq_chip *)(chip ?: &no_irq_chip);
50 irq_put_desc_unlock(desc, flags);
68 struct irq_desc *desc = irq_get_desc_buslock(irq, &flags, IRQ_GET_DESC_CHECK_GLOBAL);
71 if (!desc)
74 ret = __irq_set_trigger(desc, type);
75 irq_put_desc_busunlock(desc, flags);
90 struct irq_desc *desc = irq_get_desc_lock(irq, &flags, 0);
92 if (!desc)
94 desc->irq_common_data.handler_data = data;
95 irq_put_desc_unlock(desc, flags);
112 struct irq_desc *desc = irq_get_desc_lock(irq_base + irq_offset, &flags, IRQ_GET_DESC_CHECK_GLOBAL);
114 if (!desc)
116 desc->irq_common_data.msi_desc = entry;
119 irq_put_desc_unlock(desc, flags);
145 struct irq_desc *desc = irq_get_desc_lock(irq, &flags, 0);
147 if (!desc)
149 desc->irq_data.chip_data = data;
150 irq_put_desc_unlock(desc, flags);
157 struct irq_desc *desc = irq_to_desc(irq);
159 return desc ? &desc->irq_data : NULL;
163 static void irq_state_clr_disabled(struct irq_desc *desc)
165 irqd_clear(&desc->irq_data, IRQD_IRQ_DISABLED);
168 static void irq_state_clr_masked(struct irq_desc *desc)
170 irqd_clear(&desc->irq_data, IRQD_IRQ_MASKED);
173 static void irq_state_clr_started(struct irq_desc *desc)
175 irqd_clear(&desc->irq_data, IRQD_IRQ_STARTED);
178 static void irq_state_set_started(struct irq_desc *desc)
180 irqd_set(&desc->irq_data, IRQD_IRQ_STARTED);
191 __irq_startup_managed(struct irq_desc *desc, const struct cpumask *aff,
194 struct irq_data *d = irq_desc_get_irq_data(desc);
228 __irq_startup_managed(struct irq_desc *desc, const struct cpumask *aff,
235 static int __irq_startup(struct irq_desc *desc)
237 struct irq_data *d = irq_desc_get_irq_data(desc);
245 irq_state_clr_disabled(desc);
246 irq_state_clr_masked(desc);
248 irq_enable(desc);
250 irq_state_set_started(desc);
254 int irq_startup(struct irq_desc *desc, bool resend, bool force)
256 struct irq_data *d = irq_desc_get_irq_data(desc);
260 desc->depth = 0;
263 irq_enable(desc);
265 switch (__irq_startup_managed(desc, aff, force)) {
268 irq_setup_affinity(desc);
269 ret = __irq_startup(desc);
271 irq_setup_affinity(desc);
275 ret = __irq_startup(desc);
283 check_irq_resend(desc, false);
288 int irq_activate(struct irq_desc *desc)
290 struct irq_data *d = irq_desc_get_irq_data(desc);
297 int irq_activate_and_startup(struct irq_desc *desc, bool resend)
299 if (WARN_ON(irq_activate(desc)))
301 return irq_startup(desc, resend, IRQ_START_FORCE);
304 static void __irq_disable(struct irq_desc *desc, bool mask);
306 void irq_shutdown(struct irq_desc *desc)
308 if (irqd_is_started(&desc->irq_data)) {
309 clear_irq_resend(desc);
310 desc->depth = 1;
311 if (desc->irq_data.chip->irq_shutdown) {
312 desc->irq_data.chip->irq_shutdown(&desc->irq_data);
313 irq_state_set_disabled(desc);
314 irq_state_set_masked(desc);
316 __irq_disable(desc, true);
318 irq_state_clr_started(desc);
323 void irq_shutdown_and_deactivate(struct irq_desc *desc)
325 irq_shutdown(desc);
332 irq_domain_deactivate_irq(&desc->irq_data);
335 void irq_enable(struct irq_desc *desc)
337 if (!irqd_irq_disabled(&desc->irq_data)) {
338 unmask_irq(desc);
340 irq_state_clr_disabled(desc);
341 if (desc->irq_data.chip->irq_enable) {
342 desc->irq_data.chip->irq_enable(&desc->irq_data);
343 irq_state_clr_masked(desc);
345 unmask_irq(desc);
350 static void __irq_disable(struct irq_desc *desc, bool mask)
352 if (irqd_irq_disabled(&desc->irq_data)) {
354 mask_irq(desc);
356 irq_state_set_disabled(desc);
357 if (desc->irq_data.chip->irq_disable) {
358 desc->irq_data.chip->irq_disable(&desc->irq_data);
359 irq_state_set_masked(desc);
361 mask_irq(desc);
368 * @desc: irq descriptor which should be disabled
386 void irq_disable(struct irq_desc *desc)
388 __irq_disable(desc, irq_settings_disable_unlazy(desc));
391 void irq_percpu_enable(struct irq_desc *desc, unsigned int cpu)
393 if (desc->irq_data.chip->irq_enable)
394 desc->irq_data.chip->irq_enable(&desc->irq_data);
396 desc->irq_data.chip->irq_unmask(&desc->irq_data);
397 cpumask_set_cpu(cpu, desc->percpu_enabled);
400 void irq_percpu_disable(struct irq_desc *desc, unsigned int cpu)
402 if (desc->irq_data.chip->irq_disable)
403 desc->irq_data.chip->irq_disable(&desc->irq_data);
405 desc->irq_data.chip->irq_mask(&desc->irq_data);
406 cpumask_clear_cpu(cpu, desc->percpu_enabled);
409 static inline void mask_ack_irq(struct irq_desc *desc)
411 if (desc->irq_data.chip->irq_mask_ack) {
412 desc->irq_data.chip->irq_mask_ack(&desc->irq_data);
413 irq_state_set_masked(desc);
415 mask_irq(desc);
416 if (desc->irq_data.chip->irq_ack)
417 desc->irq_data.chip->irq_ack(&desc->irq_data);
421 void mask_irq(struct irq_desc *desc)
423 if (irqd_irq_masked(&desc->irq_data))
426 if (desc->irq_data.chip->irq_mask) {
427 desc->irq_data.chip->irq_mask(&desc->irq_data);
428 irq_state_set_masked(desc);
432 void unmask_irq(struct irq_desc *desc)
434 if (!irqd_irq_masked(&desc->irq_data))
437 if (desc->irq_data.chip->irq_unmask) {
438 desc->irq_data.chip->irq_unmask(&desc->irq_data);
439 irq_state_clr_masked(desc);
443 void unmask_threaded_irq(struct irq_desc *desc)
445 struct irq_chip *chip = desc->irq_data.chip;
448 chip->irq_eoi(&desc->irq_data);
450 unmask_irq(desc);
463 struct irq_desc *desc = irq_to_desc(irq);
469 raw_spin_lock_irq(&desc->lock);
471 desc->istate &= ~(IRQS_REPLAY | IRQS_WAITING);
473 action = desc->action;
474 if (unlikely(!action || irqd_irq_disabled(&desc->irq_data))) {
475 desc->istate |= IRQS_PENDING;
476 raw_spin_unlock_irq(&desc->lock);
480 kstat_incr_irqs_this_cpu(desc);
481 atomic_inc(&desc->threads_active);
482 raw_spin_unlock_irq(&desc->lock);
485 for_each_action_of_desc(desc, action)
488 if (!irq_settings_no_debug(desc))
489 note_interrupt(desc, action_ret);
491 wake_threads_waitq(desc);
495 static bool irq_check_poll(struct irq_desc *desc)
497 if (!(desc->istate & IRQS_POLL_INPROGRESS))
499 return irq_wait_for_poll(desc);
502 static bool irq_may_run(struct irq_desc *desc)
510 if (!irqd_has_set(&desc->irq_data, mask))
518 if (irq_pm_check_wakeup(desc))
524 return irq_check_poll(desc);
529 * @desc: the interrupt description structure for this irq
538 void handle_simple_irq(struct irq_desc *desc)
540 raw_spin_lock(&desc->lock);
542 if (!irq_may_run(desc))
545 desc->istate &= ~(IRQS_REPLAY | IRQS_WAITING);
547 if (unlikely(!desc->action || irqd_irq_disabled(&desc->irq_data))) {
548 desc->istate |= IRQS_PENDING;
552 kstat_incr_irqs_this_cpu(desc);
553 handle_irq_event(desc);
556 raw_spin_unlock(&desc->lock);
562 * @desc: the interrupt description structure for this irq
573 void handle_untracked_irq(struct irq_desc *desc)
575 raw_spin_lock(&desc->lock);
577 if (!irq_may_run(desc))
580 desc->istate &= ~(IRQS_REPLAY | IRQS_WAITING);
582 if (unlikely(!desc->action || irqd_irq_disabled(&desc->irq_data))) {
583 desc->istate |= IRQS_PENDING;
587 desc->istate &= ~IRQS_PENDING;
588 irqd_set(&desc->irq_data, IRQD_IRQ_INPROGRESS);
589 raw_spin_unlock(&desc->lock);
591 __handle_irq_event_percpu(desc);
593 raw_spin_lock(&desc->lock);
594 irqd_clear(&desc->irq_data, IRQD_IRQ_INPROGRESS);
597 raw_spin_unlock(&desc->lock);
605 static void cond_unmask_irq(struct irq_desc *desc)
614 if (!irqd_irq_disabled(&desc->irq_data) &&
615 irqd_irq_masked(&desc->irq_data) && !desc->threads_oneshot)
616 unmask_irq(desc);
621 * @desc: the interrupt description structure for this irq
628 void handle_level_irq(struct irq_desc *desc)
630 raw_spin_lock(&desc->lock);
631 mask_ack_irq(desc);
633 if (!irq_may_run(desc))
636 desc->istate &= ~(IRQS_REPLAY | IRQS_WAITING);
642 if (unlikely(!desc->action || irqd_irq_disabled(&desc->irq_data))) {
643 desc->istate |= IRQS_PENDING;
647 kstat_incr_irqs_this_cpu(desc);
648 handle_irq_event(desc);
650 cond_unmask_irq(desc);
653 raw_spin_unlock(&desc->lock);
657 static void cond_unmask_eoi_irq(struct irq_desc *desc, struct irq_chip *chip)
659 if (!(desc->istate & IRQS_ONESHOT)) {
660 chip->irq_eoi(&desc->irq_data);
669 if (!irqd_irq_disabled(&desc->irq_data) &&
670 irqd_irq_masked(&desc->irq_data) && !desc->threads_oneshot) {
671 chip->irq_eoi(&desc->irq_data);
672 unmask_irq(desc);
674 chip->irq_eoi(&desc->irq_data);
680 * @desc: the interrupt description structure for this irq
687 void handle_fasteoi_irq(struct irq_desc *desc)
689 struct irq_chip *chip = desc->irq_data.chip;
691 raw_spin_lock(&desc->lock);
698 if (!irq_may_run(desc)) {
699 if (irqd_needs_resend_when_in_progress(&desc->irq_data))
700 desc->istate |= IRQS_PENDING;
704 desc->istate &= ~(IRQS_REPLAY | IRQS_WAITING);
710 if (unlikely(!desc->action || irqd_irq_disabled(&desc->irq_data))) {
711 desc->istate |= IRQS_PENDING;
712 mask_irq(desc);
716 kstat_incr_irqs_this_cpu(desc);
717 if (desc->istate & IRQS_ONESHOT)
718 mask_irq(desc);
720 handle_irq_event(desc);
722 cond_unmask_eoi_irq(desc, chip);
727 if (unlikely(desc->istate & IRQS_PENDING))
728 check_irq_resend(desc, false);
730 raw_spin_unlock(&desc->lock);
734 chip->irq_eoi(&desc->irq_data);
735 raw_spin_unlock(&desc->lock);
741 * @desc: the interrupt description structure for this irq
751 void handle_fasteoi_nmi(struct irq_desc *desc)
753 struct irq_chip *chip = irq_desc_get_chip(desc);
754 struct irqaction *action = desc->action;
755 unsigned int irq = irq_desc_get_irq(desc);
758 __kstat_incr_irqs_this_cpu(desc);
768 chip->irq_eoi(&desc->irq_data);
774 * @desc: the interrupt description structure for this irq
787 void handle_edge_irq(struct irq_desc *desc)
789 raw_spin_lock(&desc->lock);
791 desc->istate &= ~(IRQS_REPLAY | IRQS_WAITING);
793 if (!irq_may_run(desc)) {
794 desc->istate |= IRQS_PENDING;
795 mask_ack_irq(desc);
803 if (irqd_irq_disabled(&desc->irq_data) || !desc->action) {
804 desc->istate |= IRQS_PENDING;
805 mask_ack_irq(desc);
809 kstat_incr_irqs_this_cpu(desc);
812 desc->irq_data.chip->irq_ack(&desc->irq_data);
815 if (unlikely(!desc->action)) {
816 mask_irq(desc);
825 if (unlikely(desc->istate & IRQS_PENDING)) {
826 if (!irqd_irq_disabled(&desc->irq_data) &&
827 irqd_irq_masked(&desc->irq_data))
828 unmask_irq(desc);
831 handle_irq_event(desc);
833 } while ((desc->istate & IRQS_PENDING) &&
834 !irqd_irq_disabled(&desc->irq_data));
837 raw_spin_unlock(&desc->lock);
844 * @desc: the interrupt description structure for this irq
849 void handle_edge_eoi_irq(struct irq_desc *desc)
851 struct irq_chip *chip = irq_desc_get_chip(desc);
853 raw_spin_lock(&desc->lock);
855 desc->istate &= ~(IRQS_REPLAY | IRQS_WAITING);
857 if (!irq_may_run(desc)) {
858 desc->istate |= IRQS_PENDING;
866 if (irqd_irq_disabled(&desc->irq_data) || !desc->action) {
867 desc->istate |= IRQS_PENDING;
871 kstat_incr_irqs_this_cpu(desc);
874 if (unlikely(!desc->action))
877 handle_irq_event(desc);
879 } while ((desc->istate & IRQS_PENDING) &&
880 !irqd_irq_disabled(&desc->irq_data));
883 chip->irq_eoi(&desc->irq_data);
884 raw_spin_unlock(&desc->lock);
890 * @desc: the interrupt description structure for this irq
894 void handle_percpu_irq(struct irq_desc *desc)
896 struct irq_chip *chip = irq_desc_get_chip(desc);
900 * desc->tot_count.
902 __kstat_incr_irqs_this_cpu(desc);
905 chip->irq_ack(&desc->irq_data);
907 handle_irq_event_percpu(desc);
910 chip->irq_eoi(&desc->irq_data);
915 * @desc: the interrupt description structure for this irq
924 void handle_percpu_devid_irq(struct irq_desc *desc)
926 struct irq_chip *chip = irq_desc_get_chip(desc);
927 struct irqaction *action = desc->action;
928 unsigned int irq = irq_desc_get_irq(desc);
933 * desc->tot_count.
935 __kstat_incr_irqs_this_cpu(desc);
938 chip->irq_ack(&desc->irq_data);
946 bool enabled = cpumask_test_cpu(cpu, desc->percpu_enabled);
949 irq_percpu_disable(desc, cpu);
956 chip->irq_eoi(&desc->irq_data);
962 * @desc: the interrupt description structure for this irq
967 void handle_percpu_devid_fasteoi_nmi(struct irq_desc *desc)
969 struct irq_chip *chip = irq_desc_get_chip(desc);
970 struct irqaction *action = desc->action;
971 unsigned int irq = irq_desc_get_irq(desc);
974 __kstat_incr_irqs_this_cpu(desc);
981 chip->irq_eoi(&desc->irq_data);
985 __irq_do_set_handler(struct irq_desc *desc, irq_flow_handler_t handle,
991 struct irq_data *irq_data = &desc->irq_data;
1020 if (desc->irq_data.chip != &no_irq_chip)
1021 mask_ack_irq(desc);
1022 irq_state_set_disabled(desc);
1024 desc->action = NULL;
1025 WARN_ON(irq_chip_pm_put(irq_desc_get_irq_data(desc)));
1027 desc->depth = 1;
1029 desc->handle_irq = handle;
1030 desc->name = name;
1033 unsigned int type = irqd_get_trigger_type(&desc->irq_data);
1044 __irq_set_trigger(desc, type);
1045 desc->handle_irq = handle;
1048 irq_settings_set_noprobe(desc);
1049 irq_settings_set_norequest(desc);
1050 irq_settings_set_nothread(desc);
1051 desc->action = &chained_action;
1052 WARN_ON(irq_chip_pm_get(irq_desc_get_irq_data(desc)));
1053 irq_activate_and_startup(desc, IRQ_RESEND);
1062 struct irq_desc *desc = irq_get_desc_buslock(irq, &flags, 0);
1064 if (!desc)
1067 __irq_do_set_handler(desc, handle, is_chained, name);
1068 irq_put_desc_busunlock(desc, flags);
1077 struct irq_desc *desc = irq_get_desc_buslock(irq, &flags, 0);
1079 if (!desc)
1082 desc->irq_common_data.handler_data = data;
1083 __irq_do_set_handler(desc, handle, 1, NULL);
1085 irq_put_desc_busunlock(desc, flags);
1101 struct irq_desc *desc = irq_get_desc_lock(irq, &flags, 0);
1103 if (!desc)
1110 WARN_ON_ONCE(!desc->depth && (set & _IRQ_NOAUTOEN));
1112 irq_settings_clr_and_set(desc, clr, set);
1114 trigger = irqd_get_trigger_type(&desc->irq_data);
1116 irqd_clear(&desc->irq_data, IRQD_NO_BALANCING | IRQD_PER_CPU |
1118 if (irq_settings_has_no_balance_set(desc))
1119 irqd_set(&desc->irq_data, IRQD_NO_BALANCING);
1120 if (irq_settings_is_per_cpu(desc))
1121 irqd_set(&desc->irq_data, IRQD_PER_CPU);
1122 if (irq_settings_can_move_pcntxt(desc))
1123 irqd_set(&desc->irq_data, IRQD_MOVE_PCNTXT);
1124 if (irq_settings_is_level(desc))
1125 irqd_set(&desc->irq_data, IRQD_LEVEL);
1127 tmp = irq_settings_get_trigger_mask(desc);
1131 irqd_set(&desc->irq_data, trigger);
1133 irq_put_desc_unlock(desc, flags);
1146 struct irq_desc *desc;
1152 desc = irq_to_desc(irq);
1153 if (!desc)
1156 raw_spin_lock_irqsave(&desc->lock, flags);
1158 chip = irq_data_get_irq_chip(&desc->irq_data);
1161 !irqd_irq_disabled(&desc->irq_data)))
1162 chip->irq_cpu_online(&desc->irq_data);
1164 raw_spin_unlock_irqrestore(&desc->lock, flags);
1176 struct irq_desc *desc;
1182 desc = irq_to_desc(irq);
1183 if (!desc)
1186 raw_spin_lock_irqsave(&desc->lock, flags);
1188 chip = irq_data_get_irq_chip(&desc->irq_data);
1191 !irqd_irq_disabled(&desc->irq_data)))
1192 chip->irq_cpu_offline(&desc->irq_data);
1194 raw_spin_unlock_irqrestore(&desc->lock, flags);
1206 * @desc: the interrupt description structure for this irq
1212 void handle_fasteoi_ack_irq(struct irq_desc *desc)
1214 struct irq_chip *chip = desc->irq_data.chip;
1216 raw_spin_lock(&desc->lock);
1218 if (!irq_may_run(desc))
1221 desc->istate &= ~(IRQS_REPLAY | IRQS_WAITING);
1227 if (unlikely(!desc->action || irqd_irq_disabled(&desc->irq_data))) {
1228 desc->istate |= IRQS_PENDING;
1229 mask_irq(desc);
1233 kstat_incr_irqs_this_cpu(desc);
1234 if (desc->istate & IRQS_ONESHOT)
1235 mask_irq(desc);
1238 desc->irq_data.chip->irq_ack(&desc->irq_data);
1240 handle_irq_event(desc);
1242 cond_unmask_eoi_irq(desc, chip);
1244 raw_spin_unlock(&desc->lock);
1248 chip->irq_eoi(&desc->irq_data);
1249 raw_spin_unlock(&desc->lock);
1257 * @desc: the interrupt description structure for this irq
1263 void handle_fasteoi_mask_irq(struct irq_desc *desc)
1265 struct irq_chip *chip = desc->irq_data.chip;
1267 raw_spin_lock(&desc->lock);
1268 mask_ack_irq(desc);
1270 if (!irq_may_run(desc))
1273 desc->istate &= ~(IRQS_REPLAY | IRQS_WAITING);
1279 if (unlikely(!desc->action || irqd_irq_disabled(&desc->irq_data))) {
1280 desc->istate |= IRQS_PENDING;
1281 mask_irq(desc);
1285 kstat_incr_irqs_this_cpu(desc);
1286 if (desc->istate & IRQS_ONESHOT)
1287 mask_irq(desc);
1289 handle_irq_event(desc);
1291 cond_unmask_eoi_irq(desc, chip);
1293 raw_spin_unlock(&desc->lock);
1297 chip->irq_eoi(&desc->irq_data);
1298 raw_spin_unlock(&desc->lock);