Gilles Chanteperdrix wrote: > Gilles Chanteperdrix wrote: >> Jan Kiszka wrote: >>> If we enter __ipipe_handle_exception over a non-root domain and leave it >>> due to migration in the event handler over root, we must not restore the >>> root domain state so far saved on entry. This caused subtle pipeline >>> state corruptions. Actually, we only need to save the state if we enter >>> over the root domain and have to align its state to the hardware >>> interrupt mask. >>> >>> Moreover, the x86-32 regs.eflags fix-up must happen based on the current >>> root domain state to avoid more spurious corruptions. >>> >>> Signed-off-by: Jan Kiszka <[email protected]> >>> --- >>> >>> This patch is so far running fine on the x86-64 boxes of our colleagues >>> @Healthcare. It currently makes most sense to me, also for (untested) >>> x86-32, but maybe I'm still missing a problematic scenario. >>> >>> arch/x86/kernel/ipipe.c | 64 >>> ++++++++++++++++++++++++++-------------------- >>> 1 files changed, 36 insertions(+), 28 deletions(-) >>> >>> diff --git a/arch/x86/kernel/ipipe.c b/arch/x86/kernel/ipipe.c >>> index 4442d96..8253993 100644 >>> --- a/arch/x86/kernel/ipipe.c >>> +++ b/arch/x86/kernel/ipipe.c >>> @@ -702,19 +702,17 @@ static int __ipipe_xlate_signo[] = { >>> >>> int __ipipe_handle_exception(struct pt_regs *regs, long error_code, int >>> vector) >>> { >>> - unsigned long flags; >>> - >>> - /* Pick up the root domain state of the interrupted context. */ >>> - local_save_flags(flags); >>> + bool restore_flags = false; >>> + unsigned long flags = 0; >>> >>> - if (ipipe_root_domain_p) { >>> + if (ipipe_root_domain_p && irqs_disabled_hw()) { >> I really do not understand this hunk. It differs a lot from the current >> situation. In the current situation __fixup_if really does something, >> even if irqs were not masked on entry. >> > > Ok, but on x86_64, you have: > + bool restore_flags = false; > + if (ipipe_root_domain_p && irqs_disabled_hw()) { > + restore_flags = true; > } > + if (restore_flags) > + local_irq_restore_nosync(flags); > > Which I do not understand. local_irq_restore_nosync still has an effect > even if irqs were not disabled on entry. >
Right, but is there any scenario remaining where we need this effect? Jan
signature.asc
Description: OpenPGP digital signature
_______________________________________________ Adeos-main mailing list [email protected] https://mail.gna.org/listinfo/adeos-main
