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)