Module Name:    src
Committed By:   yamaguchi
Date:           Wed Apr 19 00:23:45 UTC 2023

Modified Files:
        src/sys/dev/pci: virtio.c virtio_pci.c virtiovar.h
        src/sys/dev/virtio: virtio_mmio.c

Log Message:
Use enumeration for state of a child driver instead of flags
and check its detaching by using sc->sc_child in virtio_softc

pointed out by riastradh, thanks.
fixes PR/57357


To generate a diff of this commit:
cvs rdiff -u -r1.74 -r1.75 src/sys/dev/pci/virtio.c
cvs rdiff -u -r1.41 -r1.42 src/sys/dev/pci/virtio_pci.c
cvs rdiff -u -r1.28 -r1.29 src/sys/dev/pci/virtiovar.h
cvs rdiff -u -r1.9 -r1.10 src/sys/dev/virtio/virtio_mmio.c

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/pci/virtio.c
diff -u src/sys/dev/pci/virtio.c:1.74 src/sys/dev/pci/virtio.c:1.75
--- src/sys/dev/pci/virtio.c:1.74	Fri Mar 31 07:34:26 2023
+++ src/sys/dev/pci/virtio.c	Wed Apr 19 00:23:45 2023
@@ -1,4 +1,4 @@
-/*	$NetBSD: virtio.c,v 1.74 2023/03/31 07:34:26 yamaguchi Exp $	*/
+/*	$NetBSD: virtio.c,v 1.75 2023/04/19 00:23:45 yamaguchi Exp $	*/
 
 /*
  * Copyright (c) 2020 The NetBSD Foundation, Inc.
@@ -28,7 +28,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: virtio.c,v 1.74 2023/03/31 07:34:26 yamaguchi Exp $");
+__KERNEL_RCSID(0, "$NetBSD: virtio.c,v 1.75 2023/04/19 00:23:45 yamaguchi Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -1328,7 +1328,7 @@ virtio_child_attach_start(struct virtio_
 	char buf[1024];
 
 	KASSERT(sc->sc_child == NULL);
-	KASSERT(!ISSET(sc->sc_child_flags, VIRTIO_CHILD_DETACHED));
+	KASSERT(sc->sc_child_state == VIRTIO_NO_CHILD);
 
 	sc->sc_child = child;
 	sc->sc_ipl = ipl;
@@ -1404,7 +1404,7 @@ virtio_child_attach_finish(struct virtio
 		}
 	}
 
-	SET(sc->sc_child_flags, VIRTIO_CHILD_ATTACH_FINISHED);
+	sc->sc_child_state = VIRTIO_CHILD_ATTACH_FINISHED;
 	virtio_set_status(sc, VIRTIO_CONFIG_DEVICE_STATUS_DRIVER_OK);
 	return 0;
 
@@ -1425,10 +1425,9 @@ virtio_child_detach(struct virtio_softc 
 {
 
 	/* already detached */
-	if (ISSET(sc->sc_child_flags, VIRTIO_CHILD_DETACHED))
+	if (sc->sc_child == NULL)
 		return;
 
-	sc->sc_vqs = NULL;
 
 	virtio_device_reset(sc);
 
@@ -1439,7 +1438,8 @@ virtio_child_detach(struct virtio_softc 
 		sc->sc_soft_ih = NULL;
 	}
 
-	SET(sc->sc_child_flags, VIRTIO_CHILD_DETACHED);
+	sc->sc_vqs = NULL;
+	sc->sc_child = NULL;
 }
 
 void
@@ -1449,7 +1449,7 @@ virtio_child_attach_failed(struct virtio
 
 	virtio_set_status(sc, VIRTIO_CONFIG_DEVICE_STATUS_FAILED);
 
-	SET(sc->sc_child_flags, VIRTIO_CHILD_ATTACH_FAILED);
+	sc->sc_child_state = VIRTIO_CHILD_ATTACH_FAILED;
 }
 
 bus_dma_tag_t
