Re: [patch V4 part 1 29/36] x86/mce: Send #MC singal from task work

From: Thomas Gleixner
Date: Thu May 14 2020 - 13:39:06 EST


Mathieu Desnoyers <mathieu.desnoyers@xxxxxxxxxxxx> writes:
> ----- On May 5, 2020, at 9:16 AM, Thomas Gleixner tglx@xxxxxxxxxxxxx wrote:
>
>> From: Peter Zijlstra <peterz@xxxxxxxxxxxxx>
>>
>
> Patch title: singal -> signal.
>
>> Convert #MC over to using task_work_add(); it will run the same code
>> slightly later, on the return to user path of the same exception.
>
> So I suspect that switching the order between tracehook_notify_resume()
> (which ends up calling task_work_run()) and do_signal() done by an
> earlier patch in this series intends to ensure the information about the
> instruction pointer causing the #MC is not overwritten by do_signal()
> (but I'm just guessing).

No, it does not. See the ordering discussion.

Aside of that signal never transported any address information. It uses
force_sig(SIGBUS).

Even if a different signal would be sent first then the register frame
of the #MC is still there when the fatal signal is sent later.

But even w/o changing the ordering the taskwork check in do_signal()
runs the pending work before delivering anything.

Thanks,

tglx