diff options
| -rw-r--r-- | arch/loongarch/include/asm/irq.h | 1 | ||||
| -rw-r--r-- | arch/x86/kernel/cpu/mshyperv.c | 2 | ||||
| -rw-r--r-- | drivers/hv/mshv_synic.c | 3 | ||||
| -rw-r--r-- | drivers/hv/vmbus_drv.c | 3 | ||||
| -rw-r--r-- | include/linux/irq.h | 4 | ||||
| -rw-r--r-- | kernel/irq/affinity.c | 7 | ||||
| -rw-r--r-- | kernel/irq/chip.c | 3 | ||||
| -rw-r--r-- | kernel/irq/matrix.c | 2 |
8 files changed, 12 insertions, 13 deletions
diff --git a/arch/loongarch/include/asm/irq.h b/arch/loongarch/include/asm/irq.h index 3943647503a9..537add26daf4 100644 --- a/arch/loongarch/include/asm/irq.h +++ b/arch/loongarch/include/asm/irq.h @@ -48,7 +48,6 @@ void spurious_interrupt(void); */ #define NR_VECTORS 256 #define NR_LEGACY_VECTORS 16 -#define IRQ_MATRIX_BITS NR_VECTORS #define AVEC_IRQ_SHIFT 4 #define AVEC_IRQ_BIT 8 diff --git a/arch/x86/kernel/cpu/mshyperv.c b/arch/x86/kernel/cpu/mshyperv.c index 9befdc557d9e..a7dfc29d3470 100644 --- a/arch/x86/kernel/cpu/mshyperv.c +++ b/arch/x86/kernel/cpu/mshyperv.c @@ -161,6 +161,8 @@ DEFINE_IDTENTRY_SYSVEC(sysvec_hyperv_callback) if (vmbus_handler) vmbus_handler(); + add_interrupt_randomness(HYPERVISOR_CALLBACK_VECTOR); + if (ms_hyperv.hints & HV_DEPRECATING_AEOI_RECOMMENDED) apic_eoi(); diff --git a/drivers/hv/mshv_synic.c b/drivers/hv/mshv_synic.c index 43f1bcbbf2d3..e2288a726fec 100644 --- a/drivers/hv/mshv_synic.c +++ b/drivers/hv/mshv_synic.c @@ -12,7 +12,6 @@ #include <linux/mm.h> #include <linux/interrupt.h> #include <linux/io.h> -#include <linux/random.h> #include <linux/cpuhotplug.h> #include <linux/reboot.h> #include <asm/mshyperv.h> @@ -445,8 +444,6 @@ void mshv_isr(void) mb(); if (msg->header.message_flags.msg_pending) hv_set_non_nested_msr(HV_MSR_EOM, 0); - - add_interrupt_randomness(mshv_sint_vector); } else { pr_warn_once("%s: unknown message type 0x%x\n", __func__, msg->header.message_type); diff --git a/drivers/hv/vmbus_drv.c b/drivers/hv/vmbus_drv.c index bc4fc1951ae1..e7ac79e2fb49 100644 --- a/drivers/hv/vmbus_drv.c +++ b/drivers/hv/vmbus_drv.c @@ -32,7 +32,6 @@ #include <linux/ptrace.h> #include <linux/sysfb.h> #include <linux/efi.h> -#include <linux/random.h> #include <linux/kernel.h> #include <linux/syscore_ops.h> #include <linux/dma-map-ops.h> @@ -1361,8 +1360,6 @@ static void __vmbus_isr(void) vmbus_message_sched(hv_cpu, hv_cpu->hyp_synic_message_page); vmbus_message_sched(hv_cpu, hv_cpu->para_synic_message_page); - - add_interrupt_randomness(vmbus_interrupt); } static DEFINE_PER_CPU(bool, vmbus_irq_pending); diff --git a/include/linux/irq.h b/include/linux/irq.h index 951acbdb9f84..efa514ee562f 100644 --- a/include/linux/irq.h +++ b/include/linux/irq.h @@ -35,6 +35,10 @@ enum irqchip_irq_state; * * Bits 0-7 are the same as the IRQF_* bits in linux/interrupt.h * + * Note that the first 6 definitions are shadowed by C preprocessor definitions + * in include/dt-bindings/interrupt-controller/irq.h. This is not an issue, as + * the actual values must be the same, due to being part of the stable DT ABI. + * * IRQ_TYPE_NONE - default, unspecified type * IRQ_TYPE_EDGE_RISING - rising edge triggered * IRQ_TYPE_EDGE_FALLING - falling edge triggered diff --git a/kernel/irq/affinity.c b/kernel/irq/affinity.c index 85c45cfe7223..78f2418a8925 100644 --- a/kernel/irq/affinity.c +++ b/kernel/irq/affinity.c @@ -115,13 +115,10 @@ unsigned int irq_calc_affinity_vectors(unsigned int minvec, unsigned int maxvec, if (resv > minvec) return 0; - if (affd->calc_sets) { + if (affd->calc_sets) set_vecs = maxvec - resv; - } else { - cpus_read_lock(); + else set_vecs = cpumask_weight(cpu_possible_mask); - cpus_read_unlock(); - } return resv + min(set_vecs, maxvec - resv); } diff --git a/kernel/irq/chip.c b/kernel/irq/chip.c index 6147a07d0127..6c9b1dc4e7d4 100644 --- a/kernel/irq/chip.c +++ b/kernel/irq/chip.c @@ -14,6 +14,7 @@ #include <linux/interrupt.h> #include <linux/kernel_stat.h> #include <linux/irqdomain.h> +#include <linux/random.h> #include <trace/events/irq.h> @@ -929,6 +930,8 @@ void handle_percpu_devid_irq(struct irq_desc *desc) enabled ? " and unmasked" : "", irq, cpu); } + add_interrupt_randomness(irq); + if (chip->irq_eoi) chip->irq_eoi(&desc->irq_data); } diff --git a/kernel/irq/matrix.c b/kernel/irq/matrix.c index 0f79a4abea05..faafb43a4e61 100644 --- a/kernel/irq/matrix.c +++ b/kernel/irq/matrix.c @@ -39,7 +39,7 @@ struct irq_matrix { /** * irq_alloc_matrix - Allocate a irq_matrix structure and initialize it - * @matrix_bits: Number of matrix bits must be <= IRQ_MATRIX_BITS + * @matrix_bits: Number of matrix bits * @alloc_start: From which bit the allocation search starts * @alloc_end: At which bit the allocation search ends, i.e first * invalid bit |
