From e206b2f350bee2c103529de8eb388c51ac88b15a Mon Sep 17 00:00:00 2001 From: Augustin Cavalier Date: Mon, 13 Jun 2022 23:48:43 -0400 Subject: [PATCH] freebsd_network: Always hold the "Giant" lock during attaches. Reduces patches to OpenBSD drivers slightly, and could potentially help with some of the KDLs. --- .../kernel/drivers/network/wlan/iaxwifi200/dev/pci/if_iwx.c | 2 -- .../drivers/network/wlan/idualwifi7260/dev/pci/if_iwm.c | 2 -- src/libs/compat/freebsd_network/device.c | 4 ++++ 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/add-ons/kernel/drivers/network/wlan/iaxwifi200/dev/pci/if_iwx.c b/src/add-ons/kernel/drivers/network/wlan/iaxwifi200/dev/pci/if_iwx.c index dcbbaddbcf..fdc656b3be 100644 --- a/src/add-ons/kernel/drivers/network/wlan/iaxwifi200/dev/pci/if_iwx.c +++ b/src/add-ons/kernel/drivers/network/wlan/iaxwifi200/dev/pci/if_iwx.c @@ -11028,9 +11028,7 @@ iwx_attach(struct device *parent, struct device *self, void *aux) ic->ic_ampdu_tx_stop = NULL; #ifdef __HAIKU__ - mtx_lock(&Giant); iwx_preinit(sc); - mtx_unlock(&Giant); #else /* * We cannot read the MAC address without loading the diff --git a/src/add-ons/kernel/drivers/network/wlan/idualwifi7260/dev/pci/if_iwm.c b/src/add-ons/kernel/drivers/network/wlan/idualwifi7260/dev/pci/if_iwm.c index 8f8f1bf50d..5d73bb2fdb 100644 --- a/src/add-ons/kernel/drivers/network/wlan/idualwifi7260/dev/pci/if_iwm.c +++ b/src/add-ons/kernel/drivers/network/wlan/idualwifi7260/dev/pci/if_iwm.c @@ -12124,9 +12124,7 @@ iwm_attach(struct device *parent, struct device *self, void *aux) ic->ic_ampdu_tx_start = iwm_ampdu_tx_start; ic->ic_ampdu_tx_stop = iwm_ampdu_tx_stop; #ifdef __HAIKU__ - mtx_lock(&Giant); iwm_preinit(sc); - mtx_unlock(&Giant); #else /* * We cannot read the MAC address without loading the diff --git a/src/libs/compat/freebsd_network/device.c b/src/libs/compat/freebsd_network/device.c index 7504d35cc0..05adbf5505 100644 --- a/src/libs/compat/freebsd_network/device.c +++ b/src/libs/compat/freebsd_network/device.c @@ -481,6 +481,9 @@ device_attach(device_t device) || device->methods.attach == NULL) return B_ERROR; + // Always hold the giant lock during attach. + mtx_lock(&Giant); + result = device->methods.attach(device); if (result == 0) @@ -489,6 +492,7 @@ device_attach(device_t device) if (result == 0 && HAIKU_DRIVER_REQUIRES(FBSD_WLAN_FEATURE)) result = start_wlan(device); + mtx_unlock(&Giant); return result; }