• Home
  • Raw
  • Download

Lines Matching refs:irqd

78 static struct apic_chip_data *apic_chip_data(struct irq_data *irqd)  in apic_chip_data()  argument
80 if (!irqd) in apic_chip_data()
83 while (irqd->parent_data) in apic_chip_data()
84 irqd = irqd->parent_data; in apic_chip_data()
86 return irqd->chip_data; in apic_chip_data()
89 struct irq_cfg *irqd_cfg(struct irq_data *irqd) in irqd_cfg() argument
91 struct apic_chip_data *apicd = apic_chip_data(irqd); in irqd_cfg()
117 static void apic_update_irq_cfg(struct irq_data *irqd, unsigned int vector, in apic_update_irq_cfg() argument
120 struct apic_chip_data *apicd = apic_chip_data(irqd); in apic_update_irq_cfg()
126 irq_data_update_effective_affinity(irqd, cpumask_of(cpu)); in apic_update_irq_cfg()
127 trace_vector_config(irqd->irq, vector, cpu, in apic_update_irq_cfg()
131 static void apic_update_vector(struct irq_data *irqd, unsigned int newvec, in apic_update_vector() argument
134 struct apic_chip_data *apicd = apic_chip_data(irqd); in apic_update_vector()
135 struct irq_desc *desc = irq_data_to_desc(irqd); in apic_update_vector()
136 bool managed = irqd_affinity_is_managed(irqd); in apic_update_vector()
140 trace_vector_update(irqd->irq, newvec, newcpu, apicd->vector, in apic_update_vector()
176 static void vector_assign_managed_shutdown(struct irq_data *irqd) in vector_assign_managed_shutdown() argument
180 apic_update_irq_cfg(irqd, MANAGED_IRQ_SHUTDOWN_VECTOR, cpu); in vector_assign_managed_shutdown()
183 static int reserve_managed_vector(struct irq_data *irqd) in reserve_managed_vector() argument
185 const struct cpumask *affmsk = irq_data_get_affinity_mask(irqd); in reserve_managed_vector()
186 struct apic_chip_data *apicd = apic_chip_data(irqd); in reserve_managed_vector()
194 trace_vector_reserve_managed(irqd->irq, ret); in reserve_managed_vector()
198 static void reserve_irq_vector_locked(struct irq_data *irqd) in reserve_irq_vector_locked() argument
200 struct apic_chip_data *apicd = apic_chip_data(irqd); in reserve_irq_vector_locked()
205 irqd_set_can_reserve(irqd); in reserve_irq_vector_locked()
206 trace_vector_reserve(irqd->irq, 0); in reserve_irq_vector_locked()
207 vector_assign_managed_shutdown(irqd); in reserve_irq_vector_locked()
210 static int reserve_irq_vector(struct irq_data *irqd) in reserve_irq_vector() argument
215 reserve_irq_vector_locked(irqd); in reserve_irq_vector()
221 assign_vector_locked(struct irq_data *irqd, const struct cpumask *dest) in assign_vector_locked() argument
223 struct apic_chip_data *apicd = apic_chip_data(irqd); in assign_vector_locked()
248 trace_vector_alloc(irqd->irq, vector, resvd, vector); in assign_vector_locked()
251 apic_update_vector(irqd, vector, cpu); in assign_vector_locked()
252 apic_update_irq_cfg(irqd, vector, cpu); in assign_vector_locked()
257 static int assign_irq_vector(struct irq_data *irqd, const struct cpumask *dest) in assign_irq_vector() argument
264 ret = assign_vector_locked(irqd, vector_searchmask); in assign_irq_vector()
269 static int assign_irq_vector_any_locked(struct irq_data *irqd) in assign_irq_vector_any_locked() argument
272 const struct cpumask *affmsk = irq_data_get_affinity_mask(irqd); in assign_irq_vector_any_locked()
273 int node = irq_data_get_node(irqd); in assign_irq_vector_any_locked()
278 if (!assign_vector_locked(irqd, vector_searchmask)) in assign_irq_vector_any_locked()
284 if (!assign_vector_locked(irqd, vector_searchmask)) in assign_irq_vector_any_locked()
289 if (!assign_vector_locked(irqd, cpumask_of_node(node))) in assign_irq_vector_any_locked()
294 return assign_vector_locked(irqd, cpu_online_mask); in assign_irq_vector_any_locked()
298 assign_irq_vector_policy(struct irq_data *irqd, struct irq_alloc_info *info) in assign_irq_vector_policy() argument
300 if (irqd_affinity_is_managed(irqd)) in assign_irq_vector_policy()
301 return reserve_managed_vector(irqd); in assign_irq_vector_policy()
303 return assign_irq_vector(irqd, info->mask); in assign_irq_vector_policy()
308 return reserve_irq_vector(irqd); in assign_irq_vector_policy()
312 assign_managed_vector(struct irq_data *irqd, const struct cpumask *dest) in assign_managed_vector() argument
314 const struct cpumask *affmsk = irq_data_get_affinity_mask(irqd); in assign_managed_vector()
315 struct apic_chip_data *apicd = apic_chip_data(irqd); in assign_managed_vector()
325 trace_vector_alloc_managed(irqd->irq, vector, vector); in assign_managed_vector()
328 apic_update_vector(irqd, vector, cpu); in assign_managed_vector()
329 apic_update_irq_cfg(irqd, vector, cpu); in assign_managed_vector()
333 static void clear_irq_vector(struct irq_data *irqd) in clear_irq_vector() argument
335 struct apic_chip_data *apicd = apic_chip_data(irqd); in clear_irq_vector()
336 bool managed = irqd_affinity_is_managed(irqd); in clear_irq_vector()
344 trace_vector_clear(irqd->irq, vector, apicd->cpu, apicd->prev_vector, in clear_irq_vector()
363 static void x86_vector_deactivate(struct irq_domain *dom, struct irq_data *irqd) in x86_vector_deactivate() argument
365 struct apic_chip_data *apicd = apic_chip_data(irqd); in x86_vector_deactivate()
368 trace_vector_deactivate(irqd->irq, apicd->is_managed, in x86_vector_deactivate()
379 clear_irq_vector(irqd); in x86_vector_deactivate()
381 reserve_irq_vector_locked(irqd); in x86_vector_deactivate()
383 vector_assign_managed_shutdown(irqd); in x86_vector_deactivate()
387 static int activate_reserved(struct irq_data *irqd) in activate_reserved() argument
389 struct apic_chip_data *apicd = apic_chip_data(irqd); in activate_reserved()
392 ret = assign_irq_vector_any_locked(irqd); in activate_reserved()
402 if (!irqd_can_reserve(irqd)) in activate_reserved()
410 if (!cpumask_subset(irq_data_get_effective_affinity_mask(irqd), in activate_reserved()
411 irq_data_get_affinity_mask(irqd))) { in activate_reserved()
413 irqd->irq); in activate_reserved()
419 static int activate_managed(struct irq_data *irqd) in activate_managed() argument
421 const struct cpumask *dest = irq_data_get_affinity_mask(irqd); in activate_managed()
427 pr_err("Managed startup for irq %u, but no CPU\n", irqd->irq); in activate_managed()
431 ret = assign_managed_vector(irqd, vector_searchmask); in activate_managed()
438 irqd->irq); in activate_managed()
443 static int x86_vector_activate(struct irq_domain *dom, struct irq_data *irqd, in x86_vector_activate() argument
446 struct apic_chip_data *apicd = apic_chip_data(irqd); in x86_vector_activate()
450 trace_vector_activate(irqd->irq, apicd->is_managed, in x86_vector_activate()
455 assign_irq_vector_any_locked(irqd); in x86_vector_activate()
456 else if (reserve || irqd_is_managed_and_shutdown(irqd)) in x86_vector_activate()
457 vector_assign_managed_shutdown(irqd); in x86_vector_activate()
459 ret = activate_managed(irqd); in x86_vector_activate()
461 ret = activate_reserved(irqd); in x86_vector_activate()
466 static void vector_free_reserved_and_managed(struct irq_data *irqd) in vector_free_reserved_and_managed() argument
468 const struct cpumask *dest = irq_data_get_affinity_mask(irqd); in vector_free_reserved_and_managed()
469 struct apic_chip_data *apicd = apic_chip_data(irqd); in vector_free_reserved_and_managed()
471 trace_vector_teardown(irqd->irq, apicd->is_managed, in vector_free_reserved_and_managed()
484 struct irq_data *irqd; in x86_vector_free_irqs() local
489 irqd = irq_domain_get_irq_data(x86_vector_domain, virq + i); in x86_vector_free_irqs()
490 if (irqd && irqd->chip_data) { in x86_vector_free_irqs()
492 clear_irq_vector(irqd); in x86_vector_free_irqs()
493 vector_free_reserved_and_managed(irqd); in x86_vector_free_irqs()
494 apicd = irqd->chip_data; in x86_vector_free_irqs()
495 irq_domain_reset_irq_data(irqd); in x86_vector_free_irqs()
502 static bool vector_configure_legacy(unsigned int virq, struct irq_data *irqd, in vector_configure_legacy() argument
516 if (irqd_is_activated(irqd)) { in vector_configure_legacy()
518 apic_update_irq_cfg(irqd, apicd->vector, apicd->cpu); in vector_configure_legacy()
522 irqd_set_can_reserve(irqd); in vector_configure_legacy()
523 clear_irq_vector(irqd); in vector_configure_legacy()
535 struct irq_data *irqd; in x86_vector_alloc_irqs() local
546 irqd = irq_domain_get_irq_data(domain, virq + i); in x86_vector_alloc_irqs()
547 BUG_ON(!irqd); in x86_vector_alloc_irqs()
548 node = irq_data_get_node(irqd); in x86_vector_alloc_irqs()
549 WARN_ON_ONCE(irqd->chip_data); in x86_vector_alloc_irqs()
557 irqd->chip = &lapic_controller; in x86_vector_alloc_irqs()
558 irqd->chip_data = apicd; in x86_vector_alloc_irqs()
559 irqd->hwirq = virq + i; in x86_vector_alloc_irqs()
560 irqd_set_single_target(irqd); in x86_vector_alloc_irqs()
563 irqd_set_affinity_on_activate(irqd); in x86_vector_alloc_irqs()
573 if (!vector_configure_legacy(virq + i, irqd, apicd)) in x86_vector_alloc_irqs()
577 err = assign_irq_vector_policy(irqd, info); in x86_vector_alloc_irqs()
580 irqd->chip_data = NULL; in x86_vector_alloc_irqs()
595 struct irq_data *irqd, int ind) in x86_vector_debug_show() argument
601 if (!irqd) { in x86_vector_debug_show()
606 irq = irqd->irq; in x86_vector_debug_show()
613 if (!irqd->chip_data) { in x86_vector_debug_show()
619 memcpy(&apicd, irqd->chip_data, sizeof(apicd)); in x86_vector_debug_show()
794 static int apic_set_affinity(struct irq_data *irqd, in apic_set_affinity() argument
799 if (WARN_ON_ONCE(!irqd_is_activated(irqd))) in apic_set_affinity()
804 if (irqd_affinity_is_managed(irqd)) in apic_set_affinity()
805 err = assign_managed_vector(irqd, vector_searchmask); in apic_set_affinity()
807 err = assign_vector_locked(irqd, vector_searchmask); in apic_set_affinity()
816 static int apic_retrigger_irq(struct irq_data *irqd) in apic_retrigger_irq() argument
818 struct apic_chip_data *apicd = apic_chip_data(irqd); in apic_retrigger_irq()
828 void apic_ack_irq(struct irq_data *irqd) in apic_ack_irq() argument
830 irq_move_irq(irqd); in apic_ack_irq()
834 void apic_ack_edge(struct irq_data *irqd) in apic_ack_edge() argument
836 irq_complete_move(irqd_cfg(irqd)); in apic_ack_edge()
837 apic_ack_irq(irqd); in apic_ack_edge()
953 struct irq_data *irqd; in irq_force_complete_move() local
965 irqd = irq_domain_get_irq_data(x86_vector_domain, in irq_force_complete_move()
967 if (!irqd) in irq_force_complete_move()
971 apicd = apic_chip_data(irqd); in irq_force_complete_move()
1031 irqd->irq, vector); in irq_force_complete_move()