diff options
author | Tony Luck <tony.luck@intel.com> | 2012-07-11 13:20:47 -0400 |
---|---|---|
committer | Tony Luck <tony.luck@intel.com> | 2012-07-11 13:20:47 -0400 |
commit | 6751ed65dc6642af64f7b8a440a75563c8aab7ae (patch) | |
tree | 8736d4c2b3aa00c6a4f39d2e6cba4805720c2874 /include/linux/mm.h | |
parent | 6887a4131da3adaab011613776d865f4bcfb5678 (diff) |
x86/mce: Fix siginfo_t->si_addr value for non-recoverable memory faults
In commit dad1743e5993f1 ("x86/mce: Only restart instruction after machine
check recovery if it is safe") we fixed mce_notify_process() to force a
signal to the current process if it was not restartable (RIPV bit not
set in MCG_STATUS). But doing it here means that the process doesn't
get told the virtual address of the fault via siginfo_t->si_addr. This
would prevent application level recovery from the fault.
Make a new MF_MUST_KILL flag bit for memory_failure() et al. to use so
that we will provide the right information with the signal.
Signed-off-by: Tony Luck <tony.luck@intel.com>
Acked-by: Borislav Petkov <borislav.petkov@amd.com>
Cc: stable@kernel.org # 3.4+
Diffstat (limited to 'include/linux/mm.h')
-rw-r--r-- | include/linux/mm.h | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/include/linux/mm.h b/include/linux/mm.h index b36d08ce5c57..f9f279cf5b1b 100644 --- a/include/linux/mm.h +++ b/include/linux/mm.h | |||
@@ -1591,6 +1591,7 @@ void vmemmap_populate_print_last(void); | |||
1591 | enum mf_flags { | 1591 | enum mf_flags { |
1592 | MF_COUNT_INCREASED = 1 << 0, | 1592 | MF_COUNT_INCREASED = 1 << 0, |
1593 | MF_ACTION_REQUIRED = 1 << 1, | 1593 | MF_ACTION_REQUIRED = 1 << 1, |
1594 | MF_MUST_KILL = 1 << 2, | ||
1594 | }; | 1595 | }; |
1595 | extern int memory_failure(unsigned long pfn, int trapno, int flags); | 1596 | extern int memory_failure(unsigned long pfn, int trapno, int flags); |
1596 | extern void memory_failure_queue(unsigned long pfn, int trapno, int flags); | 1597 | extern void memory_failure_queue(unsigned long pfn, int trapno, int flags); |