From patchwork Wed Sep 11 14:34:05 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Fares Mehanna X-Patchwork-Id: 13800695 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 kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 5068DEE49BC for ; Wed, 11 Sep 2024 14:37:43 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id D7A8594004C; Wed, 11 Sep 2024 10:37:42 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id D2AB3940021; Wed, 11 Sep 2024 10:37:42 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id BCBA094004C; Wed, 11 Sep 2024 10:37:42 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0017.hostedemail.com [216.40.44.17]) by kanga.kvack.org (Postfix) with ESMTP id 9F0ED940021 for ; Wed, 11 Sep 2024 10:37:42 -0400 (EDT) Received: from smtpin10.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay02.hostedemail.com (Postfix) with ESMTP id 5DE541202C3 for ; Wed, 11 Sep 2024 14:37:42 +0000 (UTC) X-FDA: 82552711164.10.CB68F34 Received: from smtp-fw-80007.amazon.com (smtp-fw-80007.amazon.com [99.78.197.218]) by imf24.hostedemail.com (Postfix) with ESMTP id 59CC3180004 for ; Wed, 11 Sep 2024 14:37:39 +0000 (UTC) Authentication-Results: imf24.hostedemail.com; dkim=pass header.d=amazon.de header.s=amazon201209 header.b=uaQOaXOE; dmarc=pass (policy=quarantine) header.from=amazon.de; spf=pass (imf24.hostedemail.com: domain of "prvs=97728e23b=faresx@amazon.de" designates 99.78.197.218 as permitted sender) smtp.mailfrom="prvs=97728e23b=faresx@amazon.de" ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1726065375; a=rsa-sha256; cv=none; b=r+1fltdW9G2+5mZJUzPVKSIU3QjEJjaZk584Cb9twEURs48Fktdh+gidhTYIZKRIlrhjcy 2oyGuPNsqEal7Y8W0o1BYKJcXmMqUPFLWO64JFWsAYV+U8F9YLfnhP8Hd7xs9X5am1zuQh nSG6Qom5LrQnjJHI7JPM029zGEL8iuU= ARC-Authentication-Results: i=1; imf24.hostedemail.com; dkim=pass header.d=amazon.de header.s=amazon201209 header.b=uaQOaXOE; dmarc=pass (policy=quarantine) header.from=amazon.de; spf=pass (imf24.hostedemail.com: domain of "prvs=97728e23b=faresx@amazon.de" designates 99.78.197.218 as permitted sender) smtp.mailfrom="prvs=97728e23b=faresx@amazon.de" ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1726065375; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=ttqjEP9NZOH/UBgVCbYLfsAknImtx66onLISyRd5NFM=; b=Zg9cDrtlqjLyObYwYYY/OExvG1emIjkSe0RY8kA1WBI812OPNOC9Iy+KwgkdEUURc/g4cC sAWY2O5OSfssmTo5My1/m55tJoam/mGAumreG620WHev/7RdIG8NZUeRe/rCd+OVr0koZd UuLvccXtroTfzxTDWtN5F4bPRqii4tk= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amazon.de; i=@amazon.de; q=dns/txt; s=amazon201209; t=1726065459; x=1757601459; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=ttqjEP9NZOH/UBgVCbYLfsAknImtx66onLISyRd5NFM=; b=uaQOaXOENcpgQc/hhB8UQAG+FvHrUq4XkeDhTLi0Jut+XNyJt8x8dgYi rqdxQYQviTOzHvg0boMaQG/+NlOdYT1s60WO53oIvQIYCgyM7SP3X9W5m ZlGRCcKUyAlyaGQXwzsU++fwYrP26PjvRoT9vJszgljzfcuIyi2FRRdaf k=; X-IronPort-AV: E=Sophos;i="6.10,220,1719878400"; d="scan'208";a="329956727" Received: from pdx4-co-svc-p1-lb2-vlan2.amazon.com (HELO smtpout.prod.us-east-1.prod.farcaster.email.amazon.dev) ([10.25.36.210]) by smtp-border-fw-80007.pdx80.corp.amazon.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 11 Sep 2024 14:37:36 +0000 Received: from EX19MTAEUA001.ant.amazon.com [10.0.10.100:3852] by smtpin.naws.eu-west-1.prod.farcaster.email.amazon.dev [10.0.38.136:2525] with esmtp (Farcaster) id ac0f2d97-7ed9-430d-a2d7-58bab541e8ef; Wed, 11 Sep 2024 14:37:35 +0000 (UTC) X-Farcaster-Flow-ID: ac0f2d97-7ed9-430d-a2d7-58bab541e8ef Received: from EX19D007EUB001.ant.amazon.com (10.252.51.82) by EX19MTAEUA001.ant.amazon.com (10.252.50.50) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA) id 15.2.1258.34; Wed, 11 Sep 2024 14:37:33 +0000 Received: from EX19MTAUEC001.ant.amazon.com (10.252.135.222) by EX19D007EUB001.ant.amazon.com (10.252.51.82) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA) id 15.2.1258.35; Wed, 11 Sep 2024 14:37:33 +0000 Received: from dev-dsk-faresx-1b-27755bf1.eu-west-1.amazon.com (10.253.79.181) by mail-relay.amazon.com (10.252.135.200) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA) id 15.2.1258.34 via Frontend Transport; Wed, 11 Sep 2024 14:37:30 +0000 From: Fares Mehanna To: CC: , Fares Mehanna , "Marc Zyngier" , Oliver Upton , James Morse , Suzuki K Poulose , Zenghui Yu , Catalin Marinas , "Will Deacon" , Andrew Morton , "Kemeng Shi" , =?utf-8?q?Pierre-Cl=C3=A9ment_Tos?= =?utf-8?q?i?= , Ard Biesheuvel , Mark Rutland , Javier Martinez Canillas , "Arnd Bergmann" , Fuad Tabba , Mark Brown , Joey Gouly , Kristina Martsenko , Randy Dunlap , "Bjorn Helgaas" , Jean-Philippe Brucker , "Mike Rapoport (IBM)" , "David Hildenbrand" , Roman Kagan , "moderated list:KERNEL VIRTUAL MACHINE FOR ARM64 (KVM/arm64)" , "open list:KERNEL VIRTUAL MACHINE FOR ARM64 (KVM/arm64)" , open list , "open list:MEMORY MANAGEMENT" Subject: [RFC PATCH 6/7] arm64: KVM: Refactor C-code to access vCPU fp-registers through macros Date: Wed, 11 Sep 2024 14:34:05 +0000 Message-ID: <20240911143421.85612-7-faresx@amazon.de> X-Mailer: git-send-email 2.40.1 In-Reply-To: <20240911143421.85612-1-faresx@amazon.de> References: <20240911143421.85612-1-faresx@amazon.de> MIME-Version: 1.0 X-Rspamd-Server: rspam12 X-Rspamd-Queue-Id: 59CC3180004 X-Stat-Signature: qnt7hpygk4ap8ugaae6jjobies1bikci X-Rspam-User: X-HE-Tag: 1726065459-817732 X-HE-Meta: U2FsdGVkX1+K3425TXkYN2zrWWlD5gDYgZrbupiCEwj2ZDrzo0BLY+0OCeIOprf52U2WAl3MzOCbyUf3nBkI7TdpAAVeuWAS+JCLL0ZHLK4739jH75Bdsaln7/f1Z4fIKaOR6EAm8XrTK2N15E7knLzkSuQRJSL/Xu2fIFTEwkaNZpc1SAyVZuWkfmICi7hsbvTN3Mxf1PMW/KNxQGAYDs/gkKi+B7pHsm00mdTnKzZBa/vmrKqqB5zV+vPGzDO7NSBYDjkvXXcLOVDDT9JPrdjyjTvdngRV1LwuYouJjPb1jaDkVZt604BDbtv2XEY7h9nm0MuxbPITpFZOukhr0kEY/DB5jKrKiHfb2IryJmS4lu9eHHHmxJDOVAPyJQWo3buPCgftFOLvYajieElfQzuTadjyHPGqysXkmaRajy7c26bt4HDJOSrPFTqZ3gOKyr2lPEtWrE3b8dLFQoYwLiT7G4asrtTYvvSYiwIU33LfZei9uWAgsHhsIyZING/MZCZHkgMOqvWBaws+6mYGQt0cn+VBjID2lspn7COxiwskGatjrsDuYl/IL7BrI8K/PQBh/yf6Ui9Jl2bd+ZUsi9IB6wFpVy4GpAiJ1iGUpNkQSfJc/DxQxqf2WsxY//thNEpi61YGb/js6QuaLfYn6TR3HJvO22A2W96O4zDYVlceeaOp12cg6TjfFyZkSZkuPRBIQ9JiUeij1G6akz0y4+h2hV8fdNfCzDT1QrPgW1Y5nPAbEipPU9jtrXpu8bx/uXkPv8vzMHISfAPxmQI1J/wsQkkylwJDLIeL1XvvZsJyAZQdk/X4DzDJ1ZnO3IBmdruE7I3HQaoyOq0A9gc4J+eG0eevK4ArWFjHmLpm0XObjKotPHm3WYH2yVOVqzGDfVlR2VU5AMH7Gt+RpxvlJZWGRx79Q7ASXOPNZOcngw2RIvH4ihPwC9E7SPf3T/mWn9UmTcr3uJzEuGnUn9S wuKo5SfE wVu4KcUlaefPbMukKup+mBDzrM4cIlkoFJqVD1LlYxzValI31mySz+xh9vXzSCJwaBCWxW0Ck2V+XznWHViUJFGYKo6vO+d0wiYDUgg9kwc0M78sTR3c5nkwIunPEqe7Uyuzjpr5MULSTp4kVFQFQdwn4sI7RqZWNCo3m6j4Lpk+eK0i/Zbn9t+c5KxcyiafGkmDGe8yOF9pJiOzzSS3JwMpj3/WU6I9cpVJkN/H9TurXX9qpcFMdS2cshMRr+b0awRk5QcGrhR2a4h+uJMKn07wcYLdKhGt3gMv9Jw0wM+M0ptNajKyLClQmyFNreWNYQ2IO8SpOiHqwLm3+TIxZtMnD81QYxPXlaGHJiKEIgFNTLamYiwjoxNFfqKdW5cKO7Hu1c47Li430yfM= 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: List-Subscribe: List-Unsubscribe: Unify how KVM accesses vCPU fp-regs by using vcpu_fp_regs(). This is a prerequisite to move the fp-regs later to be dynamically allocated for vCPUs. Signed-off-by: Fares Mehanna --- arch/arm64/include/asm/kvm_host.h | 2 ++ arch/arm64/kvm/arm.c | 2 +- arch/arm64/kvm/fpsimd.c | 2 +- arch/arm64/kvm/guest.c | 6 +++--- arch/arm64/kvm/hyp/include/hyp/switch.h | 4 ++-- arch/arm64/kvm/hyp/nvhe/hyp-main.c | 4 ++-- arch/arm64/kvm/reset.c | 2 +- 7 files changed, 12 insertions(+), 10 deletions(-) diff --git a/arch/arm64/include/asm/kvm_host.h b/arch/arm64/include/asm/kvm_host.h index 23a10178d1b0..e8ed2c12479f 100644 --- a/arch/arm64/include/asm/kvm_host.h +++ b/arch/arm64/include/asm/kvm_host.h @@ -968,6 +968,8 @@ static __always_inline struct user_pt_regs *ctxt_gp_regs(const struct kvm_cpu_co return regs; } #define vcpu_gp_regs(v) (ctxt_gp_regs(&(v)->arch.ctxt)) +#define ctxt_fp_regs(ctxt) (&(ctxt).fp_regs) +#define vcpu_fp_regs(v) (ctxt_fp_regs(&(v)->arch.ctxt)) /* * Only use __vcpu_sys_reg/ctxt_sys_reg if you know you want the diff --git a/arch/arm64/kvm/arm.c b/arch/arm64/kvm/arm.c index 78c562a060de..7542af3f766a 100644 --- a/arch/arm64/kvm/arm.c +++ b/arch/arm64/kvm/arm.c @@ -2507,7 +2507,7 @@ static void finalize_init_hyp_mode(void) for_each_possible_cpu(cpu) { struct user_fpsimd_state *fpsimd_state; - fpsimd_state = &per_cpu_ptr_nvhe_sym(kvm_host_data, cpu)->host_ctxt.fp_regs; + fpsimd_state = ctxt_fp_regs(&per_cpu_ptr_nvhe_sym(kvm_host_data, cpu)->host_ctxt); per_cpu_ptr_nvhe_sym(kvm_host_data, cpu)->fpsimd_state = kern_hyp_va(fpsimd_state); } diff --git a/arch/arm64/kvm/fpsimd.c b/arch/arm64/kvm/fpsimd.c index c53e5b14038d..c27c96ae22e1 100644 --- a/arch/arm64/kvm/fpsimd.c +++ b/arch/arm64/kvm/fpsimd.c @@ -130,7 +130,7 @@ void kvm_arch_vcpu_ctxsync_fp(struct kvm_vcpu *vcpu) * Currently we do not support SME guests so SVCR is * always 0 and we just need a variable to point to. */ - fp_state.st = &vcpu->arch.ctxt.fp_regs; + fp_state.st = vcpu_fp_regs(vcpu); fp_state.sve_state = vcpu->arch.sve_state; fp_state.sve_vl = vcpu->arch.sve_max_vl; fp_state.sme_state = NULL; diff --git a/arch/arm64/kvm/guest.c b/arch/arm64/kvm/guest.c index 821a2b7de388..3474874a00a7 100644 --- a/arch/arm64/kvm/guest.c +++ b/arch/arm64/kvm/guest.c @@ -170,13 +170,13 @@ static void *core_reg_addr(struct kvm_vcpu *vcpu, const struct kvm_one_reg *reg) KVM_REG_ARM_CORE_REG(fp_regs.vregs[31]): off -= KVM_REG_ARM_CORE_REG(fp_regs.vregs[0]); off /= 4; - return &vcpu->arch.ctxt.fp_regs.vregs[off]; + return &vcpu_fp_regs(vcpu)->vregs[off]; case KVM_REG_ARM_CORE_REG(fp_regs.fpsr): - return &vcpu->arch.ctxt.fp_regs.fpsr; + return &vcpu_fp_regs(vcpu)->fpsr; case KVM_REG_ARM_CORE_REG(fp_regs.fpcr): - return &vcpu->arch.ctxt.fp_regs.fpcr; + return &vcpu_fp_regs(vcpu)->fpcr; default: return NULL; diff --git a/arch/arm64/kvm/hyp/include/hyp/switch.h b/arch/arm64/kvm/hyp/include/hyp/switch.h index d2ed0938fc90..1444bad519db 100644 --- a/arch/arm64/kvm/hyp/include/hyp/switch.h +++ b/arch/arm64/kvm/hyp/include/hyp/switch.h @@ -319,7 +319,7 @@ static inline void __hyp_sve_restore_guest(struct kvm_vcpu *vcpu) */ sve_cond_update_zcr_vq(vcpu_sve_max_vq(vcpu) - 1, SYS_ZCR_EL2); __sve_restore_state(vcpu_sve_pffr(vcpu), - &vcpu->arch.ctxt.fp_regs.fpsr, + &vcpu_fp_regs(vcpu)->fpsr, true); /* @@ -401,7 +401,7 @@ static bool kvm_hyp_handle_fpsimd(struct kvm_vcpu *vcpu, u64 *exit_code) if (sve_guest) __hyp_sve_restore_guest(vcpu); else - __fpsimd_restore_state(&vcpu->arch.ctxt.fp_regs); + __fpsimd_restore_state(vcpu_fp_regs(vcpu)); /* Skip restoring fpexc32 for AArch64 guests */ if (!(read_sysreg(hcr_el2) & HCR_RW)) diff --git a/arch/arm64/kvm/hyp/nvhe/hyp-main.c b/arch/arm64/kvm/hyp/nvhe/hyp-main.c index f43d845f3c4e..feb1dd37f2a5 100644 --- a/arch/arm64/kvm/hyp/nvhe/hyp-main.c +++ b/arch/arm64/kvm/hyp/nvhe/hyp-main.c @@ -32,7 +32,7 @@ static void __hyp_sve_save_guest(struct kvm_vcpu *vcpu) * on the VL, so use a consistent (i.e., the maximum) guest VL. */ sve_cond_update_zcr_vq(vcpu_sve_max_vq(vcpu) - 1, SYS_ZCR_EL2); - __sve_save_state(vcpu_sve_pffr(vcpu), &vcpu->arch.ctxt.fp_regs.fpsr, true); + __sve_save_state(vcpu_sve_pffr(vcpu), &vcpu_fp_regs(vcpu)->fpsr, true); write_sysreg_s(ZCR_ELx_LEN_MASK, SYS_ZCR_EL2); } @@ -71,7 +71,7 @@ static void fpsimd_sve_sync(struct kvm_vcpu *vcpu) if (vcpu_has_sve(vcpu)) __hyp_sve_save_guest(vcpu); else - __fpsimd_save_state(&vcpu->arch.ctxt.fp_regs); + __fpsimd_save_state(vcpu_fp_regs(vcpu)); if (system_supports_sve()) __hyp_sve_restore_host(); diff --git a/arch/arm64/kvm/reset.c b/arch/arm64/kvm/reset.c index 0b0ae5ae7bc2..5f38acf5d156 100644 --- a/arch/arm64/kvm/reset.c +++ b/arch/arm64/kvm/reset.c @@ -229,7 +229,7 @@ void kvm_reset_vcpu(struct kvm_vcpu *vcpu) /* Reset core registers */ memset(vcpu_gp_regs(vcpu), 0, sizeof(*vcpu_gp_regs(vcpu))); - memset(&vcpu->arch.ctxt.fp_regs, 0, sizeof(vcpu->arch.ctxt.fp_regs)); + memset(vcpu_fp_regs(vcpu), 0, sizeof(*vcpu_fp_regs(vcpu))); vcpu->arch.ctxt.spsr_abt = 0; vcpu->arch.ctxt.spsr_und = 0; vcpu->arch.ctxt.spsr_irq = 0;