Module Name:    src
Committed By:   reinoud
Date:           Wed Jan 20 21:59:49 UTC 2021

Modified Files:
        src/sys/dev/acpi: virtio_acpi.c
        src/sys/dev/fdt: virtio_mmio_fdt.c
        src/sys/dev/pci: virtio.c virtio_pci.c virtiovar.h

Log Message:
Remove the virtio child driver finalisation check KASSERT that, while it
should never trigger, a possible bug in a child driver shouldn't have to panic
the kernel. Instead report the internal error.


To generate a diff of this commit:
cvs rdiff -u -r1.5 -r1.6 src/sys/dev/acpi/virtio_acpi.c
cvs rdiff -u -r1.5 -r1.6 src/sys/dev/fdt/virtio_mmio_fdt.c
cvs rdiff -u -r1.43 -r1.44 src/sys/dev/pci/virtio.c
cvs rdiff -u -r1.15 -r1.16 src/sys/dev/pci/virtio_pci.c
cvs rdiff -u -r1.17 -r1.18 src/sys/dev/pci/virtiovar.h

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/dev/acpi/virtio_acpi.c
diff -u src/sys/dev/acpi/virtio_acpi.c:1.5 src/sys/dev/acpi/virtio_acpi.c:1.6
--- src/sys/dev/acpi/virtio_acpi.c:1.5	Wed Jan 20 19:46:48 2021
+++ src/sys/dev/acpi/virtio_acpi.c	Wed Jan 20 21:59:48 2021
@@ -1,4 +1,4 @@
-/* $NetBSD: virtio_acpi.c,v 1.5 2021/01/20 19:46:48 reinoud Exp $ */
+/* $NetBSD: virtio_acpi.c,v 1.6 2021/01/20 21:59:48 reinoud Exp $ */
 
 /*-
  * Copyright (c) 2018 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: virtio_acpi.c,v 1.5 2021/01/20 19:46:48 reinoud Exp $");
+__KERNEL_RCSID(0, "$NetBSD: virtio_acpi.c,v 1.6 2021/01/20 21:59:48 reinoud Exp $");
 
 #include <sys/param.h>
 #include <sys/bus.h>
@@ -168,12 +168,6 @@ virtio_acpi_rescan(device_t self, const 
 	if (virtio_attach_failed(vsc))
 		return 0;
 
-	/*
-	 * Make sure child drivers initialize interrupts via call
-	 * to virtio_child_attach_finish().
-	 */
-	KASSERT(msc->sc_ih != NULL);
-
 	return 0;
 }
 

Index: src/sys/dev/fdt/virtio_mmio_fdt.c
diff -u src/sys/dev/fdt/virtio_mmio_fdt.c:1.5 src/sys/dev/fdt/virtio_mmio_fdt.c:1.6
--- src/sys/dev/fdt/virtio_mmio_fdt.c:1.5	Wed Jan 20 19:46:48 2021
+++ src/sys/dev/fdt/virtio_mmio_fdt.c	Wed Jan 20 21:59:48 2021
@@ -1,4 +1,4 @@
-/* $NetBSD: virtio_mmio_fdt.c,v 1.5 2021/01/20 19:46:48 reinoud Exp $ */
+/* $NetBSD: virtio_mmio_fdt.c,v 1.6 2021/01/20 21:59:48 reinoud Exp $ */
 
 /*
  * Copyright (c) 2018 Jonathan A. Kollasch
@@ -27,7 +27,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: virtio_mmio_fdt.c,v 1.5 2021/01/20 19:46:48 reinoud Exp $");
+__KERNEL_RCSID(0, "$NetBSD: virtio_mmio_fdt.c,v 1.6 2021/01/20 21:59:48 reinoud Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -128,12 +128,6 @@ virtio_mmio_fdt_rescan(device_t self, co
 	if (virtio_attach_failed(vsc))
 		return 0;
 
-	/*
-	 * Make sure child drivers initialize interrupts via call
-	 * to virtio_child_attach_finish().
-	 */
-	KASSERT(msc->sc_ih != NULL);
-
 	return 0;
 }
 

