From nobody Tue Oct 04 16:29:40 2022 X-Original-To: dev-commits-src-all@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4MhjpX5vZwz4fCHM; Tue, 4 Oct 2022 16:29:40 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (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-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4MhjpX5Fp6z44kC; Tue, 4 Oct 2022 16:29:40 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1664900980; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=RpIO8f5rzvF5Q/x6YOk9xo26sf/oFTymQJMcrAhLHvY=; b=WMeY3yfmGRseh9o82evhNGi0EaP5rOm1dk+phDaN+xYG8m9ua3KrXr9NZZ0j0YZdvWH7eX YlEu8knaYgWmsTAtVFbDFQohO4Db1xYyxEmJ91Czp4qG192fDLUJfV25RUQ2TEwsIALx/v wlnio9VT2cdD4n6pAsz0iHMrvAvAPB7lRGzQBpw5tMczDMxQ/5QFdnSfySOITOlYtQTnjh XpnCUgfx9VGGH87Pvpv6QnEG3lUGmkYDkQ2BsRTkTbaJZsi1lRfmkXnCIst9yyf5XFyNeu nfXh/ohOGlsskLg9C++YiVXakSOVAwheYHM00c5UZ9WVEamqTCnNZp55jeeLQQ== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (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 mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 4MhjpX4FdQzcy2; Tue, 4 Oct 2022 16:29:40 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 294GTeKI049873; Tue, 4 Oct 2022 16:29:40 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 294GTeK7049872; Tue, 4 Oct 2022 16:29:40 GMT (envelope-from git) Date: Tue, 4 Oct 2022 16:29:40 GMT Message-Id: <202210041629.294GTeK7049872@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org From: Leandro Lupori Subject: git: 0ccf063e075a - stable/13 - powerpc64: fix radix on pseries TLB invalidation List-Id: Commit messages for all branches of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-all List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-dev-commits-src-all@freebsd.org X-BeenThere: dev-commits-src-all@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: luporl X-Git-Repository: src X-Git-Refname: refs/heads/stable/13 X-Git-Reftype: branch X-Git-Commit: 0ccf063e075ac02d3b487b3f51f001e8f4151f24 Auto-Submitted: auto-generated ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1664900980; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=RpIO8f5rzvF5Q/x6YOk9xo26sf/oFTymQJMcrAhLHvY=; b=qXZ0xusoxlUXvCRuPbBMv+xisYbXUopjy5YOtQ/8hglTCGdTZfo54QNDV6acQCZPp0B739 gV/px0osgq+O8G8XEdoogzxV4RhXsTwTTIJIAE8trtadBhrK74EDRErjPzCooPEnPRIGqV nfhg2TcSw+POm1wyDo5L0SnlS6dd7LGboW+nKeIP5xu80v9ZBSi1RFVjFFFf6uATxLgGc2 vBBhUL+dkuDORK9lium9JDJKb23A51p2YLds2o6mHybgitqz4iC7SfBGYmnBWdCf6aezeQ 5+ptOgcVPT0QDfMDsI14J+Oll7F32fFSDLez2piXtF0Wy8V1L+RSsaIO+gsvdA== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1664900980; a=rsa-sha256; cv=none; b=QFFdlokSp16x1kEhZecmiCgwIvcLCzETVU/5aPk4YAFsCinKCpEktIui3VkB2wN9yd91a2 3Tcx1ZupfdLDd+PlC/XBt+lVmuH7Ac4mSiEoG87gANzPQY8F1LCMfwFvF9rLTNP3V0dUkD J9jg6iedkYIQPHOpty10GH3nPdPuXPf6QqS5+btAypLNJvPO06xGgLC7AQK8OAOwREXcRk pEEmWU0febJLFQ+wi14XPoHyWhhH/NuQxnmlsCCheUHhIlcd0h5RlsEvNaADUgdhy+boiR GggjRLO2aZnwwcatDZ/+ywgqEuqPn57+hADxFmSiDrl9zm42dSz7zWjWY0yT0Q== ARC-Authentication-Results: i=1; mx1.freebsd.org; none X-ThisMailContainsUnwantedMimeParts: N The branch stable/13 has been updated by luporl: URL: https://cgit.FreeBSD.org/src/commit/?id=0ccf063e075ac02d3b487b3f51f001e8f4151f24 commit 0ccf063e075ac02d3b487b3f51f001e8f4151f24 Author: Leandro Lupori AuthorDate: 2021-09-08 11:37:11 +0000 Commit: Leandro Lupori CommitDate: 2022-10-04 16:24:14 +0000 powerpc64: fix radix on pseries TLB invalidation When running in a virtualized environment, TLB invalidations can only be performed on process scope, as only the hypervisor is allowed to invalidate a global scope, or else a Program Interrupt is triggered. Since we are here, also make sure that the register process table hypercall returns success. Reviewed by: jhibbits Sponsored by: Instituto de Pesquisas Eldorado (eldorado.org.br) Differential Revision: https://reviews.freebsd.org/D31775 (cherry picked from commit 4f7c436548ea1cc935c4f4b237693fbe8ed7939a) --- sys/powerpc/aim/mmu_radix.c | 27 ++++++++++++++++----------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/sys/powerpc/aim/mmu_radix.c b/sys/powerpc/aim/mmu_radix.c index f77c1f5c8da4..34736d5031bd 100644 --- a/sys/powerpc/aim/mmu_radix.c +++ b/sys/powerpc/aim/mmu_radix.c @@ -656,10 +656,10 @@ extern void bs_remap_earlyboot(void); #define PARTTAB_HR (1UL << 63) /* host uses radix */ #define PARTTAB_GR (1UL << 63) /* guest uses radix must match host */ -/* TLB flush actions. Used as argument to tlbiel_all() */ +/* TLB flush actions. Used as argument to tlbiel_flush() */ enum { - TLB_INVAL_SCOPE_LPID = 0, /* invalidate TLBs for current LPID */ - TLB_INVAL_SCOPE_GLOBAL = 1, /* invalidate all TLBs */ + TLB_INVAL_SCOPE_LPID = 2, /* invalidate TLBs for current LPID */ + TLB_INVAL_SCOPE_GLOBAL = 3, /* invalidate all TLBs */ }; #define NPV_LIST_LOCKS MAXCPU @@ -757,9 +757,11 @@ tlbiel_flush_isa3(uint32_t num_sets, uint32_t is) * and partition table entries. Then flush the remaining sets of the * TLB. */ - tlbiel_radix_set_isa300(0, is, 0, RIC_FLUSH_ALL, 0); - for (set = 1; set < num_sets; set++) - tlbiel_radix_set_isa300(set, is, 0, RIC_FLUSH_TLB, 0); + if (is == TLB_INVAL_SCOPE_GLOBAL) { + tlbiel_radix_set_isa300(0, is, 0, RIC_FLUSH_ALL, 0); + for (set = 1; set < num_sets; set++) + tlbiel_radix_set_isa300(set, is, 0, RIC_FLUSH_TLB, 0); + } /* Do the same for process scoped entries. */ tlbiel_radix_set_isa300(0, is, 0, RIC_FLUSH_ALL, 1); @@ -772,13 +774,10 @@ tlbiel_flush_isa3(uint32_t num_sets, uint32_t is) static void mmu_radix_tlbiel_flush(int scope) { - int is; - MPASS(scope == TLB_INVAL_SCOPE_LPID || scope == TLB_INVAL_SCOPE_GLOBAL); - is = scope + 2; - tlbiel_flush_isa3(POWER9_TLB_SETS_RADIX, is); + tlbiel_flush_isa3(POWER9_TLB_SETS_RADIX, scope); __asm __volatile(PPC_INVALIDATE_ERAT "; isync" : : :"memory"); } @@ -2191,9 +2190,15 @@ mmu_radix_proctab_init(void) __asm __volatile("eieio; tlbsync; ptesync" : : : "memory"); #ifdef PSERIES } else { - phyp_hcall(H_REGISTER_PROC_TBL, + int64_t rc; + + rc = phyp_hcall(H_REGISTER_PROC_TBL, PROC_TABLE_NEW | PROC_TABLE_RADIX | PROC_TABLE_GTSE, proctab0pa, 0, PROCTAB_SIZE_SHIFT - 12); + if (rc != H_SUCCESS) + panic("mmu_radix_proctab_init: " + "failed to register process table: rc=%jd", + (intmax_t)rc); #endif }