[PATCH RFC 0/2] x86/apic: Avoid cm->allocated going negative in irq_matrix
From: Vitaly Kuznetsov
Date: Fri Feb 19 2021 - 06:32:52 EST
I discovered that CPU0 offlining/onlining works only once:
# echo 0 > /sys/devices/system/cpu/cpu0/online
# echo 1 > /sys/devices/system/cpu/cpu0/online
# echo 0 > /sys/devices/system/cpu/cpu0/online
-bash: echo: write error: No space left on device
with the following in dmesg:
[ ... ] CPU 0 has 4294967295 vectors, 589 available. Cannot disable CPU
And the problem seems to be that irq_matrix_assign()/irq_matrix_free() calls
for PIC_CASCADE_IR are unbalanced, making cm->allocated go negative.
RFC as I didn't quite get why we're making an exception for PIC_CASCADE_IR in
the first place. Surely it is special, but for the sake of consistency we'd
better not treat it as such. Or maybe I just misunderstood everythin.
Vitaly Kuznetsov (2):
x86/apic: Do not make an exception for PIC_CASCADE_IR when marking
legacy irqs in irq_matrix
genirq/matrix: WARN_ON_ONCE() when cm->allocated/m->total_allocated go
negative
arch/x86/kernel/apic/vector.c | 3 +--
kernel/irq/matrix.c | 11 +++++++++--
2 files changed, 10 insertions(+), 4 deletions(-)
--
2.29.2