From nobody Fri Oct 3 20:25:47 2025 Received: from mail-pf1-f201.google.com (mail-pf1-f201.google.com [209.85.210.201]) (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 CD1302517AF for ; Wed, 11 Jun 2025 21:36:15 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749677777; cv=none; b=M2Xnb2WBLXTCOU8mlDcCijlVQLyrmT208s1dKDXmeqT3PveqIuNvb/5IP3cZCs6WlgP+v+PzP0+N+D/BxS6InvfrxagirJLpW+cn2liOyFA9bhhbrP+U2n9xDRGLZggsqlVRvUa0nsqv6tkp6MNb31knMncX2v9NF0CoXfada4A= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749677777; c=relaxed/simple; bh=pZl2VSKAfR5v4Bw2AKfURG4THxaXEzLGkGiVfL5sIHo=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=YSyPLEYca+d+nooqCyBuZTXWWft9/tPQ8cc36CzBBj9XnhKDS7Oy8kUmwK8LzjiUpc3n5AVOkFbApw2HKEkwdU/txGPMVTn1yVacX7FL70a9ozOIUT5Ztr9KYxD9InBGUUj/Fel/T+ho3RqSAKCfBUnWUyD9h+yAi+D/oG2hYlY= 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=pbrNte8o; arc=none smtp.client-ip=209.85.210.201 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="pbrNte8o" Received: by mail-pf1-f201.google.com with SMTP id d2e1a72fcca58-7377139d8b1so235604b3a.0 for ; Wed, 11 Jun 2025 14:36:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1749677775; x=1750282575; 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=oni1jfbd5pBW7XeSkgGvJ+4ZwWsOOKBYCbwtU5ZqKQs=; b=pbrNte8oIWP/wKXszHbFxx4GQMbtaNPR8I1Qx9y+fywB+PrhAl2G4XnTl0U7NFAbsm uPSf5gfLzC92BvYurV2DhyKXOwmL9K+uOz8lT+MvLtW0ApyKY4pcXJFNe4KUhRVmfEjZ zXe+uqpiwuw/v9I0N6pG1sW5ScSK+yjbTegItTV6jLjKLUVo/1SK+lRz09j3E/C2v53W cV3ZRIkmlMiVnE+tdaayHHtrLa0kyTVivEeyIffY+XYJcXsvu93yLMu5cPQvo34I7L9c JYtP1WrnCicGNWmDMW/Pw+wy6zfVe5D0wbJuUVHsbTwfuieVVRP+B3k+IZ3zIRqRbyj0 8nyA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1749677775; x=1750282575; 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=oni1jfbd5pBW7XeSkgGvJ+4ZwWsOOKBYCbwtU5ZqKQs=; b=q4JdFtybvpUIigddtGRfbQhZsbbCkuwp4GZSPg18+CWjO8r9KK1nOs8bRLFeg/ZGdZ jFbiyjWuDDQxIEvLDUEea6MfeaCf8b+yjMGxzyF0EQVxcOxXTC9qVNzpg5j09MD1bg10 sE4J+3oOi1Y6KQAsgR3sph2VNvJJSO+fzDwVr2RRbHlrNjLsZh64N+FuVASmpAz+3bPm QEZnsHDd6zrzfEwlyJEdd8x+ZljFRrRTgBX+I20XfJd5vrlOJ0KZlJIETjCS4VF0WfYa hswq9X76mipt1XpxFjpeROeqD4FMbugnnHKd6ndblvJnSFJ/8dNRynGoIPozL794EEaa zvxA== X-Forwarded-Encrypted: i=1; AJvYcCUAimhNOkv9TCiB4SAJ00udFhFjT30h9de3EnPgRAGH2trLjJPX/QuFABncJq1uR6g6qstWO9oKVanu6Sc=@vger.kernel.org X-Gm-Message-State: AOJu0YwJC7AfDUaOTqPfwJkerfVXS75ZpYcIfwKMuAqDu8jq3moTecuN TPnOLNEIG21XQFnL/55Jvhu2LRTachlmH4n+yIYDJbdsYWTMMjHwOML/thZz2/p57oM8RdgoAAK vc31Kow== X-Google-Smtp-Source: AGHT+IGYTun2uqID12Wrh0REil2e2ryIuSl2BbCmsAyARmY7r8+j7UXcE1vuirTxZmTRrYFotB9aYBO41Kw= X-Received: from pfxx12.prod.google.com ([2002:a05:6a00:10c:b0:746:fd4c:1fcf]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a20:12c6:b0:218:c22:e3e6 with SMTP id adf61e73a8af0-21f9b9eed98mr446426637.12.1749677775238; Wed, 11 Jun 2025 14:36:15 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 11 Jun 2025 14:35:47 -0700 In-Reply-To: <20250611213557.294358-1-seanjc@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20250611213557.294358-1-seanjc@google.com> X-Mailer: git-send-email 2.50.0.rc1.591.g9c95f17f64-goog Message-ID: <20250611213557.294358-9-seanjc@google.com> Subject: [PATCH v2 08/18] KVM: x86: Move kvm_setup_default_irq_routing() into irq.c From: Sean Christopherson To: Sean Christopherson , Paolo Bonzini , Vitaly Kuznetsov Cc: kvm@vger.kernel.org, linux-kernel@vger.kernel.org, Kai Huang Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Move the default IRQ routing table used for in-kernel I/O APIC and PIC routing to irq.c, and tweak the name to make it explicitly clear what routing is being initialized. In addition to making it more obvious that the so called "default" routing only applies to an in-kernel I/O APIC, getting it out of irq_comm.c will allow removing irq_comm.c entirely. And placing the function alongside other I/O APIC and PIC code will allow for guarding KVM's in-kernel I/O APIC and PIC emulation with a Kconfig with minimal #ifdefs. No functional change intended. Cc: Kai Huang Signed-off-by: Sean Christopherson Acked-by: Kai Huang --- arch/x86/kvm/irq.c | 32 ++++++++++++++++++++++++++++++++ arch/x86/kvm/irq.h | 3 ++- arch/x86/kvm/irq_comm.c | 32 -------------------------------- arch/x86/kvm/x86.c | 2 +- 4 files changed, 35 insertions(+), 34 deletions(-) diff --git a/arch/x86/kvm/irq.c b/arch/x86/kvm/irq.c index 97e1617ce24d..b696161ec078 100644 --- a/arch/x86/kvm/irq.c +++ b/arch/x86/kvm/irq.c @@ -180,6 +180,38 @@ bool kvm_arch_irqchip_in_kernel(struct kvm *kvm) return irqchip_in_kernel(kvm); } =20 +#define IOAPIC_ROUTING_ENTRY(irq) \ + { .gsi =3D irq, .type =3D KVM_IRQ_ROUTING_IRQCHIP, \ + .u.irqchip =3D { .irqchip =3D KVM_IRQCHIP_IOAPIC, .pin =3D (irq) } } +#define ROUTING_ENTRY1(irq) IOAPIC_ROUTING_ENTRY(irq) + +#define PIC_ROUTING_ENTRY(irq) \ + { .gsi =3D irq, .type =3D KVM_IRQ_ROUTING_IRQCHIP, \ + .u.irqchip =3D { .irqchip =3D SELECT_PIC(irq), .pin =3D (irq) % 8 } } +#define ROUTING_ENTRY2(irq) \ + IOAPIC_ROUTING_ENTRY(irq), PIC_ROUTING_ENTRY(irq) + +static const struct kvm_irq_routing_entry default_routing[] =3D { + ROUTING_ENTRY2(0), ROUTING_ENTRY2(1), + ROUTING_ENTRY2(2), ROUTING_ENTRY2(3), + ROUTING_ENTRY2(4), ROUTING_ENTRY2(5), + ROUTING_ENTRY2(6), ROUTING_ENTRY2(7), + ROUTING_ENTRY2(8), ROUTING_ENTRY2(9), + ROUTING_ENTRY2(10), ROUTING_ENTRY2(11), + ROUTING_ENTRY2(12), ROUTING_ENTRY2(13), + ROUTING_ENTRY2(14), ROUTING_ENTRY2(15), + ROUTING_ENTRY1(16), ROUTING_ENTRY1(17), + ROUTING_ENTRY1(18), ROUTING_ENTRY1(19), + ROUTING_ENTRY1(20), ROUTING_ENTRY1(21), + ROUTING_ENTRY1(22), ROUTING_ENTRY1(23), +}; + +int kvm_setup_default_ioapic_and_pic_routing(struct kvm *kvm) +{ + return kvm_set_irq_routing(kvm, default_routing, + ARRAY_SIZE(default_routing), 0); +} + int kvm_vm_ioctl_get_irqchip(struct kvm *kvm, struct kvm_irqchip *chip) { struct kvm_pic *pic =3D kvm->arch.vpic; diff --git a/arch/x86/kvm/irq.h b/arch/x86/kvm/irq.h index 4ac346102350..7b8b54462f95 100644 --- a/arch/x86/kvm/irq.h +++ b/arch/x86/kvm/irq.h @@ -66,6 +66,8 @@ void kvm_pic_update_irq(struct kvm_pic *s); int kvm_pic_set_irq(struct kvm_kernel_irq_routing_entry *e, struct kvm *kv= m, int irq_source_id, int level, bool line_status); =20 +int kvm_setup_default_ioapic_and_pic_routing(struct kvm *kvm); + int kvm_vm_ioctl_get_irqchip(struct kvm *kvm, struct kvm_irqchip *chip); int kvm_vm_ioctl_set_irqchip(struct kvm *kvm, struct kvm_irqchip *chip); =20 @@ -110,7 +112,6 @@ void __kvm_migrate_timers(struct kvm_vcpu *vcpu); =20 int apic_has_pending_timer(struct kvm_vcpu *vcpu); =20 -int kvm_setup_default_irq_routing(struct kvm *kvm); int kvm_irq_delivery_to_apic(struct kvm *kvm, struct kvm_lapic *src, struct kvm_lapic_irq *irq, struct dest_map *dest_map); diff --git a/arch/x86/kvm/irq_comm.c b/arch/x86/kvm/irq_comm.c index bcf2f1e4a005..99c521bd9db5 100644 --- a/arch/x86/kvm/irq_comm.c +++ b/arch/x86/kvm/irq_comm.c @@ -334,38 +334,6 @@ bool kvm_intr_is_single_vcpu(struct kvm *kvm, struct k= vm_lapic_irq *irq, } EXPORT_SYMBOL_GPL(kvm_intr_is_single_vcpu); =20 -#define IOAPIC_ROUTING_ENTRY(irq) \ - { .gsi =3D irq, .type =3D KVM_IRQ_ROUTING_IRQCHIP, \ - .u.irqchip =3D { .irqchip =3D KVM_IRQCHIP_IOAPIC, .pin =3D (irq) } } -#define ROUTING_ENTRY1(irq) IOAPIC_ROUTING_ENTRY(irq) - -#define PIC_ROUTING_ENTRY(irq) \ - { .gsi =3D irq, .type =3D KVM_IRQ_ROUTING_IRQCHIP, \ - .u.irqchip =3D { .irqchip =3D SELECT_PIC(irq), .pin =3D (irq) % 8 } } -#define ROUTING_ENTRY2(irq) \ - IOAPIC_ROUTING_ENTRY(irq), PIC_ROUTING_ENTRY(irq) - -static const struct kvm_irq_routing_entry default_routing[] =3D { - ROUTING_ENTRY2(0), ROUTING_ENTRY2(1), - ROUTING_ENTRY2(2), ROUTING_ENTRY2(3), - ROUTING_ENTRY2(4), ROUTING_ENTRY2(5), - ROUTING_ENTRY2(6), ROUTING_ENTRY2(7), - ROUTING_ENTRY2(8), ROUTING_ENTRY2(9), - ROUTING_ENTRY2(10), ROUTING_ENTRY2(11), - ROUTING_ENTRY2(12), ROUTING_ENTRY2(13), - ROUTING_ENTRY2(14), ROUTING_ENTRY2(15), - ROUTING_ENTRY1(16), ROUTING_ENTRY1(17), - ROUTING_ENTRY1(18), ROUTING_ENTRY1(19), - ROUTING_ENTRY1(20), ROUTING_ENTRY1(21), - ROUTING_ENTRY1(22), ROUTING_ENTRY1(23), -}; - -int kvm_setup_default_irq_routing(struct kvm *kvm) -{ - return kvm_set_irq_routing(kvm, default_routing, - ARRAY_SIZE(default_routing), 0); -} - void kvm_scan_ioapic_irq(struct kvm_vcpu *vcpu, u32 dest_id, u16 dest_mode, u8 vector, unsigned long *ioapic_handled_vectors) { diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c index fb7b0d301c38..f02a9a332f69 100644 --- a/arch/x86/kvm/x86.c +++ b/arch/x86/kvm/x86.c @@ -6991,7 +6991,7 @@ int kvm_arch_vm_ioctl(struct file *filp, unsigned int= ioctl, unsigned long arg) goto create_irqchip_unlock; } =20 - r =3D kvm_setup_default_irq_routing(kvm); + r =3D kvm_setup_default_ioapic_and_pic_routing(kvm); if (r) { kvm_ioapic_destroy(kvm); kvm_pic_destroy(kvm); --=20 2.50.0.rc1.591.g9c95f17f64-goog