Lines Matching full:vector

28 	unsigned int		vector;  member
128 static void apic_update_irq_cfg(struct irq_data *irqd, unsigned int vector, in apic_update_irq_cfg() argument
135 apicd->hw_irq_cfg.vector = vector; in apic_update_irq_cfg()
138 apic_update_vector(cpu, vector, true); in apic_update_irq_cfg()
141 trace_vector_config(irqd->irq, vector, cpu, apicd->hw_irq_cfg.dest_apicid); in apic_update_irq_cfg()
144 static void apic_free_vector(unsigned int cpu, unsigned int vector, bool managed) in apic_free_vector() argument
146 apic_update_vector(cpu, vector, false); in apic_free_vector()
147 irq_matrix_free(vector_matrix, cpu, vector, managed); in apic_free_vector()
158 trace_vector_update(irqd->irq, newvec, newcpu, apicd->vector, in chip_data_update()
162 * If there is no vector associated or if the associated vector is in chip_data_update()
163 * the shutdown vector, which is associated to make PCI/MSI in chip_data_update()
168 if (!apicd->vector || apicd->vector == MANAGED_IRQ_SHUTDOWN_VECTOR) in chip_data_update()
171 * If the target CPU of the previous vector is online, then mark in chip_data_update()
172 * the vector as move in progress and store it for cleanup when the in chip_data_update()
173 * first interrupt on the new vector arrives. If the target CPU is in chip_data_update()
175 * vector is not possible and the vector can be immediately freed in chip_data_update()
180 apicd->prev_vector = apicd->vector; in chip_data_update()
184 apic_free_vector(apicd->cpu, apicd->vector, managed); in chip_data_update()
188 apicd->vector = newvec; in chip_data_update()
245 int vector = apicd->vector; in assign_vector_locked() local
254 if (vector && cpu_online(cpu) && cpumask_test_cpu(cpu, dest)) in assign_vector_locked()
259 * be enqueued for cleanup. Assigning a new vector would either in assign_vector_locked()
260 * leave a stale vector on some CPU around or in case of a pending in assign_vector_locked()
266 vector = irq_matrix_alloc(vector_matrix, dest, resvd, &cpu); in assign_vector_locked()
267 trace_vector_alloc(irqd->irq, vector, resvd, vector); in assign_vector_locked()
268 if (vector < 0) in assign_vector_locked()
269 return vector; in assign_vector_locked()
270 chip_data_update(irqd, vector, cpu); in assign_vector_locked()
323 * Make only a global reservation with no guarantee. A real vector in assign_irq_vector_policy()
334 int vector, cpu; in assign_managed_vector() local
339 if (apicd->vector && cpumask_test_cpu(apicd->cpu, vector_searchmask)) in assign_managed_vector()
341 vector = irq_matrix_alloc_managed(vector_matrix, vector_searchmask, in assign_managed_vector()
343 trace_vector_alloc_managed(irqd->irq, vector, vector); in assign_managed_vector()
344 if (vector < 0) in assign_managed_vector()
345 return vector; in assign_managed_vector()
346 chip_data_update(irqd, vector, cpu); in assign_managed_vector()
355 unsigned int vector = apicd->vector; in clear_irq_vector() local
359 if (!vector) in clear_irq_vector()
362 trace_vector_clear(irqd->irq, vector, apicd->cpu, apicd->prev_vector, in clear_irq_vector()
365 per_cpu(vector_irq, apicd->cpu)[vector] = VECTOR_SHUTDOWN; in clear_irq_vector()
366 apic_free_vector(apicd->cpu, vector, managed); in clear_irq_vector()
367 apicd->vector = 0; in clear_irq_vector()
370 vector = apicd->prev_vector; in clear_irq_vector()
371 if (!vector) in clear_irq_vector()
374 per_cpu(vector_irq, apicd->prev_cpu)[vector] = VECTOR_SHUTDOWN; in clear_irq_vector()
375 apic_free_vector(apicd->prev_cpu, vector, managed); in clear_irq_vector()
430 pr_warn("irq %u: Affinity broken due to vector space exhaustion.\n", in activate_reserved()
451 * This should not happen. The vector reservation got buggered. Handle in activate_managed()
455 pr_err("Managed startup irq %u, no vector available\n", in activate_managed()
526 apicd->vector = ISA_IRQ_VECTOR(virq); in vector_configure_legacy()
531 * If the interrupt is activated, then it must stay at this vector in vector_configure_legacy()
536 apic_update_irq_cfg(irqd, apicd->vector, apicd->cpu); in vector_configure_legacy()
538 /* Release the vector */ in vector_configure_legacy()
595 * takes them over. They stay on the same vector. This is in x86_vector_alloc_irqs()
650 seq_printf(m, "%*sVector: %5u\n", ind, "", apicd.vector); in x86_vector_debug_show()
653 seq_printf(m, "%*sPrevious vector: %5u\n", ind, "", apicd.prev_vector); in x86_vector_debug_show()
696 * HPET and I/OAPIC cannot be parented in the vector domain in x86_vector_select()
776 unsigned int i, vector; in lapic_assign_system_vectors() local
778 for_each_set_bit(vector, system_vectors, NR_VECTORS) in lapic_assign_system_vectors()
779 irq_matrix_assign_system(vector_matrix, vector, false); in lapic_assign_system_vectors()
803 fn = irq_domain_alloc_named_fwnode("VECTOR"); in arch_early_irq_init()
813 * Allocate the vector matrix allocator data structure and limit the in arch_early_irq_init()
825 static struct irq_desc *__setup_vector_irq(int vector) in __setup_vector_irq() argument
827 int isairq = vector - ISA_IRQ_VECTOR(0); in __setup_vector_irq()
841 unsigned int vector; in lapic_online() local
845 /* Online the vector matrix array for this CPU */ in lapic_online()
857 for (vector = 0; vector < NR_VECTORS; vector++) in lapic_online()
858 this_cpu_write(vector_irq[vector], __setup_vector_irq(vector)); in lapic_online()
869 /* In case the vector cleanup timer has not expired */ in lapic_offline()
899 unsigned int vector = apicd->prev_vector; in free_moved_vector() local
913 trace_vector_free_moved(apicd->irq, cpu, vector, managed); in free_moved_vector()
914 apic_free_vector(cpu, vector, managed); in free_moved_vector()
915 per_cpu(vector_irq, cpu)[vector] = VECTOR_UNUSED; in free_moved_vector()
928 unsigned int vector; in apic_force_complete_move() local
939 vector = apicd->prev_vector; in apic_force_complete_move()
940 if (!vector || (apicd->cpu != cpu && apicd->prev_cpu != cpu)) in apic_force_complete_move()
944 * This is tricky. If the cleanup of the old vector has not been in apic_force_complete_move()
953 * the new vector. in apic_force_complete_move()
955 * 2) The interrupt has fired on the new vector, but the cleanup IPIs in apic_force_complete_move()
964 * the old vector. in apic_force_complete_move()
967 * the old vector is cleaned up, we get a spurious interrupt in apic_force_complete_move()
975 * old vector is not yet cleaned up when the interrupt fires. in apic_force_complete_move()
987 * We print at least the irq number and the old vector number, in apic_force_complete_move()
991 pr_warn("IRQ fixup: irq %d move in progress, old vector %d\n", in apic_force_complete_move()
992 irqd->irq, vector); in apic_force_complete_move()
1008 __apic_send_IPI(apicd->cpu, apicd->vector); in apic_retrigger_irq()
1052 unsigned int vector = apicd->prev_vector; in __vector_cleanup() local
1055 * Paranoia: Check if the vector that needs to be cleaned in __vector_cleanup()
1057 * hardware issue if the vector arrived on the old target in __vector_cleanup()
1066 if (check_irr && is_vector_pending(vector)) { in __vector_cleanup()
1107 * vector lock. in __vector_schedule_cleanup()
1111 * would be blocked on vector lock. Rearming it in the in __vector_schedule_cleanup()
1115 * because that's serialized via vector lock too. in __vector_schedule_cleanup()
1147 * vector on the old target CPU. A vector check is not required in irq_complete_move()
1148 * because an interrupt can never move from one vector to another in irq_complete_move()