Comment 28 for bug 1461174

Revision history for this message
Kai Petzke (petzke) wrote :

To get the dkms from #20 running on the linux kernel of Vivid, I did the following changes:

diff -ruN realtek-rtlwifi-0020.1030.2014V676.P1/base.c realtek-rtlwifi-0020.1030.2014V676.P1kai/base.c
--- realtek-rtlwifi-0020.1030.2014V676.P1/base.c 2015-06-09 11:10:51.000000000 +0200
+++ realtek-rtlwifi-0020.1030.2014V676.P1kai/base.c 2015-07-14 19:16:25.519536786 +0200
@@ -2088,7 +2088,7 @@
        unsigned long val;
        int ret;

- ret = strict_strtoul(buf, 0, &val);
+ ret = kstrtoul(buf, 0, &val);
        if (ret) {
                RT_TRACE(rtlpriv, COMP_ERR, DBG_DMESG,
                        "%s is not in hex or decimal form.\n", buf);
diff -ruN realtek-rtlwifi-0020.1030.2014V676.P1/btcoexist/halbtc8812a_ext.c realtek-rtlwifi-0020.1030.2014V676.P1kai/btcoexist/halbtc8812a_ext.c
--- realtek-rtlwifi-0020.1030.2014V676.P1/btcoexist/halbtc8812a_ext.c 2015-06-09 11:10:51.000000000 +0200
+++ realtek-rtlwifi-0020.1030.2014V676.P1kai/btcoexist/halbtc8812a_ext.c 2015-07-14 20:11:54.573400292 +0200
@@ -654,12 +654,11 @@
        iov.iov_len = msg_size;
        udpmsg.msg_name = &pcoex_info->bt_addr;
        udpmsg.msg_namelen = sizeof(struct sockaddr_in);
- udpmsg.msg_iov = &iov;
- udpmsg.msg_iovlen = 1;
        udpmsg.msg_control = NULL;
        udpmsg.msg_controllen = 0;
        udpmsg.msg_flags = MSG_DONTWAIT | MSG_NOSIGNAL;
        udpmsg.msg_flags = 0;
+ iov_iter_init(&udpmsg.msg_iter, WRITE, &iov, 1, msg_size);
        oldfs = get_fs();
        set_fs(KERNEL_DS);
        error = sock_sendmsg(pcoex_info->udpsock,
&udpmsg, msg_size);

With these two changes, I was able to compile the kernel modules fine. Fortunately, the modified driver also loads fine after rebooting. And it connects to my company WiFi. But besides than that, the driver doesn't bring any improvement. So WiFi still hangs and the system still crashes after module unload + reload. The crash is even at the same code position:
    halbtc_get_rfreg+0x23/0x30 [btcoexist]
Of course, the exact binary address is different, as the RTL modules from the DKMS are of different size, so loaded to different physical addresses. But the crash still appears at the beginning of the function halbtc_get_rfreg in the module btcoexist.

As "btcoexist" probably means "Bluetooth Co-Exist", I experimented with turning bluetooth completely off via:
    rfkill
    service bluetooth stop
    rmmod everything, that looked like bluetooth
After that, the system no longer crashes after unload and reinsert of the rtl8723be module. So the crash (which still needs to be fixed!) and the WiFi getting stuck might be unrelated.

I did a few more experiments with the "new" driver from post #20 with different access points:
* Connect to a FritzBox 7490 works
* Data transfer to that FritzBox fails from the very beginning, though. Not even a ping goes through. It is the uplink (from the card to the router), that is stuck. On the downlink, I can see broadcast packets coming through.
* Tethering with Moto X (2nd gen.) completely fails. It doesn't even see the Moto X2. This is weird, because with the stock driver of the stock kernel of Ubuntu Vivid, that tethering works at least in the beginning (until the connection gets blocked).
* After changing the broadcast channel in the X2 to 5 GHz then back to 2.4 GHz, it now sees the X2. Downlink and uplink speed are fine.
* Tethering with a Nokia 820 works, too. I could even got a remarkable number of 50 MBit/s for downlink speed, despite that the W-LAN connection lists 72.2 MBit/s as max. speed.

I'll continue tethering with these mobile phones to see