From c405b2181ea3f49328ab43d8bc0ad9a0fb62fa21 Mon Sep 17 00:00:00 2001 From: sevan Date: Fri, 20 Mar 2020 16:35:41 +0000 Subject: [PATCH] Apply the same change as for if_iwi.c r1.114 here, as part of kern/55090. This driver sleeps during iwn_media_change(), and thus requires an adaptive mutex for the media lock. --- sys/dev/pci/if_iwn.c | 10 +++++++--- sys/dev/pci/if_iwnvar.h | 4 +++- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/sys/dev/pci/if_iwn.c b/sys/dev/pci/if_iwn.c index f9d8ee9d12e2..5003353d83ac 100644 --- a/sys/dev/pci/if_iwn.c +++ b/sys/dev/pci/if_iwn.c @@ -1,4 +1,4 @@ -/* $NetBSD: if_iwn.c,v 1.93 2020/01/30 06:03:34 thorpej Exp $ */ +/* $NetBSD: if_iwn.c,v 1.94 2020/03/20 16:35:41 sevan Exp $ */ /* $OpenBSD: if_iwn.c,v 1.135 2014/09/10 07:22:09 dcoppa Exp $ */ /*- @@ -22,7 +22,7 @@ * adapters. */ #include -__KERNEL_RCSID(0, "$NetBSD: if_iwn.c,v 1.93 2020/01/30 06:03:34 thorpej Exp $"); +__KERNEL_RCSID(0, "$NetBSD: if_iwn.c,v 1.94 2020/03/20 16:35:41 sevan Exp $"); #define IWN_USE_RBUF /* Use local storage for RX */ #undef IWN_HWCRYPTO /* XXX does not even compile yet */ @@ -614,7 +614,11 @@ iwn_attach(device_t parent __unused, device_t self, void *aux) /* Override 802.11 state transition machine. */ sc->sc_newstate = ic->ic_newstate; ic->ic_newstate = iwn_newstate; - ieee80211_media_init(ic, iwn_media_change, ieee80211_media_status); + + /* XXX media locking needs revisiting */ + mutex_init(&sc->sc_media_mtx, MUTEX_DEFAULT, IPL_SOFTNET); + ieee80211_media_init_with_lock(ic, + iwn_media_change, ieee80211_media_status, &sc->sc_media_mtx); sc->amrr.amrr_min_success_threshold = 1; sc->amrr.amrr_max_success_threshold = 15; diff --git a/sys/dev/pci/if_iwnvar.h b/sys/dev/pci/if_iwnvar.h index f78b218eb1f8..67ac4544a66e 100644 --- a/sys/dev/pci/if_iwnvar.h +++ b/sys/dev/pci/if_iwnvar.h @@ -1,4 +1,4 @@ -/* $NetBSD: if_iwnvar.h,v 1.21 2019/10/05 23:27:20 mrg Exp $ */ +/* $NetBSD: if_iwnvar.h,v 1.22 2020/03/20 16:35:41 sevan Exp $ */ /* $OpenBSD: if_iwnvar.h,v 1.28 2014/09/09 18:55:08 sthen Exp $ */ /*- @@ -324,6 +324,8 @@ struct iwn_softc { struct bpf_if * sc_drvbpf; + kmutex_t sc_media_mtx; /* XXX */ + union { struct iwn_rx_radiotap_header th; uint8_t pad[IEEE80211_RADIOTAP_HDRLEN];