Module Name:    src
Committed By:   thorpej
Date:           Wed Dec 20 04:32:30 UTC 2023

Modified Files:
        src/sys/dev/eisa: if_tlp_eisa.c
        src/sys/dev/ic: tulip.c
        src/sys/dev/pci: if_tlp_pci.c

Log Message:
malloc(9) -> kmem(9), and plug a memory leak on detach while I'm here.


To generate a diff of this commit:
cvs rdiff -u -r1.29 -r1.30 src/sys/dev/eisa/if_tlp_eisa.c
cvs rdiff -u -r1.209 -r1.210 src/sys/dev/ic/tulip.c
cvs rdiff -u -r1.130 -r1.131 src/sys/dev/pci/if_tlp_pci.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/eisa/if_tlp_eisa.c
diff -u src/sys/dev/eisa/if_tlp_eisa.c:1.29 src/sys/dev/eisa/if_tlp_eisa.c:1.30
--- src/sys/dev/eisa/if_tlp_eisa.c:1.29	Sat Jul 24 18:50:07 2021
+++ src/sys/dev/eisa/if_tlp_eisa.c	Wed Dec 20 04:32:30 2023
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_tlp_eisa.c,v 1.29 2021/07/24 18:50:07 thorpej Exp $	*/
+/*	$NetBSD: if_tlp_eisa.c,v 1.30 2023/12/20 04:32:30 thorpej Exp $	*/
 
 /*-
  * Copyright (c) 1999, 2000 The NetBSD Foundation, Inc.
@@ -36,14 +36,14 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_tlp_eisa.c,v 1.29 2021/07/24 18:50:07 thorpej Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_tlp_eisa.c,v 1.30 2023/12/20 04:32:30 thorpej Exp $");
 
 #include "opt_inet.h"
 
 #include <sys/param.h>
 #include <sys/systm.h>
 #include <sys/mbuf.h>
-#include <sys/malloc.h>
+#include <sys/kmem.h>
 #include <sys/kernel.h>
 #include <sys/socket.h>
 #include <sys/ioctl.h>
@@ -221,8 +221,9 @@ tlp_eisa_attach(device_t parent, device_
 	/*
 	 * ...and now read the contents of the Ethernet Address ROM.
 	 */
-	sc->sc_srom = malloc(32, M_DEVBUF, M_WAITOK|M_ZERO);
-	for (i = 0; i < 32; i++)
+	sc->sc_srom_addrbits = 4;	/* 32 bytes */
+	sc->sc_srom = kmem_alloc(TULIP_ROM_SIZE(4), KM_SLEEP);
+	for (i = 0; i < TULIP_ROM_SIZE(4); i++)
 		sc->sc_srom[i] = bus_space_read_1(iot, ioh, DE425_ENETROM);
 
 	/*

Index: src/sys/dev/ic/tulip.c
diff -u src/sys/dev/ic/tulip.c:1.209 src/sys/dev/ic/tulip.c:1.210
--- src/sys/dev/ic/tulip.c:1.209	Mon Sep  4 21:54:41 2023
+++ src/sys/dev/ic/tulip.c	Wed Dec 20 04:32:30 2023
@@ -1,4 +1,4 @@
-/*	$NetBSD: tulip.c,v 1.209 2023/09/04 21:54:41 mrg Exp $	*/
+/*	$NetBSD: tulip.c,v 1.210 2023/12/20 04:32:30 thorpej Exp $	*/
 
 /*-
  * Copyright (c) 1998, 1999, 2000, 2002 The NetBSD Foundation, Inc.
@@ -36,14 +36,14 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: tulip.c,v 1.209 2023/09/04 21:54:41 mrg Exp $");
+__KERNEL_RCSID(0, "$NetBSD: tulip.c,v 1.210 2023/12/20 04:32:30 thorpej Exp $");
 
 
 #include <sys/param.h>
 #include <sys/systm.h>
 #include <sys/callout.h>
 #include <sys/mbuf.h>
-#include <sys/malloc.h>
+#include <sys/kmem.h>
 #include <sys/kernel.h>
 #include <sys/socket.h>
 #include <sys/ioctl.h>
@@ -135,6 +135,8 @@ static void	tlp_dm9102_reset(struct tuli
 
 static void	tlp_2114x_nway_tick(void *);
 
+static void	tlp_ifmedia_fini(struct tulip_softc *);
+
 #define	tlp_mchash(addr, sz)						\
 	(ether_crc32_le((addr), ETHER_ADDR_LEN) & ((sz) - 1))
 
@@ -625,7 +627,7 @@ tlp_detach(struct tulip_softc *sc)
 	if_detach(ifp);
 
 	/* Delete all remaining media. */
