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 */