Received: by 2002:ac0:a5a6:0:0:0:0:0 with SMTP id m35-v6csp413907imm; Wed, 19 Sep 2018 00:39:00 -0700 (PDT) X-Google-Smtp-Source: ANB0VdZncKXuvgIWzjjFPi5D69WAH29hYAHtkCFiFt98FuGVMZ19VV5WPz4Z+4RuDNkSsRtpp+rw X-Received: by 2002:a17:902:704c:: with SMTP id h12-v6mr7963418plt.237.1537342740074; Wed, 19 Sep 2018 00:39:00 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1537342740; cv=none; d=google.com; s=arc-20160816; b=zqUt0cCTUGVWcOYevi+wwO4v/dLM8O4IlFjPfJOKlcoHfNRLpJWZkFrXNUEKpHE6hM IkocfnVmKYm93KImz+BeEu4VeAP5S7tnkw1ZGrg65bQx9bafmbtqNizfSLB0teU3p5Hu GuZ/cUvSxPRtqS/bwJIOJwfjGJB8A1vWSTgU+7az3ym8AuES0pwH5Bgteo65VNFOd1sL sHh8YhVlFAZF//T6RAXI6E0LXZNlolH89y2ELxxJe4jl3hf0YnLleODejAunCAowzhBR jaS+BiDC55FjwAteWFFEj5OwJX+NiogSdMNYc07bpW6I9b+M8+VUzINyPTU6i1js/8eF wo6g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from; bh=G6ao1onLV5WV2UxOlq7jLXYIuJYWK7Gpemc26Wqs/qk=; b=kIrzCgTFaQC+vFGgixtKMS0LXVXuqFf3C5l2LM8+eECNP8zrRgbw6b+0yENn+GK1Mw bqPUMYyaIbmR91G/OZysY+yKaTfA4gQCEvw+wzWlU3uIlKgd7jq5/T30HjcdAOvvWyfV p4w3Jue8gu8iMKsXtKmn1yCQ5rAtjhaf93d67FfJfnd77kJfMjnNbHblXAjEFDyeboWl sEw2oxiJ6esa3WFRvJp6iHNQKmRDvyK/xswlrrDuLBRttmqUDxUB0EdEL4ouE1KILng9 1uz1keHlKBWBzG9B23I0HsmQaQCDw/GORUtpg935qtiIKAd/YegwHZeETGaMcdNu3dKA SLaA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id v132-v6si19996006pgb.333.2018.09.19.00.38.44; Wed, 19 Sep 2018 00:39:00 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1731074AbeISNN0 (ORCPT + 99 others); Wed, 19 Sep 2018 09:13:26 -0400 Received: from mga02.intel.com ([134.134.136.20]:42047 "EHLO mga02.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727728AbeISNN0 (ORCPT ); Wed, 19 Sep 2018 09:13:26 -0400 X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga001.fm.intel.com ([10.253.24.23]) by orsmga101.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 19 Sep 2018 00:36:46 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.53,393,1531810800"; d="scan'208";a="91368443" Received: from chenyu-desktop.sh.intel.com ([10.239.160.116]) by fmsmga001.fm.intel.com with ESMTP; 19 Sep 2018 00:36:27 -0700 From: Chen Yu To: Thomas Gleixner , "Rafael J. Wysocki" Cc: x86@kernel.org, linux-kernel@vger.kernel.org, linux-pm@vger.kernel.org, Pavel Machek , Len Brown , Zhimin Gu , Yu Chen Subject: [PATCH 10/12][RFC v3] x86-32, hibernate: Switch to relocated restore code during resume on 32bit system Date: Wed, 19 Sep 2018 15:43:12 +0800 Message-Id: <7a562ef6f77ff83c1fbdc6a2ecc7af387ce1fd71.1537275915.git.yu.c.chen@intel.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: References: Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Zhimin Gu Code should be executed in a safe page during page restoring, as the page where instruction is running during resume might be scribbled and causes issues. Backport the code from 64 bit system to fix this bug. Cc: "Rafael J. Wysocki" Signed-off-by: Zhimin Gu Signed-off-by: Chen Yu --- arch/x86/power/hibernate_32.c | 4 ++++ arch/x86/power/hibernate_asm_32.S | 7 +++++++ 2 files changed, 11 insertions(+) diff --git a/arch/x86/power/hibernate_32.c b/arch/x86/power/hibernate_32.c index a44bdada4e4e..a9861095fbb8 100644 --- a/arch/x86/power/hibernate_32.c +++ b/arch/x86/power/hibernate_32.c @@ -158,6 +158,10 @@ asmlinkage int swsusp_arch_resume(void) temp_pgt = __pa(resume_pg_dir); + error = relocate_restore_code(); + if (error) + return error; + /* We have got enough memory and from now on we cannot recover */ restore_image(); return 0; diff --git a/arch/x86/power/hibernate_asm_32.S b/arch/x86/power/hibernate_asm_32.S index 6b2b94937113..e9adda6b6b02 100644 --- a/arch/x86/power/hibernate_asm_32.S +++ b/arch/x86/power/hibernate_asm_32.S @@ -39,6 +39,13 @@ ENTRY(restore_image) movl restore_cr3, %ebp movl mmu_cr4_features, %ecx + + /* jump to relocated restore code */ + movl relocated_restore_code, %eax + jmpl *%eax + +/* code below has been relocated to a safe page */ +ENTRY(core_restore_code) movl temp_pgt, %eax movl %eax, %cr3 -- 2.17.1