@@ -1485,19 +1485,29 @@ virtio_attach_failed(struct virtio_softc
 	if (sc->sc_childdevid == 0)
 		return 1;
 
-	if (ISSET(sc->sc_child_flags, VIRTIO_CHILD_ATTACH_FAILED)) {
-		aprint_error_dev(self, "virtio configuration failed\n");
-		return 1;
-	}
-
 	if (sc->sc_child == NULL) {
-		aprint_error_dev(self,
-		    "no matching child driver; not configured\n");
+		switch (sc->sc_child_state) {
+		case VIRTIO_CHILD_ATTACH_FAILED:
+			aprint_error_dev(self,
+			    "virtio configuration failed\n");
+			break;
+		case VIRTIO_NO_CHILD:
+			aprint_error_dev(self,
+			    "no matching child driver; not configured\n");
+			break;
+		default:
+			/* sanity check */
+			aprint_error_dev(self,
+			    "virtio internal error, "
+			    "child driver is not configured\n");
+			break;
+		}
+
 		return 1;
 	}
 
 	/* sanity check */
-	if (!ISSET(sc->sc_child_flags, VIRTIO_CHILD_ATTACH_FINISHED)) {
+	if (sc->sc_child_state != VIRTIO_CHILD_ATTACH_FINISHED) {
 		aprint_error_dev(self, "virtio internal error, child driver "
 		    "signaled OK but didn't initialize interrupts\n");
 		return 1;

Index: src/sys/dev/pci/virtio_pci.c
diff -u src/sys/dev/pci/virtio_pci.c:1.41 src/sys/dev/pci/virtio_pci.c:1.42
--- src/sys/dev/pci/virtio_pci.c:1.41	Sun Apr 16 17:57:08 2023
+++ src/sys/dev/pci/virtio_pci.c	Wed Apr 19 00:23:45 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: virtio_pci.c,v 1.41 2023/04/16 17:57:08 riastradh Exp $ */
+/* $NetBSD: virtio_pci.c,v 1.42 2023/04/19 00:23:45 yamaguchi 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.41 2023/04/16 17:57:08 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: virtio_pci.c,v 1.42 2023/04/19 00:23:45 yamaguchi Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -334,10 +334,7 @@ virtio_pci_detach(device_t self, int fla
 		return r;
 
 	/* Check that child never attached, or detached properly */
-	KASSERTMSG(!ISSET(sc->sc_child_flags,
-		(VIRTIO_CHILD_ATTACH_FINISHED|VIRTIO_CHILD_ATTACH_FAILED)) ||
-	    ISSET(sc->sc_child_flags, VIRTIO_CHILD_DETACHED),
-	    "%s: child flags %x", device_xname(self), sc->sc_child_flags);
+	KASSERT(sc->sc_child == NULL);
 	KASSERT(sc->sc_vqs == NULL);
 	KASSERT(psc->sc_ihs_num == 0);
 

Index: src/sys/dev/pci/virtiovar.h
diff -u src/sys/dev/pci/virtiovar.h:1.28 src/sys/dev/pci/virtiovar.h:1.29
--- src/sys/dev/pci/virtiovar.h:1.28	Fri Mar 31 07:34:26 2023
+++ src/sys/dev/pci/virtiovar.h	Wed Apr 19 00:23:45 2023
@@ -1,4 +1,4 @@
-/*	$NetBSD: virtiovar.h,v 1.28 2023/03/31 07:34:26 yamaguchi Exp $	*/
+/*	$NetBSD: virtiovar.h,v 1.29 2023/04/19 00:23:45 yamaguchi Exp $	*/
 
 /*
  * Copyright (c) 2010 Minoura Makoto.
@@ -164,10 +164,11 @@ struct virtio_softc {
 
 	int			sc_childdevid;
 	device_t		sc_child; 		/* set by child */
-	uint32_t		sc_child_flags;
-#define VIRTIO_CHILD_ATTACH_FINISHED	__BIT(0)
-#define VIRTIO_CHILD_ATTACH_FAILED	__BIT(1)
-#define VIRTIO_CHILD_DETACHED		__BIT(2)
+	enum {
+		VIRTIO_NO_CHILD = 0,
+		VIRTIO_CHILD_ATTACH_FINISHED,
+		VIRTIO_CHILD_ATTACH_FAILED
+	}			sc_child_state;
 
 	virtio_callback		sc_config_change; 	/* set by child */
 	virtio_callback		sc_intrhand;

Index: src/sys/dev/virtio/virtio_mmio.c
diff -u src/sys/dev/virtio/virtio_mmio.c:1.9 src/sys/dev/virtio/virtio_mmio.c:1.10
--- src/sys/dev/virtio/virtio_mmio.c:1.9	Fri Mar 31 23:34:23 2023
+++ src/sys/dev/virtio/virtio_mmio.c	Wed Apr 19 00:23:45 2023
@@ -1,4 +1,4 @@
-/*	$NetBSD: virtio_mmio.c,v 1.9 2023/03/31 23:34:23 yamaguchi Exp $	*/
+/*	$NetBSD: virtio_mmio.c,v 1.10 2023/04/19 00:23:45 yamaguchi Exp $	*/
 /*	$OpenBSD: virtio_mmio.c,v 1.2 2017/02/24 17:12:31 patrick Exp $	*/
 
 /*
@@ -29,7 +29,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: virtio_mmio.c,v 1.9 2023/03/31 23:34:23 yamaguchi Exp $");
+__KERNEL_RCSID(0, "$NetBSD: virtio_mmio.c,v 1.10 2023/04/19 00:23:45 yamaguchi Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -217,7 +217,7 @@ virtio_mmio_common_detach(struct virtio_
 	if (r != 0)
 		return r;
 
-	KASSERT(ISSET(vsc->sc_child_flags, VIRTIO_CHILD_DETACHED));
+	KASSERT(vsc->sc_child == NULL);
 	KASSERT(vsc->sc_vqs == NULL);
 	KASSERT(sc->sc_ih == NULL);
 

Reply via email to