From nobody Sat Oct 11 02:58:14 2025 Received: from mail-pj1-f73.google.com (mail-pj1-f73.google.com [209.85.216.73]) (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 5016A2EBDD9 for ; Wed, 11 Jun 2025 22:48:26 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.73 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749682107; cv=none; b=eNCNtMJ/Lr7no7xUlCeGCDRDbBCJkTzmKVj2urnpz++6FPhGhyJk9l2E3mU3/MegwqlIzwLluMcsoJ5A40oFFFXt4QWMdV6lsxx2ABuzXYLcp7Dt3TtDWyZHfWetBUjwEJpEprvNeBpVPByyt3iLF4AhiGQJi3iBQpaxxy1NENQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749682107; c=relaxed/simple; bh=r1qowrD+5mrr7O3Q5l0aT1/ECvFqb3PfiIao4Lw8ZLM=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=CeDf8sRXpgRnsdmvgdMDixvSX+2WNC/qQNZloJCPePC9mPFMjuJG7qo3OakkE04Z7Df7phjqL6WIwubyrnesk3okK6QO/meCMAZVObrmeLeSWjx1vEhEMxxJl2LCg6IVuv07vL9IOnBcHZxLS+IAnXHPc3j33PN0s+cPIUSkRA4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--seanjc.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=IGVh95n3; arc=none smtp.client-ip=209.85.216.73 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--seanjc.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="IGVh95n3" Received: by mail-pj1-f73.google.com with SMTP id 98e67ed59e1d1-30a39fa0765so426168a91.3 for ; Wed, 11 Jun 2025 15:48:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1749682106; x=1750286906; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:from:to:cc:subject:date:message-id:reply-to; bh=IGf99uYfCeKKIiWjOntmH0IBPd07aaYxxPMUaWxgCJ4=; b=IGVh95n3/e0lQVwTcg8KeZg5hrVjTrNWE3Caj+VeMjTAkMKzC4kN8hkYtg2FCT/vr7 ou6Y1gaBefeDW4uaKzlgduxSAcZvA6ZOsCHwmffrOqaMfXRiEEByN5lImsD5BpXd639Q l2figzAO2lEfXJlsIUupMIKrs4p5QPIhKLU5Cn05+/sg4te43UfF3mH9Gq/WbQxqU4ec yq+wtaJnsqrbS8IC9YFuC5VQDaDu4bjA0zOCxl1ALgjEe/hpt2BCpbIpO+sJ5Brtoxw6 fL5evOk1j/KnnPG3noa71WCTl5AH20ryJ/UPac61QGIUbYvgXcL+O6ZhZD94wBKVolPg SkrA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1749682106; x=1750286906; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=IGf99uYfCeKKIiWjOntmH0IBPd07aaYxxPMUaWxgCJ4=; b=HXB3XzRWLUIcIvN68LypVH042cgGepJ42hCpN2EUCt8GIut8KQ2WHsxKQOE0rWdes9 HjgJZhn9hzjF6g4NCxhYhQzZSHYtaBZODJ01dV4kxBTzvmYJQyyfjy+AKl2+2HvJ0eZN nQil1ZzbR8ZztenYC0e28dDYo5jXzD/5PgyoNV43A2Hmq7U1t7uEbJcwm0DTIYJnLAQi 0yK2n4GCONhUaL2vovN1g0tCumF8mQl5ooK4itr4L0ZRAMa1VqKOGeIwGZM3SzXLWfW6 +GCHDQdssxZHOAjxVO5W8vsn9orbXImsWiZc88isKb+LB43gI2/5TfZPfAbHNzzEzEU/ YGaw== X-Forwarded-Encrypted: i=1; AJvYcCXL8/ye6sG4EpLcatM55OKWYVHr9KKfxM+XSHk2K9QRMD+dZWyl7FAOa1bI1l5LMJhPTUnJu6EiTkyN+ic=@vger.kernel.org X-Gm-Message-State: AOJu0YzevfWHvKznDrWAwEfsuOPgKb1lWizhPzezp4XzqM/zJeaTcvHZ WtM2hpVGczDaijIZ1JCie/0x6WmzwF6/I+JaRVV4e6sj7H5FYLuYpv7KNb2dOg7hYIG7EkpaOHg d6ajVQA== X-Google-Smtp-Source: AGHT+IGG/WcYDrf0RYZY38gj5X+aWB3PmGw41sTQaNqsS8Agp4VOiMJxViIe5RHbEl0OLW/p9vLLmH6GAsE= X-Received: from pjee8.prod.google.com ([2002:a17:90b:5788:b0:313:285a:5547]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a17:90b:3510:b0:308:7270:d6ea with SMTP id 98e67ed59e1d1-313af22d60bmr7017390a91.30.1749682105816; Wed, 11 Jun 2025 15:48:25 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 11 Jun 2025 15:45:55 -0700 In-Reply-To: <20250611224604.313496-2-seanjc@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20250611224604.313496-2-seanjc@google.com> X-Mailer: git-send-email 2.50.0.rc1.591.g9c95f17f64-goog Message-ID: <20250611224604.313496-54-seanjc@google.com> Subject: [PATCH v3 52/62] KVM: SVM: WARN if ir_list is non-empty at vCPU free From: Sean Christopherson To: Marc Zyngier , Oliver Upton , Sean Christopherson , Paolo Bonzini , Joerg Roedel , David Woodhouse , Lu Baolu Cc: linux-arm-kernel@lists.infradead.org, kvmarm@lists.linux.dev, kvm@vger.kernel.org, iommu@lists.linux.dev, linux-kernel@vger.kernel.org, Sairaj Kodilkar , Vasant Hegde , Maxim Levitsky , Joao Martins , Francesco Lavra , David Matlack Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Now that AVIC IRTE tracking is in a mostly sane state, WARN if a vCPU is freed with ir_list entries, i.e. if KVM leaves a dangling IRTE. Initialize the per-vCPU interrupt remapping list and its lock even if AVIC is disabled so that the WARN doesn't hit false positives (and so that KVM doesn't need to call into AVIC code for a simple sanity check). Signed-off-by: Sean Christopherson --- arch/x86/kvm/svm/avic.c | 5 +++-- arch/x86/kvm/svm/svm.c | 2 ++ 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/arch/x86/kvm/svm/avic.c b/arch/x86/kvm/svm/avic.c index d1f7b35c1b02..c55cbb0610b4 100644 --- a/arch/x86/kvm/svm/avic.c +++ b/arch/x86/kvm/svm/avic.c @@ -704,6 +704,9 @@ int avic_init_vcpu(struct vcpu_svm *svm) int ret; struct kvm_vcpu *vcpu =3D &svm->vcpu; =20 + INIT_LIST_HEAD(&svm->ir_list); + spin_lock_init(&svm->ir_list_lock); + if (!enable_apicv || !irqchip_in_kernel(vcpu->kvm)) return 0; =20 @@ -711,8 +714,6 @@ int avic_init_vcpu(struct vcpu_svm *svm) if (ret) return ret; =20 - INIT_LIST_HEAD(&svm->ir_list); - spin_lock_init(&svm->ir_list_lock); svm->dfr_reg =3D APIC_DFR_FLAT; =20 return ret; diff --git a/arch/x86/kvm/svm/svm.c b/arch/x86/kvm/svm/svm.c index 56d11f7b4bef..2cd991062acb 100644 --- a/arch/x86/kvm/svm/svm.c +++ b/arch/x86/kvm/svm/svm.c @@ -1497,6 +1497,8 @@ static void svm_vcpu_free(struct kvm_vcpu *vcpu) { struct vcpu_svm *svm =3D to_svm(vcpu); =20 + WARN_ON_ONCE(!list_empty(&svm->ir_list)); + svm_leave_nested(vcpu); svm_free_nested(svm); =20 --=20 2.50.0.rc1.591.g9c95f17f64-goog