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));