From nobody Sat Sep 26 11:01:50 2026 Received: from mail-pf1-f169.google.com (mail-pf1-f169.google.com [209.85.210.169]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 175DF3CBE86 for ; Wed, 2 Sep 2026 07:07:51 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.169 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788332874; cv=none; b=DU19UcDvCu+85E/vkeVZc6WK2wn3sglSCZmM3lJf+ltTClCp6zxLVbxFo1B5VnneQygCprG/UH+ZDLRGlK1dUqEAQbRjFRbGQzFc7TGq5SAzUyugO4+WNexELfmsws71+1Z32wn7zxpu88b0Q4GHnVXDhSCCV8ivp3AZ/BwKAM4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788332874; c=relaxed/simple; bh=9X6dzoz0gufvGfDdL8yiPtKZ2y0zu/PY1AlP1BteYb4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=TujU/DEpGqtod5mfFxZgebI5X6sAe+kP8CqXRZ1UJBMq1/d6AJG1FjTwGj94tSOieV5uLuemAON4la5k9nyMib9aeCRZh10F7xCf6+vJ9kbsKjd1Nd4x6onx2wq/rogAoscLa/FfR0soZ0zPihmq0CDlkMLgLpGPpDQYPJcRKlE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=AP/C12UR; arc=none smtp.client-ip=209.85.210.169 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="AP/C12UR" Received: by mail-pf1-f169.google.com with SMTP id d2e1a72fcca58-85c9a79590aso863129b3a.1 for ; Wed, 02 Sep 2026 00:07:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1788332871; x=1788937671; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=PqvESrdu/9YfjO79/sFoUA4cGKOp555BY5zNyUvnMY4=; b=AP/C12UR9t1diZy+7YRrRRPzVpXLd7LphRr824cMJG1QP6jgUskFvYqlpICB7+wKcu v5VUp4KBqTBa3Pc59kL13mM5sjNmr76NCpVfTeaodwlKnBLrD5xpa+xZUU6azo7Ex5f/ krxm5Xf4UWl2jGuQAdOTAgcasid1ER2TWg0QbnRe7ia3qWNSneuV5IcaokvsZ8PuRODH J5t39IAI6ca6SreQRYKVMTZqqWzj7oc+/626oysMYP5/56/ijjGP7YXm1YWiB9LhasZ8 oLnrmurHckb238JH4iCxWrPVqy3BHZZAYYLpF/b7JA4iJNgRt+o0qeovAwwC+oFlp/sm w0Kw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788332871; x=1788937671; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=PqvESrdu/9YfjO79/sFoUA4cGKOp555BY5zNyUvnMY4=; b=U9bPHERSBEemcAHaYSx0dREUxtMWYTW2cBbAAEQkVoq9VI9g5MOcoKFc/oSxQUkvUT R61KQBkxhiX14IaLVqLRg4elIjtBcddCMj8Xj4IZCercqEcb7KD90QzvkeKIz86a4pXG xSeSmp7rqOpvK4V9nZiJCscYLEstgggWkUlUaQ6S8tLZT3RRHNdmMw7xCka/SDeDetal 0GY3bThGRm6FLvIxk38/IPkE/tv8qBJCoTFDKwJV7kNnIYOb85cOqPP8lfo39Jd02/ip nZuVZDYZHc3fyTvL408ytmUePRGNJuddGRnjBr0lsE7ijXrwZGdPJQAs5l9mhQkRL8FP lV+Q== X-Forwarded-Encrypted: i=1; AHgh+RqFxqqmRzSTaRkuuxIMZdXItwvUe6Z2OLMunmQ6/hh/P4/Rn9B3iHWyMIDwqJa2hw/wUsOVjrDO7jeONkY=@vger.kernel.org X-Gm-Message-State: AFuF++nHxfCj4cPdI7d3K6+aYcFrsyK7Lr3uzjUZKuGUyTCDMG15lZ7Q uHjC2zw1ShSE+myVkI+9WrIGlx4p+RlYSnqatVAJIz+ybOqJo3i42NYR X-Gm-Gg: AR+sD10Rng9WnoqIjch/rBS4qhUuBZ43pgiCnf7KHSy/spGllr/bHF1S5Tr86BNCv2w ygHgo6z2Joi2k0qSuI08+bk543i4WTJd7FGPWbB3A6ef+Lze5KciyoRd6HSZhEIL2r5eIE18aKu 3WlScESh8TVW9qtCmcNIESRIbxisGordg6RsFkQ5leLU59DeXJZJVkpGKMeGQnWoXUniBx1pgzX zd0meVry+V1ItQA+2tNCZgTHk3en+5knhF46HPJoMYsuLNBqIKdQE+4HqMydrVmn4i/S2L9jYDq wXSEaJa57pcHm9xRSui3V7Kob5lMNcaSlqYCCk+eBXNZVE6Etp8AeEEeAibuUVxvjxk/4VNOkUg UcFBkgQha5rhy6UY5G+sqxinbLfRgcUcCyZX0yxODDvE0ACv9lsAe6lKmm0feD6Ad419GtJsp/R 4pIldmibmgmeWTH3e1sMhd/rMxsJhulthy/NCTrQaV8vATzNnvu/s6I3fNgjdkFV5SHijz0W3Eh g== X-Received: by 2002:a05:6a21:33a8:b0:3d0:6c90:5a33 with SMTP id adf61e73a8af0-3d9ad9a2a0bmr4564485637.4.1788332871373; Wed, 02 Sep 2026 00:07:51 -0700 (PDT) Received: from amd.ban-spse ([165.204.217.251]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-32f079c33f4sm4173256eec.1.2026.09.02.00.07.48 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 02 Sep 2026 00:07:51 -0700 (PDT) From: Chaithanya Lagisetty To: zhaotianrui@loongson.cn, maobibo@loongson.cn, chenhuacai@kernel.org Cc: kernel@xen0n.name, lixianglai@loongson.cn, kvm@vger.kernel.org, loongarch@lists.linux.dev, linux-kernel@vger.kernel.org, Chaithanya Lagisetty Subject: [PATCH v2 1/2] LoongArch: KVM: Add unregister helpers for the KVM interrupt devices Date: Wed, 2 Sep 2026 07:07:22 +0000 Message-ID: <20260902070724.3459457-2-nagachaithanya9911@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260902070724.3459457-1-nagachaithanya9911@gmail.com> References: <20260817115847.2705791-1-nagachaithanya9911@gmail.com> <20260902070724.3459457-1-nagachaithanya9911@gmail.com> 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 Content-Type: text/plain; charset="utf-8" The IPI/EIOINTC/PCH-PIC/DMSINTC KVM devices each have a helper that registers their kvm_device_ops, but there is no counterpart to remove them again, so a caller that needs to undo a registration has to open-code kvm_unregister_device_ops() with the matching device type. Add kvm_loongarch_unregister_{ipi,eiointc,pch_pic,dmsintc}_device() next to the existing register helpers. kvm_unregister_device_ops() is a no-op when the corresponding device type is not currently registered. No functional change, as there are no callers yet. Suggested-by: Bibo Mao Signed-off-by: Chaithanya Lagisetty Reviewed-by: Bibo Mao --- arch/loongarch/include/asm/kvm_dmsintc.h | 1 + arch/loongarch/include/asm/kvm_eiointc.h | 1 + arch/loongarch/include/asm/kvm_ipi.h | 1 + arch/loongarch/include/asm/kvm_pch_pic.h | 1 + arch/loongarch/kvm/intc/dmsintc.c | 5 +++++ arch/loongarch/kvm/intc/eiointc.c | 5 +++++ arch/loongarch/kvm/intc/ipi.c | 5 +++++ arch/loongarch/kvm/intc/pch_pic.c | 5 +++++ 8 files changed, 24 insertions(+) diff --git a/arch/loongarch/include/asm/kvm_dmsintc.h b/arch/loongarch/incl= ude/asm/kvm_dmsintc.h index 5a71b9ccbe78..7c0158764d84 100644 --- a/arch/loongarch/include/asm/kvm_dmsintc.h +++ b/arch/loongarch/include/asm/kvm_dmsintc.h @@ -20,6 +20,7 @@ struct dmsintc_state { }; =20 int kvm_loongarch_register_dmsintc_device(void); +void kvm_loongarch_unregister_dmsintc_device(void); void dmsintc_inject_irq(struct kvm_vcpu *vcpu); int dmsintc_set_irq(struct kvm *kvm, u64 addr, int data, int level); int dmsintc_deliver_msi_to_vcpu(struct kvm *kvm, struct kvm_vcpu *vcpu, u3= 2 vector, int level); diff --git a/arch/loongarch/include/asm/kvm_eiointc.h b/arch/loongarch/incl= ude/asm/kvm_eiointc.h index 8b7a2fa3f7f8..9633fbfc066d 100644 --- a/arch/loongarch/include/asm/kvm_eiointc.h +++ b/arch/loongarch/include/asm/kvm_eiointc.h @@ -79,6 +79,7 @@ struct loongarch_eiointc { }; =20 int kvm_loongarch_register_eiointc_device(void); +void kvm_loongarch_unregister_eiointc_device(void); void eiointc_set_irq(struct loongarch_eiointc *s, int irq, int level); =20 #endif /* __ASM_KVM_EIOINTC_H */ diff --git a/arch/loongarch/include/asm/kvm_ipi.h b/arch/loongarch/include/= asm/kvm_ipi.h index 060163dfb4a3..d1d72d4bb8d1 100644 --- a/arch/loongarch/include/asm/kvm_ipi.h +++ b/arch/loongarch/include/asm/kvm_ipi.h @@ -41,5 +41,6 @@ struct ipi_state { #define IOCSR_ANY_SEND 0x158 =20 int kvm_loongarch_register_ipi_device(void); +void kvm_loongarch_unregister_ipi_device(void); =20 #endif diff --git a/arch/loongarch/include/asm/kvm_pch_pic.h b/arch/loongarch/incl= ude/asm/kvm_pch_pic.h index e74b3b742634..887b0431fd20 100644 --- a/arch/loongarch/include/asm/kvm_pch_pic.h +++ b/arch/loongarch/include/asm/kvm_pch_pic.h @@ -70,6 +70,7 @@ struct loongarch_pch_pic { =20 struct kvm_kernel_irq_routing_entry; int kvm_loongarch_register_pch_pic_device(void); +void kvm_loongarch_unregister_pch_pic_device(void); void pch_pic_set_irq(struct loongarch_pch_pic *s, int irq, int level); int pch_msi_set_irq(struct kvm *kvm, struct kvm_kernel_irq_routing_entry *= e, int level); =20 diff --git a/arch/loongarch/kvm/intc/dmsintc.c b/arch/loongarch/kvm/intc/dm= sintc.c index bb7285c49df3..c7d8841df96f 100644 --- a/arch/loongarch/kvm/intc/dmsintc.c +++ b/arch/loongarch/kvm/intc/dmsintc.c @@ -180,3 +180,8 @@ int kvm_loongarch_register_dmsintc_device(void) { return kvm_register_device_ops(&kvm_dmsintc_dev_ops, KVM_DEV_TYPE_LOONGAR= CH_DMSINTC); } + +void kvm_loongarch_unregister_dmsintc_device(void) +{ + kvm_unregister_device_ops(KVM_DEV_TYPE_LOONGARCH_DMSINTC); +} diff --git a/arch/loongarch/kvm/intc/eiointc.c b/arch/loongarch/kvm/intc/ei= ointc.c index 84d84bd432d7..80f78e07c74a 100644 --- a/arch/loongarch/kvm/intc/eiointc.c +++ b/arch/loongarch/kvm/intc/eiointc.c @@ -695,3 +695,8 @@ int kvm_loongarch_register_eiointc_device(void) { return kvm_register_device_ops(&kvm_eiointc_dev_ops, KVM_DEV_TYPE_LOONGAR= CH_EIOINTC); } + +void kvm_loongarch_unregister_eiointc_device(void) +{ + kvm_unregister_device_ops(KVM_DEV_TYPE_LOONGARCH_EIOINTC); +} diff --git a/arch/loongarch/kvm/intc/ipi.c b/arch/loongarch/kvm/intc/ipi.c index fcfaf1a66790..7b333a4a0430 100644 --- a/arch/loongarch/kvm/intc/ipi.c +++ b/arch/loongarch/kvm/intc/ipi.c @@ -463,3 +463,8 @@ int kvm_loongarch_register_ipi_device(void) { return kvm_register_device_ops(&kvm_ipi_dev_ops, KVM_DEV_TYPE_LOONGARCH_I= PI); } + +void kvm_loongarch_unregister_ipi_device(void) +{ + kvm_unregister_device_ops(KVM_DEV_TYPE_LOONGARCH_IPI); +} diff --git a/arch/loongarch/kvm/intc/pch_pic.c b/arch/loongarch/kvm/intc/pc= h_pic.c index e7b77705c516..83fa2386cf81 100644 --- a/arch/loongarch/kvm/intc/pch_pic.c +++ b/arch/loongarch/kvm/intc/pch_pic.c @@ -500,3 +500,8 @@ int kvm_loongarch_register_pch_pic_device(void) { return kvm_register_device_ops(&kvm_pch_pic_dev_ops, KVM_DEV_TYPE_LOONGAR= CH_PCHPIC); } + +void kvm_loongarch_unregister_pch_pic_device(void) +{ + kvm_unregister_device_ops(KVM_DEV_TYPE_LOONGARCH_PCHPIC); +} --=20 2.43.0 From nobody Sat Sep 26 11:01:50 2026 Received: from mail-pl1-f180.google.com (mail-pl1-f180.google.com [209.85.214.180]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 42DA0377EC2 for ; Wed, 2 Sep 2026 07:07:58 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.180 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788332880; cv=none; b=eR8/JBPfqVcEE2PmLyVaAO4vW69ELhZU6qKqA1yqxM91vTkoriSZ0nyImLpI5EyCbjUQ9xZN79DA+gcamkQty9cQvjVsXBzb6w+35EIkhFyBIR3eZnlcHSDTeCC8J76wkopRYtmQg9B7NxQAreGmVnDjKqYUaHZydcQuGn4+99U= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788332880; c=relaxed/simple; bh=E2z5VxL5Xw3RGt5v4/KEBpw/NCagZi+Ml/JNW74PJmc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=iqVwrPBUNRfwp2HeRDPyS9jQwFHmFGKmV0I9bx6CNFAg3mMMbT1gi/9TL4bfNXG+LBEyK0MFXWMmji5Cn3WmHnaasF//NsVgUZdvE+cZtqGXgC/GDWmsIvEiBAc0JnFJ3m/0vjcPcHddpPlikcaZZcpifuKn0XtuAR7OiBsgxQM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=GmLC+OXa; arc=none smtp.client-ip=209.85.214.180 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="GmLC+OXa" Received: by mail-pl1-f180.google.com with SMTP id d9443c01a7336-2d53197d8b5so6340055ad.3 for ; Wed, 02 Sep 2026 00:07:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1788332878; x=1788937678; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=klWnmBIl39G/xBabfLBKbtaRH5w80OJ8IP172c6Po0A=; b=GmLC+OXaQkUQKH9o7JvNF/QxnOtodotPOa0yapEg9tTYgUnHdU26+fsukFU8MsWttC ewOLgaRLJi7mbiuib+qeO++dvLoZb5BUJcNRxSPQ1I897NYHVayddoR/hJ7pBhbGbU/u j8SDXcxBc0BplYWiruJk0pe91OciHaNamRa6jAoRprdN+hinq26gWiEM9svF0t6qLbRS vtRg8MKCbgDRMSlsasdTHOSsCLZl3ZR4MXI5XM6izKxaDjmbIKdXh9LdXQjb7cC5ZXVE S/u/qxtw6qNMzJ3DyVJh0htheevJjzYgQuHOTsRP1OVe7knzG6+Ru+nWwkhRg0gV0mxn 2f+w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788332878; x=1788937678; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=klWnmBIl39G/xBabfLBKbtaRH5w80OJ8IP172c6Po0A=; b=PMgFwfv2c8WHstf4BGryOQbwo4SD3tdni+J7esPJM5VhiAHStNI08rdtL52bPFjIi4 7I+jyQNAFDs+sui671z9z2pFHorHQoRGnF3dz2NhfY3Xx+NGrR7mrK0rWAgL0JoHqgIa slX2VojfzFNYtPffHqikjKVrXvllAgehuhYBrxF3sOLGN6ysFG1GE4/7iUjoT6BcvFD0 mTZDnx7INuRycjWA863Z5hmeVmlQlxaAvkVnCSqXt3yP5GBnBWSAkjYaW/AhSP93C11L FCXhOVlVhlOo/8cDXt2Qqik6RqeSBKL/UKnTFaBfdDyZak+QNRBn3H3YMyNSSlYANkdU JicA== X-Forwarded-Encrypted: i=1; AKwUvBzrzAqq2QbRFjrgd2CJkDTjrTdZD/JMEjZlwkQLCY0sxAIAY9PDook95oTUCPRX6FLKzQdYVAeHdonJKLI=@vger.kernel.org X-Gm-Message-State: AFuF++nK+/U93Iev56cxp0rFk6/MR2Lgr+FRybsTsURvt60euYzcnlGp HZCPFCweVdySN0P/O6AAdNXbTj+XLf96L/kKMsXpTM0gw288mnGNbQ1Y X-Gm-Gg: AYBFou2NGXBLjL6pb5HdESsranbASyMniy5Zhfdbquxnyzjsw1RRXL1FCXIp9k72kxd TcRMVKmnWBSwNnjs6xNz/irLInrYyNXXn2o1sfHhuNN3RcEJC5GWtKo8EAC9UaxqTVXiQASw3Lv 3ApCJZWRmGXcVK3pKYVYZCmesqSITVjJYZ1RErHetaPZ91J37JdBFy/G78nUy8yQip9WZx5tp6D zhl6h84wGLBSv5FZws8YLUzdJeyxPfgIrehQsskA+QkdJ/UR9ODVr4w7T2K7/Dw4REwmFlFljCK SC76QbglZF2/29Vmxi0GKmgMSOVKos93PYLZyf4Qzju6FKpLTwBaWz2f5Ej/6Xrlh9RDW0rjkWG wrsVk8YBUVWxj+7qzTr8+xGCNZdtX1gZdxdUK01qLkA4MbXAKcb+hqJnhXZ5hBtppu6bmbkjuB2 2d3S6PEPHChQlb/Gh6D9uulgyd+WWTW/+xwRy64KLqOeX8pQA1g50p85VPa2o6SNN4Yux8EvZnB w== X-Received: by 2002:a17:90b:57eb:b0:393:19a3:4f1 with SMTP id 98e67ed59e1d1-39aedfcc06amr4377236a91.6.1788332878001; Wed, 02 Sep 2026 00:07:58 -0700 (PDT) Received: from amd.ban-spse ([165.204.217.251]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-32f079c33f4sm4173256eec.1.2026.09.02.00.07.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 02 Sep 2026 00:07:57 -0700 (PDT) From: Chaithanya Lagisetty To: zhaotianrui@loongson.cn, maobibo@loongson.cn, chenhuacai@kernel.org Cc: kernel@xen0n.name, lixianglai@loongson.cn, kvm@vger.kernel.org, loongarch@lists.linux.dev, linux-kernel@vger.kernel.org, Chaithanya Lagisetty Subject: [PATCH v2 2/2] LoongArch: KVM: Fix resource leak in kvm_loongarch_env_init() error path Date: Wed, 2 Sep 2026 07:07:23 +0000 Message-ID: <20260902070724.3459457-3-nagachaithanya9911@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260902070724.3459457-1-nagachaithanya9911@gmail.com> References: <20260817115847.2705791-1-nagachaithanya9911@gmail.com> <20260902070724.3459457-1-nagachaithanya9911@gmail.com> 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 Content-Type: text/plain; charset="utf-8" kvm_loongarch_env_init() allocates the per-CPU kvm_context (vmcs) and kvm_loongarch_ops, registers the perf callbacks, and then registers the IPI/EIOINTC/PCH-PIC/DMSINTC KVM devices. If any of those device registrations fails, the function returned the error directly, leaving everything acquired so far in place: vmcs and kvm_loongarch_ops are never freed, the perf callbacks stay registered, and previously registered KVM device ops remain registered. kvm_loongarch_init() propagates the error without calling kvm_loongarch_env_exit(), so nothing else cleans up either. Unwind the error path in reverse order of registration, so that each failure only undoes what had actually been set up. Use the same helpers in kvm_loongarch_env_exit() to remove the device registrations during normal teardown as well. Fixes: c532de5a67a7 ("LoongArch: KVM: Add IPI device support") Signed-off-by: Chaithanya Lagisetty Reviewed-by: Bibo Mao --- arch/loongarch/kvm/main.c | 32 ++++++++++++++++++++++++++++---- 1 file changed, 28 insertions(+), 4 deletions(-) diff --git a/arch/loongarch/kvm/main.c b/arch/loongarch/kvm/main.c index 3e1005526f4b..c9cb3fc2e560 100644 --- a/arch/loongarch/kvm/main.c +++ b/arch/loongarch/kvm/main.c @@ -385,27 +385,51 @@ static int kvm_loongarch_env_init(void) /* Register LoongArch IPI interrupt controller interface. */ ret =3D kvm_loongarch_register_ipi_device(); if (ret) - return ret; + goto err_env; =20 /* Register LoongArch EIOINTC interrupt controller interface. */ ret =3D kvm_loongarch_register_eiointc_device(); if (ret) - return ret; + goto err_ipi; =20 /* Register LoongArch PCH-PIC interrupt controller interface. */ ret =3D kvm_loongarch_register_pch_pic_device(); if (ret) - return ret; + goto err_eiointc; =20 /* Register LoongArch DMSINTC interrupt contrroller interface */ - if (cpu_has_msgint) + if (cpu_has_msgint) { ret =3D kvm_loongarch_register_dmsintc_device(); + if (ret) + goto err_pch_pic; + } + + return 0; + +err_pch_pic: + kvm_loongarch_unregister_pch_pic_device(); +err_eiointc: + kvm_loongarch_unregister_eiointc_device(); +err_ipi: + kvm_loongarch_unregister_ipi_device(); +err_env: + kvm_unregister_perf_callbacks(); + kfree(kvm_loongarch_ops); + kvm_loongarch_ops =3D NULL; + free_percpu(vmcs); + vmcs =3D NULL; =20 return ret; } =20 static void kvm_loongarch_env_exit(void) { + if (cpu_has_msgint) + kvm_loongarch_unregister_dmsintc_device(); + kvm_loongarch_unregister_pch_pic_device(); + kvm_loongarch_unregister_eiointc_device(); + kvm_loongarch_unregister_ipi_device(); + if (vmcs) free_percpu(vmcs); =20 --=20 2.43.0