Module Name:    src
Committed By:   jdolecek
Date:           Sat May 30 14:03:08 UTC 2020

Modified Files:
        src/sys/dev/ic: bwfm.c

Log Message:
reduce stack usage in bwfm_rx_event_cb(), can use KM_SLEEP because
this is called from workqueue handler (i.e. thread context)


To generate a diff of this commit:
cvs rdiff -u -r1.23 -r1.24 src/sys/dev/ic/bwfm.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/ic/bwfm.c
diff -u src/sys/dev/ic/bwfm.c:1.23 src/sys/dev/ic/bwfm.c:1.24
--- src/sys/dev/ic/bwfm.c:1.23	Sat May 30 13:41:58 2020
+++ src/sys/dev/ic/bwfm.c	Sat May 30 14:03:08 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: bwfm.c,v 1.23 2020/05/30 13:41:58 jdolecek Exp $ */
+/* $NetBSD: bwfm.c,v 1.24 2020/05/30 14:03:08 jdolecek Exp $ */
 /* $OpenBSD: bwfm.c,v 1.5 2017/10/16 22:27:16 patrick Exp $ */
 /*
  * Copyright (c) 2010-2016 Broadcom Corporation
@@ -2143,12 +2143,15 @@ bwfm_rx_event_cb(struct bwfm_softc *sc, 
 			union {
 				struct bwfm_bss_info bss_info;
 				uint8_t padding[BWFM_BSS_INFO_BUFLEN];
-			} bss_buf;
-			if (len > sizeof(bss_buf)) {
+			} *bss_buf;
+			if (len > sizeof(*bss_buf)) {
 				printf("%s: bss_info buffer too big\n", DEVNAME(sc));
 			} else {
-				memcpy(&bss_buf, &res->bss_info[i], len);
-				bwfm_scan_node(sc, &bss_buf.bss_info, len);
+				bss_buf = kmem_alloc(sizeof(*bss_buf),
+				    KM_SLEEP);
+				memcpy(bss_buf, &res->bss_info[i], len);
+				bwfm_scan_node(sc, &bss_buf->bss_info, len);
+				kmem_free(bss_buf, sizeof(*bss_buf));
 			}
 			len -= sizeof(*bss) + le32toh(bss->length);
 			bss = (void *)(((uintptr_t)bss) + le32toh(bss->length));

Reply via email to