OpenCloudOS-Kernel/arch/x86/kernel/cpu
Andy Lutomirski 9592747538 x86, traps: Track entry into and exit from IST context
We currently pretend that IST context is like standard exception
context, but this is incorrect.  IST entries from userspace are like
standard exceptions except that they use per-cpu stacks, so they are
atomic.  IST entries from kernel space are like NMIs from RCU's
perspective -- they are not quiescent states even if they
interrupted the kernel during a quiescent state.

Add and use ist_enter and ist_exit to track IST context.  Even
though x86_32 has no IST stacks, we track these interrupts the same
way.

This fixes two issues:

 - Scheduling from an IST interrupt handler will now warn.  It would
   previously appear to work as long as we got lucky and nothing
   overwrote the stack frame.  (I don't know of any bugs in this
   that would trigger the warning, but it's good to be on the safe
   side.)

 - RCU handling in IST context was dangerous.  As far as I know,
   only machine checks were likely to trigger this, but it's good to
   be on the safe side.

Note that the machine check handlers appears to have been missing
any context tracking at all before this patch.

Cc: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
Cc: Josh Triplett <josh@joshtriplett.org>
Cc: Frédéric Weisbecker <fweisbec@gmail.com>
Signed-off-by: Andy Lutomirski <luto@amacapital.net>
2015-01-02 10:22:46 -08:00
..
mcheck x86, traps: Track entry into and exit from IST context 2015-01-02 10:22:46 -08:00
microcode x86/microcode/intel: Fish out the stashed microcode for the BSP 2014-12-10 11:36:28 +01:00
mtrr x86: Add more disabled features 2014-09-11 14:30:17 -07:00
.gitignore
Makefile perf/x86: Fix compile warnings for intel_uncore 2014-10-28 10:51:03 +01:00
amd.c x86, CPU, AMD: Move K8 TLB flush filter workaround to K8 code 2014-11-11 17:58:20 +01:00
bugs.c x86: Get rid of ->hard_math and all the FPU asm fu 2013-06-06 14:32:04 -07:00
bugs_64.c
centaur.c x86: Remove CONFIG_X86_OOSTORE 2014-03-11 10:16:18 -07:00
common.c Merge branch 'x86-vdso-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip 2014-12-10 14:24:20 -08:00
cpu.h x86/cpu: Track legacy CPU model data only on 32-bit kernels 2013-10-26 13:34:39 +02:00
cyrix.c x86: Delete non-required instances of include <linux/init.h> 2014-01-06 21:25:18 -08:00
hypervisor.c x86: Correctly detect hypervisor 2013-08-05 06:35:33 -07:00
intel.c x86: Don't enable F00F workaround on Intel Quark processors 2014-10-29 08:52:09 +01:00
intel_cacheinfo.c arch/x86: replace strict_strto calls 2014-08-08 15:57:28 -07:00
match.c x86: align x86 arch with generic CPU modalias handling 2014-02-18 12:45:38 -08:00
mkcapflags.sh x86/cpufeature: Add bug flags to /proc/cpuinfo 2014-07-14 12:21:39 -07:00
mshyperv.c x86, irq, pic: Probe for legacy PIC and set legacy_pic appropriately 2014-04-14 11:49:55 -07:00
perf_event.c perf/x86/intel: Revert incomplete and undocumented Broadwell client support 2014-10-29 11:07:58 +01:00
perf_event.h perf/x86: Add INTEL_FLAGS_UEVENT_CONSTRAINT 2014-11-16 11:41:54 +01:00
perf_event_amd.c x86: Replace __get_cpu_var uses 2014-08-26 13:45:49 -04:00
perf_event_amd_ibs.c perf/x86/amd/ibs: Update IBS MSRs and feature definitions 2014-11-12 15:12:32 +01:00
perf_event_amd_iommu.c cpumask: factor out show_cpumap into separate helper function 2014-11-07 11:45:00 -08:00
perf_event_amd_iommu.h perf/x86/amd: AMD IOMMU Performance Counter PERF uncore PMU implementation 2013-06-19 13:04:53 +02:00
perf_event_amd_uncore.c cpumask: factor out show_cpumap into separate helper function 2014-11-07 11:45:00 -08:00
perf_event_intel.c perf/x86/intel: Revert incomplete and undocumented Broadwell client support 2014-10-29 11:07:58 +01:00
perf_event_intel_ds.c Merge branch 'x86-mpx-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip 2014-12-10 09:34:43 -08:00
perf_event_intel_lbr.c x86: Remove arbitrary instruction size limit in instruction decoder 2014-11-18 00:58:52 +01:00
perf_event_intel_rapl.c cpumask: factor out show_cpumap into separate helper function 2014-11-07 11:45:00 -08:00
perf_event_intel_uncore.c Merge branch 'perf-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip 2014-12-19 13:15:24 -08:00
perf_event_intel_uncore.h perf/x86/intel/uncore: Add Haswell-EP uncore support 2014-09-24 14:48:21 +02:00
perf_event_intel_uncore_nhmex.c perf/x86/uncore: Fix coccinelle warnings 2014-08-13 07:51:09 +02:00
perf_event_intel_uncore_snb.c perf/x86/intel/uncore: Update support for client uncore IMC PMU 2014-09-24 14:48:25 +02:00
perf_event_intel_uncore_snbep.c perf/x86/intel/uncore: Add scaling units to the EP iMC events 2014-11-16 11:41:52 +01:00
perf_event_knc.c x86: Replace __get_cpu_var uses 2014-08-26 13:45:49 -04:00
perf_event_p4.c x86: Replace __get_cpu_var uses 2014-08-26 13:45:49 -04:00
perf_event_p6.c perf/x86/intel/p6: Add userspace RDPMC quirk for PPro 2014-02-09 13:08:24 +01:00
perfctr-watchdog.c perf/x86: Add support for Intel Xeon-Phi Knights Corner PMU 2012-10-04 13:32:37 +02:00
powerflags.c update AMD powerflags comments 2013-05-28 12:02:10 +02:00
proc.c x86: Replace seq_printf() with seq_puts() 2014-12-08 11:48:15 +01:00
rdrand.c x86, rdrand: When nordrand is specified, disable RDSEED as well 2014-05-11 20:25:20 -07:00
scattered.c x86: Add support for Intel HWP feature detection. 2014-11-12 00:04:37 +01:00
topology.c x86: delete __cpuinit usage from all x86 files 2013-07-14 19:36:56 -04:00
transmeta.c x86: Delete non-required instances of include <linux/init.h> 2014-01-06 21:25:18 -08:00
umc.c x86: Delete non-required instances of include <linux/init.h> 2014-01-06 21:25:18 -08:00
vmware.c x86: Correctly detect hypervisor 2013-08-05 06:35:33 -07:00