From nobody Thu Apr 2 05:52:40 2026 Received: from mail.loongson.cn (mail.loongson.cn [114.242.206.163]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 9C88437E2F3; Mon, 30 Mar 2026 03:58:43 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=114.242.206.163 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774843127; cv=none; b=Pe8WMGvfTrfsyJYwEyjdZ75B2ylbmppbU3ohzqIoA32gG9DQCza0Fj7l63uypodGjOPrrHlBERCJz/F/TeFZMUjG21vvwT3rAzYmFUTDBg9owXjT+++emCTbZsvtXs4XGUjuGTdirGk47lbwGGXk6NxEV3l10SYXc46xiRsMHfQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774843127; c=relaxed/simple; bh=W7OAHQraw1gdBGtic7MB0Md5fgkWMELvqZ5WQ/SVRf8=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=s8e1UDLEQpSLrGXbIs0ILfzNYwqLc1X+Bqbr+MIFBhqMyE0QeQ/5p3+diQ24Pl/vJy+jUGW7I9H/5cq2+M3MSue/cx+sm9fFmUDsLHMDu7I6D71L81nfG9vc2qlJqtc1uC1fu7AHiZGivBh06l1GK1Fqwh6wlwOwd1ksJsc81ss= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=loongson.cn; spf=pass smtp.mailfrom=loongson.cn; arc=none smtp.client-ip=114.242.206.163 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=loongson.cn Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=loongson.cn Received: from loongson.cn (unknown [10.2.5.213]) by gateway (Coremail) with SMTP id _____8Cx48Dr9MlpP9IfAA--.31070S3; Mon, 30 Mar 2026 11:58:35 +0800 (CST) Received: from localhost.localdomain (unknown [10.2.5.213]) by front1 (Coremail) with SMTP id qMiowJCx_8Lq9MlpwXFgAA--.53173S3; Mon, 30 Mar 2026 11:58:35 +0800 (CST) From: Bibo Mao To: Huacai Chen Cc: kernel@xen0n.name, kvm@vger.kernel.org, loongarch@lists.linux.dev, linux-kernel@vger.kernel.org Subject: [PATCH v2 1/6] LoongArch: KVM: Add separate KVM_REQ_LBT_LOAD request bit Date: Mon, 30 Mar 2026 11:58:27 +0800 Message-Id: <20260330035832.2204720-2-maobibo@loongson.cn> X-Mailer: git-send-email 2.39.3 In-Reply-To: <20260330035832.2204720-1-maobibo@loongson.cn> References: <20260330035832.2204720-1-maobibo@loongson.cn> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-CM-TRANSID: qMiowJCx_8Lq9MlpwXFgAA--.53173S3 X-CM-SenderInfo: xpdruxter6z05rqj20fqof0/ X-Coremail-Antispam: 1Uk129KBjDUn29KB7ZKAUJUUUUU529EdanIXcx71UUUUU7KY7 ZEXasCq-sGcSsGvfJ3UbIjqfuFe4nvWSU5nxnvy29KBjDU0xBIdaVrnUUvcSsGvfC2Kfnx nUUI43ZEXa7xR_UUUUUUUUU== Content-Type: text/plain; charset="utf-8" There are different structures with LBT and FPU register restore, with LBT the structure is vcpu::arch::lbt, with FPU the structure is vcpu::arch::fpu. And FPU/LSX/LASX saving and restoring share the common structure vcpu::arch::fpu. New request bit KVM_REQ_LBT_LOAD is used for LBT register restore. Signed-off-by: Bibo Mao --- arch/loongarch/include/asm/kvm_host.h | 1 + arch/loongarch/kvm/exit.c | 6 ++---- arch/loongarch/kvm/vcpu.c | 6 +++--- 3 files changed, 6 insertions(+), 7 deletions(-) diff --git a/arch/loongarch/include/asm/kvm_host.h b/arch/loongarch/include= /asm/kvm_host.h index 19eb5e5c3984..035e698309d0 100644 --- a/arch/loongarch/include/asm/kvm_host.h +++ b/arch/loongarch/include/asm/kvm_host.h @@ -38,6 +38,7 @@ #define KVM_REQ_STEAL_UPDATE KVM_ARCH_REQ(1) #define KVM_REQ_PMU KVM_ARCH_REQ(2) #define KVM_REQ_AUX_LOAD KVM_ARCH_REQ(3) +#define KVM_REQ_LBT_LOAD KVM_ARCH_REQ(4) =20 #define KVM_GUESTDBG_SW_BP_MASK \ (KVM_GUESTDBG_ENABLE | KVM_GUESTDBG_USE_SW_BP) diff --git a/arch/loongarch/kvm/exit.c b/arch/loongarch/kvm/exit.c index da0ad89f2eb7..3e06a66a90f8 100644 --- a/arch/loongarch/kvm/exit.c +++ b/arch/loongarch/kvm/exit.c @@ -827,10 +827,8 @@ static int kvm_handle_lbt_disabled(struct kvm_vcpu *vc= pu, int ecode) { if (!kvm_guest_has_lbt(&vcpu->arch)) kvm_queue_exception(vcpu, EXCCODE_INE, 0); - else { - vcpu->arch.aux_ldtype =3D KVM_LARCH_LBT; - kvm_make_request(KVM_REQ_AUX_LOAD, vcpu); - } + else + kvm_make_request(KVM_REQ_LBT_LOAD, vcpu); =20 return RESUME_GUEST; } diff --git a/arch/loongarch/kvm/vcpu.c b/arch/loongarch/kvm/vcpu.c index 831f381a8fd1..2f2c1cbe127c 100644 --- a/arch/loongarch/kvm/vcpu.c +++ b/arch/loongarch/kvm/vcpu.c @@ -249,15 +249,15 @@ static void kvm_late_check_requests(struct kvm_vcpu *= vcpu) case KVM_LARCH_LASX: kvm_own_lasx(vcpu); break; - case KVM_LARCH_LBT: - kvm_own_lbt(vcpu); - break; default: break; } =20 vcpu->arch.aux_ldtype =3D 0; } + + if (kvm_check_request(KVM_REQ_LBT_LOAD, vcpu)) + kvm_own_lbt(vcpu); } =20 /* --=20 2.39.3 From nobody Thu Apr 2 05:52:40 2026 Received: from mail.loongson.cn (mail.loongson.cn [114.242.206.163]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 180B6390CA1; Mon, 30 Mar 2026 04:00:07 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=114.242.206.163 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774843209; cv=none; b=VQDoMm8Vn5a6v5iM/kk5BGdJIscyvJBpcNUVOpBE5TAvimCN7mtvz2oWI/s6CtcSqRopdYUGssyWGvPdYq3mzmiiILqN78Uuxhf4ehcfrLSy970X3dYAZNCukaZ0WzozSlRWZI0+jYssHebOK+V+PQGbgO3HI3Ed7G0h4tRUrJQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774843209; c=relaxed/simple; bh=YtpjlH7StWwQFlesx8SN9c2wzYgTTE48IW9v3EblGLw=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=YEK4b/n+G7cuwkKu9d1jMQlJyhBtbxIoAWeKiRyJIjsvvNmYs+r9BIaqu9pBAp1340VwiqRuRHGqxdIM1E6Syvg+4E5ifMjWi2iHNdeuJzU9o/1Acbwc2IVzx/ckQxK11KyiBlSuRoJwDEGxMyM0vzX1fDa1WG/sgSn5sgQKLsE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=loongson.cn; spf=pass smtp.mailfrom=loongson.cn; arc=none smtp.client-ip=114.242.206.163 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=loongson.cn Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=loongson.cn Received: from loongson.cn (unknown [10.2.5.213]) by gateway (Coremail) with SMTP id _____8Dx_8Ps9MlpQ9IfAA--.25318S3; Mon, 30 Mar 2026 11:58:36 +0800 (CST) Received: from localhost.localdomain (unknown [10.2.5.213]) by front1 (Coremail) with SMTP id qMiowJCx_8Lq9MlpwXFgAA--.53173S4; Mon, 30 Mar 2026 11:58:35 +0800 (CST) From: Bibo Mao To: Huacai Chen Cc: kernel@xen0n.name, kvm@vger.kernel.org, loongarch@lists.linux.dev, linux-kernel@vger.kernel.org Subject: [PATCH v2 2/6] LoongArch: KVM: Enable FPU with max VM supported FPU type Date: Mon, 30 Mar 2026 11:58:28 +0800 Message-Id: <20260330035832.2204720-3-maobibo@loongson.cn> X-Mailer: git-send-email 2.39.3 In-Reply-To: <20260330035832.2204720-1-maobibo@loongson.cn> References: <20260330035832.2204720-1-maobibo@loongson.cn> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-CM-TRANSID: qMiowJCx_8Lq9MlpwXFgAA--.53173S4 X-CM-SenderInfo: xpdruxter6z05rqj20fqof0/ X-Coremail-Antispam: 1Uk129KBjDUn29KB7ZKAUJUUUUU529EdanIXcx71UUUUU7KY7 ZEXasCq-sGcSsGvfJ3UbIjqfuFe4nvWSU5nxnvy29KBjDU0xBIdaVrnUUvcSsGvfC2Kfnx nUUI43ZEXa7xR_UUUUUUUUU== Content-Type: text/plain; charset="utf-8" There are three FPU type FPU/LSX/LASX representing FPU64, FPU128 and FPU256, and now lazy FPU method is used with FPU enabling. There are three different HW FPU exception code with different FPU type. The exising method is to enable specified FPU type with responding FPU exeception. Supposing application uses FPU64 and FPU256, there will be FPU256 exception when FPU256 type is used. Here enable FPU with VM supported type directly, it can avoid unnecessary FPU exception in future if further FPU type is used. Signed-off-by: Bibo Mao --- arch/loongarch/include/asm/kvm_host.h | 1 - arch/loongarch/kvm/exit.c | 9 ++------- arch/loongarch/kvm/vcpu.c | 19 +++++-------------- 3 files changed, 7 insertions(+), 22 deletions(-) diff --git a/arch/loongarch/include/asm/kvm_host.h b/arch/loongarch/include= /asm/kvm_host.h index 035e698309d0..7cd883a8281f 100644 --- a/arch/loongarch/include/asm/kvm_host.h +++ b/arch/loongarch/include/asm/kvm_host.h @@ -203,7 +203,6 @@ struct kvm_vcpu_arch { =20 /* Which auxiliary state is loaded (KVM_LARCH_*) */ unsigned int aux_inuse; - unsigned int aux_ldtype; =20 /* FPU state */ struct loongarch_fpu fpu FPU_ALIGN; diff --git a/arch/loongarch/kvm/exit.c b/arch/loongarch/kvm/exit.c index 3e06a66a90f8..ddc3f4cc510b 100644 --- a/arch/loongarch/kvm/exit.c +++ b/arch/loongarch/kvm/exit.c @@ -754,7 +754,6 @@ static int kvm_handle_fpu_disabled(struct kvm_vcpu *vcp= u, int ecode) return RESUME_HOST; } =20 - vcpu->arch.aux_ldtype =3D KVM_LARCH_FPU; kvm_make_request(KVM_REQ_AUX_LOAD, vcpu); =20 return RESUME_GUEST; @@ -795,10 +794,8 @@ static int kvm_handle_lsx_disabled(struct kvm_vcpu *vc= pu, int ecode) { if (!kvm_guest_has_lsx(&vcpu->arch)) kvm_queue_exception(vcpu, EXCCODE_INE, 0); - else { - vcpu->arch.aux_ldtype =3D KVM_LARCH_LSX; + else kvm_make_request(KVM_REQ_AUX_LOAD, vcpu); - } =20 return RESUME_GUEST; } @@ -815,10 +812,8 @@ static int kvm_handle_lasx_disabled(struct kvm_vcpu *v= cpu, int ecode) { if (!kvm_guest_has_lasx(&vcpu->arch)) kvm_queue_exception(vcpu, EXCCODE_INE, 0); - else { - vcpu->arch.aux_ldtype =3D KVM_LARCH_LASX; + else kvm_make_request(KVM_REQ_AUX_LOAD, vcpu); - } =20 return RESUME_GUEST; } diff --git a/arch/loongarch/kvm/vcpu.c b/arch/loongarch/kvm/vcpu.c index 2f2c1cbe127c..144e26e1ed68 100644 --- a/arch/loongarch/kvm/vcpu.c +++ b/arch/loongarch/kvm/vcpu.c @@ -239,21 +239,12 @@ static void kvm_late_check_requests(struct kvm_vcpu *= vcpu) } =20 if (kvm_check_request(KVM_REQ_AUX_LOAD, vcpu)) { - switch (vcpu->arch.aux_ldtype) { - case KVM_LARCH_FPU: - kvm_own_fpu(vcpu); - break; - case KVM_LARCH_LSX: - kvm_own_lsx(vcpu); - break; - case KVM_LARCH_LASX: + if (kvm_guest_has_lasx(&vcpu->arch)) kvm_own_lasx(vcpu); - break; - default: - break; - } - - vcpu->arch.aux_ldtype =3D 0; + else if (kvm_guest_has_lsx(&vcpu->arch)) + kvm_own_lsx(vcpu); + else + kvm_own_fpu(vcpu); } =20 if (kvm_check_request(KVM_REQ_LBT_LOAD, vcpu)) --=20 2.39.3 From nobody Thu Apr 2 05:52:40 2026 Received: from mail.loongson.cn (mail.loongson.cn [114.242.206.163]) by smtp.subspace.kernel.org (Postfix) with ESMTP id DBB9E3947B0; Mon, 30 Mar 2026 03:58:46 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=114.242.206.163 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774843128; cv=none; b=MSPwS6h7zeoC6Ok87Qg4lUV/og7okRLxSaKbYKrDpP5gr+YqKdxgsdqxtWiziScE0RFEa9W4ZuxISp7nIS/NKffUCFvaa7YZSEP+QPhKEulkUQQhjkPg0LCuT/QZHceQ6V0nBFVmy6HQ7sUF8My367+92ZuwYLgeapZSLp7HKjY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774843128; c=relaxed/simple; bh=xgrmeC4fDlkAveAib4Om1FM0vN8PwDzX5mQ0wvB1BNM=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=TBoFWH41OoSSPd93YEFKUki6SC0eJm74s2nqHntlvPOyxVpzyV2zXMi9+kTyydLbsKIwFeKVFQs1FI/qtHmuHuFSrn+ICmg0KI5DwTLYAYviGhX7UQB3gdCnH+1AJ3Jh8Q+J9e5lxDa+6EZ//aqJasTlLrdT4/cTT3hosfg4Sog= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=loongson.cn; spf=pass smtp.mailfrom=loongson.cn; arc=none smtp.client-ip=114.242.206.163 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=loongson.cn Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=loongson.cn Received: from loongson.cn (unknown [10.2.5.213]) by gateway (Coremail) with SMTP id _____8AxDMPs9MlpSNIfAA--.25212S3; Mon, 30 Mar 2026 11:58:36 +0800 (CST) Received: from localhost.localdomain (unknown [10.2.5.213]) by front1 (Coremail) with SMTP id qMiowJCx_8Lq9MlpwXFgAA--.53173S5; Mon, 30 Mar 2026 11:58:36 +0800 (CST) From: Bibo Mao To: Huacai Chen Cc: kernel@xen0n.name, kvm@vger.kernel.org, loongarch@lists.linux.dev, linux-kernel@vger.kernel.org Subject: [PATCH v2 3/6] LoongArch: KVM: Rename KVM_REQ_AUX_LOAD with KVM_REQ_FPU_LOAD Date: Mon, 30 Mar 2026 11:58:29 +0800 Message-Id: <20260330035832.2204720-4-maobibo@loongson.cn> X-Mailer: git-send-email 2.39.3 In-Reply-To: <20260330035832.2204720-1-maobibo@loongson.cn> References: <20260330035832.2204720-1-maobibo@loongson.cn> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-CM-TRANSID: qMiowJCx_8Lq9MlpwXFgAA--.53173S5 X-CM-SenderInfo: xpdruxter6z05rqj20fqof0/ X-Coremail-Antispam: 1Uk129KBjDUn29KB7ZKAUJUUUUU529EdanIXcx71UUUUU7KY7 ZEXasCq-sGcSsGvfJ3UbIjqfuFe4nvWSU5nxnvy29KBjDU0xBIdaVrnUUvcSsGvfC2Kfnx nUUI43ZEXa7xR_UUUUUUUUU== Content-Type: text/plain; charset="utf-8" Request bit KVM_REQ_AUX_LOAD is used for FPU/LSX/LASX register restore, here rename it with KVM_REQ_FPU_LOAD. Signed-off-by: Bibo Mao --- arch/loongarch/include/asm/kvm_host.h | 2 +- arch/loongarch/kvm/exit.c | 6 +++--- arch/loongarch/kvm/vcpu.c | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/arch/loongarch/include/asm/kvm_host.h b/arch/loongarch/include= /asm/kvm_host.h index 7cd883a8281f..9e0568c3c7f9 100644 --- a/arch/loongarch/include/asm/kvm_host.h +++ b/arch/loongarch/include/asm/kvm_host.h @@ -37,7 +37,7 @@ #define KVM_REQ_TLB_FLUSH_GPA KVM_ARCH_REQ(0) #define KVM_REQ_STEAL_UPDATE KVM_ARCH_REQ(1) #define KVM_REQ_PMU KVM_ARCH_REQ(2) -#define KVM_REQ_AUX_LOAD KVM_ARCH_REQ(3) +#define KVM_REQ_FPU_LOAD KVM_ARCH_REQ(3) #define KVM_REQ_LBT_LOAD KVM_ARCH_REQ(4) =20 #define KVM_GUESTDBG_SW_BP_MASK \ diff --git a/arch/loongarch/kvm/exit.c b/arch/loongarch/kvm/exit.c index ddc3f4cc510b..07426682929a 100644 --- a/arch/loongarch/kvm/exit.c +++ b/arch/loongarch/kvm/exit.c @@ -754,7 +754,7 @@ static int kvm_handle_fpu_disabled(struct kvm_vcpu *vcp= u, int ecode) return RESUME_HOST; } =20 - kvm_make_request(KVM_REQ_AUX_LOAD, vcpu); + kvm_make_request(KVM_REQ_FPU_LOAD, vcpu); =20 return RESUME_GUEST; } @@ -795,7 +795,7 @@ static int kvm_handle_lsx_disabled(struct kvm_vcpu *vcp= u, int ecode) if (!kvm_guest_has_lsx(&vcpu->arch)) kvm_queue_exception(vcpu, EXCCODE_INE, 0); else - kvm_make_request(KVM_REQ_AUX_LOAD, vcpu); + kvm_make_request(KVM_REQ_FPU_LOAD, vcpu); =20 return RESUME_GUEST; } @@ -813,7 +813,7 @@ static int kvm_handle_lasx_disabled(struct kvm_vcpu *vc= pu, int ecode) if (!kvm_guest_has_lasx(&vcpu->arch)) kvm_queue_exception(vcpu, EXCCODE_INE, 0); else - kvm_make_request(KVM_REQ_AUX_LOAD, vcpu); + kvm_make_request(KVM_REQ_FPU_LOAD, vcpu); =20 return RESUME_GUEST; } diff --git a/arch/loongarch/kvm/vcpu.c b/arch/loongarch/kvm/vcpu.c index 144e26e1ed68..553881e326eb 100644 --- a/arch/loongarch/kvm/vcpu.c +++ b/arch/loongarch/kvm/vcpu.c @@ -238,7 +238,7 @@ static void kvm_late_check_requests(struct kvm_vcpu *vc= pu) vcpu->arch.flush_gpa =3D INVALID_GPA; } =20 - if (kvm_check_request(KVM_REQ_AUX_LOAD, vcpu)) { + if (kvm_check_request(KVM_REQ_FPU_LOAD, vcpu)) { if (kvm_guest_has_lasx(&vcpu->arch)) kvm_own_lasx(vcpu); else if (kvm_guest_has_lsx(&vcpu->arch)) --=20 2.39.3 From nobody Thu Apr 2 05:52:40 2026 Received: from mail.loongson.cn (mail.loongson.cn [114.242.206.163]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 441AC390CB1; Mon, 30 Mar 2026 03:58:44 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=114.242.206.163 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774843126; cv=none; b=MWLBEPpWZhtwWMU7HFwf+1UdQ7zEkfl8os75Me5WPthWSCjds1/RhQ+Fq92pDQG1L/mefzkJYavyqAeR90xEKQNGZbSbDlrfOZk32vjLPYIEnpIsKFitTJ12B8ai5JepJtBDOAZynFkapy1X1wM+XX6mzXbH6CYZRbGX4A1tRjY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774843126; c=relaxed/simple; bh=1DycAtTRK/FBcrPbRa0G0t183Nl1ZPO/u5/QRz/s31Q=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=oYY0hZ+oXg67rIrmdrTmT2MY98T08Ln8AscIp/2sq6ED7d0LiM/EyGpZFUd2HpDEXBoAKgJ6UdTcCOdzhuMW7JVsDZXaaw25xW22Q8EyCpz8jCC1eJVfiyRspAHT8vJraJw49AR4bk3GhyFW5tQ0mbIVmMANGoY9t9gVvAPnN4w= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=loongson.cn; spf=pass smtp.mailfrom=loongson.cn; arc=none smtp.client-ip=114.242.206.163 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=loongson.cn Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=loongson.cn Received: from loongson.cn (unknown [10.2.5.213]) by gateway (Coremail) with SMTP id _____8BxcfDu9MlpTNIfAA--.25214S3; Mon, 30 Mar 2026 11:58:38 +0800 (CST) Received: from localhost.localdomain (unknown [10.2.5.213]) by front1 (Coremail) with SMTP id qMiowJAx28Hu9MlpxHFgAA--.51612S2; Mon, 30 Mar 2026 11:58:38 +0800 (CST) From: Bibo Mao To: Huacai Chen Cc: kernel@xen0n.name, kvm@vger.kernel.org, loongarch@lists.linux.dev, linux-kernel@vger.kernel.org Subject: [PATCH v2 4/6] LoongArch: KVM: Remove some middle FPU states Date: Mon, 30 Mar 2026 11:58:30 +0800 Message-Id: <20260330035832.2204720-5-maobibo@loongson.cn> X-Mailer: git-send-email 2.39.3 In-Reply-To: <20260330035832.2204720-1-maobibo@loongson.cn> References: <20260330035832.2204720-1-maobibo@loongson.cn> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-CM-TRANSID: qMiowJAx28Hu9MlpxHFgAA--.51612S2 X-CM-SenderInfo: xpdruxter6z05rqj20fqof0/ X-Coremail-Antispam: 1Uk129KBjDUn29KB7ZKAUJUUUUU529EdanIXcx71UUUUU7KY7 ZEXasCq-sGcSsGvfJ3UbIjqfuFe4nvWSU5nxnvy29KBjDU0xBIdaVrnUUvcSsGvfC2Kfnx nUUI43ZEXa7xR_UUUUUUUUU== Content-Type: text/plain; charset="utf-8" With max VM supported FPU type enabled, if VM supports LASX, there is FPU none --> LASX, no middle FPU state such as FPU --> LASX or LSX --> LASX. Here remove the middle FPU states in function kvm_own_lsx() and kvm_own_lasx(). And it becomes simpler than before. Signed-off-by: Bibo Mao --- arch/loongarch/kvm/vcpu.c | 34 +++------------------------------- 1 file changed, 3 insertions(+), 31 deletions(-) diff --git a/arch/loongarch/kvm/vcpu.c b/arch/loongarch/kvm/vcpu.c index 553881e326eb..8c3d6e1a5ed2 100644 --- a/arch/loongarch/kvm/vcpu.c +++ b/arch/loongarch/kvm/vcpu.c @@ -1390,21 +1390,7 @@ int kvm_own_lsx(struct kvm_vcpu *vcpu) /* Enable LSX for guest */ kvm_check_fcsr(vcpu, vcpu->arch.fpu.fcsr); set_csr_euen(CSR_EUEN_LSXEN | CSR_EUEN_FPEN); - switch (vcpu->arch.aux_inuse & KVM_LARCH_FPU) { - case KVM_LARCH_FPU: - /* - * Guest FPU state already loaded, - * only restore upper LSX state - */ - _restore_lsx_upper(&vcpu->arch.fpu); - break; - default: - /* Neither FP or LSX already active, - * restore full LSX state - */ - kvm_restore_lsx(&vcpu->arch.fpu); - break; - } + kvm_restore_lsx(&vcpu->arch.fpu); =20 trace_kvm_aux(vcpu, KVM_TRACE_AUX_RESTORE, KVM_TRACE_AUX_LSX); vcpu->arch.aux_inuse |=3D KVM_LARCH_LSX | KVM_LARCH_FPU; @@ -1419,22 +1405,8 @@ int kvm_own_lasx(struct kvm_vcpu *vcpu) { kvm_check_fcsr(vcpu, vcpu->arch.fpu.fcsr); set_csr_euen(CSR_EUEN_FPEN | CSR_EUEN_LSXEN | CSR_EUEN_LASXEN); - switch (vcpu->arch.aux_inuse & (KVM_LARCH_FPU | KVM_LARCH_LSX)) { - case KVM_LARCH_LSX: - case KVM_LARCH_LSX | KVM_LARCH_FPU: - /* Guest LSX state already loaded, only restore upper LASX state */ - _restore_lasx_upper(&vcpu->arch.fpu); - break; - case KVM_LARCH_FPU: - /* Guest FP state already loaded, only restore upper LSX & LASX state */ - _restore_lsx_upper(&vcpu->arch.fpu); - _restore_lasx_upper(&vcpu->arch.fpu); - break; - default: - /* Neither FP or LSX already active, restore full LASX state */ - kvm_restore_lasx(&vcpu->arch.fpu); - break; - } + /* Neither FP or LSX already active, restore full LASX state */ + kvm_restore_lasx(&vcpu->arch.fpu); =20 trace_kvm_aux(vcpu, KVM_TRACE_AUX_RESTORE, KVM_TRACE_AUX_LASX); vcpu->arch.aux_inuse |=3D KVM_LARCH_LASX | KVM_LARCH_LSX | KVM_LARCH_FPU; --=20 2.39.3 From nobody Thu Apr 2 05:52:40 2026 Received: from mail.loongson.cn (mail.loongson.cn [114.242.206.163]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 6E6853914EB; Mon, 30 Mar 2026 03:58:44 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=114.242.206.163 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774843126; cv=none; b=tWgm24qGl5zPfxzTJ+M/K6xPNXybPFqMfGX/HupaFNQnKhtKKFPtfoVqOUKW6VYqdE/inubYch8t9AK+aSJ7U9RQHwxeu04w5VVvvZ02tQNoA6pGFOZhU5wKIbx/axtY2llfGKvW4snq6eNvRuPjp6ht2+/WWCL78gt/fVYSRfk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774843126; c=relaxed/simple; bh=T0a4jKfMxPO27EU8Nd2EIEU7SOWH2R6MvU9taMXL91w=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=lac93GvS2N9J2XiUsuMokwVjS1MwX5+PAiR9KxgDH362bH4GS2HMf+H+oIbzqYVowDemeo4Cj4TD3gMUDzt20zieR8TCEU21g0/whG6UCr7LY7XpvBQXey46LGcTPkLA/ZDXkWjDMP/QZ8U0vTaQlod7JBISraIIK86WwxlliHQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=loongson.cn; spf=pass smtp.mailfrom=loongson.cn; arc=none smtp.client-ip=114.242.206.163 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=loongson.cn Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=loongson.cn Received: from loongson.cn (unknown [10.2.5.213]) by gateway (Coremail) with SMTP id _____8Bx36vv9MlpT9IfAA--.31391S3; Mon, 30 Mar 2026 11:58:39 +0800 (CST) Received: from localhost.localdomain (unknown [10.2.5.213]) by front1 (Coremail) with SMTP id qMiowJAx28Hu9MlpxHFgAA--.51612S3; Mon, 30 Mar 2026 11:58:38 +0800 (CST) From: Bibo Mao To: Huacai Chen Cc: kernel@xen0n.name, kvm@vger.kernel.org, loongarch@lists.linux.dev, linux-kernel@vger.kernel.org Subject: [PATCH v2 5/6] LoongArch: KVM: Use vm_guest_has_fpu API in kvm_lose_fpu() Date: Mon, 30 Mar 2026 11:58:31 +0800 Message-Id: <20260330035832.2204720-6-maobibo@loongson.cn> X-Mailer: git-send-email 2.39.3 In-Reply-To: <20260330035832.2204720-1-maobibo@loongson.cn> References: <20260330035832.2204720-1-maobibo@loongson.cn> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-CM-TRANSID: qMiowJAx28Hu9MlpxHFgAA--.51612S3 X-CM-SenderInfo: xpdruxter6z05rqj20fqof0/ X-Coremail-Antispam: 1Uk129KBjDUn29KB7ZKAUJUUUUU529EdanIXcx71UUUUU7KY7 ZEXasCq-sGcSsGvfJ3UbIjqfuFe4nvWSU5nxnvy29KBjDU0xBIdaVrnUUvcSsGvfC2Kfnx nUUI43ZEXa7xR_UUUUUUUUU== Content-Type: text/plain; charset="utf-8" In kvm_lose_fpu() FPU state will save in vcpu::arch::fpu, its FPU state comes from vcpu->arch.aux_inuse. Instead existing API vm_guest_has_xxx() can be used also, and bit KVM_LARCH_LASX and KVM_LARCH_LSX in arch.aux_inuse can be removed. Signed-off-by: Bibo Mao --- arch/loongarch/kvm/vcpu.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/arch/loongarch/kvm/vcpu.c b/arch/loongarch/kvm/vcpu.c index 8c3d6e1a5ed2..920f3101ed3d 100644 --- a/arch/loongarch/kvm/vcpu.c +++ b/arch/loongarch/kvm/vcpu.c @@ -1418,24 +1418,27 @@ int kvm_own_lasx(struct kvm_vcpu *vcpu) /* Save context and disable FPU */ void kvm_lose_fpu(struct kvm_vcpu *vcpu) { + if (!(vcpu->arch.aux_inuse & KVM_LARCH_FPU)) + return; + preempt_disable(); =20 kvm_check_fcsr_alive(vcpu); - if (vcpu->arch.aux_inuse & KVM_LARCH_LASX) { + if (kvm_guest_has_lasx(&vcpu->arch)) { kvm_save_lasx(&vcpu->arch.fpu); vcpu->arch.aux_inuse &=3D ~(KVM_LARCH_LSX | KVM_LARCH_FPU | KVM_LARCH_LA= SX); trace_kvm_aux(vcpu, KVM_TRACE_AUX_SAVE, KVM_TRACE_AUX_LASX); =20 /* Disable LASX & LSX & FPU */ clear_csr_euen(CSR_EUEN_FPEN | CSR_EUEN_LSXEN | CSR_EUEN_LASXEN); - } else if (vcpu->arch.aux_inuse & KVM_LARCH_LSX) { + } else if (kvm_guest_has_lsx(&vcpu->arch)) { kvm_save_lsx(&vcpu->arch.fpu); vcpu->arch.aux_inuse &=3D ~(KVM_LARCH_LSX | KVM_LARCH_FPU); trace_kvm_aux(vcpu, KVM_TRACE_AUX_SAVE, KVM_TRACE_AUX_LSX); =20 /* Disable LSX & FPU */ clear_csr_euen(CSR_EUEN_FPEN | CSR_EUEN_LSXEN); - } else if (vcpu->arch.aux_inuse & KVM_LARCH_FPU) { + } else { kvm_save_fpu(&vcpu->arch.fpu); vcpu->arch.aux_inuse &=3D ~KVM_LARCH_FPU; trace_kvm_aux(vcpu, KVM_TRACE_AUX_SAVE, KVM_TRACE_AUX_FPU); --=20 2.39.3 From nobody Thu Apr 2 05:52:40 2026 Received: from mail.loongson.cn (mail.loongson.cn [114.242.206.163]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 86B563914F3; Mon, 30 Mar 2026 03:58:44 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=114.242.206.163 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774843126; cv=none; b=nn0FFi/UcxGYzoo+RuCIRjttVSTSUbZ8cMJUwmMJ1Nl7x6WD4zUk43kCeIeDdGsaoAACd0N4YA05PvHOGuSJWFDY6Nc1VpOYwLzTgiRkdF8quQQbmjAxGP6CjpTqHEnRHGOvrLVKRTLckunAHaIMV01QjcPqTGW2jFgzsleHAAU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774843126; c=relaxed/simple; bh=HU529NctrH2zE06G/mq3hAziuZ3YwbmpXuJQwTlb3d8=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=TMDfP8MTBH4Qd/hmBN14myhyGbQsDSscTpHrFilKYanNiXQkoMgr9TafeV5R+JFsaZpJ7qKF3zWm1iga5eCdyTlV8L1z00jcsxbGbIBl9Gos3NIberZkhZB78CWV4fhjyBNKmbD/c+IPXz1dzjtyymPKTmIzoKea4st8rDXBYyg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=loongson.cn; spf=pass smtp.mailfrom=loongson.cn; arc=none smtp.client-ip=114.242.206.163 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=loongson.cn Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=loongson.cn Received: from loongson.cn (unknown [10.2.5.213]) by gateway (Coremail) with SMTP id _____8Dx_6vv9MlpUtIfAA--.31403S3; Mon, 30 Mar 2026 11:58:39 +0800 (CST) Received: from localhost.localdomain (unknown [10.2.5.213]) by front1 (Coremail) with SMTP id qMiowJAx28Hu9MlpxHFgAA--.51612S4; Mon, 30 Mar 2026 11:58:39 +0800 (CST) From: Bibo Mao To: Huacai Chen Cc: kernel@xen0n.name, kvm@vger.kernel.org, loongarch@lists.linux.dev, linux-kernel@vger.kernel.org Subject: [PATCH v2 6/6] LoongArch: KVM: Remove KVM_LARCH_LASX and KVM_LARCH_LSX Date: Mon, 30 Mar 2026 11:58:32 +0800 Message-Id: <20260330035832.2204720-7-maobibo@loongson.cn> X-Mailer: git-send-email 2.39.3 In-Reply-To: <20260330035832.2204720-1-maobibo@loongson.cn> References: <20260330035832.2204720-1-maobibo@loongson.cn> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-CM-TRANSID: qMiowJAx28Hu9MlpxHFgAA--.51612S4 X-CM-SenderInfo: xpdruxter6z05rqj20fqof0/ X-Coremail-Antispam: 1Uk129KBjDUn29KB7ZKAUJUUUUU529EdanIXcx71UUUUU7KY7 ZEXasCq-sGcSsGvfJ3UbIjqfuFe4nvWSU5nxnvy29KBjDU0xBIdaVrnUUvcSsGvfC2Kfnx nUUI43ZEXa7xR_UUUUUUUUU== Content-Type: text/plain; charset="utf-8" Bit KVM_LARCH_LASX and KVM_LARCH_LSX represents whether LASX/LSX is enabled. Instead combination of KVM_LARCH_FPU and kvm_guest_has_lasx() has the same effect. Here remove KVM_LARCH_LASX and KVM_LARCH_LSX, make the logic simpler. Signed-off-by: Bibo Mao --- arch/loongarch/include/asm/kvm_host.h | 2 -- arch/loongarch/kvm/vcpu.c | 8 +++----- 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/arch/loongarch/include/asm/kvm_host.h b/arch/loongarch/include= /asm/kvm_host.h index 9e0568c3c7f9..4a481589ddb2 100644 --- a/arch/loongarch/include/asm/kvm_host.h +++ b/arch/loongarch/include/asm/kvm_host.h @@ -157,8 +157,6 @@ enum emulation_result { }; =20 #define KVM_LARCH_FPU (0x1 << 0) -#define KVM_LARCH_LSX (0x1 << 1) -#define KVM_LARCH_LASX (0x1 << 2) #define KVM_LARCH_LBT (0x1 << 3) #define KVM_LARCH_PMU (0x1 << 4) #define KVM_LARCH_SWCSR_LATEST (0x1 << 5) diff --git a/arch/loongarch/kvm/vcpu.c b/arch/loongarch/kvm/vcpu.c index 920f3101ed3d..9a8f026275a5 100644 --- a/arch/loongarch/kvm/vcpu.c +++ b/arch/loongarch/kvm/vcpu.c @@ -1393,7 +1393,7 @@ int kvm_own_lsx(struct kvm_vcpu *vcpu) kvm_restore_lsx(&vcpu->arch.fpu); =20 trace_kvm_aux(vcpu, KVM_TRACE_AUX_RESTORE, KVM_TRACE_AUX_LSX); - vcpu->arch.aux_inuse |=3D KVM_LARCH_LSX | KVM_LARCH_FPU; + vcpu->arch.aux_inuse |=3D KVM_LARCH_FPU; =20 return 0; } @@ -1409,7 +1409,7 @@ int kvm_own_lasx(struct kvm_vcpu *vcpu) kvm_restore_lasx(&vcpu->arch.fpu); =20 trace_kvm_aux(vcpu, KVM_TRACE_AUX_RESTORE, KVM_TRACE_AUX_LASX); - vcpu->arch.aux_inuse |=3D KVM_LARCH_LASX | KVM_LARCH_LSX | KVM_LARCH_FPU; + vcpu->arch.aux_inuse |=3D KVM_LARCH_FPU; =20 return 0; } @@ -1426,26 +1426,24 @@ void kvm_lose_fpu(struct kvm_vcpu *vcpu) kvm_check_fcsr_alive(vcpu); if (kvm_guest_has_lasx(&vcpu->arch)) { kvm_save_lasx(&vcpu->arch.fpu); - vcpu->arch.aux_inuse &=3D ~(KVM_LARCH_LSX | KVM_LARCH_FPU | KVM_LARCH_LA= SX); trace_kvm_aux(vcpu, KVM_TRACE_AUX_SAVE, KVM_TRACE_AUX_LASX); =20 /* Disable LASX & LSX & FPU */ clear_csr_euen(CSR_EUEN_FPEN | CSR_EUEN_LSXEN | CSR_EUEN_LASXEN); } else if (kvm_guest_has_lsx(&vcpu->arch)) { kvm_save_lsx(&vcpu->arch.fpu); - vcpu->arch.aux_inuse &=3D ~(KVM_LARCH_LSX | KVM_LARCH_FPU); trace_kvm_aux(vcpu, KVM_TRACE_AUX_SAVE, KVM_TRACE_AUX_LSX); =20 /* Disable LSX & FPU */ clear_csr_euen(CSR_EUEN_FPEN | CSR_EUEN_LSXEN); } else { kvm_save_fpu(&vcpu->arch.fpu); - vcpu->arch.aux_inuse &=3D ~KVM_LARCH_FPU; trace_kvm_aux(vcpu, KVM_TRACE_AUX_SAVE, KVM_TRACE_AUX_FPU); =20 /* Disable FPU */ clear_csr_euen(CSR_EUEN_FPEN); } + vcpu->arch.aux_inuse &=3D ~KVM_LARCH_FPU; kvm_lose_lbt(vcpu); =20 preempt_enable(); --=20 2.39.3