Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/sys/dev/pci gem_pci_attach(): avoid allocating a 2K buffer o...
details: https://anonhg.NetBSD.org/src/rev/15dec1b8b65c
branches: trunk
changeset: 933761:15dec1b8b65c
user: thorpej <thorpej%NetBSD.org@localhost>
date: Sat May 30 16:35:02 2020 +0000
description:
gem_pci_attach(): avoid allocating a 2K buffer on the stack.
diffstat:
sys/dev/pci/if_gem_pci.c | 18 ++++++++++++------
1 files changed, 12 insertions(+), 6 deletions(-)
diffs (75 lines):
diff -r 75850c2ff839 -r 15dec1b8b65c sys/dev/pci/if_gem_pci.c
--- a/sys/dev/pci/if_gem_pci.c Sat May 30 16:12:56 2020 +0000
+++ b/sys/dev/pci/if_gem_pci.c Sat May 30 16:35:02 2020 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: if_gem_pci.c,v 1.50 2020/03/02 06:38:06 msaitoh Exp $ */
+/* $NetBSD: if_gem_pci.c,v 1.51 2020/05/30 16:35:02 thorpej Exp $ */
/*
*
@@ -34,15 +34,15 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_gem_pci.c,v 1.50 2020/03/02 06:38:06 msaitoh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_gem_pci.c,v 1.51 2020/05/30 16:35:02 thorpej Exp $");
#include <sys/param.h>
#include <sys/systm.h>
-#include <sys/malloc.h>
#include <sys/kernel.h>
#include <sys/socket.h>
#include <sys/errno.h>
#include <sys/device.h>
+#include <sys/kmem.h>
#include <machine/endian.h>
@@ -142,6 +142,8 @@
buf[3] == 'd' && buf[4] == 'e' && buf[5] == 's';
}
+#define GEM_TMP_BUFSIZE 0x0800
+
void
gem_pci_attach(device_t parent, device_t self, void *aux)
{
@@ -150,9 +152,8 @@
struct gem_softc *sc = &gsc->gsc_gem;
prop_data_t data;
uint8_t enaddr[ETHER_ADDR_LEN];
- u_int8_t *enp;
bus_space_handle_t romh;
- u_int8_t buf[0x0800];
+ uint8_t *buf;
int dataoff, vpdoff, serdes;
int i, got_addr = 0;
#ifdef GEM_DEBUG
@@ -230,6 +231,8 @@
return;
}
+ buf = kmem_alloc(GEM_TMP_BUFSIZE, KM_SLEEP);
+
if ((data = prop_dictionary_get(device_properties(sc->sc_dev),
"mac-address")) != NULL) {
memcpy(enaddr, prop_data_data_nocopy(data), ETHER_ADDR_LEN);
@@ -252,7 +255,7 @@
* later) chapter 2 describes the data structure.
*/
- enp = NULL;
+ uint8_t *enp = NULL;
if (sc->sc_variant == GEM_SUN_GEM &&
(bus_space_subregion(sc->sc_bustag, sc->sc_h1,
@@ -351,6 +354,9 @@
got_addr = 1;
}
}
+
+ kmem_free(buf, GEM_TMP_BUFSIZE);
+
if (!got_addr) {
printf("%s: no Ethernet address found\n",
device_xname(sc->sc_dev));
Home |
Main Index |
Thread Index |
Old Index