Module Name:    src
Committed By:   jdolecek
Date:           Tue Jul  3 18:07:36 UTC 2018

Modified Files:
        src/sys/dev/pci: if_msk.c if_mskvar.h if_sk.c if_skvar.h

Log Message:
attach the rnd source only once even with dual-port adapters


To generate a diff of this commit:
cvs rdiff -u -r1.68 -r1.69 src/sys/dev/pci/if_msk.c
cvs rdiff -u -r1.15 -r1.16 src/sys/dev/pci/if_mskvar.h
cvs rdiff -u -r1.87 -r1.88 src/sys/dev/pci/if_sk.c
cvs rdiff -u -r1.18 -r1.19 src/sys/dev/pci/if_skvar.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/pci/if_msk.c
diff -u src/sys/dev/pci/if_msk.c:1.68 src/sys/dev/pci/if_msk.c:1.69
--- src/sys/dev/pci/if_msk.c:1.68	Mon Jul  2 06:03:13 2018
+++ src/sys/dev/pci/if_msk.c	Tue Jul  3 18:07:36 2018
@@ -1,4 +1,4 @@
-/* $NetBSD: if_msk.c,v 1.68 2018/07/02 06:03:13 jdolecek Exp $ */
+/* $NetBSD: if_msk.c,v 1.69 2018/07/03 18:07:36 jdolecek Exp $ */
 /*	$OpenBSD: if_msk.c,v 1.79 2009/10/15 17:54:56 deraadt Exp $	*/
 
 /*
@@ -52,7 +52,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_msk.c,v 1.68 2018/07/02 06:03:13 jdolecek Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_msk.c,v 1.69 2018/07/03 18:07:36 jdolecek Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -1199,8 +1199,10 @@ msk_attach(device_t parent, device_t sel
 	else
 		aprint_error_dev(self, "couldn't establish power handler\n");
 
-	rnd_attach_source(&sc->rnd_source, device_xname(sc->sk_dev),
-		RND_TYPE_NET, RND_FLAG_DEFAULT);
+	if (sc->rnd_attached++ == 0) {
+		rnd_attach_source(&sc->rnd_source, device_xname(sc->sk_dev),
+			RND_TYPE_NET, RND_FLAG_DEFAULT);
+	}
 
 	DPRINTFN(2, ("msk_attach: end\n"));
 	return;
@@ -1227,7 +1229,8 @@ msk_detach(device_t self, int flags)
 
 	msk_stop(ifp, 0);
 
-	rnd_detach_source(&sc->rnd_source);
+	if (--sc->rnd_attached == 0)
+		rnd_detach_source(&sc->rnd_source);
 
 	callout_halt(&sc_if->sk_tick_ch, NULL);
 	callout_destroy(&sc_if->sk_tick_ch);
@@ -2148,6 +2151,7 @@ msk_intr(void *xsc)
 	if (ifp1 != NULL && !IFQ_IS_EMPTY(&ifp1->if_snd))
 		if_schedule_deferred_start(ifp1);
 
+	KASSERT(sc->rnd_attached > 0);
 	rnd_add_uint32(&sc->rnd_source, status);
 
 	if (sc->sk_int_mod_pending)

Index: src/sys/dev/pci/if_mskvar.h
diff -u src/sys/dev/pci/if_mskvar.h:1.15 src/sys/dev/pci/if_mskvar.h:1.16
--- src/sys/dev/pci/if_mskvar.h:1.15	Mon Jul  2 06:03:13 2018
+++ src/sys/dev/pci/if_mskvar.h	Tue Jul  3 18:07:36 2018
@@ -1,5 +1,5 @@
 /*	$OpenBSD: if_mskvar.h,v 1.3 2006/12/28 16:34:42 kettenis Exp $	*/
-/*	$NetBSD: if_mskvar.h,v 1.15 2018/07/02 06:03:13 jdolecek Exp $	*/
+/*	$NetBSD: if_mskvar.h,v 1.16 2018/07/03 18:07:36 jdolecek Exp $	*/
 
 /*-
  * Copyright (c) 2003 The NetBSD Foundation, Inc.
@@ -209,7 +209,8 @@ struct sk_softc {
 	int			sk_status_nseg;
 	int			sk_status_idx;
 	int			sk_status_own_idx;
-	krndsource_t     rnd_source;
+	u_int8_t		rnd_attached;
+	krndsource_t		rnd_source;
 };
 
 /* Softc for each logical interface */

Index: src/sys/dev/pci/if_sk.c
diff -u src/sys/dev/pci/if_sk.c:1.87 src/sys/dev/pci/if_sk.c:1.88
--- src/sys/dev/pci/if_sk.c:1.87	Tue Jun 26 06:48:01 2018
+++ src/sys/dev/pci/if_sk.c	Tue Jul  3 18:07:36 2018
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_sk.c,v 1.87 2018/06/26 06:48:01 msaitoh Exp $	*/
+/*	$NetBSD: if_sk.c,v 1.88 2018/07/03 18:07:36 jdolecek Exp $	*/
 
 /*-
  * Copyright (c) 2003 The NetBSD Foundation, Inc.
@@ -115,7 +115,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_sk.c,v 1.87 2018/06/26 06:48:01 msaitoh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_sk.c,v 1.88 2018/07/03 18:07:36 jdolecek Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -1462,8 +1462,10 @@ sk_attach(device_t parent, device_t self
 
 	ether_ifattach(ifp, sc_if->sk_enaddr);
 
-        rnd_attach_source(&sc->rnd_source, device_xname(sc->sk_dev),
-            RND_TYPE_NET, RND_FLAG_DEFAULT);
+	if (sc->rnd_attached++ == 0) {
+	        rnd_attach_source(&sc->rnd_source, device_xname(sc->sk_dev),
+		    RND_TYPE_NET, RND_FLAG_DEFAULT);
+	}
 
 	if (pmf_device_register(self, NULL, sk_resume))
 		pmf_class_network_register(self, ifp);
@@ -2400,6 +2402,7 @@ sk_intr(void *xsc)
 	if (ifp1 != NULL)
 		if_schedule_deferred_start(ifp1);
 
+	KASSERT(sc->rnd_attached > 0);
 	rnd_add_uint32(&sc->rnd_source, status);
 
 	if (sc->sk_int_mod_pending)

Index: src/sys/dev/pci/if_skvar.h
diff -u src/sys/dev/pci/if_skvar.h:1.18 src/sys/dev/pci/if_skvar.h:1.19
--- src/sys/dev/pci/if_skvar.h:1.18	Mon Apr 13 16:33:25 2015
+++ src/sys/dev/pci/if_skvar.h	Tue Jul  3 18:07:36 2018
@@ -1,4 +1,4 @@
-/* $NetBSD: if_skvar.h,v 1.18 2015/04/13 16:33:25 riastradh Exp $ */
+/* $NetBSD: if_skvar.h,v 1.19 2018/07/03 18:07:36 jdolecek Exp $ */
 
 /*-
  * Copyright (c) 2003 The NetBSD Foundation, Inc.
@@ -200,7 +200,8 @@ struct sk_softc {
 	int			sk_int_mod_pending;
 	bus_dma_tag_t		sc_dmatag;
 	struct sk_if_softc	*sk_if[2];
-	krndsource_t     rnd_source;
+	u_int8_t		rnd_attached;
+	krndsource_t		rnd_source;
 };
 
 /* Softc for each logical interface */

Reply via email to