On Sunday, December 10, 2017 10:58:23 PM CET Andy Lutomirski wrote: > > > On Dec 10, 2017, at 1:38 PM, Pavel Machek <pa...@ucw.cz> wrote: > > > > > > After 4.15-rc2, suspend stopped working on Thinkpad X60. 5b06bbc > > (unintentionally?) reordered stuff with respect to > > fix_processor_context() on 32-bit and 64-bit. We undo that change on > > 32-bit. > > > > Can you explain what was wrong with the reordering? Your patch certainly > *looks* incorrect. > > I'm guessing that the real issue is that 32-bit needs %fs restored early for > TLS.
I *think* you are right. Anyway, that should be easy enough to verify. Pavel, can you please check if the below change works too? --- arch/x86/power/cpu.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) Index: linux-pm/arch/x86/power/cpu.c =================================================================== --- linux-pm.orig/arch/x86/power/cpu.c +++ linux-pm/arch/x86/power/cpu.c @@ -221,6 +221,8 @@ static void notrace __restore_processor_ */ #ifdef CONFIG_X86_32 load_idt(&ctxt->idt); + + loadsegment(fs, ctxt->fs); #else /* CONFIG_X86_64 */ load_idt((const struct desc_ptr *)&ctxt->idt_limit); @@ -243,7 +245,6 @@ static void notrace __restore_processor_ */ #ifdef CONFIG_X86_32 loadsegment(es, ctxt->es); - loadsegment(fs, ctxt->fs); loadsegment(gs, ctxt->gs); loadsegment(ss, ctxt->ss);