Lines Matching defs:vector

28 	unsigned int		vector;
128 static void apic_update_irq_cfg(struct irq_data *irqd, unsigned int vector,
135 apicd->hw_irq_cfg.vector = vector;
138 trace_vector_config(irqd->irq, vector, cpu,
151 trace_vector_update(irqd->irq, newvec, newcpu, apicd->vector,
155 * If there is no vector associated or if the associated vector is
156 * the shutdown vector, which is associated to make PCI/MSI
161 if (!apicd->vector || apicd->vector == MANAGED_IRQ_SHUTDOWN_VECTOR)
164 * If the target CPU of the previous vector is online, then mark
165 * the vector as move in progress and store it for cleanup when the
166 * first interrupt on the new vector arrives. If the target CPU is
168 * vector is not possible and the vector can be immediately freed
173 apicd->prev_vector = apicd->vector;
177 irq_matrix_free(vector_matrix, apicd->cpu, apicd->vector,
182 apicd->vector = newvec;
238 int vector = apicd->vector;
247 if (vector && cpu_online(cpu) && cpumask_test_cpu(cpu, dest))
252 * be enqueued for cleanup. Assigning a new vector would either
253 * leave a stale vector on some CPU around or in case of a pending
259 vector = irq_matrix_alloc(vector_matrix, dest, resvd, &cpu);
260 trace_vector_alloc(irqd->irq, vector, resvd, vector);
261 if (vector < 0)
262 return vector;
263 apic_update_vector(irqd, vector, cpu);
264 apic_update_irq_cfg(irqd, vector, cpu);
317 * Make only a global reservation with no guarantee. A real vector
328 int vector, cpu;
333 if (apicd->vector && cpumask_test_cpu(apicd->cpu, vector_searchmask))
335 vector = irq_matrix_alloc_managed(vector_matrix, vector_searchmask,
337 trace_vector_alloc_managed(irqd->irq, vector, vector);
338 if (vector < 0)
339 return vector;
340 apic_update_vector(irqd, vector, cpu);
341 apic_update_irq_cfg(irqd, vector, cpu);
349 unsigned int vector = apicd->vector;
353 if (!vector)
356 trace_vector_clear(irqd->irq, vector, apicd->cpu, apicd->prev_vector,
359 per_cpu(vector_irq, apicd->cpu)[vector] = VECTOR_SHUTDOWN;
360 irq_matrix_free(vector_matrix, apicd->cpu, vector, managed);
361 apicd->vector = 0;
364 vector = apicd->prev_vector;
365 if (!vector)
368 per_cpu(vector_irq, apicd->prev_cpu)[vector] = VECTOR_SHUTDOWN;
369 irq_matrix_free(vector_matrix, apicd->prev_cpu, vector, managed);
424 pr_warn("irq %u: Affinity broken due to vector space exhaustion.\n",
445 * This should not happen. The vector reservation got buggered. Handle
449 pr_err("Managed startup irq %u, no vector available\n",
520 apicd->vector = ISA_IRQ_VECTOR(virq);
525 * If the interrupt is activated, then it must stay at this vector
530 apic_update_irq_cfg(irqd, apicd->vector, apicd->cpu);
532 /* Release the vector */
589 * takes them over. They stay on the same vector. This is
644 seq_printf(m, "%*sVector: %5u\n", ind, "", apicd.vector);
647 seq_printf(m, "%*sPrevious vector: %5u\n", ind, "", apicd.prev_vector);
690 * HPET and I/OAPIC cannot be parented in the vector domain
770 unsigned int i, vector;
772 for_each_set_bit(vector, system_vectors, NR_VECTORS)
773 irq_matrix_assign_system(vector_matrix, vector, false);
807 * Allocate the vector matrix allocator data structure and limit the
819 static struct irq_desc *__setup_vector_irq(int vector)
821 int isairq = vector - ISA_IRQ_VECTOR(0);
835 unsigned int vector;
839 /* Online the vector matrix array for this CPU */
851 for (vector = 0; vector < NR_VECTORS; vector++)
852 this_cpu_write(vector_irq[vector], __setup_vector_irq(vector));
863 /* In case the vector cleanup timer has not expired */
901 __apic_send_IPI(apicd->cpu, apicd->vector);
937 unsigned int vector = apicd->prev_vector;
951 trace_vector_free_moved(apicd->irq, cpu, vector, managed);
952 irq_matrix_free(vector_matrix, cpu, vector, managed);
953 per_cpu(vector_irq, cpu)[vector] = VECTOR_UNUSED;
968 unsigned int vector = apicd->prev_vector;
971 * Paranoia: Check if the vector that needs to be cleaned
973 * hardware issue if the vector arrived on the old target
982 if (check_irr && is_vector_pending(vector)) {
1023 * vector lock.
1027 * would be blocked on vector lock. Rearming it in the
1031 * because that's serialized via vector lock too.
1062 * vector on the old target CPU. A vector check is not required
1063 * because an interrupt can never move from one vector to another
1077 unsigned int vector;
1101 vector = apicd->prev_vector;
1102 if (!vector)
1106 * This is tricky. If the cleanup of the old vector has not been
1115 * the new vector.
1117 * 2) The interrupt has fired on the new vector, but the cleanup IPIs
1126 * the old vector.
1129 * the old vector is cleaned up, we get a spurious interrupt
1137 * old vector is not yet cleaned up when the interrupt fires.
1149 * We print at least the irq number and the old vector number,
1153 pr_warn("IRQ fixup: irq %d move in progress, old vector %d\n",
1154 irqd->irq, vector);