mirror of
https://github.com/torvalds/linux.git
synced 2026-05-28 00:53:34 +02:00
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.
-----BEGIN PGP SIGNATURE-----
iQJEBAABCgAuFiEEQp8+kY+LLUocC4bMphj1TA10mKEFAmnbt64QHHRnbHhAa2Vy
bmVsLm9yZwAKCRCmGPVMDXSYoY/xD/9hdmaaSXX/JySPatJPgkAhekR8cl/brK9t
K6qhMltg/XoUhmU1y0XSfuNDJwEOa4qvW2DbwfnzknIDr0AXvL39S9oNn+1o9I0x
BjIbWwHTAsuLVyjQesqPWwyQtZ8HJCIM+3Ju2rUYz4jYuY8q15GYsbh6QN0pYDNG
F54/OpuNV42/UhX/O01Gxw930GMGnsMkV6ou9dquap23U4FdlIsoY+zU/b09VEU2
MmJZPGwryPpzhSLbCdOGuWA9oM6wd/FoBFYYU31W5OSXm4B0cRs+weE31WMogYKM
lqudBuyNAhCIuZ06sdSvBPRswdvkuTUJovrJwG2r+rV6h953ExujNn+/ZxqraPg7
iPK70Kwp/O2uyMFhHp/6r1u4bylK/AL7q6hace4cZFLqB/Htx5BW+hh/H7Cz6Yan
H3cyBz9XIE7K5BI3lotKnlWVFwkrHgwYXUzHHrMq/UPdQKog1IPh/E29JekqtR+p
RS9QzSF+Gs45I7oMP+7P8o5jAZYuuW+cODnXLlQkuz/bJff3QeftFhOKZkzbFk5x
AFT0DREttxVCGcUCQaQYrWhFshp63+eDXgKGQT1YULleFUC1f9KH2W+6KlqjDwFR
rvrUgmpMxkH2JJz1owct6vJ6wyffFNQtPeCTmq+7GM87HNm6Ji6AaRzQjRnhVGCt
mh9VbBTnFw==
=FvJG
-----END PGP SIGNATURE-----
Merge tag 'irq-core-2026-04-12' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
Pull core irq updates from Thomas Gleixner:
- 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
* tag 'irq-core-2026-04-12' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
Drivers: hv: Move add_interrupt_randomness() to hypervisor callback sysvec
genirq/chip: Invoke add_interrupt_randomness() in handle_percpu_devid_irq()
genirq/affinity: Remove cpus_read_lock() while reading cpu_possible_mask
genirq/matrix, LoongArch: Delete IRQ_MATRIX_BITS leftovers
genirq: Document interaction between <linux/irq.h> and DT binding defines
This commit is contained in:
commit
db23954eea
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user