Index: src/sys/dev/pci/virtio.c
diff -u src/sys/dev/pci/virtio.c:1.43 src/sys/dev/pci/virtio.c:1.44
--- src/sys/dev/pci/virtio.c:1.43	Wed Jan 20 19:46:48 2021
+++ src/sys/dev/pci/virtio.c	Wed Jan 20 21:59:48 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: virtio.c,v 1.43 2021/01/20 19:46:48 reinoud Exp $	*/
+/*	$NetBSD: virtio.c,v 1.44 2021/01/20 21:59:48 reinoud Exp $	*/
 
 /*
  * Copyright (c) 2020 The NetBSD Foundation, Inc.
@@ -28,7 +28,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: virtio.c,v 1.43 2021/01/20 19:46:48 reinoud Exp $");
+__KERNEL_RCSID(0, "$NetBSD: virtio.c,v 1.44 2021/01/20 21:59:48 reinoud Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -1084,6 +1084,7 @@ virtio_child_attach_finish(struct virtio
 {
 	int r;
 
+	sc->sc_finished_called = true;
 	r = sc->sc_ops->setup_interrupts(sc);
 	if (r != 0) {
 		aprint_error_dev(sc->sc_dev, "failed to setup interrupts\n");
@@ -1187,6 +1188,14 @@ virtio_attach_failed(struct virtio_softc
 		aprint_error_dev(self, "virtio configuration failed\n");
 		return 1;
 	}
+
+	/* sanity check */
+	if (!sc->sc_finished_called) {
+		aprint_error_dev(self, "virtio internal error, child driver "
+			"signaled OK but didn't initialize interrupts\n");
+		return 1;
+	}
+
 	return 0;
 }
 

Index: src/sys/dev/pci/virtio_pci.c
diff -u src/sys/dev/pci/virtio_pci.c:1.15 src/sys/dev/pci/virtio_pci.c:1.16
--- src/sys/dev/pci/virtio_pci.c:1.15	Wed Jan 20 19:46:48 2021
+++ src/sys/dev/pci/virtio_pci.c	Wed Jan 20 21:59:48 2021
@@ -1,4 +1,4 @@
-/* $NetBSD: virtio_pci.c,v 1.15 2021/01/20 19:46:48 reinoud Exp $ */
+/* $NetBSD: virtio_pci.c,v 1.16 2021/01/20 21:59:48 reinoud Exp $ */
 
 /*
  * Copyright (c) 2020 The NetBSD Foundation, Inc.
@@ -28,7 +28,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: virtio_pci.c,v 1.15 2021/01/20 19:46:48 reinoud Exp $");
+__KERNEL_RCSID(0, "$NetBSD: virtio_pci.c,v 1.16 2021/01/20 21:59:48 reinoud Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -351,12 +351,6 @@ virtio_pci_rescan(device_t self, const c
 	if (virtio_attach_failed(sc))
 		return 0;
 
-	/*
-	 * Make sure child drivers initialize interrupts via call
-	 * to virtio_child_attach_finish().
-	 */
-	KASSERT(psc->sc_ihs_num != 0);
-
 	return 0;
 }
 

Index: src/sys/dev/pci/virtiovar.h
diff -u src/sys/dev/pci/virtiovar.h:1.17 src/sys/dev/pci/virtiovar.h:1.18
--- src/sys/dev/pci/virtiovar.h:1.17	Wed Jan 20 19:46:48 2021
+++ src/sys/dev/pci/virtiovar.h	Wed Jan 20 21:59:48 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: virtiovar.h,v 1.17 2021/01/20 19:46:48 reinoud Exp $	*/
+/*	$NetBSD: virtiovar.h,v 1.18 2021/01/20 21:59:48 reinoud Exp $	*/
 
 /*
  * Copyright (c) 2010 Minoura Makoto.
@@ -171,6 +171,7 @@ struct virtio_softc {
 	uint64_t		sc_active_features;
 	bool			sc_indirect;
 	bool			sc_version_1;
+	bool			sc_finished_called;
 
 	int			sc_nvqs; /* set by child */
 	struct virtqueue	*sc_vqs; /* set by child */

Reply via email to