-	ifmedia_fini(&sc->sc_mii.mii_media);
+	tlp_ifmedia_fini(sc);
 
 	for (i = 0; i < TULIP_NRXDESC; i++) {
 		rxs = &sc->sc_rxsoft[i];
@@ -653,8 +655,10 @@ tlp_detach(struct tulip_softc *sc)
 
 	pmf_device_deregister(self);
 
-	if (sc->sc_srom)
-		free(sc->sc_srom, M_DEVBUF);
+	if (sc->sc_srom) {
+		KASSERT(sc->sc_srom_addrbits != 0);
+		kmem_free(sc->sc_srom, TULIP_ROM_SIZE(sc->sc_srom_addrbits));
+	}
 
 	return 0;
 }
@@ -2176,10 +2180,9 @@ tlp_srom_size(struct tulip_softc *sc)
 int
 tlp_read_srom(struct tulip_softc *sc)
 {
-	int size;
 	uint32_t miirom;
 	uint16_t datain;
-	int i, x;
+	int size, i, x;
 
 	tlp_srom_idle(sc);
 
@@ -2187,7 +2190,7 @@ tlp_read_srom(struct tulip_softc *sc)
 	if (sc->sc_srom_addrbits == 0)
 		return 0;
 	size = TULIP_ROM_SIZE(sc->sc_srom_addrbits);
-	sc->sc_srom = malloc(size, M_DEVBUF, M_WAITOK);
+	sc->sc_srom = kmem_alloc(size, KM_SLEEP);
 
 	/* Select the SROM. */
 	miirom = MIIROM_SR;
@@ -3181,6 +3184,27 @@ tlp_mediachange(struct ifnet *ifp)
 	return (*sc->sc_mediasw->tmsw_set)(sc);
 }
 
+/*
+ * tlp_ifmedia_fini:
+ *
+ *	Wrapper around ifmedia_fini(), which frees any media-speific
+ *	data we may have associated with each entry.
+ */
+static void
+tlp_ifmedia_fini(struct tulip_softc *sc)
+{
+	struct ifmedia_entry *ife;
+	struct tulip_21x4x_media *tm;
+
+	TAILQ_FOREACH(ife, &sc->sc_mii.mii_media.ifm_list, ifm_list) {
+		if ((tm = ife->ifm_aux) != NULL) {
+			ife->ifm_aux = NULL;
+			kmem_free(tm, sizeof(*tm));
+		}
+	}
+	ifmedia_fini(&sc->sc_mii.mii_media);
+}
+
 /*****************************************************************************
  * Support functions for MII-attached media.
  *****************************************************************************/
