arm/179532: wireless networking on ARM
Daan Vreeken
Daan at vitsch.nl
Fri Jun 14 08:40:02 UTC 2013
The following reply was made to PR arm/179532; it has been noted by GNATS.
From: Daan Vreeken <Daan at vitsch.nl>
To: Guillaume Bibaut <yom at iaelu.net>
Cc: freebsd-arm at freebsd.org, freebsd-gnats-submit at freebsd.org,
Adrian Chadd <adrian at freebsd.org>
Subject: Re: arm/179532: wireless networking on ARM
Date: Fri, 14 Jun 2013 10:33:51 +0200
--Boundary-00=_vVtuRrItZym7Bc8
Content-Type: text/plain;
charset="iso-8859-1"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline
Hi again,
On Friday 14 June 2013 10:02:54 Daan Vreeken wrote:
> Hi Guillaume,
>
> On Thursday 13 June 2013 11:40:44 Guillaume Bibaut wrote:
> > >Number: 179532
> > >Category: arm
> > >Synopsis: wireless networking on ARM
...
> > >Description:
> >
> > FreeBSD is crashing when wpa_supplicant is called upon boot on the Genesi
> > Efika MX smartbook.
...
> I think we might have hit this same bug at work and have a local patch that
> fixes it. I'll see if I can dust it off and post a patch here. I believe it
> was only a 3-line patch to if_run.c
See the attachments. These patches fix two bugs:
o A crash in if_run when using VNET in the kernel.
o The correctness of the information passed to the radiotap code in if_run.
I think the last patch may fix the crash you are seeing with if_run and
wpa_supplicant. If you only want to test that part, you just have to patch
if_run.c with the file 'if_run_2013_01_19_radiotap_fix_only.diff' .
In case the attachments get mangled in the email, you can also download these
files from : http://www.vitsch.nl/pub_diffs/
The following files should be attached to this email :
if_run_2013_01_19_radiotap_fix_only.diff
if_run_2013_01_19_vnet_fix.diff
if_run_2013_01_19_vnet_plus_radiotap_fix.diff
All patches are:
Sponsored by: Vitsch Electronics
Regards,
--
Ing. Daan Vreeken
Vitsch Electronics
http://Vitsch.nl/
http://VitschVPN.nl/
tel: +31-(0)40-7113051
KvK nr: 17174380
--
Machines en netwerken op afstand beheren? Vitsch VPN oplossing!
Kijk voor meer informatie op: http://www.VitschVPN.nl/
--Boundary-00=_vVtuRrItZym7Bc8
Content-Type: text/x-diff;
charset="iso-8859-1";
name="if_run_2013_01_19_radiotap_fix_only.diff"
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment;
filename="if_run_2013_01_19_radiotap_fix_only.diff"
--- if_run.c.fix2_vnet_plus_radiotap 2013-06-14 10:15:34.890774314 +0200
+++ if_run.c.fix1_vnet 2013-06-14 10:12:49.786774072 +0200
@@ -2536,10 +2536,13 @@
m->m_pkthdr.rcvif = ifp;
m->m_pkthdr.len = m->m_len = len;
- /*
- * DAAN: fill-in tap header BEFORE calling ieee80211_input*() so the
- * user will see the actual data that belongs to THIS packet..
- */
+ if (ni != NULL) {
+ (void)ieee80211_input(ni, m, rssi, nf);
+ ieee80211_free_node(ni);
+ } else {
+ (void)ieee80211_input_all(ic, m, rssi, nf);
+ }
+
if (__predict_false(ieee80211_radiotap_active(ic))) {
struct run_rx_radiotap_header *tap = &sc->sc_rxtap;
@@ -2576,13 +2579,6 @@
break;
}
}
-
- if (ni != NULL) {
- (void)ieee80211_input(ni, m, rssi, nf);
- ieee80211_free_node(ni);
- } else {
- (void)ieee80211_input_all(ic, m, rssi, nf);
- }
}
static void
--Boundary-00=_vVtuRrItZym7Bc8
Content-Type: text/x-diff;
charset="iso 8859-15";
name="if_run_2013_01_19_vnet_fix.diff"
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment;
filename="if_run_2013_01_19_vnet_fix.diff"
Index: if_run.c
===================================================================
--- if_run.c (revision 251736)
+++ if_run.c (working copy)
@@ -52,6 +52,7 @@
#include <net/if_dl.h>
#include <net/if_media.h>
#include <net/if_types.h>
+#include <net/vnet.h>
#include <netinet/in.h>
#include <netinet/in_systm.h>
@@ -606,9 +607,12 @@
RUN_UNLOCK(sc);
+ CURVNET_SET(vnet0);
+
ifp = sc->sc_ifp = if_alloc(IFT_IEEE80211);
if (ifp == NULL) {
device_printf(sc->sc_dev, "can not if_alloc()\n");
+ CURVNET_RESTORE();
goto detach;
}
ic = ifp->if_l2com;
@@ -702,6 +706,8 @@
if (bootverbose)
ieee80211_announce(ic);
+ CURVNET_RESTORE();
+
return (0);
detach:
@@ -739,8 +745,10 @@
usb_callout_drain(&sc->ratectl_ch);
ieee80211_draintask(ic, &sc->cmdq_task);
ieee80211_draintask(ic, &sc->ratectl_task);
+ CURVNET_SET(ifp->if_vnet);
ieee80211_ifdetach(ic);
if_free(ifp);
+ CURVNET_RESTORE();
}
mtx_destroy(&sc->sc_mtx);
--Boundary-00=_vVtuRrItZym7Bc8
Content-Type: text/x-diff;
charset="iso 8859-15";
name="if_run_2013_01_19_vnet_plus_radiotap_fix.diff"
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment;
filename="if_run_2013_01_19_vnet_plus_radiotap_fix.diff"
Index: if_run.c
===================================================================
--- if_run.c (revision 251736)
+++ if_run.c (working copy)
@@ -52,6 +52,7 @@
#include <net/if_dl.h>
#include <net/if_media.h>
#include <net/if_types.h>
+#include <net/vnet.h>
#include <netinet/in.h>
#include <netinet/in_systm.h>
@@ -606,9 +607,12 @@
RUN_UNLOCK(sc);
+ CURVNET_SET(vnet0);
+
ifp = sc->sc_ifp = if_alloc(IFT_IEEE80211);
if (ifp == NULL) {
device_printf(sc->sc_dev, "can not if_alloc()\n");
+ CURVNET_RESTORE();
goto detach;
}
ic = ifp->if_l2com;
@@ -702,6 +706,8 @@
if (bootverbose)
ieee80211_announce(ic);
+ CURVNET_RESTORE();
+
return (0);
detach:
@@ -739,8 +745,10 @@
usb_callout_drain(&sc->ratectl_ch);
ieee80211_draintask(ic, &sc->cmdq_task);
ieee80211_draintask(ic, &sc->ratectl_task);
+ CURVNET_SET(ifp->if_vnet);
ieee80211_ifdetach(ic);
if_free(ifp);
+ CURVNET_RESTORE();
}
mtx_destroy(&sc->sc_mtx);
@@ -2528,13 +2536,10 @@
m->m_pkthdr.rcvif = ifp;
m->m_pkthdr.len = m->m_len = len;
- if (ni != NULL) {
- (void)ieee80211_input(ni, m, rssi, nf);
- ieee80211_free_node(ni);
- } else {
- (void)ieee80211_input_all(ic, m, rssi, nf);
- }
-
+ /*
+ * DAAN: fill-in tap header BEFORE calling ieee80211_input*() so the
+ * user will see the actual data that belongs to THIS packet..
+ */
if (__predict_false(ieee80211_radiotap_active(ic))) {
struct run_rx_radiotap_header *tap = &sc->sc_rxtap;
@@ -2571,6 +2576,13 @@
break;
}
}
+
+ if (ni != NULL) {
+ (void)ieee80211_input(ni, m, rssi, nf);
+ ieee80211_free_node(ni);
+ } else {
+ (void)ieee80211_input_all(ic, m, rssi, nf);
+ }
}
static void
--Boundary-00=_vVtuRrItZym7Bc8--
More information about the freebsd-arm
mailing list