From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752479AbdLKOXW (ORCPT ); Mon, 11 Dec 2017 09:23:22 -0500 Received: from cloudserver094114.home.net.pl ([79.96.170.134]:57563 "EHLO cloudserver094114.home.net.pl" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751543AbdLKOXU (ORCPT ); Mon, 11 Dec 2017 09:23:20 -0500 From: "Rafael J. Wysocki" To: Pavel Machek , Andrew Lutomirski Cc: Andy Lutomirski , Linus Torvalds , Zhang Rui , Thomas Gleixner , Jarkko Nikula , Linux Kernel Mailing List , the arch/x86 maintainers Subject: Re: [PATCH] Fix resume on x86-32 machines Date: Mon, 11 Dec 2017 15:22:39 +0100 Message-ID: <151331264.Sjvx2oHGGq@aspire.rjw.lan> In-Reply-To: <76028A95-1CE1-49AA-9929-9C15FFC520EB@amacapital.net> References: <2809506.pL8kVbvXcY@aspire.rjw.lan> <20171210213804.GA4660@amd> <76028A95-1CE1-49AA-9929-9C15FFC520EB@amacapital.net> MIME-Version: 1.0 Content-Transfer-Encoding: 7Bit Content-Type: text/plain; charset="us-ascii" Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Sunday, December 10, 2017 10:58:23 PM CET Andy Lutomirski wrote: > > > On Dec 10, 2017, at 1:38 PM, Pavel Machek 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);