From patchwork Thu Jan 12 14:31:42 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peter Zijlstra X-Patchwork-Id: 42480 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:4e01:0:0:0:0:0 with SMTP id p1csp3924498wrt; Thu, 12 Jan 2023 06:55:22 -0800 (PST) X-Google-Smtp-Source: AMrXdXvJLoZsXzyh+Rhp6l2CjpKR2lP71TkZV3ZjZ3QxcsiAwhyRcA3fAKJs/kQliEu9AkrTjP7A X-Received: by 2002:a17:907:d48a:b0:7c0:971e:f6c5 with SMTP id vj10-20020a170907d48a00b007c0971ef6c5mr69648925ejc.14.1673535321793; Thu, 12 Jan 2023 06:55:21 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1673535321; cv=none; d=google.com; s=arc-20160816; b=tF1mfN+zdoBhW17DI0MDnJkFirKhSNGtANCalWf4dUazvf3YBaJ8GbL4hAUPMrlwx/ 6MHrLg3kGB2KLwVlmSgM3idEWUtiTwd5ObNK7H+Pbjfn8XEvjyi0J1/1DPYiorCJkyGU aa7H3i1sDTCs0X7/O7vZYBZxtHhptVx+V7SWqf1qleeej3FvtRUAq6wjmhKT92LCrZt0 aRP4WTIeLg73BblbClLQ5YMIFSw2o6b4xsF6HcJD6ehHOhXlzIsFyRfRyWH9pvFJIPMb wTZ6/rxsSFgkRBOO95RIswS5aIGrt9qLI8CrdDxm20ptMoJoI6JHjmuuPQAm6aj9fRpT beKQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:mime-version:references:subject:cc:to:from:date :user-agent:message-id:dkim-signature; bh=sHDPsq2uABjtfq0P5gTU9bTPKMFTr0x7rU8OwfasSIg=; b=GCTbiWTq3RU0m6k1carviHiw4hwbIHFg2BjwgwSeNUDYY+gu4yYJnYOE5DZ0uHvFIv swzvw61Wli6Z71TfK+znlyck/OBddr7OhUQRWctnbAuEwzjTITXIAs/bNc75rbfzM8y/ mJFRtxH8r5L0tX7PVxs8GXp7C+HpqW1JpSpDQok2e1Nhw4DMEwRltGcBmanXoLof+PUe lM48vKxsgt+GK66GXJyMpVFAw2buqq+AW2UfhBoQ/9nd3IOXBumWlPuy9omukKbKyuXz KysbsFrnCKxxeVTOWdhj4Gll4QR/8JzUXPpl2Xa8KDSVN/oE0weCy0UMR6w69FXwK9cm BZCw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@infradead.org header.s=desiato.20200630 header.b=LI9y8vBQ; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id eo11-20020a056402530b00b00499a62e85afsi12212007edb.74.2023.01.12.06.54.58; Thu, 12 Jan 2023 06:55:21 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@infradead.org header.s=desiato.20200630 header.b=LI9y8vBQ; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S239941AbjALOxt (ORCPT + 99 others); Thu, 12 Jan 2023 09:53:49 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:43484 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240098AbjALOw5 (ORCPT ); Thu, 12 Jan 2023 09:52:57 -0500 Received: from desiato.infradead.org (desiato.infradead.org [IPv6:2001:8b0:10b:1:d65d:64ff:fe57:4e05]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 6A041B4B7 for ; Thu, 12 Jan 2023 06:39:37 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=desiato.20200630; h=Content-Type:MIME-Version:References: Subject:Cc:To:From:Date:Message-ID:Sender:Reply-To:Content-Transfer-Encoding: Content-ID:Content-Description:In-Reply-To; bh=sHDPsq2uABjtfq0P5gTU9bTPKMFTr0x7rU8OwfasSIg=; b=LI9y8vBQdis0SSWa52KOS2vrQI DwEgo+snsApY9aPqeiehYRoGQAQPCfcXdVF/jnQvKmoDaZgOMjKpFPoGTQGrbyME7YpvvPqVAN8Au xhJ4YL/E4PAO+PAZBX22U4wBu1/QoMzS7R97C0oTdBAOCx8hnEzZ/GJ8x43Z2EedpvXr/NLaJ1WcW Xn4115CcVMUdvp59cZr83pNUcEW6riGQbkak/hhi3nIgdfg9mi2Jm6QWhhq8mm98rpvZdtPfTsVha Tn3o9kjumy/5q3a/JwjaPtKaLtr7A4nKrKiZq5C++dGVHnqAjuh5olHmuMnpLddjUizxu999OLs+z VmxWPwnQ==; Received: from j130084.upc-j.chello.nl ([24.132.130.84] helo=noisy.programming.kicks-ass.net) by desiato.infradead.org with esmtpsa (Exim 4.96 #2 (Red Hat Linux)) id 1pFyjS-0040tF-12; Thu, 12 Jan 2023 14:39:06 +0000 Received: from hirez.programming.kicks-ass.net (hirez.programming.kicks-ass.net [192.168.1.225]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by noisy.programming.kicks-ass.net (Postfix) with ESMTPS id E5EEE30084B; Thu, 12 Jan 2023 15:39:12 +0100 (CET) Received: by hirez.programming.kicks-ass.net (Postfix, from userid 0) id B487C2CC8C6A5; Thu, 12 Jan 2023 15:39:12 +0100 (CET) Message-ID: <20230112143825.584639584@infradead.org> User-Agent: quilt/0.66 Date: Thu, 12 Jan 2023 15:31:42 +0100 From: Peter Zijlstra To: x86@kernel.org, Joan Bruguera Cc: linux-kernel@vger.kernel.org, peterz@infradead.org, Juergen Gross , "Rafael J. Wysocki" , xen-devel , Jan Beulich , Roger Pau Monne , Kees Cook , mark.rutland@arm.com Subject: [RFC][PATCH 1/6] x86/power: De-paravirt restore_processor_state() References: <20230112143141.645645775@infradead.org> MIME-Version: 1.0 X-Spam-Status: No, score=-4.4 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_MED,SPF_HELO_NONE, SPF_NONE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1754828973394706521?= X-GMAIL-MSGID: =?utf-8?q?1754828973394706521?= Since Xen PV doesn't use restore_processor_state(), and we're going to have to avoid CALL/RET until at least GS is restored, de-paravirt the easy bits. Signed-off-by: Peter Zijlstra (Intel) Reviewed-by: Juergen Gross --- arch/x86/power/cpu.c | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) --- a/arch/x86/power/cpu.c +++ b/arch/x86/power/cpu.c @@ -197,25 +197,25 @@ static void notrace __restore_processor_ struct cpuinfo_x86 *c; if (ctxt->misc_enable_saved) - wrmsrl(MSR_IA32_MISC_ENABLE, ctxt->misc_enable); + native_wrmsrl(MSR_IA32_MISC_ENABLE, ctxt->misc_enable); /* * control registers */ /* cr4 was introduced in the Pentium CPU */ #ifdef CONFIG_X86_32 if (ctxt->cr4) - __write_cr4(ctxt->cr4); + native_write_cr4(ctxt->cr4); #else /* CONFIG X86_64 */ - wrmsrl(MSR_EFER, ctxt->efer); - __write_cr4(ctxt->cr4); + native_wrmsrl(MSR_EFER, ctxt->efer); + native_write_cr4(ctxt->cr4); #endif - write_cr3(ctxt->cr3); - write_cr2(ctxt->cr2); - write_cr0(ctxt->cr0); + native_write_cr3(ctxt->cr3); + native_write_cr2(ctxt->cr2); + native_write_cr0(ctxt->cr0); /* Restore the IDT. */ - load_idt(&ctxt->idt); + native_load_idt(&ctxt->idt); /* * Just in case the asm code got us here with the SS, DS, or ES @@ -230,7 +230,7 @@ static void notrace __restore_processor_ * handlers or in complicated helpers like load_gs_index(). */ #ifdef CONFIG_X86_64 - wrmsrl(MSR_GS_BASE, ctxt->kernelmode_gs_base); + native_wrmsrl(MSR_GS_BASE, ctxt->kernelmode_gs_base); #else loadsegment(fs, __KERNEL_PERCPU); #endif @@ -246,15 +246,15 @@ static void notrace __restore_processor_ loadsegment(ds, ctxt->es); loadsegment(es, ctxt->es); loadsegment(fs, ctxt->fs); - load_gs_index(ctxt->gs); + native_load_gs_index(ctxt->gs); /* * Restore FSBASE and GSBASE after restoring the selectors, since * restoring the selectors clobbers the bases. Keep in mind * that MSR_KERNEL_GS_BASE is horribly misnamed. */ - wrmsrl(MSR_FS_BASE, ctxt->fs_base); - wrmsrl(MSR_KERNEL_GS_BASE, ctxt->usermode_gs_base); + native_wrmsrl(MSR_FS_BASE, ctxt->fs_base); + native_wrmsrl(MSR_KERNEL_GS_BASE, ctxt->usermode_gs_base); #else loadsegment(gs, ctxt->gs); #endif From patchwork Thu Jan 12 14:31:43 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peter Zijlstra X-Patchwork-Id: 42478 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:4e01:0:0:0:0:0 with SMTP id p1csp3924145wrt; Thu, 12 Jan 2023 06:54:37 -0800 (PST) X-Google-Smtp-Source: AMrXdXvOFyKlx0Uylgn2xCVQpPSggjvUYdRiIWAuAtVWJltPvJPqHY+YR54XcBrhLk9jqSTvD//T X-Received: by 2002:a17:906:9141:b0:7b2:757a:1411 with SMTP id y1-20020a170906914100b007b2757a1411mr73753919ejw.9.1673535277553; Thu, 12 Jan 2023 06:54:37 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1673535277; cv=none; d=google.com; s=arc-20160816; b=d7P+c4fy0PZI4o0ZnGSCP8yPiL2s5cB94tt2CbCW59LFa34l+w9c8bYAguCHEDyrRf IxXdZ4+UaDnxTi2NHL9mEf1SDkJ8fLrrFU/5ZMm1Ng8581fFwUHfgJKN5oL9QWCLHrKe 2yd8tA5gf/OhhdOrqBMV4JhlniAgSjyou4YKw4NFuTVnTz5tD/ShdKlMdgDI76tvj1Be lVoVCVZ8FSLI4nRUOuVy5jAziZyZUC+gszqwuVuaUNE7lap9de4XQq0fsBQY5SAQS2P6 /iG0ECm5KQ4wFmlcB6ZAsQRr6a67O3hoaQbZCGEmnbX0gsNDK6J8meFNXOHlNvHBGTPV ysOQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:mime-version:references:subject:cc:to:from:date :user-agent:message-id:dkim-signature; bh=+hVGbhW+kq8WeUTnRFVIQ4y6xF6mTUDTY1iojLvcO/Q=; b=OcDkK+OtuITaDl/PSu/HiQen/IjfB1IpA7qGYqXR4rYjOQoF3pScdVkicpjsOY8WZp B+VZhWMp1LK0eRbKh9D0cd6j7gua1DtBPffyKywM4fzX25BV620R39y9fppQt+6cxf4Y pw5/LEh6JnB8MPqagk1VmcgJoKv/7rrgoyD/NEfujukXjbwOycC/a2Dzt63oF+aSFFGc fkWTriQoQPd5soUFJGaM808tIn0dS4LolDLImfRo0cQVVWVwYteZ9ZzIjJteWaYRGfiQ /JZE2LSdg3pCkNSmEGQOW4NP87IkXEcSkUwgXACwXIkemWJUw+O5gbz8tE3lQ/eBpIMX blTw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@infradead.org header.s=desiato.20200630 header.b=VD2YCgkT; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id o2-20020a1709061b0200b007c158ddfba4si7043152ejg.295.2023.01.12.06.54.13; Thu, 12 Jan 2023 06:54:37 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@infradead.org header.s=desiato.20200630 header.b=VD2YCgkT; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240026AbjALOxm (ORCPT + 99 others); Thu, 12 Jan 2023 09:53:42 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:43470 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240143AbjALOww (ORCPT ); Thu, 12 Jan 2023 09:52:52 -0500 Received: from desiato.infradead.org (desiato.infradead.org [IPv6:2001:8b0:10b:1:d65d:64ff:fe57:4e05]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 658AC61479 for ; Thu, 12 Jan 2023 06:39:30 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=desiato.20200630; h=Content-Type:MIME-Version:References: Subject:Cc:To:From:Date:Message-ID:Sender:Reply-To:Content-Transfer-Encoding: Content-ID:Content-Description:In-Reply-To; bh=+hVGbhW+kq8WeUTnRFVIQ4y6xF6mTUDTY1iojLvcO/Q=; b=VD2YCgkTmE2CQ4Y8uw29qiC2TE R80ib0ot/jJ/vDVx1nc81VA/UdFYRNG0RCJX9If+JwIwax/MdSzvs+229sqAm51rlqFP4ZtmBL6KE ZGwzJaeaNt97uYlCPg3WWmvJH6/Qc2TRui52REAxdkfvawrPGc1AlBYy8r3QDtkibYhajuP5B7DDl e4VUHACu7Phw+gAfdvDwUrseQHxbEogW6ZFrf4DGNzODQW73kd/B4Gn8iBVxRaIIdPZwruHvk8R/J U+pz1lXQCECLx95TWt3y1l8JrPMkbqVDOu1nEJOjWfQjLPnHBvOtaLz8Bxx4rBAruF+c4Yb+M8UAF +VcR5hIg==; Received: from j130084.upc-j.chello.nl ([24.132.130.84] helo=noisy.programming.kicks-ass.net) by desiato.infradead.org with esmtpsa (Exim 4.96 #2 (Red Hat Linux)) id 1pFyjS-0040tE-0z; Thu, 12 Jan 2023 14:39:06 +0000 Received: from hirez.programming.kicks-ass.net (hirez.programming.kicks-ass.net [192.168.1.225]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by noisy.programming.kicks-ass.net (Postfix) with ESMTPS id EA5E2300C50; Thu, 12 Jan 2023 15:39:12 +0100 (CET) Received: by hirez.programming.kicks-ass.net (Postfix, from userid 0) id B77922CC949A1; Thu, 12 Jan 2023 15:39:12 +0100 (CET) Message-ID: <20230112143825.644480983@infradead.org> User-Agent: quilt/0.66 Date: Thu, 12 Jan 2023 15:31:43 +0100 From: Peter Zijlstra To: x86@kernel.org, Joan Bruguera Cc: linux-kernel@vger.kernel.org, peterz@infradead.org, Juergen Gross , "Rafael J. Wysocki" , xen-devel , Jan Beulich , Roger Pau Monne , Kees Cook , mark.rutland@arm.com Subject: [RFC][PATCH 2/6] x86/power: Inline write_cr[04]() References: <20230112143141.645645775@infradead.org> MIME-Version: 1.0 X-Spam-Status: No, score=-4.4 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_MED,SPF_HELO_NONE, SPF_NONE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1754828927152631295?= X-GMAIL-MSGID: =?utf-8?q?1754828927152631295?= Since we can't do CALL/RET until GS is restored and CR[04] pinning is of dubious value in this code path, simply write the stored values. Signed-off-by: Peter Zijlstra (Intel) Reviewed-by: Kees Cook --- arch/x86/power/cpu.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) --- a/arch/x86/power/cpu.c +++ b/arch/x86/power/cpu.c @@ -208,11 +208,11 @@ static void notrace __restore_processor_ #else /* CONFIG X86_64 */ native_wrmsrl(MSR_EFER, ctxt->efer); - native_write_cr4(ctxt->cr4); + asm volatile("mov %0,%%cr4": "+r" (ctxt->cr4) : : "memory"); #endif native_write_cr3(ctxt->cr3); native_write_cr2(ctxt->cr2); - native_write_cr0(ctxt->cr0); + asm volatile("mov %0,%%cr0": "+r" (ctxt->cr0) : : "memory"); /* Restore the IDT. */ native_load_idt(&ctxt->idt); From patchwork Thu Jan 12 14:31:44 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peter Zijlstra X-Patchwork-Id: 42475 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:4e01:0:0:0:0:0 with SMTP id p1csp3923929wrt; Thu, 12 Jan 2023 06:54:07 -0800 (PST) X-Google-Smtp-Source: AMrXdXtrmrZU+CdI6QPBDb5peugyoMFl/M8tJhSBq6ONeqIooiNGRNkl2nkzE46G+7Hyv6CZ6eWy X-Received: by 2002:a17:906:7fc2:b0:838:9c66:cd2f with SMTP id r2-20020a1709067fc200b008389c66cd2fmr62235727ejs.74.1673535247181; Thu, 12 Jan 2023 06:54:07 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1673535247; cv=none; d=google.com; s=arc-20160816; b=EnZ80Z/Yi+fP4w6jHr+36bm40JMW5FtEtoNHAkEhI1FkmxB9zpem6DpZrg+7h9O+oi pHwh6s+JYpTnU/v1IaR6hbTPnC8crJOq5S8jiCDkFzK4t62f/cP35Xv+1NaVzzs4R8Vs 9jaDUzmvdeFbc0kiYX5zuVmFG2Qa+iofeBpmKF9Z+WwQ65fsAuIVtXkEB9hoZO3BYZGA frzJY3jvS6Zcn+J1QKaTuq4mbDc8NJWVljO6iOzPg/4oA0NlGI0qFXKysAUjRe3Y5sKH I+iHOBmbiXm9YXcNjNtsLI3y5tAlQEaLKnpkAlatLkp5v2NnZwDteKbH9p4vV9n4aDAw 8+Ig== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:mime-version:references:subject:cc:to:from:date :user-agent:message-id:dkim-signature; bh=T4GElGxaw5tEx2Lk6kKh2cwaswlijZP7pkxV7zD03yo=; b=q5eHd3yplzB8y53sEvXvS18+zDQe+pkFlOM8B9f+glOjTv4OOTWJY1qX0PgHKMKaEb mJAYajB9AtW9t7wdqJaYMb4L6LD/7FUzMkCsmvxTXMZDPfvY/dQ/pMhdC0BfUrlUE8yc ME/rXqBraf0EulnD2ur4AHrI40y/sucsob9cpnUx9bGeSYbYNoEFFKEmIqSPbwM6zUiX ULS5Eyqwl3l3/gySuxq+/p0bawtpfQCJJOK9m8mNqnoRH+pj2Rsbv86d5HRvMVrNAqNc u5mFSBSMOoF1H3ik5wvi5BqqG/M3nfY6s3wnXnySl/Io67t/dm+JQMYQg4tatT3k9vZa y5cQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@infradead.org header.s=desiato.20200630 header.b=dWjbmZzw; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id di15-20020a170906730f00b0078d805901b1si20196928ejc.489.2023.01.12.06.53.42; Thu, 12 Jan 2023 06:54:07 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@infradead.org header.s=desiato.20200630 header.b=dWjbmZzw; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240158AbjALOx1 (ORCPT + 99 others); Thu, 12 Jan 2023 09:53:27 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:43954 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S239922AbjALOwu (ORCPT ); Thu, 12 Jan 2023 09:52:50 -0500 Received: from desiato.infradead.org (desiato.infradead.org [IPv6:2001:8b0:10b:1:d65d:64ff:fe57:4e05]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 382FA61478 for ; Thu, 12 Jan 2023 06:39:28 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=desiato.20200630; h=Content-Type:MIME-Version:References: Subject:Cc:To:From:Date:Message-ID:Sender:Reply-To:Content-Transfer-Encoding: Content-ID:Content-Description:In-Reply-To; bh=T4GElGxaw5tEx2Lk6kKh2cwaswlijZP7pkxV7zD03yo=; b=dWjbmZzwf1WthR8TZ23ii1la+e yq8CeiWkZUYxPcP3zDoAdsjLQyUEFEwNBnojffsrWtXWwvZrVG3BvxUWfoXFoIemIzZBR3dchks7+ 30N+pLzv0Pq6fFF2X2CREioQEU6u9ZSI0QUhXVxyjoBTLRnevuU+BOKb90OE9rtHZxNFKkdIcFvCY 0iBTtIbHpzJidWwd/VU+wg+DB3e1nBkUqzz+681wC9mH4sjUCyB8tmW0qAnc1AaOtsfRWMMqx6gco h5cNcMDHwQrxlAKs+W9Qc14+/gh6t51ElNBLBGLZWjnaQvksAwmhxVjKsZ7qqyNZZupTDL6qmnpHt IQaqbR8A==; Received: from j130084.upc-j.chello.nl ([24.132.130.84] helo=noisy.programming.kicks-ass.net) by desiato.infradead.org with esmtpsa (Exim 4.96 #2 (Red Hat Linux)) id 1pFyjS-0040tD-11; Thu, 12 Jan 2023 14:39:06 +0000 Received: from hirez.programming.kicks-ass.net (hirez.programming.kicks-ass.net [192.168.1.225]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits)) (Client did not present a certificate) by noisy.programming.kicks-ass.net (Postfix) with ESMTPS id EC89A300C6F; Thu, 12 Jan 2023 15:39:12 +0100 (CET) Received: by hirez.programming.kicks-ass.net (Postfix, from userid 0) id BAAF42CC8C6A1; Thu, 12 Jan 2023 15:39:12 +0100 (CET) Message-ID: <20230112143825.704223863@infradead.org> User-Agent: quilt/0.66 Date: Thu, 12 Jan 2023 15:31:44 +0100 From: Peter Zijlstra To: x86@kernel.org, Joan Bruguera Cc: linux-kernel@vger.kernel.org, peterz@infradead.org, Juergen Gross , "Rafael J. Wysocki" , xen-devel , Jan Beulich , Roger Pau Monne , Kees Cook , mark.rutland@arm.com Subject: [RFC][PATCH 3/6] x86/callthunk: No callthunk for restore_processor_state() References: <20230112143141.645645775@infradead.org> MIME-Version: 1.0 X-Spam-Status: No, score=-4.4 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_MED,SPF_HELO_NONE, SPF_NONE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1754828895200885706?= X-GMAIL-MSGID: =?utf-8?q?1754828895200885706?= From: Joan Bruguera When resuming from suspend we don't have coherent CPU state, trying to do callthunks here isn't going to work. Specifically GS isn't set yet. Signed-off-by: Joan Bruguera Signed-off-by: Peter Zijlstra (Intel) Link: https://lkml.kernel.org/r/20230109040531.7888-1-joanbrugueram@gmail.com --- arch/x86/kernel/callthunks.c | 5 +++++ arch/x86/power/cpu.c | 3 +++ 2 files changed, 8 insertions(+) --- a/arch/x86/kernel/callthunks.c +++ b/arch/x86/kernel/callthunks.c @@ -7,6 +7,7 @@ #include #include #include +#include #include #include @@ -151,6 +152,10 @@ static bool skip_addr(void *dest) dest < (void*)hypercall_page + PAGE_SIZE) return true; #endif +#ifdef CONFIG_PM_SLEEP + if (dest == restore_processor_state) + return true; +#endif return false; } From patchwork Thu Jan 12 14:31:45 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peter Zijlstra X-Patchwork-Id: 42476 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:4e01:0:0:0:0:0 with SMTP id p1csp3923974wrt; Thu, 12 Jan 2023 06:54:14 -0800 (PST) X-Google-Smtp-Source: AMrXdXsDAETKd/pcEDZOvka71joP8H8WELpQvmKTrP0EwEuO2+X1XB5xx5sQ0d8pjTWWvz9/7bRd X-Received: by 2002:a17:907:a0c9:b0:868:d72f:d106 with SMTP id hw9-20020a170907a0c900b00868d72fd106mr981129ejc.47.1673535254068; Thu, 12 Jan 2023 06:54:14 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1673535254; cv=none; d=google.com; s=arc-20160816; b=YCWIwpXLmwmy6cqTubz/AOIQ4xr4PWda9stDNKZ5gxORonBYCHvsFsonM1+fjM3Olv sMTrQb6/YY0f+1q0m2ByLAfILgnkaJetg2isXTl9uNwMFAPI6vlw0hWXD+8LVDrC4aR2 UJDLR5N3xVbWWTfywD8o+tAd0igoLSX8jdZwyAub/VvNg92CPkAp45JXphOMsnBlZiJF w31e1i90hBxuCdxyLm7IE+3FvZ9J6+vU4Bz/6DK0Zh3++BajpYrgD3B5k/phmF2vdq3k KIM7ZUQUxCdGGRdvS8pecqOjrffsMTIOA7VNwP4pZKc5nG/7OikoxU4TUSCwSRIMYOdz sFWw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:mime-version:references:subject:cc:to:from:date :user-agent:message-id:dkim-signature; bh=eW1eJS20PBPNIc/x7hkOEbhV5Z70C96GEP7VlPQr3GE=; b=JDmD1AHJkQMHtPuA4j2ie6+/Z+JNVa+u/qPi9PGArbPLkW6kie5qP+h72xM8yG41OG bIiHpfakva2YwG6ZQ6ch1UcHq9/RsfvNkUFgtbbRs7DDM1d3jJMckH35y4eAENchs9r8 SlSUqtR0UvU/VbO4F3r1RG7B1c0+aKOc4T4S3bvbBV5Znqo1DMoTmdsb0fRZVgDrbY8k MbmQUHROaDhOxwfKg+jZYlvijpkY51FT9ynF1BQOWlijM//uHKZi4TsVRZ4qvQp2QYux ajADWmoHAODAB3UX/DIXhJmEDBg/RA5d6HyerIU+r/vIoVQYy6Jg5EJEPHBr7zXi+Wmj 4bRw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@infradead.org header.s=casper.20170209 header.b=aPU7lwsf; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id dt20-20020a170907729400b00812e75e5257si18747996ejc.293.2023.01.12.06.53.49; Thu, 12 Jan 2023 06:54:14 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@infradead.org header.s=casper.20170209 header.b=aPU7lwsf; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240230AbjALOxi (ORCPT + 99 others); Thu, 12 Jan 2023 09:53:38 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45944 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240107AbjALOwv (ORCPT ); Thu, 12 Jan 2023 09:52:51 -0500 Received: from casper.infradead.org (casper.infradead.org [IPv6:2001:8b0:10b:1236::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 7E22565AE8 for ; Thu, 12 Jan 2023 06:39:28 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=casper.20170209; h=Content-Type:MIME-Version:References: Subject:Cc:To:From:Date:Message-ID:Sender:Reply-To:Content-Transfer-Encoding: Content-ID:Content-Description:In-Reply-To; bh=eW1eJS20PBPNIc/x7hkOEbhV5Z70C96GEP7VlPQr3GE=; b=aPU7lwsfmN0exgD06ro+v230ma inYN+4H37Om7tBqtVLzUL9CUNUKlfPza2KgcF/4PIvMJRSjjj182vbfZKCbWGWcbCIG45AgQgTeW2 fJfibscpsY63h5bZRqGsUf4OhsblkoP/Zw/BZA9PTJDZ2yDWPiuYKZy08myhK7w4NQ6zGvyAXLf0r M3tKHRiVoMc/WSOdEc6z2X8grpK42f1voLXiB5Pdc8Sqe2lHCgDtzs7he1s2s4NuaMwjujHi3zrRS ZFm27VOnMo7aZariMxE7kPw4B2ygcq5oEm7hLZK/tnd6ofcrPVD/UdjX1MVog7QR+UD+cBkfTdQE7 QKSVn4uQ==; Received: from j130084.upc-j.chello.nl ([24.132.130.84] helo=noisy.programming.kicks-ass.net) by casper.infradead.org with esmtpsa (Exim 4.94.2 #2 (Red Hat Linux)) id 1pFyjo-0057ze-0K; Thu, 12 Jan 2023 14:39:28 +0000 Received: from hirez.programming.kicks-ass.net (hirez.programming.kicks-ass.net [192.168.1.225]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits)) (Client did not present a certificate) by noisy.programming.kicks-ass.net (Postfix) with ESMTPS id E5F5E300BE3; Thu, 12 Jan 2023 15:39:12 +0100 (CET) Received: by hirez.programming.kicks-ass.net (Postfix, from userid 0) id BD2812CC8C6A4; Thu, 12 Jan 2023 15:39:12 +0100 (CET) Message-ID: <20230112143825.762830112@infradead.org> User-Agent: quilt/0.66 Date: Thu, 12 Jan 2023 15:31:45 +0100 From: Peter Zijlstra To: x86@kernel.org, Joan Bruguera Cc: linux-kernel@vger.kernel.org, peterz@infradead.org, Juergen Gross , "Rafael J. Wysocki" , xen-devel , Jan Beulich , Roger Pau Monne , Kees Cook , mark.rutland@arm.com Subject: [RFC][PATCH 4/6] x86/power: Sprinkle some noinstr References: <20230112143141.645645775@infradead.org> MIME-Version: 1.0 X-Spam-Status: No, score=-4.4 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_MED,SPF_HELO_NONE, SPF_NONE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1754828902577541134?= X-GMAIL-MSGID: =?utf-8?q?1754828902577541134?= Ensure no compiler instrumentation sneaks in while restoring the CPU state. Specifically we can't handle CALL/RET until GS is restored. Signed-off-by: Peter Zijlstra (Intel) --- arch/x86/power/cpu.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) --- a/arch/x86/power/cpu.c +++ b/arch/x86/power/cpu.c @@ -192,7 +192,7 @@ static void fix_processor_context(void) * The asm code that gets us here will have restored a usable GDT, although * it will be pointing to the wrong alias. */ -static void notrace __restore_processor_state(struct saved_context *ctxt) +static __always_inline void __restore_processor_state(struct saved_context *ctxt) { struct cpuinfo_x86 *c; @@ -235,6 +235,13 @@ static void notrace __restore_processor_ loadsegment(fs, __KERNEL_PERCPU); #endif + /* + * Definitely wrong, but at this point we should have at least enough + * to do CALL/RET (consider SKL callthunks) and this avoids having + * to deal with the noinstr explosion for now :/ + */ + instrumentation_begin(); + /* Restore the TSS, RO GDT, LDT, and usermode-relevant MSRs. */ fix_processor_context(); @@ -276,10 +283,12 @@ static void notrace __restore_processor_ * because some of the MSRs are "emulated" in microcode. */ msr_restore_context(ctxt); + + instrumentation_end(); } /* Needed by apm.c */ -void notrace restore_processor_state(void) +void noinstr restore_processor_state(void) { __restore_processor_state(&saved_context); } From patchwork Thu Jan 12 14:31:46 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peter Zijlstra X-Patchwork-Id: 42479 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:4e01:0:0:0:0:0 with SMTP id p1csp3924472wrt; Thu, 12 Jan 2023 06:55:19 -0800 (PST) X-Google-Smtp-Source: AMrXdXtG8IZ6RLth/ZDKgYDkAB8ARJbveY8/F0CmQHvi2fMArSsszsYy+EFI7WU86TVLdvtHpIy3 X-Received: by 2002:a05:6402:1055:b0:467:c3cb:49aa with SMTP id e21-20020a056402105500b00467c3cb49aamr63863418edu.4.1673535319761; Thu, 12 Jan 2023 06:55:19 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1673535319; cv=none; d=google.com; s=arc-20160816; b=yI+2cjnS06ZoZXd6PcSXGBZDrxmAB+KZKgdgoWyjDurrKRViqdaGxDmlJGyWYN8OiC FbxpsmsdE7sS0jZ1cjpE/Ook3aJxVm51WVbt2TDhCRVZ5emV60iHWfQalxSdRePmwBtM za9h/D96qfv+4H2bJnwy6mxVbrUvRXQdwd1aW1B1/lmpfjX56NFcYrkX1XpimmhcVf3C ZjYm/zKX8Wzdb90RN1IKnYqgukXliq4cbt2ZYvY7T/lsQMSngqZg5fEe1orEaVgfYUAj 2FOzq/sL7A0W8Lp2g5LOcT9ZIvh8CoJ+sVTeOqW+szmTC6FeBFX2V2ypB4gW0MyBqV+G cemw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:mime-version:references:subject:cc:to:from:date :user-agent:message-id:dkim-signature; bh=w9+PAdJk73UH2Fl3uPAAs4wgk5kyO76VlH+ufUk/PX4=; b=d8ExELgk/AOeyKHS8QOuVgHkTczJKxRVBEVVdBXBq5m8ZYPmxY23nbS4CfI5A+Rvup 7ZmY1i6TwfUcjnINUMJ2vCnRJnFzb4FoC0mw9mYSgh6nu8pFQmNBqpnN7ud3TG7As9pB eET75yogyew+Uk9YvnC8+BY7oha0PjhFx3yNmaY7yR4/B0T8fpRXVKN7KQOu57H3Rxjn W5oVuIkMI7onbidqYuLyzr/+UsW+8mngPX3l9owR/9fUiX7Z/Bv0HQXZyxZLBuRoyhhU 5eyWlEq8I35YAUoTRd8vWHBYGsXtRPIV97rzlJqHIMoBZiYIcSGAYN7K+sefmy+Erx09 V+hQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@infradead.org header.s=desiato.20200630 header.b=dGCr6CbA; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id z3-20020a05640235c300b0048e9a2f7678si19769655edc.292.2023.01.12.06.54.54; Thu, 12 Jan 2023 06:55:19 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@infradead.org header.s=desiato.20200630 header.b=dGCr6CbA; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240042AbjALOxq (ORCPT + 99 others); Thu, 12 Jan 2023 09:53:46 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45948 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S238976AbjALOww (ORCPT ); Thu, 12 Jan 2023 09:52:52 -0500 Received: from desiato.infradead.org (desiato.infradead.org [IPv6:2001:8b0:10b:1:d65d:64ff:fe57:4e05]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 5E4F05D416 for ; Thu, 12 Jan 2023 06:39:30 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=desiato.20200630; h=Content-Type:MIME-Version:References: Subject:Cc:To:From:Date:Message-ID:Sender:Reply-To:Content-Transfer-Encoding: Content-ID:Content-Description:In-Reply-To; bh=w9+PAdJk73UH2Fl3uPAAs4wgk5kyO76VlH+ufUk/PX4=; b=dGCr6CbAN+FGZxrxNRDZdAytzQ ohdZmJ2pWqhrruEFxAeISbBJzfYzIpqoJ3L/tRSUW3gBGjkO2s4tKa2W7ElzbOgRY0hRHRAMqDn7v I08YMwa446QJGSFX9BK9EJUds/SAXIdeHq/1QrE0yC9DLJmA54/yUU0pMsKnK/GKurujDhdUdMZgy 2+E0yvI3gp0qTRUUgSCZVL/zjtjL6j9B4gmAO+rUVP/3waaiBSWmCmPLQGQ2RCXfbx35gYfLuHUHj rMAwsTWq/CMa37B4ktxnJOl8GYiROHox2K2kVc6oMMpelLmGsftbM+7NBgYgsXqBejFVKGscqqsL5 Y+V/ZZZg==; Received: from j130084.upc-j.chello.nl ([24.132.130.84] helo=noisy.programming.kicks-ass.net) by desiato.infradead.org with esmtpsa (Exim 4.96 #2 (Red Hat Linux)) id 1pFyjT-0040tJ-0q; Thu, 12 Jan 2023 14:39:07 +0000 Received: from hirez.programming.kicks-ass.net (hirez.programming.kicks-ass.net [192.168.1.225]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits)) (Client did not present a certificate) by noisy.programming.kicks-ass.net (Postfix) with ESMTPS id 6DA1B30067B; Thu, 12 Jan 2023 15:39:13 +0100 (CET) Received: by hirez.programming.kicks-ass.net (Postfix, from userid 0) id C69932CC949B5; Thu, 12 Jan 2023 15:39:12 +0100 (CET) Message-ID: <20230112143825.822328168@infradead.org> User-Agent: quilt/0.66 Date: Thu, 12 Jan 2023 15:31:46 +0100 From: Peter Zijlstra To: x86@kernel.org, Joan Bruguera Cc: linux-kernel@vger.kernel.org, peterz@infradead.org, Juergen Gross , "Rafael J. Wysocki" , xen-devel , Jan Beulich , Roger Pau Monne , Kees Cook , mark.rutland@arm.com Subject: [RFC][PATCH 5/6] PM / hibernate: Add minimal noinstr annotations References: <20230112143141.645645775@infradead.org> MIME-Version: 1.0 X-Spam-Status: No, score=-4.4 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_MED,SPF_HELO_NONE, SPF_NONE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1754828971420225770?= X-GMAIL-MSGID: =?utf-8?q?1754828971420225770?= When resuming there must not be any code between swsusp_arch_suspend() and restore_processor_state() since the CPU state is ill defined at this point in time. Signed-off-by: Peter Zijlstra (Intel) --- kernel/power/hibernate.c | 30 +++++++++++++++++++++++++++--- 1 file changed, 27 insertions(+), 3 deletions(-) --- a/kernel/power/hibernate.c +++ b/kernel/power/hibernate.c @@ -280,6 +280,32 @@ __weak int arch_resume_nosmt(void) return 0; } +static noinstr int suspend_and_restore(void) +{ + int error; + + /* + * Strictly speaking swsusp_arch_suspend() should be noinstr too but it + * is typically written in asm, as such, assume it is good and shut up + * the validator. + */ + instrumentation_begin(); + error = swsusp_arch_suspend(); + instrumentation_end(); + + /* + * Architecture resume code 'returns' from the swsusp_arch_suspend() + * call and resumes execution here with some very dodgy machine state. + * + * Compiler instrumentation between these two calls (or in + * restore_processor_state() for that matter) will make life *very* + * interesting indeed. + */ + restore_processor_state(); + + return error; +} + /** * create_image - Create a hibernation image. * @platform_mode: Whether or not to use the platform driver. @@ -323,9 +349,7 @@ static int create_image(int platform_mod in_suspend = 1; save_processor_state(); trace_suspend_resume(TPS("machine_suspend"), PM_EVENT_HIBERNATE, true); - error = swsusp_arch_suspend(); - /* Restore control flow magically appears here */ - restore_processor_state(); + error = suspend_and_restore(); trace_suspend_resume(TPS("machine_suspend"), PM_EVENT_HIBERNATE, false); if (error) pr_err("Error %d creating image\n", error); From patchwork Thu Jan 12 14:31:47 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peter Zijlstra X-Patchwork-Id: 42477 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:4e01:0:0:0:0:0 with SMTP id p1csp3924129wrt; Thu, 12 Jan 2023 06:54:34 -0800 (PST) X-Google-Smtp-Source: AMrXdXvQic9/3iakX3rK92yALKUFE9f89zFuOkzKi4rsb+hb+/LnNmsiG91lPQuGUyMDGT/o685m X-Received: by 2002:a17:907:8b85:b0:7c4:f4b8:f1c6 with SMTP id tb5-20020a1709078b8500b007c4f4b8f1c6mr71638741ejc.4.1673535274441; Thu, 12 Jan 2023 06:54:34 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1673535274; cv=none; d=google.com; s=arc-20160816; b=lqXJW7+uEXN+5d5LaUI3moT7k/VHQ8T2SNML1hcbODH1Z1fX3gcjze5mly11CzfOAM FAeyQq/l3/7NNJ3MFX4JvLDwCIAZEBEQS7I55subVoKsxhG1AzRHOD5I1oy/bFUKEUZH u5jItZNf0k2Xu2sDvEx36sHDoejeR8KXjuTU+d+tZtvUrjuC8ZYTArnRgnE7HB8g7yP5 Q9auT3GM9qdakNbcs+LEnJ0bV5YA1317paLGN5Oc4syDt9OamjQeZTxVxOzkfJ2lYsKC EIdb5Ij0T5FQezPjfHbsCcoqDYayYn/fZFPNrldDiXUIM5k9s3BwfbIDvuhdOw9p4aUE 7ncw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:mime-version:references:subject:cc:to:from:date :user-agent:message-id:dkim-signature; bh=LNbZyqdS6MCOXN5DhvrakKEz6kKRrs7/+Ia2/9U4HAc=; b=melaw6yE1vGzwdvDxr4kfdC/vwCV4Deywet28rDKnZFnwIu9/Jpj8R1EnLB819rNul 1HR8pThVT9m9Ha9ox5PugTxPSyE+AlYSZOYmdHce4GR8dVaWraVWn7FB7HC9VNSJyUar TSyW1kaI0Dz6yXvb3Sb7NLoxa6glJEnkEqmjyVUEBya4gFqb/oefSvhIG8l5XCtZ/iWP stlegI4+C7P3C+K6TLYw/vRtxFzmmkg9CUuEEuEwBxY8fuWTjp2vaZfvE74dthsJbO8l uENAREk9AAI9LVfd8/xYNAobn1Cvm/pMPoM59XzNI2ydI34FEHWHYO2EmrbNxwxYfu7R 3UOQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@infradead.org header.s=casper.20170209 header.b="G5AA9h/y"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id sc19-20020a1709078a1300b007ce3aef9498si19658092ejc.628.2023.01.12.06.54.10; Thu, 12 Jan 2023 06:54:34 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@infradead.org header.s=casper.20170209 header.b="G5AA9h/y"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240201AbjALOxe (ORCPT + 99 others); Thu, 12 Jan 2023 09:53:34 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45942 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240082AbjALOwv (ORCPT ); Thu, 12 Jan 2023 09:52:51 -0500 Received: from casper.infradead.org (casper.infradead.org [IPv6:2001:8b0:10b:1236::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 7DF396146F for ; Thu, 12 Jan 2023 06:39:29 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=casper.20170209; h=Content-Type:MIME-Version:References: Subject:Cc:To:From:Date:Message-ID:Sender:Reply-To:Content-Transfer-Encoding: Content-ID:Content-Description:In-Reply-To; bh=LNbZyqdS6MCOXN5DhvrakKEz6kKRrs7/+Ia2/9U4HAc=; b=G5AA9h/yH9+nJcJaV99Ad2Ey8F k5XWYtZamnH9v88AQNk//cUWHI313YsUcDWkBRHwsEnZ3YwO8uX31UVbbHNGiSckhXek4//+Wnz8l sFL6gBapz0F4s5kPWpNrhL2lnWrU7jUGCNGjtvEK9GN2wjN3Qp6ppjE4WmTl7v9s6AsO4FwK2CMiy BksgEqIsTHg+IvsVuWE/RCyauvJNvXu9ihIdqTkl7iNXaBSeD4jwxobQPOMLpk/dWsh0TlC086R3I 6S5sM/g0/l5h+kcMN6smqUUGVPcaJ0N69KsfH2p+TSKM/cDaDIhyRd6fHrKzfHFtn9N3WXaseHucg 0YtdygGg==; Received: from j130084.upc-j.chello.nl ([24.132.130.84] helo=noisy.programming.kicks-ass.net) by casper.infradead.org with esmtpsa (Exim 4.94.2 #2 (Red Hat Linux)) id 1pFyjo-0057zn-9C; Thu, 12 Jan 2023 14:39:28 +0000 Received: from hirez.programming.kicks-ass.net (hirez.programming.kicks-ass.net [192.168.1.225]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits)) (Client did not present a certificate) by noisy.programming.kicks-ass.net (Postfix) with ESMTPS id 6E776300AFB; Thu, 12 Jan 2023 15:39:13 +0100 (CET) Received: by hirez.programming.kicks-ass.net (Postfix, from userid 0) id CB2472CC949B7; Thu, 12 Jan 2023 15:39:12 +0100 (CET) Message-ID: <20230112143825.881829388@infradead.org> User-Agent: quilt/0.66 Date: Thu, 12 Jan 2023 15:31:47 +0100 From: Peter Zijlstra To: x86@kernel.org, Joan Bruguera Cc: linux-kernel@vger.kernel.org, peterz@infradead.org, Juergen Gross , "Rafael J. Wysocki" , xen-devel , Jan Beulich , Roger Pau Monne , Kees Cook , mark.rutland@arm.com Subject: [RFC][PATCH 6/6] x86/power: Seal restore_processor_state() References: <20230112143141.645645775@infradead.org> MIME-Version: 1.0 X-Spam-Status: No, score=-4.4 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_MED,SPF_HELO_NONE, SPF_NONE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1754828923650406612?= X-GMAIL-MSGID: =?utf-8?q?1754828923650406612?= Disallow indirect branches to restore_processor_state(). Signed-off-by: Peter Zijlstra (Intel) --- arch/x86/include/asm/suspend_64.h | 4 ++++ arch/x86/power/cpu.c | 2 +- arch/x86/power/hibernate_asm_64.S | 4 ++++ include/linux/suspend.h | 4 ++++ 4 files changed, 13 insertions(+), 1 deletion(-) --- a/arch/x86/include/asm/suspend_64.h +++ b/arch/x86/include/asm/suspend_64.h @@ -9,6 +9,7 @@ #include #include +#include /* * Image of the saved processor state, used by the low level ACPI suspend to @@ -61,4 +62,7 @@ struct saved_context { extern char core_restore_code[]; extern char restore_registers[]; +#define restore_processor_state restore_processor_state +extern __noendbr void restore_processor_state(void); + #endif /* _ASM_X86_SUSPEND_64_H */ --- a/arch/x86/power/cpu.c +++ b/arch/x86/power/cpu.c @@ -288,7 +288,7 @@ static __always_inline void __restore_pr } /* Needed by apm.c */ -void noinstr restore_processor_state(void) +void __noendbr noinstr restore_processor_state(void) { __restore_processor_state(&saved_context); } --- a/arch/x86/power/hibernate_asm_64.S +++ b/arch/x86/power/hibernate_asm_64.S @@ -23,6 +23,10 @@ #include #include +.pushsection .discard.noendbr +.quad restore_processor_state +.popsection + /* code below belongs to the image kernel */ .align PAGE_SIZE SYM_FUNC_START(restore_registers) --- a/include/linux/suspend.h +++ b/include/linux/suspend.h @@ -9,6 +9,7 @@ #include #include #include +#include #ifdef CONFIG_VT extern void pm_set_vt_switch(int); @@ -483,7 +484,10 @@ extern struct mutex system_transition_mu #ifdef CONFIG_PM_SLEEP void save_processor_state(void); + +#ifndef restore_processor_state void restore_processor_state(void); +#endif /* kernel/power/main.c */ extern int register_pm_notifier(struct notifier_block *nb);