kernel-fxtec-pro1x/arch/x86
Alexander Gordeev ff16432412 x86/apic: Make cpu_mask_to_apicid() operations return error code
Current cpu_mask_to_apicid() and cpu_mask_to_apicid_and()
implementations have few shortcomings:

1. A value returned by cpu_mask_to_apicid() is written to
hardware registers unconditionally. Should BAD_APICID get ever
returned it will be written to a hardware too. But the value of
BAD_APICID is not universal across all hardware in all modes and
might cause unexpected results, i.e. interrupts might get routed
to CPUs that are not configured to receive it.

2. Because the value of BAD_APICID is not universal it is
counter- intuitive to return it for a hardware where it does not
make sense (i.e. x2apic).

3. cpu_mask_to_apicid_and() operation is thought as an
complement to cpu_mask_to_apicid() that only applies a AND mask
on top of a cpumask being passed. Yet, as consequence of 18374d8
commit the two operations are inconsistent in that of:
  cpu_mask_to_apicid() should not get a offline CPU with the cpumask
  cpu_mask_to_apicid_and() should not fail and return BAD_APICID
These limitations are impossible to realize just from looking at
the operations prototypes.

Most of these shortcomings are resolved by returning a error
code instead of BAD_APICID. As the result, faults are reported
back early rather than possibilities to cause a unexpected
behaviour exist (in case of [1]).

The only exception is setup_timer_IRQ0_pin() routine. Although
obviously controversial to this fix, its existing behaviour is
preserved to not break the fragile check_timer() and would
better addressed in a separate fix.

Signed-off-by: Alexander Gordeev <agordeev@redhat.com>
Acked-by: Suresh Siddha <suresh.b.siddha@intel.com>
Cc: Yinghai Lu <yinghai@kernel.org>
Link: http://lkml.kernel.org/r/20120607131559.GF4759@dhcp-26-207.brq.redhat.com
Signed-off-by: Ingo Molnar <mingo@kernel.org>
2012-06-08 11:44:29 +02:00
..
boot x86, efi; Add EFI boot stub console support 2012-06-01 09:11:26 -07:00
configs
crypto crypto: aesni-intel - move more common code to ablk_init_common 2012-05-15 17:25:33 +10:00
ia32 most of set_current_blocked() callers want SIGKILL/SIGSTOP removed from set 2012-06-01 12:58:51 -04:00
include/asm x86/apic: Make cpu_mask_to_apicid() operations return error code 2012-06-08 11:44:29 +02:00
kernel x86/apic: Make cpu_mask_to_apicid() operations return error code 2012-06-08 11:44:29 +02:00
kvm KVM: MMU: fix huge page adapted on non-PAE host 2012-05-28 17:41:15 +03:00
lguest
lib x86: use the new generic strnlen_user() function 2012-05-26 11:33:54 -07:00
math-emu
mm Merge branch 'x86/trampoline' into x86/urgent 2012-05-30 12:11:32 -07:00
net
oprofile
pci Features: 2012-05-24 16:02:08 -07:00
platform x86/apic: Make cpu_mask_to_apicid() operations return error code 2012-06-08 11:44:29 +02:00
power
realmode x86, realmode: Move end signature into header.S 2012-05-21 00:02:45 -07:00
syscalls syscalls, x86: add __NR_kcmp syscall 2012-05-31 17:49:32 -07:00
tools Merge branch 'x86-trampoline-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip 2012-05-29 20:14:53 -07:00
um most of set_current_blocked() callers want SIGKILL/SIGSTOP removed from set 2012-06-01 12:58:51 -04:00
vdso
video x86: Use vga_default_device() when determining whether an fb is primary 2012-04-24 09:50:17 +01:00
xen x86, amd, xen: Avoid NULL pointer paravirt references 2012-05-30 16:15:02 -07:00
.gitignore
Kbuild x86, realmode: realmode.bin infrastructure 2012-05-08 11:41:48 -07:00
Kconfig x86, efi: Add EFI boot stub documentation 2012-06-01 09:11:41 -07:00
Kconfig.cpu
Kconfig.debug
Makefile md updates for 3.5 2012-05-23 17:08:40 -07:00
Makefile.um
Makefile_32.cpu