My WLI-UC-GNM up crash

Adrian Chadd adrian at freebsd.org
Sun Jul 28 04:29:10 UTC 2013


Not sure, I haven't dug into it. It shouldn't be hard to fix though.

I think someone just screwed up in defining the structures in the USB
drivers and didn't specify alignment. ath(4) got it right because Sam
ran it on MIPS/ARM boards.



-adrian

On 27 July 2013 20:34, XiaoQI Ge <ghw at 7axu.com> wrote:
> That should be how to solve it?
> --
> Regards.
> By: XiaoQI Ge; PGP:8B09D5F7
> WWW: https://www.7axu.com/
>
>
>
> 2013/7/27 Adrian Chadd <adrian at freebsd.org>:
>> This is known; there's some alignment issue with the radiotap TX/RX
>> structures in some of these USB devices.
>>
>>
>>
>> -adrain
>>
>> On 25 July 2013 20:23, XiaoQI Ge <ghw at 7axu.com> wrote:
>>> 我更新到最新的源码(r253662),这次错误信息变成了0xde9f4d34
>>>
>>> [root at FreeBSD.ttyu0] ~ # Fatal kernel mode data abort: 'Alignment Fault 1'
>>> trapframe: 0xde9f4d34
>>> FSR=00000801, FAR=c284afbb, spsr=00000013
>>> r0 =c284c000, r1 =c284afbb, r2 =c284c210, r3 =0000096c
>>> r4 =c284c024, r5 =c05f07c5, r6 =00000014, r7 =c2844800
>>> r8 =c05f07c5, r9 =c284c000, r10=000035cb, r11=de9f4e10
>>> r12=0000002e, ssp=de9f4d80, slr=00000000, pc =c046d20c
>>>
>>> [ thread pid 0 tid 100053 ]
>>> Stopped at      ieee80211_radiotap_chan_change+0x90:    strh    r3, [r1]
>>> db>
>>> ---
>>> Kernel wlan related options
>>> device          wlan            # 802.11 support
>>> options         IEEE80211_DEBUG # enable debug msgs
>>> options         IEEE80211_AMPDU_AGE # age frames in AMPDU reorder q's
>>> options         IEEE80211_SUPPORT_MESH  # enable 802.11s draft support
>>> device          wlan_wep        # 802.11 WEP support
>>> device          wlan_ccmp       # 802.11 CCMP support
>>> device          wlan_tkip       # 802.11 TKIP support
>>> device          wlan_amrr       # AMRR transmit rate control algorithm
>>> device          firmware        # firmware assist module
>>> device run              #Ralink Technology USB IEEE 802.11a/g/n
>>> wireless network device
>>> device runfw            #Firmware Module for Ralink driver
>>>
>>> ---
>>> The compiler command
>>> make TARGET_ARCH=armv6 TARGET_CPUTYPE=armv6 KERNCONF=BBB WITH_FDT=yes
>>> buildkernel
>>> --
>>> Regards.
>>> By: XiaoQI Ge; PGP:8B09D5F7
>>> WWW: https://www.7axu.com/
>>>
>>>
>>>
>>> 2013/7/24 XiaoQI Ge <ghw at 7axu.com>:
>>>> How do I debug it? Can provide useful information
>>>>
>>>> login: root
>>>> Jul 24 18:27:31 FreeBSD login: ROOT LOGIN (root) ON ttyu0
>>>> FreeBSD 10.0-CURRENT (BBB) #4 r253585M: Wed Jul 24 17:07:53 CST 2013
>>>> [root at FreeBSD.ttyu0] ~ # ifconfig wlan create wlandev run0
>>>> wlan0: Ethernet address: 10:6f:3f:2b:fd:6d
>>>> wlan0
>>>> [root at FreeBSD.ttyu0] ~ # ifconfig wlan0 up
>>>> run0: firmware RT2870 ver. 0.236 loaded
>>>> Fatal kernel mode data abort: 'Alignment Fault 1'
>>>> trapframe: 0xde9e4d5c
>>>> FSR=00000801, FAR=c282ffbb, spsr=00000013
>>>> r0 =c2831000, r1 =c282ffbb, r2 =c2831210, r3 =0000096c
>>>> r4 =c2831024, r5 =c2831000, r6 =c05d9362, r7 =c2829800
>>>> r8 =00000014, r9 =c08144d8, r10=80001cce, r11=de9e4e10
>>>> r12=0000002e, ssp=de9e4da8, slr=00000000, pc =c045c510
>>>>
>>>> [ thread pid 0 tid 100053 ]
>>>> Stopped at      ieee80211_radiotap_chan_change+0x90:    strh    r3, [r1]
>>>> db>
>>>>
>>>>
>>>> These two places modified:
>>>> 2522     }
>>>> 2523
>>>> 2524     ant = run_maxrssi_chain(sc, rxwi);
>>>> 2525     rssi = rxwi->rssi[ant];
>>>> 2526     nf = run_rssi2dbm(sc, rssi, ant);
>>>> 2527
>>>> 2528     m->m_pkthdr.rcvif = ifp;
>>>> 2529     m->m_pkthdr.len = m->m_len = len;
>>>> 2530 /*
>>>> 2531     if (ni != NULL) {
>>>> 2532         (void)ieee80211_input(ni, m, rssi, nf);
>>>> 2533         ieee80211_free_node(ni);
>>>> 2534     } else {
>>>> 2535         (void)ieee80211_input_all(ic, m, rssi, nf);
>>>> 2536     }
>>>> 2537 */
>>>> 2538     /*
>>>> 2539      * DAAN: fill-in tap header BEFORE calling ieee80211_input*() so the
>>>> 2540      * user will see the actual data that belongs to THIS packet..
>>>> 2541      */
>>>> 2542     if (__predict_false(ieee80211_radiotap_active(ic))) {
>>>> 2543         struct run_rx_radiotap_header *tap = &sc->sc_rxtap;
>>>> 2544
>>>> 2545         tap->wr_flags = 0;
>>>> 2546         tap->wr_chan_freq = htole16(ic->ic_curchan->ic_freq);
>>>> 2547         tap->wr_chan_flags = htole16(ic->ic_curchan->ic_flags);
>>>> 2548         tap->wr_antsignal = rssi;
>>>> 2549         tap->wr_antenna = ant;
>>>> 2550         tap->wr_dbm_antsignal = run_rssi2dbm(sc, rssi, ant);
>>>> 2551         tap->wr_rate = 2;   /* in case it can't be found below */
>>>> 2552         phy = le16toh(rxwi->phy);
>>>> 2553         switch (phy & RT2860_PHY_MODE) {
>>>> 2554         case RT2860_PHY_CCK:
>>>> 2555             switch ((phy & RT2860_PHY_MCS) & ~RT2860_PHY_SHPRE) {
>>>> 2556             case 0: tap->wr_rate =   2; break;
>>>> 2557             case 1: tap->wr_rate =   4; break;
>>>> 2558             case 2: tap->wr_rate =  11; break;
>>>> 2559             case 3: tap->wr_rate =  22; break;
>>>> 2560             }
>>>> 2561             if (phy & RT2860_PHY_SHPRE)
>>>> 2562                 tap->wr_flags |= IEEE80211_RADIOTAP_F_SHORTPRE;
>>>> 2563             break;
>>>> 2564         case RT2860_PHY_OFDM:
>>>> 2565             switch (phy & RT2860_PHY_MCS) {
>>>> 2566             case 0: tap->wr_rate =  12; break;
>>>> 2567             case 1: tap->wr_rate =  18; break;
>>>> 2568             case 2: tap->wr_rate =  24; break;
>>>> 2569             case 3: tap->wr_rate =  36; break;
>>>> 2570             case 4: tap->wr_rate =  48; break;
>>>> 2571             case 5: tap->wr_rate =  72; break;
>>>> 2572             case 6: tap->wr_rate =  96; break;
>>>> 2573             case 7: tap->wr_rate = 108; break;
>>>> 2574             }
>>>> 2575             break;
>>>> 2576         }
>>>> 2577     }
>>>> 2578
>>>> 2579     if (ni != NULL) {
>>>> 2580         (void)ieee80211_input(ni, m, rssi, nf);
>>>> 2581         ieee80211_free_node(ni);
>>>> 2582     } else {
>>>> 2583         (void)ieee80211_input_all(ic, m, rssi, nf);
>>>> 2584     }
>>>> 2585
>>>> 2586 }
>>>> 2587
>>>> 2588 static void
>>>>
>>>>
>>>> Index: sys/vm/vm_map.c
>>>> ===================================================================
>>>> --- sys/vm/vm_map.c     (revision 253514)
>>>> +++ sys/vm/vm_map.c     (working copy)
>>>> @@ -239,8 +239,7 @@
>>>>         vm_map_t map;
>>>>
>>>>         map = (vm_map_t)mem;
>>>> -       map->nentries = 0;
>>>> -       map->size = 0;
>>>> +       memset(map, 0, sizeof(*map));
>>>>         mtx_init(&map->system_mtx, "vm map (system)", NULL, MTX_DEF |
>>>> MTX_DUPOK);
>>>>         sx_init(&map->lock, "vm map (user)");
>>>>         return (0);
>>>>
>>>> --
>>>> Regards.
>>>> By: XiaoQI Ge; PGP:8B09D5F7
>>>> WWW: https://www.7axu.com/
>>>>
>>>>
>>>>
>>>> 2013/7/24 XiaoQI Ge <ghw at 7axu.com>:
>>>>> I manually make up, is compiling the kernel
>>>>> --
>>>>> Regards.
>>>>> By: XiaoQI Ge; PGP:8B09D5F7
>>>>> WWW: https://www.7axu.com/
>>>>>
>>>>>
>>>>>
>>>>> 2013/7/24 XiaoQI Ge <ghw at 7axu.com>:
>>>>>>  patch < /root/if_run_2013_01_19_radiotap_fix_only.diff appears to be invalid
>>>>>>
>>>>>> ] /usr/src/sys/dev/usb/wlan # patch <
>>>>>> /root/if_run_2013_01_19_radiotap_fix_only.diff
>>>>>> Hmm...  Looks like a unified diff to me...
>>>>>> The text leading up to this was:
>>>>>> --------------------------
>>>>>> |--- if_run.c.fix1_vnet 2013-06-14 10:12:49.786774072 +0200
>>>>>> |+++ if_run.c.fix2_vnet_plus_radiotap   2013-06-14 10:15:34.890774314 +0200
>>>>>> --------------------------
>>>>>> File to patch:
>>>>>>
>>>>>>
>>>>>> 2013/7/23 Daan Vreeken <Daan at vitsch.nl>:
>>>>>>> cd /usr/src/sys/dev/usb/wlan
>>>>>>
>>>>>>
>>>>>>
>>>>>> --
>>>>>> Regards.
>>>>>> By: XiaoQI Ge; PGP:8B09D5F7
>>>>>> WWW: https://www.7axu.com/
>>> _______________________________________________
>>> freebsd-wireless at freebsd.org mailing list
>>> http://lists.freebsd.org/mailman/listinfo/freebsd-wireless
>>> To unsubscribe, send any mail to "freebsd-wireless-unsubscribe at freebsd.org"


More information about the freebsd-arm mailing list