@@ -3998,7 +4022,7 @@ tlp_add_srom_media(struct tulip_softc *s
 
 	for (i = 0; i < cnt; i++) {
 		tsti = tlp_srom_to_ifmedia(list[i]);
-		tm = malloc(sizeof(*tm), M_DEVBUF, M_WAITOK | M_ZERO);
+		tm = kmem_zalloc(sizeof(*tm), KM_SLEEP);
 		tlp_srom_media_info(sc, tsti, tm);
 		tm->tm_type = type;
 		tm->tm_get = get;
@@ -4380,7 +4404,7 @@ tlp_21040_tmsw_init(struct tulip_softc *
 	/*
 	 * No SROM type for External SIA.
 	 */
-	tm = malloc(sizeof(*tm), M_DEVBUF, M_WAITOK | M_ZERO);
+	tm = kmem_zalloc(sizeof(*tm), KM_SLEEP);
 	tm->tm_name = "manual";
 	tm->tm_opmode = 0;
 	tm->tm_siaconn = SIACONN_21040_EXTSIA;
@@ -4495,7 +4519,7 @@ tlp_21041_tmsw_init(struct tulip_softc *
 	for (; m_cnt != 0;
 	     m_cnt--, mb_offset += TULIP_ROM_MB_SIZE(mb)) {
 		mb = sc->sc_srom[mb_offset];
-		tm = malloc(sizeof(*tm), M_DEVBUF, M_WAITOK | M_ZERO);
+		tm = kmem_zalloc(sizeof(*tm), KM_SLEEP);
 		switch (mb & TULIP_ROM_MB_MEDIA_CODE) {
 		case TULIP_ROM_MB_MEDIA_TP_FDX:
 		case TULIP_ROM_MB_MEDIA_TP:
@@ -4703,7 +4727,7 @@ tlp_2114x_isv_tmsw_init(struct tulip_sof
 			tlp_get_minst(sc);
 			sc->sc_media_seen |= 1 << TULIP_ROM_MB_21140_GPR;
 
-			tm = malloc(sizeof(*tm), M_DEVBUF, M_WAITOK | M_ZERO);
+			tm = kmem_zalloc(sizeof(*tm), KM_SLEEP);
 
 			tm->tm_type = TULIP_ROM_MB_21140_GPR;
 			tm->tm_get = tlp_21140_gpio_get;
@@ -4748,7 +4772,7 @@ tlp_2114x_isv_tmsw_init(struct tulip_sof
 		case TULIP_ROM_MB_21140_MII:
 			sc->sc_media_seen |= 1 << TULIP_ROM_MB_21140_MII;
 
-			tm = malloc(sizeof(*tm), M_DEVBUF, M_WAITOK | M_ZERO);
+			tm = kmem_zalloc(sizeof(*tm), KM_SLEEP);
 
 			tm->tm_type = TULIP_ROM_MB_21140_MII;
 			tm->tm_get = tlp_mii_getmedia;
@@ -4862,7 +4886,7 @@ tlp_2114x_isv_tmsw_init(struct tulip_sof
 			tlp_get_minst(sc);
 			sc->sc_media_seen |= 1 << TULIP_ROM_MB_21142_SIA;
 
-			tm = malloc(sizeof(*tm), M_DEVBUF, M_WAITOK | M_ZERO);
+			tm = kmem_zalloc(sizeof(*tm), KM_SLEEP);
 
 			tm->tm_type = TULIP_ROM_MB_21142_SIA;
 			tm->tm_get = tlp_sia_get;
@@ -4904,7 +4928,7 @@ tlp_2114x_isv_tmsw_init(struct tulip_sof
 		case TULIP_ROM_MB_21142_MII:
 			sc->sc_media_seen |= 1 << TULIP_ROM_MB_21142_MII;
 
-			tm = malloc(sizeof(*tm), M_DEVBUF, M_WAITOK | M_ZERO);
+			tm = kmem_zalloc(sizeof(*tm), KM_SLEEP);
 
 			tm->tm_type = TULIP_ROM_MB_21142_MII;
 			tm->tm_get = tlp_mii_getmedia;
@@ -5018,7 +5042,7 @@ tlp_2114x_isv_tmsw_init(struct tulip_sof
 			tlp_get_minst(sc);
 			sc->sc_media_seen |= 1 << TULIP_ROM_MB_21143_SYM;
 
-			tm = malloc(sizeof(*tm), M_DEVBUF, M_WAITOK | M_ZERO);
+			tm = kmem_zalloc(sizeof(*tm), KM_SLEEP);
 
 			tm->tm_type = TULIP_ROM_MB_21143_SYM;
 			tm->tm_get = tlp_sia_get;
@@ -5110,7 +5134,7 @@ tlp_2114x_isv_tmsw_init(struct tulip_sof
 		case TULIP_CHIP_MX98715A:
 		case TULIP_CHIP_MX98715AEC_X:
 		case TULIP_CHIP_MX98725:
-			tm = malloc(sizeof(*tm), M_DEVBUF, M_WAITOK | M_ZERO);
+			tm = kmem_zalloc(sizeof(*tm), KM_SLEEP);
 			tm->tm_name = "auto";
 			tm->tm_get = tlp_2114x_nway_get;
 			tm->tm_set = tlp_2114x_nway_set;
@@ -5925,7 +5949,7 @@ tlp_pmac_tmsw_init(struct tulip_softc *s
 		tlp_add_srom_media(sc, TULIP_ROM_MB_21143_SYM,
 		    tlp_sia_get, tlp_sia_set, media + 2, 2);
 
-		tm = malloc(sizeof(*tm), M_DEVBUF, M_WAITOK | M_ZERO);
+		tm = kmem_zalloc(sizeof(*tm), KM_SLEEP);
 		tm->tm_name = "auto";
 		tm->tm_get = tlp_2114x_nway_get;
 		tm->tm_set = tlp_2114x_nway_set;

Index: src/sys/dev/pci/if_tlp_pci.c
diff -u src/sys/dev/pci/if_tlp_pci.c:1.130 src/sys/dev/pci/if_tlp_pci.c:1.131
--- src/sys/dev/pci/if_tlp_pci.c:1.130	Sat May  8 00:27:02 2021
+++ src/sys/dev/pci/if_tlp_pci.c	Wed Dec 20 04:32:30 2023
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_tlp_pci.c,v 1.130 2021/05/08 00:27:02 thorpej Exp $	*/
+/*	$NetBSD: if_tlp_pci.c,v 1.131 2023/12/20 04:32:30 thorpej Exp $	*/
 
 /*-
  * Copyright (c) 1998, 1999, 2000, 2002 The NetBSD Foundation, Inc.
@@ -36,12 +36,12 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_tlp_pci.c,v 1.130 2021/05/08 00:27:02 thorpej Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_tlp_pci.c,v 1.131 2023/12/20 04:32:30 thorpej Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
 #include <sys/mbuf.h>
-#include <sys/malloc.h>
+#include <sys/kmem.h>
 #include <sys/kernel.h>
 #include <sys/socket.h>
 #include <sys/ioctl.h>
@@ -592,7 +592,7 @@ tlp_pci_attach(device_t parent, device_t
 	switch (sc->sc_chip) {
 	case TULIP_CHIP_21040:
 		sc->sc_srom_addrbits = 6;
-		sc->sc_srom = malloc(TULIP_ROM_SIZE(6), M_DEVBUF, M_WAITOK);
+		sc->sc_srom = kmem_alloc(TULIP_ROM_SIZE(6), KM_SLEEP);
 		TULIP_WRITE(sc, CSR_MIIROM, MIIROM_SROMCS);
 		for (i = 0; i < TULIP_ROM_SIZE(6); i++) {
 			for (j = 0; j < 10000; j++) {
@@ -608,7 +608,7 @@ tlp_pci_attach(device_t parent, device_t
 	case TULIP_CHIP_82C169:
 	    {
 		sc->sc_srom_addrbits = 2;
-		sc->sc_srom = malloc(TULIP_ROM_SIZE(2), M_DEVBUF, M_WAITOK);
+		sc->sc_srom = kmem_zalloc(TULIP_ROM_SIZE(2), KM_SLEEP);
 
 		/*
 		 * The Lite-On PNIC stores the Ethernet address in
@@ -655,8 +655,7 @@ tlp_pci_attach(device_t parent, device_t
 			       ETHER_ADDR_LEN);
 
 			sc->sc_srom_addrbits = 6;
-			sc->sc_srom = malloc(TULIP_ROM_SIZE(6), M_DEVBUF,
-			    M_WAITOK | M_ZERO);
+			sc->sc_srom = kmem_zalloc(TULIP_ROM_SIZE(6), KM_SLEEP);
 			memcpy(sc->sc_srom, enaddr, sizeof(enaddr));
 			if (tlp_srom_debug) {
 				aprint_normal("SROM CONTENTS:");
@@ -1406,7 +1405,7 @@ tlp_smc9332dst_tmsw_init(struct tulip_so
 	aprint_normal_dev(sc->sc_dev, "");
 
 #define	ADD(m, c) \
-	tm = malloc(sizeof(*tm), M_DEVBUF, M_WAITOK | M_ZERO);		\
+	tm = kmem_zalloc(sizeof(*tm), KM_SLEEP);			\
 	tm->tm_opmode = (c);						\
 	tm->tm_gpdata = GPP_SMC9332DST_INIT;				\
 	ifmedia_add(&mii->mii_media, (m), 0, tm)
@@ -1621,7 +1620,7 @@ tlp_cogent_em1x0_tmsw_init(struct tulip_
 	aprint_normal_dev(sc->sc_dev, "");
 
 #define	ADD(m, c) \
-	tm = malloc(sizeof(*tm), M_DEVBUF, M_WAITOK | M_ZERO);		\
+	tm = kmem_zalloc(sizeof(*tm), KM_SLEEP);			\
 	tm->tm_opmode = (c);						\
 	tm->tm_gpdata = GPP_COGENT_EM1x0_INIT;				\
 	ifmedia_add(&mii->mii_media, (m), 0, tm)

Reply via email to