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