[GIT pull] irq/core for v7.1-rc1

Thomas Gleixner posted 1 patch 2 months, 1 week ago
arch/loongarch/include/asm/irq.h | 1 -
arch/x86/kernel/cpu/mshyperv.c   | 2 ++
drivers/hv/mshv_synic.c          | 3 ---
drivers/hv/vmbus_drv.c           | 3 ---
include/linux/irq.h              | 4 ++++
kernel/irq/affinity.c            | 7 ++-----
kernel/irq/chip.c                | 3 +++
kernel/irq/matrix.c              | 2 +-
8 files changed, 12 insertions(+), 13 deletions(-)
[GIT pull] irq/core for v7.1-rc1
Posted by Thomas Gleixner 2 months, 1 week ago
Linus,

please pull the latest irq/core branch from:

   git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git irq-core-2026-04-12

up to:  e8be82c2d77e: Drivers: hv: Move add_interrupt_randomness() to hypervisor callback sysvec

Update for the core interrupt subsystem:

   - Invoke add_interrupt_randomness() in handle_percpu_devid_irq() and
     cleanup the workaround in the Hyper-V driver, which would now invoke
     it twice on ARM64. Removing it from the driver requires to add it to
     the x86 system vector entry point.

   - Remove the pointles cpu_read_lock() around reading CPU possible mask,
     which is read only after init.

   - Add documentation for the interaction between device tree bindings and
     the interrupt type defines in irq.h.

   - Delete stale defines in the matrix allocator and the equivalent in
     loongarch.

Thanks,

	tglx

------------------>
Geert Uytterhoeven (1):
      genirq: Document interaction between <linux/irq.h> and DT binding defines

Michael Kelley (2):
      genirq/chip: Invoke add_interrupt_randomness() in handle_percpu_devid_irq()
      Drivers: hv: Move add_interrupt_randomness() to hypervisor callback sysvec

Nam Cao (1):
      genirq/matrix, LoongArch: Delete IRQ_MATRIX_BITS leftovers

Sebastian Andrzej Siewior (1):
      genirq/affinity: Remove cpus_read_lock() while reading cpu_possible_mask


 arch/loongarch/include/asm/irq.h | 1 -
 arch/x86/kernel/cpu/mshyperv.c   | 2 ++
 drivers/hv/mshv_synic.c          | 3 ---
 drivers/hv/vmbus_drv.c           | 3 ---
 include/linux/irq.h              | 4 ++++
 kernel/irq/affinity.c            | 7 ++-----
 kernel/irq/chip.c                | 3 +++
 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
Re: [GIT pull] irq/core for v7.1-rc1
Posted by pr-tracker-bot@kernel.org 2 months ago
The pull request you sent on Sun, 12 Apr 2026 19:46:05 +0200:

> git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git irq-core-2026-04-12

has been merged into torvalds/linux.git:
https://git.kernel.org/torvalds/c/db23954eeaf23464669043ddbb38a64f7b301ebd

Thank you!

-- 
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/prtracker.html