diff --git a/sys/dev/usb/if_otus.c b/sys/dev/usb/if_otus.c index 302353d..8ce517f 100644 --- a/sys/dev/usb/if_otus.c +++ b/sys/dev/usb/if_otus.c @@ -851,6 +851,7 @@ otus_attachhook(device_t arg) memcpy(ifp->if_xname, device_xname(sc->sc_dev), IFNAMSIZ); if_attach(ifp); + ieee80211_ifattach(ic); ic->ic_node_alloc = otus_node_alloc; diff --git a/sys/net80211/ieee80211_input.c b/sys/net80211/ieee80211_input.c index f39387c..982b488 100644 --- a/sys/net80211/ieee80211_input.c +++ b/sys/net80211/ieee80211_input.c @@ -766,7 +766,15 @@ ieee80211_deliver_data(struct ieee80211com *ic, /* XXX goto err? */ VLAN_INPUT_TAG(ifp, m, ni->ni_vlan, goto out); } - if_input(ifp, m); + + /* + * XXX we should run ieee80211_input in softint and then + * always use if_input. + */ + if (ifp->if_percpuq) + if_percpuq_enqueue(ifp->if_percpuq, m); + else + if_input(ifp, m); } return; out: