android_kernel_xiaomi_sm8350/arch/x86/kernel/apic
Suresh Siddha 18374d89e5 x86, irq: Allow 0xff for /proc/irq/[n]/smp_affinity on an 8-cpu system
John Blackwood reported:
> on an older Dell PowerEdge 6650 system with 8 cpus (4 are hyper-threaded),
> and  32 bit (x86) kernel, once you change the irq smp_affinity of an irq
> to be less than all cpus in the system, you can never change really the
> irq smp_affinity back to be all cpus in the system (0xff) again,
> even though no error status is returned on the "/bin/echo ff >
> /proc/irq/[n]/smp_affinity" operation.
>
> This is due to that fact that BAD_APICID has the same value as
> all cpus (0xff) on 32bit kernels, and thus the value returned from
> set_desc_affinity() via the cpu_mask_to_apicid_and() function is treated
> as a failure in set_ioapic_affinity_irq_desc(), and no affinity changes
> are made.

set_desc_affinity() is already checking if the incoming cpu mask
intersects with the cpu online mask or not. So there is no need
for the apic op cpu_mask_to_apicid_and() to check again
and return BAD_APICID.

Remove the BAD_APICID return value from cpu_mask_to_apicid_and()
and also fix set_desc_affinity() to return -1 instead of using BAD_APICID
to represent error conditions (as cpu_mask_to_apicid_and() can return
logical or physical apicid values and BAD_APICID is really to represent
bad physical apic id).

Reported-by: John Blackwood <john.blackwood@ccur.com>
Root-caused-by: John Blackwood <john.blackwood@ccur.com>
Signed-off-by: Suresh Siddha <suresh.b.siddha@intel.com>
LKML-Reference: <1261103386.2535.409.camel@sbs-t61>
Signed-off-by: H. Peter Anvin <hpa@zytor.com>
2009-12-17 22:03:06 -08:00
..
apic_flat_64.c x86, irq: Allow 0xff for /proc/irq/[n]/smp_affinity on an 8-cpu system 2009-12-17 22:03:06 -08:00
apic_noop.c x86: Fix bogus warning in apic_noop.apic_write() 2009-12-07 13:16:37 +01:00
apic.c x86: Remove enabling x2apic message for every CPU 2009-12-11 14:32:31 -08:00
bigsmp_32.c x86, irq: Allow 0xff for /proc/irq/[n]/smp_affinity on an 8-cpu system 2009-12-17 22:03:06 -08:00
es7000_32.c x86: es7000_32.c: Use pr_<level> and add pr_fmt(fmt) 2009-12-10 08:57:49 +01:00
io_apic.c x86, irq: Allow 0xff for /proc/irq/[n]/smp_affinity on an 8-cpu system 2009-12-17 22:03:06 -08:00
ipi.c Merge commit 'v2.6.31-rc7' into x86/cleanups 2009-08-24 12:25:54 +02:00
Makefile x86, apic: Introduce the NOOP apic driver 2009-10-14 09:17:00 +02:00
nmi.c cpumask: Avoid cpumask_t in arch/x86/kernel/apic/nmi.c 2009-11-04 13:17:53 +01:00
numaq_32.c Merge branch 'x86-mm-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip 2009-12-08 13:27:33 -08:00
probe_32.c x86: apic: Do not use stacked physid_mask_t 2009-11-10 05:52:07 +01:00
probe_64.c x86, apic: Use logical flat on intel with <= 8 logical cpus 2009-09-19 09:20:05 +02:00
summit_32.c x86: apic: Do not use stacked physid_mask_t 2009-11-10 05:52:07 +01:00
x2apic_cluster.c x86, irq: Allow 0xff for /proc/irq/[n]/smp_affinity on an 8-cpu system 2009-12-17 22:03:06 -08:00
x2apic_phys.c x86, irq: Allow 0xff for /proc/irq/[n]/smp_affinity on an 8-cpu system 2009-12-17 22:03:06 -08:00
x2apic_uv_x.c x86, irq: Allow 0xff for /proc/irq/[n]/smp_affinity on an 8-cpu system 2009-12-17 22:03:06 -08:00