From patchwork Tue May 28 12:59:06 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Fuad Tabba X-Patchwork-Id: 13676664 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 5D037C25B78 for ; Tue, 28 May 2024 12:59:50 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:Cc:To:From:Subject:Message-ID: References:Mime-Version:In-Reply-To:Date:Reply-To:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:List-Owner; bh=QDcr6kDSGP7U5xxbUQbrSVyFAuA43St6PHOtxpDFBbA=; b=OyCuj/Io0t7YyZADh4J8y1f7zM rF8vIzAH+BF6i9qFqLm6y5F6NAIGEULwII8FhZ9fp+teW65ywyZTfhBMYX4bH5g/X9099I7xScmbp gqubFHOjtJOObnJbhv2Wc1AowvlaBsuEDM41eSBlspd6OCFS2AEF4jcrVWRh30qHebPZYS74KuyTA K8U2TH1KMPfWFlWQNUmoNGYOhkVHHRqGCJKom1VtioGRE/uD0UHNproXYHX6T5Amx3H+e9ZrPDUJc jokVTNba136I4MWBgf/SS2VDjhDa4D/Nhd9t5nf1gX1z718KiCyVw2XU85N1oUJDQ4xjKHSeirwZm OGviwobA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1sBwQW-00000000fii-45kE; Tue, 28 May 2024 12:59:40 +0000 Received: from mail-yb1-xb49.google.com ([2607:f8b0:4864:20::b49]) by bombadil.infradead.org with esmtps (Exim 4.97.1 #2 (Red Hat Linux)) id 1sBwQI-00000000fZ5-2tPS for linux-arm-kernel@lists.infradead.org; Tue, 28 May 2024 12:59:29 +0000 Received: by mail-yb1-xb49.google.com with SMTP id 3f1490d57ef6-df79945652eso1275897276.0 for ; Tue, 28 May 2024 05:59:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1716901164; x=1717505964; darn=lists.infradead.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=r+QiCggCS2BFvWndXiWKaMaB45YhFWVhibPBqkjOntM=; b=gY3QpInI1WC183X3QxyER+dm6ppO07YhOgQAjyhlELRmuh6O7gE6BnJRyyVUjwUg3I MnTOWAKfYlW07OeVs6f/sN2SdKMH9fs6Ntp9HPVu+USTF2a5CBaxF3G3Eb4p7zgO6jmt H1FqVHR/r8rpoar9CvwvkrlwvLDQnD4o9XQFAkUTXGikbdI9AROq27YsgOWXYuLxLLBp +v4P0ZhmS1OSB/iiL67cV4lVd7EVwZ412NOZ0DPSR2jAug0rluJ7Td6De+LbM9iZGvL9 kPGDeqye5Govyxj3ZqryD3gliRm7mJg7MmCeIPEcmmyLaWoGPAfanI2XvhrPDpncproE LHGw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1716901164; x=1717505964; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=r+QiCggCS2BFvWndXiWKaMaB45YhFWVhibPBqkjOntM=; b=utCsI8NvUC4VRE7VNgyPc44lpf+zMrl1ZBJk/MJEvdh81aIkcfppOz1kxTSM/QhSkq cK2VAtob3JzzzNfO/5oURpujqOSEui2oE9a0ohZ5afeaKIc5UulsDCnEf0qxY6I+Sg9x ZwXiECJ83lz8lgZx8hO+PHIY3r4lWG6UO7MQo/lhaoRj2FSmWyoGQXXzXmSHPDv+8/MZ EkHkRERbYYkjjBz72yDv6sKh2Ec3sFQ8XHWd43G02a0IocR8pjhlY9NghdYxT1FJ6a8i CI8Xu4aVdRr3u4i4A63iXf9JUnlTMNaOLfYyv7bFZU9hEWdVK9Kxbx2DU3px/Vyf8kir c32g== X-Forwarded-Encrypted: i=1; AJvYcCURLZWr+Suz/9HfW5o5Lbq0DZijvIabUaWSJshxlrTAcY5rnFXBUzKjItgjgPojA1QD+3p+SeSAfeHcUD+JTolUDp3KBI3q+Y5yncSQZC9ip9YRk2g= X-Gm-Message-State: AOJu0YxifbpRbO4tTqVKN3bl0x20ri4+HjHVDN+9YxD1hkaQHiHZVS4T 2qQ8gLWf63Hnqngn+++ccMINksCMm4JEaSZPEyq06lwVnmNs9FiGZ1VHHOrrBFqk3COJuDQOwQ= = X-Google-Smtp-Source: AGHT+IEslkFdzwwVLli6sx9gX8TcTiCvwCxvf3/LpaNXjWwdImIRi6Ue9Ms/VJWTEMEOMh5le/Q+r2Kqqw== X-Received: from fuad.c.googlers.com ([fda3:e722:ac3:cc00:28:9cb1:c0a8:1613]) (user=tabba job=sendgmr) by 2002:a05:6902:2b01:b0:dda:c59c:3953 with SMTP id 3f1490d57ef6-df772046936mr3250810276.0.1716901163877; Tue, 28 May 2024 05:59:23 -0700 (PDT) Date: Tue, 28 May 2024 13:59:06 +0100 In-Reply-To: <20240528125914.277057-1-tabba@google.com> Mime-Version: 1.0 References: <20240528125914.277057-1-tabba@google.com> X-Mailer: git-send-email 2.45.1.288.g0e0cd299f1-goog Message-ID: <20240528125914.277057-4-tabba@google.com> Subject: [PATCH v3 03/11] KVM: arm64: Specialize handling of host fpsimd state on trap From: Fuad Tabba To: kvmarm@lists.linux.dev, linux-arm-kernel@lists.infradead.org Cc: maz@kernel.org, will@kernel.org, qperret@google.com, tabba@google.com, seanjc@google.com, alexandru.elisei@arm.com, catalin.marinas@arm.com, philmd@linaro.org, james.morse@arm.com, suzuki.poulose@arm.com, oliver.upton@linux.dev, mark.rutland@arm.com, broonie@kernel.org, joey.gouly@arm.com, rananta@google.com, yuzenghui@huawei.com X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240528_055927_135794_DAACFFE4 X-CRM114-Status: GOOD ( 13.80 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org In subsequent patches, n/vhe will diverge on saving the host fpsimd/sve state when taking a guest fpsimd/sve trap. Add a specialized helper to handle it. No functional change intended. Signed-off-by: Fuad Tabba Reviewed-by: Mark Brown --- arch/arm64/kvm/hyp/include/hyp/switch.h | 4 +++- arch/arm64/kvm/hyp/nvhe/switch.c | 5 +++++ arch/arm64/kvm/hyp/vhe/switch.c | 5 +++++ 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/arch/arm64/kvm/hyp/include/hyp/switch.h b/arch/arm64/kvm/hyp/include/hyp/switch.h index 2cfbfedadea6..d3a3f1cee668 100644 --- a/arch/arm64/kvm/hyp/include/hyp/switch.h +++ b/arch/arm64/kvm/hyp/include/hyp/switch.h @@ -320,6 +320,8 @@ static inline void __hyp_sve_restore_guest(struct kvm_vcpu *vcpu) write_sysreg_el1(__vcpu_sys_reg(vcpu, ZCR_EL1), SYS_ZCR); } +static void kvm_hyp_save_fpsimd_host(struct kvm_vcpu *vcpu); + /* * We trap the first access to the FP/SIMD to save the host context and * restore the guest context lazily. @@ -360,7 +362,7 @@ static bool kvm_hyp_handle_fpsimd(struct kvm_vcpu *vcpu, u64 *exit_code) /* Write out the host state if it's in the registers */ if (host_owns_fp_regs()) - __fpsimd_save_state(*host_data_ptr(fpsimd_state)); + kvm_hyp_save_fpsimd_host(vcpu); /* Restore the guest state */ if (sve_guest) diff --git a/arch/arm64/kvm/hyp/nvhe/switch.c b/arch/arm64/kvm/hyp/nvhe/switch.c index 6758cd905570..019f863922fa 100644 --- a/arch/arm64/kvm/hyp/nvhe/switch.c +++ b/arch/arm64/kvm/hyp/nvhe/switch.c @@ -182,6 +182,11 @@ static bool kvm_handle_pvm_sys64(struct kvm_vcpu *vcpu, u64 *exit_code) kvm_handle_pvm_sysreg(vcpu, exit_code)); } +static void kvm_hyp_save_fpsimd_host(struct kvm_vcpu *vcpu) +{ + __fpsimd_save_state(*host_data_ptr(fpsimd_state)); +} + static const exit_handler_fn hyp_exit_handlers[] = { [0 ... ESR_ELx_EC_MAX] = NULL, [ESR_ELx_EC_CP15_32] = kvm_hyp_handle_cp15_32, diff --git a/arch/arm64/kvm/hyp/vhe/switch.c b/arch/arm64/kvm/hyp/vhe/switch.c index d7af5f46f22a..20073579e9f5 100644 --- a/arch/arm64/kvm/hyp/vhe/switch.c +++ b/arch/arm64/kvm/hyp/vhe/switch.c @@ -262,6 +262,11 @@ static bool kvm_hyp_handle_eret(struct kvm_vcpu *vcpu, u64 *exit_code) return true; } +static void kvm_hyp_save_fpsimd_host(struct kvm_vcpu *vcpu) +{ + __fpsimd_save_state(*host_data_ptr(fpsimd_state)); +} + static const exit_handler_fn hyp_exit_handlers[] = { [0 ... ESR_ELx_EC_MAX] = NULL, [ESR_ELx_EC_CP15_32] = kvm_hyp_handle_cp15_32,