Received: by 2002:a05:6a10:16a7:0:0:0:0 with SMTP id gp39csp795078pxb; Tue, 3 Nov 2020 12:44:37 -0800 (PST) X-Google-Smtp-Source: ABdhPJzBmJ0BBr1/6lThLM0YLo6130RWDURgDC8YfDnqVqFy38DEiUI4kTo1L/fk6F9Kas+GQngf X-Received: by 2002:a17:906:7f10:: with SMTP id d16mr4681359ejr.104.1604436276834; Tue, 03 Nov 2020 12:44:36 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1604436276; cv=none; d=google.com; s=arc-20160816; b=RFhFlE2Ifi7HksmG7WgR7aPyotVisvd2oil8c8OJNR968FZ5wlti6XgW6bN2qBxvKI 7x4Vk3aE7mMfyqOoKmRUjz6usYbgAVMmm1x6VTd7z0lrUpviibChll1epTO8XbwwYXig AaA8I1DJ5GutFtgbVAe3WyhiU7I0ckcaxalaHf5XLmx0yH7Fpd0uKAVSpm+BVD9gnz5A SrcJ6Dqf2psa3emJN0vrNG//D/NRR1qzDruR3K92V6NyzY0oqaryxJ1jb7RTlzjGw/fD zBoiYzY05kyOiPOEVt2esc9at+ulTcpgShQoelJftNCefREnaJ/Jxa0JjFe5JIAKNVgk Lr5Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=Zq5Z8q2yTU7+Kk/bX8zu/pYXmu93giX8yWyz3wQBBWU=; b=CYnm8LSyikQqpH8WKuzhMq1RbNQFYT28uXj1MMCh9rnABnnvSOH7m6BzAYf2uF2Rsz L9F5tgIy8wwV01rR1HdNhVHg0vJMvWzN0omDDtbXOnbqMM9nbvAcECz97Xe6KM/j4hMD JvMQsegnyreNo1kxEBGoQfSRk5qOuINaxHmYQuTTI80hNZLNLJKXAG3ihAlYc58GD6Bc ruIkIuA4Xpaz3LNsLhp8h9DLduEnvHiLchWMZMCK4bVWKkC6wJOCFEU44sfkhAAbDIcz kWcxVi8d0r4N1UMnTlWt1+6Yd82dqVvz+3+NcxPFdnCiG/DquwF1HeGfruSdGg7Pfc0G RpcQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=lYhUsM4C; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id e10si12007103edc.106.2020.11.03.12.44.13; Tue, 03 Nov 2020 12:44:36 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=lYhUsM4C; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730391AbgKCUlg (ORCPT + 99 others); Tue, 3 Nov 2020 15:41:36 -0500 Received: from mail.kernel.org ([198.145.29.99]:53388 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729995AbgKCUlc (ORCPT ); Tue, 3 Nov 2020 15:41:32 -0500 Received: from localhost (83-86-74-64.cable.dynamic.v4.ziggo.nl [83.86.74.64]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 3C89B2224E; Tue, 3 Nov 2020 20:41:31 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1604436091; bh=VUGwMPfZGW+1mMj7jlP06cHUXqmzfN8zHnrsmoHawts=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=lYhUsM4Co788fVCCnvBv4N1oyxReOomjLLdZCbUbM8xlfvZrT2nkibh+s5qpgYiaK gfFjTkE7GWA4i77zv54lvkoUzozIB3o2OFOpy86uS7RkNHhAWJH0o1ME63I6UuTS3q /4pPAsKYBuXxsAGeUNYUQucip88HPCNPmL4yh6pw= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Nicholas Piggin , Paul Mackerras , Michael Ellerman , Sasha Levin Subject: [PATCH 5.9 061/391] powerpc/64s: handle ISA v3.1 local copy-paste context switches Date: Tue, 3 Nov 2020 21:31:52 +0100 Message-Id: <20201103203351.480716817@linuxfoundation.org> X-Mailer: git-send-email 2.29.2 In-Reply-To: <20201103203348.153465465@linuxfoundation.org> References: <20201103203348.153465465@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Nicholas Piggin [ Upstream commit dc462267d2d7aacffc3c1d99b02d7a7c59db7c66 ] The ISA v3.1 the copy-paste facility has a new memory move functionality which allows the copy buffer to be pasted to domestic memory (RAM) as opposed to foreign memory (accelerator). This means the POWER9 trick of avoiding the cp_abort on context switch if the process had not mapped foreign memory does not work on POWER10. Do the cp_abort unconditionally there. KVM must also cp_abort on guest exit to prevent copy buffer state leaking between contexts. Signed-off-by: Nicholas Piggin Acked-by: Paul Mackerras Signed-off-by: Michael Ellerman Link: https://lore.kernel.org/r/20200825075535.224536-1-npiggin@gmail.com Signed-off-by: Sasha Levin --- arch/powerpc/kernel/process.c | 16 +++++++++------- arch/powerpc/kvm/book3s_hv.c | 7 +++++++ arch/powerpc/kvm/book3s_hv_rmhandlers.S | 8 ++++++++ 3 files changed, 24 insertions(+), 7 deletions(-) diff --git a/arch/powerpc/kernel/process.c b/arch/powerpc/kernel/process.c index 73a57043ee662..3f2dc0675ea7a 100644 --- a/arch/powerpc/kernel/process.c +++ b/arch/powerpc/kernel/process.c @@ -1256,15 +1256,17 @@ struct task_struct *__switch_to(struct task_struct *prev, restore_math(current->thread.regs); /* - * The copy-paste buffer can only store into foreign real - * addresses, so unprivileged processes can not see the - * data or use it in any way unless they have foreign real - * mappings. If the new process has the foreign real address - * mappings, we must issue a cp_abort to clear any state and - * prevent snooping, corruption or a covert channel. + * On POWER9 the copy-paste buffer can only paste into + * foreign real addresses, so unprivileged processes can not + * see the data or use it in any way unless they have + * foreign real mappings. If the new process has the foreign + * real address mappings, we must issue a cp_abort to clear + * any state and prevent snooping, corruption or a covert + * channel. ISA v3.1 supports paste into local memory. */ if (current->mm && - atomic_read(¤t->mm->context.vas_windows)) + (cpu_has_feature(CPU_FTR_ARCH_31) || + atomic_read(¤t->mm->context.vas_windows))) asm volatile(PPC_CP_ABORT); } #endif /* CONFIG_PPC_BOOK3S_64 */ diff --git a/arch/powerpc/kvm/book3s_hv.c b/arch/powerpc/kvm/book3s_hv.c index 4ba06a2a306cf..3bd3118c76330 100644 --- a/arch/powerpc/kvm/book3s_hv.c +++ b/arch/powerpc/kvm/book3s_hv.c @@ -3530,6 +3530,13 @@ static int kvmhv_load_hv_regs_and_go(struct kvm_vcpu *vcpu, u64 time_limit, */ asm volatile("eieio; tlbsync; ptesync"); + /* + * cp_abort is required if the processor supports local copy-paste + * to clear the copy buffer that was under control of the guest. + */ + if (cpu_has_feature(CPU_FTR_ARCH_31)) + asm volatile(PPC_CP_ABORT); + mtspr(SPRN_LPID, vcpu->kvm->arch.host_lpid); /* restore host LPID */ isync(); diff --git a/arch/powerpc/kvm/book3s_hv_rmhandlers.S b/arch/powerpc/kvm/book3s_hv_rmhandlers.S index 799d6d0f4eade..cd9995ee84419 100644 --- a/arch/powerpc/kvm/book3s_hv_rmhandlers.S +++ b/arch/powerpc/kvm/book3s_hv_rmhandlers.S @@ -1830,6 +1830,14 @@ END_FTR_SECTION_IFSET(CPU_FTR_P9_RADIX_PREFETCH_BUG) 2: #endif /* CONFIG_PPC_RADIX_MMU */ + /* + * cp_abort is required if the processor supports local copy-paste + * to clear the copy buffer that was under control of the guest. + */ +BEGIN_FTR_SECTION + PPC_CP_ABORT +END_FTR_SECTION_IFSET(CPU_FTR_ARCH_31) + /* * POWER7/POWER8 guest -> host partition switch code. * We don't have to lock against tlbies but we do -- 2.27.0