> 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. > While we are at it, fix a comment. > > Signed-off-by: Pavel Machek <pa...@ucw.cz> > Fixes: 5b06bbcfc2c621da3009da8decb7511500c293ed > > diff --git a/arch/x86/power/cpu.c b/arch/x86/power/cpu.c > index 5191de1..af7b613 100644 > --- a/arch/x86/power/cpu.c > +++ b/arch/x86/power/cpu.c > @@ -216,8 +216,8 @@ static void notrace __restore_processor_state(struct > saved_context *ctxt) > write_cr0(ctxt->cr0); > > /* > - * now restore the descriptor tables to their proper values > - * ltr is done i fix_processor_context(). > + * Now restore the descriptor tables to their proper values > + * ltr is done in fix_processor_context(). > */ > #ifdef CONFIG_X86_32 > load_idt(&ctxt->idt); > @@ -235,13 +235,11 @@ static void notrace __restore_processor_state(struct > saved_context *ctxt) > wrmsrl(MSR_GS_BASE, ctxt->gs_base); > #endif > > - fix_processor_context(); > - > +#ifdef CONFIG_X86_32 > /* > - * Restore segment registers. This happens after restoring the GDT > - * and LDT, which happen in fix_processor_context(). > + * Restore segment registers. > */ > -#ifdef CONFIG_X86_32 > + > loadsegment(es, ctxt->es); > loadsegment(fs, ctxt->fs); > loadsegment(gs, ctxt->gs); > @@ -252,8 +250,17 @@ static void notrace __restore_processor_state(struct > saved_context *ctxt) > */ > if (boot_cpu_has(X86_FEATURE_SEP)) > enable_sep_cpu(); > + > + fix_processor_context(); > #else > /* CONFIG_X86_64 */ > + /* > + * Restore segment registers. This happens after restoring the GDT > + * and LDT, which happen in fix_processor_context(). > + */ > + > + fix_processor_context(); > + > asm volatile ("movw %0, %%ds" :: "r" (ctxt->ds)); > asm volatile ("movw %0, %%es" :: "r" (ctxt->es)); > asm volatile ("movw %0, %%fs" :: "r" (ctxt->fs)); > > > -- > (english) http://www.livejournal.com/~pavelmachek > (cesky, pictures) > http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html