From patchwork Thu Sep 16 23:13:13 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Pasha Tatashin X-Patchwork-Id: 12500459 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-16.6 required=3.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id D878DC433EF for ; Thu, 16 Sep 2021 23:13:35 +0000 (UTC) Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.kernel.org (Postfix) with ESMTP id 7B8EE611CA for ; Thu, 16 Sep 2021 23:13:35 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.1 mail.kernel.org 7B8EE611CA Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=soleen.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=kvack.org Received: by kanga.kvack.org (Postfix) id DEB9B940009; Thu, 16 Sep 2021 19:13:33 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id C0E0E940007; Thu, 16 Sep 2021 19:13:33 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id A33E4940009; Thu, 16 Sep 2021 19:13:33 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0170.hostedemail.com [216.40.44.170]) by kanga.kvack.org (Postfix) with ESMTP id 8875C940007 for ; Thu, 16 Sep 2021 19:13:33 -0400 (EDT) Received: from smtpin05.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay03.hostedemail.com (Postfix) with ESMTP id 50B33824C42D for ; Thu, 16 Sep 2021 23:13:33 +0000 (UTC) X-FDA: 78594990306.05.A375EE2 Received: from mail-qt1-f175.google.com (mail-qt1-f175.google.com [209.85.160.175]) by imf18.hostedemail.com (Postfix) with ESMTP id 19DBE4002098 for ; Thu, 16 Sep 2021 23:13:33 +0000 (UTC) Received: by mail-qt1-f175.google.com with SMTP id g11so7172139qtk.5 for ; Thu, 16 Sep 2021 16:13:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=soleen.com; s=google; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=vATAyacEN1RBZ4iY9UvfQznDv8XKXbprxPlso1XrO3s=; b=gZB9fgDcFd48xLYIrxyh+JGpbXTeFbm0ji1GBX7tm82vd7HFkYtLoMTXTT4IhnMlZ6 5bLx5mqq+ycUoQPIfP+lE4fs9sQqeYiIx3OdOmj1BVHNmMoSVaFjRhoDV9x7oDyQH0Ly EcUgOsZW+ExaRa+Ifjsyu9ljpRI7YFva8jH4Y/B14osyeDOz1EojnubioGqn4HrfXVmN QQ1EoGD+L/mRut1G/X5rQcThsMTcwmlq9t87oSm8rHbaGaEq0T6MgYJQ2PXCCfnE4KBC EzalqM8ViXMhxDwIfHp2282OL0rNPf1h1YEXmGPzTHQS7OWvI6nbW/Ow5/taEGoYgX5P jbqQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=vATAyacEN1RBZ4iY9UvfQznDv8XKXbprxPlso1XrO3s=; b=ucpcm2FFjVdaCsbSNLBu6oWN5jrsDn8tTRQN0C5XirPiUofrofdseQbKIGcawHlLu5 5XnomwBDCatHYWMLjQm9VPyNbgLb2B1CuxiRjvkk6Glxi/gRCG6HKaBGgJRCMaTfZ+qk fhYTuInTPhZF8330NrvVl0x1LyDLJ9tsnNal0TQQKp1lHToul+HHycXfdblafNTHlMhl qF3MAheLu9SiwQLJykoinb95SMw+DSVdDjBAh61y6/M4QRr/nz8be1H7nhmaU+9O2Gc4 MuLYJwjn9GK9DTu1vNbAx3330sO571RHNWAhBCu4UWdFJh/RwzhHj8uI69oiiDX+YhOV uNxg== X-Gm-Message-State: AOAM531qxbb3WoXRzGU/cYBU2crqLd97mZJ4OmFfllOlS+x/TA/7Lum2 lklJdT8EU9FSBb1rZPSAElOI3Q== X-Google-Smtp-Source: ABdhPJysMPROcVY9uVmXIYZZutZ8Tz1xrsOad/eRErKKPAsu10LVzfxhmRCZ46+JETnnHyeGrvmtDQ== X-Received: by 2002:a05:622a:199d:: with SMTP id u29mr7515959qtc.357.1631834012463; Thu, 16 Sep 2021 16:13:32 -0700 (PDT) Received: from localhost.localdomain (c-73-69-118-222.hsd1.nh.comcast.net. [73.69.118.222]) by smtp.gmail.com with ESMTPSA id az6sm3312891qkb.70.2021.09.16.16.13.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 16 Sep 2021 16:13:32 -0700 (PDT) From: Pasha Tatashin To: pasha.tatashin@soleen.com, jmorris@namei.org, sashal@kernel.org, ebiederm@xmission.com, kexec@lists.infradead.org, linux-kernel@vger.kernel.org, corbet@lwn.net, catalin.marinas@arm.com, will@kernel.org, linux-arm-kernel@lists.infradead.org, maz@kernel.org, james.morse@arm.com, vladimir.murzin@arm.com, matthias.bgg@gmail.com, linux-mm@kvack.org, mark.rutland@arm.com, steve.capper@arm.com, rfontana@redhat.com, tglx@linutronix.de, selindag@gmail.com, tyhicks@linux.microsoft.com, kernelfans@gmail.com, akpm@linux-foundation.org, madvenka@linux.microsoft.com Subject: [PATCH v17 03/15] arm64: hibernate: abstract ttrb0 setup function Date: Thu, 16 Sep 2021 19:13:13 -0400 Message-Id: <20210916231325.125533-4-pasha.tatashin@soleen.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210916231325.125533-1-pasha.tatashin@soleen.com> References: <20210916231325.125533-1-pasha.tatashin@soleen.com> MIME-Version: 1.0 Authentication-Results: imf18.hostedemail.com; dkim=pass header.d=soleen.com header.s=google header.b=gZB9fgDc; spf=pass (imf18.hostedemail.com: domain of pasha.tatashin@soleen.com designates 209.85.160.175 as permitted sender) smtp.mailfrom=pasha.tatashin@soleen.com; dmarc=none X-Rspamd-Server: rspam06 X-Rspamd-Queue-Id: 19DBE4002098 X-Stat-Signature: zcqy6c6jagsffr4s43ny7b78pa586bqj X-HE-Tag: 1631834013-137845 X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: Currently, only hibernate sets custom ttbr0 with safe idmaped function. Kexec, is also going to be using this functionality when relocation code is going to be idmapped. Move the setup sequence to a dedicated cpu_install_ttbr0() for custom ttbr0. Suggested-by: James Morse Signed-off-by: Pasha Tatashin --- arch/arm64/include/asm/mmu_context.h | 24 ++++++++++++++++++++++++ arch/arm64/kernel/hibernate.c | 21 +-------------------- 2 files changed, 25 insertions(+), 20 deletions(-) diff --git a/arch/arm64/include/asm/mmu_context.h b/arch/arm64/include/asm/mmu_context.h index f4ba93d4ffeb..6770667b34a3 100644 --- a/arch/arm64/include/asm/mmu_context.h +++ b/arch/arm64/include/asm/mmu_context.h @@ -115,6 +115,30 @@ static inline void cpu_install_idmap(void) cpu_switch_mm(lm_alias(idmap_pg_dir), &init_mm); } +/* + * Load our new page tables. A strict BBM approach requires that we ensure that + * TLBs are free of any entries that may overlap with the global mappings we are + * about to install. + * + * For a real hibernate/resume/kexec cycle TTBR0 currently points to a zero + * page, but TLBs may contain stale ASID-tagged entries (e.g. for EFI runtime + * services), while for a userspace-driven test_resume cycle it points to + * userspace page tables (and we must point it at a zero page ourselves). + * + * We change T0SZ as part of installing the idmap. This is undone by + * cpu_uninstall_idmap() in __cpu_suspend_exit(). + */ +static inline void cpu_install_ttbr0(phys_addr_t ttbr0, unsigned long t0sz) +{ + cpu_set_reserved_ttbr0(); + local_flush_tlb_all(); + __cpu_set_tcr_t0sz(t0sz); + + /* avoid cpu_switch_mm() and its SW-PAN and CNP interactions */ + write_sysreg(ttbr0, ttbr0_el1); + isb(); +} + /* * Atomically replaces the active TTBR1_EL1 PGD with a new VA-compatible PGD, * avoiding the possibility of conflicting TLB entries being allocated. diff --git a/arch/arm64/kernel/hibernate.c b/arch/arm64/kernel/hibernate.c index b96ef9060e4c..2758f75d6809 100644 --- a/arch/arm64/kernel/hibernate.c +++ b/arch/arm64/kernel/hibernate.c @@ -212,26 +212,7 @@ static int create_safe_exec_page(void *src_start, size_t length, if (rc) return rc; - /* - * Load our new page tables. A strict BBM approach requires that we - * ensure that TLBs are free of any entries that may overlap with the - * global mappings we are about to install. - * - * For a real hibernate/resume cycle TTBR0 currently points to a zero - * page, but TLBs may contain stale ASID-tagged entries (e.g. for EFI - * runtime services), while for a userspace-driven test_resume cycle it - * points to userspace page tables (and we must point it at a zero page - * ourselves). - * - * We change T0SZ as part of installing the idmap. This is undone by - * cpu_uninstall_idmap() in __cpu_suspend_exit(). - */ - cpu_set_reserved_ttbr0(); - local_flush_tlb_all(); - __cpu_set_tcr_t0sz(t0sz); - write_sysreg(trans_ttbr0, ttbr0_el1); - isb(); - + cpu_install_ttbr0(trans_ttbr0, t0sz); *phys_dst_addr = virt_to_phys(page); return 0;