public inbox for kvm@vger.kernel.org
 help / color / mirror / Atom feed
* [kvmtool PATCH] riscv: Fix guest poweroff when using PLIC emulation
@ 2023-11-30  4:16 Anup Patel
  2024-02-09 15:55 ` Will Deacon
  0 siblings, 1 reply; 2+ messages in thread
From: Anup Patel @ 2023-11-30  4:16 UTC (permalink / raw)
  To: Will Deacon, julien.thierry.kdev, maz
  Cc: Paolo Bonzini, Atish Patra, Andrew Jones, Anup Patel, kvm,
	kvm-riscv, Anup Patel

Recently due to commit 74af1456dfa0, the virtio device emulation
in KVMTOOL now calls irq__update_msix_route() upon guest poweroff
which results in KVMTOOL crash when Guest uses PLIC emulation in
user space. This is because irq__update_msix_route() expects the
irq_routing table to be available but the KVMTOOL PLIC emulation
does not populate any irq_routing entries.

Fixes: 74af1456dfa0 ("virtio: Cancel and join threads when exiting devices devices")
Signed-off-by: Anup Patel <apatel@ventanamicro.com>
---
 riscv/plic.c | 32 ++++++++++++++++++++++++++++++++
 1 file changed, 32 insertions(+)

diff --git a/riscv/plic.c b/riscv/plic.c
index ab7c574..6bd13ac 100644
--- a/riscv/plic.c
+++ b/riscv/plic.c
@@ -95,6 +95,8 @@
 
 #define REG_SIZE		0x1000000
 
+#define IRQCHIP_PLIC_NR		0
+
 struct plic_state;
 
 struct plic_context {
@@ -500,6 +502,33 @@ static void plic__generate_fdt_node(void *fdt, struct kvm *kvm)
 	free(irq_cells);
 }
 
+static int plic__irq_routing_init(struct kvm *kvm)
+{
+	int r;
+
+	/*
+	 * This describes the default routing that the kernel uses without
+	 * any routing explicitly set up via KVM_SET_GSI_ROUTING. So we
+	 * don't need to commit these setting right now. The first actual
+	 * user (MSI routing) will engage these mappings then.
+	 */
+	for (next_gsi = 0; next_gsi < MAX_DEVICES; next_gsi++) {
+		r = irq__allocate_routing_entry();
+		if (r)
+			return r;
+
+		irq_routing->entries[irq_routing->nr++] =
+			(struct kvm_irq_routing_entry) {
+				.gsi = next_gsi,
+				.type = KVM_IRQ_ROUTING_IRQCHIP,
+				.u.irqchip.irqchip = IRQCHIP_PLIC_NR,
+				.u.irqchip.pin = next_gsi,
+		};
+	}
+
+	return 0;
+}
+
 static int plic__init(struct kvm *kvm)
 {
 	u32 i;
@@ -535,6 +564,9 @@ static int plic__init(struct kvm *kvm)
 	if (ret)
 		return ret;
 
+	/* Setup default IRQ routing */
+	plic__irq_routing_init(kvm);
+
 	plic.ready = true;
 
 	return 0;
-- 
2.34.1


^ permalink raw reply related	[flat|nested] 2+ messages in thread

* Re: [kvmtool PATCH] riscv: Fix guest poweroff when using PLIC emulation
  2023-11-30  4:16 [kvmtool PATCH] riscv: Fix guest poweroff when using PLIC emulation Anup Patel
@ 2024-02-09 15:55 ` Will Deacon
  0 siblings, 0 replies; 2+ messages in thread
From: Will Deacon @ 2024-02-09 15:55 UTC (permalink / raw)
  To: maz, julien.thierry.kdev, Anup Patel
  Cc: catalin.marinas, kernel-team, Will Deacon, kvm, Andrew Jones,
	Atish Patra, kvm-riscv, Paolo Bonzini, Anup Patel

On Thu, 30 Nov 2023 09:46:33 +0530, Anup Patel wrote:
> Recently due to commit 74af1456dfa0, the virtio device emulation
> in KVMTOOL now calls irq__update_msix_route() upon guest poweroff
> which results in KVMTOOL crash when Guest uses PLIC emulation in
> user space. This is because irq__update_msix_route() expects the
> irq_routing table to be available but the KVMTOOL PLIC emulation
> does not populate any irq_routing entries.
> 
> [...]

Applied to kvmtool (master), thanks!

[1/1] riscv: Fix guest poweroff when using PLIC emulation
      https://git.kernel.org/will/kvmtool/c/f6cc06d6b535

Cheers,
-- 
Will

https://fixes.arm64.dev
https://next.arm64.dev
https://will.arm64.dev

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2024-02-09 15:56 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-11-30  4:16 [kvmtool PATCH] riscv: Fix guest poweroff when using PLIC emulation Anup Patel
2024-02-09 15:55 ` Will Deacon

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox