--- zzzz-none-000/linux-4.1.52/arch/arm64/kernel/irq.c 2018-05-28 02:26:45.000000000 +0000 +++ bcm63-7530ax-731/linux-4.1.52/arch/arm64/kernel/irq.c 2022-03-02 11:37:12.000000000 +0000 @@ -28,6 +28,9 @@ #include #include #include +#if defined CONFIG_BCM_KF_CPU_AFFINITY_HINT && defined CONFIG_HOTPLUG_CPU +#include +#endif unsigned long irq_err_count; @@ -55,6 +58,9 @@ irqchip_init(); if (!handle_arch_irq) panic("No interrupt controller found."); +#if defined CONFIG_BCM_KF_CPU_AFFINITY_HINT && defined CONFIG_HOTPLUG_CPU + hotcpu_notifier(bcm63xx_rehint_irqaffinity, 0); +#endif } #ifdef CONFIG_HOTPLUG_CPU @@ -73,6 +79,13 @@ return false; if (cpumask_any_and(affinity, cpu_online_mask) >= nr_cpu_ids) { +#if defined CONFIG_BCM_KF_CPU_AFFINITY_HINT + // affine cpu is offline; any hinted cpu online? + if (desc->affinity_hint && + cpumask_any_and(desc->affinity_hint, cpu_online_mask) < nr_cpu_ids) + affinity = desc->affinity_hint; + else +#endif affinity = cpu_online_mask; ret = true; }