Fix "irq -a" option on Linux 6.0 and later

Kernel commit f0dd891dd5a1d ("lib/cpumask: move some one-line wrappers
to header file"), which is contained in Linux 6.0 and later kernels,
inlined alloc_cpumask_var() function.  As a result, the "irq -a" option
fails to determine that cpumask_var_t is a pointer, and displays wrong
CPU affinity for IRQs:

  crash> irq -a
  IRQ NAME                 AFFINITY
    1 i8042                3
    4 ttyS0
    8 rtc0
    9 acpi                 3
   12 i8042                3
  ...

Use alloc_cpumask_var_node() function symbol instead to fix it.

Signed-off-by: Kazuhito Hagio <k-hagio-ab@nec.com>
This commit is contained in:
Kazuhito Hagio 2023-07-10 10:42:08 +09:00
parent 4ee5610588
commit 6d0be1316a
1 changed files with 2 additions and 1 deletions

View File

@ -7298,7 +7298,8 @@ generic_get_irq_affinity(int irq)
tmp_addr = irq_desc_addr + \
OFFSET(irq_desc_t_affinity);
if (symbol_exists("alloc_cpumask_var")) /* pointer member */
if (symbol_exists("alloc_cpumask_var_node") ||
symbol_exists("alloc_cpumask_var")) /* pointer member */
readmem(tmp_addr,KVADDR, &affinity_ptr, sizeof(ulong),
"irq_desc affinity", FAULT_ON_ERROR);
else /* array member */