diff mbox

rtlwifi: Add more checks for get_btc_status callback

Message ID 1414625302-3654-1-git-send-email-mopsfelder@gmail.com
State Awaiting Upstream, archived
Delegated to: David Miller
Headers show

Commit Message

Murilo Opsfelder Araújo Oct. 29, 2014, 11:28 p.m. UTC
This is a complement of commit 08054200117a95afc14c3d2ed3a38bf4e345bf78
"rtlwifi: Add check for get_btc_status callback".

With this patch, next-20141029 at least does not panic with rtl8192se
device.

Signed-off-by: Murilo Opsfelder Araujo <mopsfelder@gmail.com>
---

Hello, everyone.

Some days ago, I reported [1] that next-20140930 introduced an issue
with rtl8192se devices.

Later on, Larry Finger proposed [2] a fix that did not solve the
problem thoroughly.

This patch is based on Larry's one [3].  It also does not solve the
rtl8192se issue completely but I can at least boot next-20141029
without a panic.

The remaining issue is that the rtl8192se device does not associate.
It does not even show any wifi network available.  The device is shown
by iwconfig, but I cannot do anything with it.

I need help from someone out there that could provide me guidance or
possibly investigate the issue (I'm not a kernel expert yet).

I'd not like to see this regression landing on v3.18.

[1] http://marc.info/?l=linux-wireless&m=141403434929612
[2] http://marc.info/?l=linux-wireless&m=141408165513255
[3] http://marc.info/?l=linux-wireless&m=141416876810127

 drivers/net/wireless/rtlwifi/base.c |  6 ++++--
 drivers/net/wireless/rtlwifi/core.c |  9 ++++++---
 drivers/net/wireless/rtlwifi/pci.c  |  3 ++-
 drivers/net/wireless/rtlwifi/ps.c   | 12 ++++++++----
 4 files changed, 20 insertions(+), 10 deletions(-)

--
2.1.2
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Comments

Larry Finger Oct. 30, 2014, 4:30 a.m. UTC | #1
On 10/29/2014 06:28 PM, Murilo Opsfelder Araujo wrote:
> This is a complement of commit 08054200117a95afc14c3d2ed3a38bf4e345bf78
> "rtlwifi: Add check for get_btc_status callback".
>
> With this patch, next-20141029 at least does not panic with rtl8192se
> device.
>

This patch is OK, but as noted it is not complete.

I have patches to fix all the kernel panics for rtl8192se AND rtl8192ce. There 
are missing parts, but I would prefer submitting mine, which would conflict with 
this one. For that reason, NACK for this one, and please apply the set I am 
submitting now.

Larry

> Signed-off-by: Murilo Opsfelder Araujo <mopsfelder@gmail.com>
> ---
>
> Hello, everyone.
>
> Some days ago, I reported [1] that next-20140930 introduced an issue
> with rtl8192se devices.
>
> Later on, Larry Finger proposed [2] a fix that did not solve the
> problem thoroughly.
>
> This patch is based on Larry's one [3].  It also does not solve the
> rtl8192se issue completely but I can at least boot next-20141029
> without a panic.
>
> The remaining issue is that the rtl8192se device does not associate.
> It does not even show any wifi network available.  The device is shown
> by iwconfig, but I cannot do anything with it.
>
> I need help from someone out there that could provide me guidance or
> possibly investigate the issue (I'm not a kernel expert yet).
>
> I'd not like to see this regression landing on v3.18.
>
> [1] http://marc.info/?l=linux-wireless&m=141403434929612
> [2] http://marc.info/?l=linux-wireless&m=141408165513255
> [3] http://marc.info/?l=linux-wireless&m=141416876810127
>
>   drivers/net/wireless/rtlwifi/base.c |  6 ++++--
>   drivers/net/wireless/rtlwifi/core.c |  9 ++++++---
>   drivers/net/wireless/rtlwifi/pci.c  |  3 ++-
>   drivers/net/wireless/rtlwifi/ps.c   | 12 ++++++++----
>   4 files changed, 20 insertions(+), 10 deletions(-)
>
> diff --git a/drivers/net/wireless/rtlwifi/base.c b/drivers/net/wireless/rtlwifi/base.c
> index 40b6d1d..1a51577 100644
> --- a/drivers/net/wireless/rtlwifi/base.c
> +++ b/drivers/net/wireless/rtlwifi/base.c
> @@ -1234,7 +1234,8 @@ EXPORT_SYMBOL_GPL(rtl_action_proc);
>   static void setup_arp_tx(struct rtl_priv *rtlpriv, struct rtl_ps_ctl *ppsc)
>   {
>   	rtlpriv->ra.is_special_data = true;
> -	if (rtlpriv->cfg->ops->get_btc_status())
> +	if (rtlpriv->cfg->ops->get_btc_status &&
> +	    rtlpriv->cfg->ops->get_btc_status())
>   		rtlpriv->btcoexist.btc_ops->btc_special_packet_notify(
>   					rtlpriv, 1);
>   	rtlpriv->enter_ps = false;
> @@ -1629,7 +1630,8 @@ void rtl_watchdog_wq_callback(void *data)
>   		}
>   	}
>
> -	if (rtlpriv->cfg->ops->get_btc_status())
> +	if (rtlpriv->cfg->ops->get_btc_status &&
> +	    rtlpriv->cfg->ops->get_btc_status())
>   		rtlpriv->btcoexist.btc_ops->btc_periodical(rtlpriv);
>
>   	rtlpriv->link_info.bcn_rx_inperiod = 0;
> diff --git a/drivers/net/wireless/rtlwifi/core.c b/drivers/net/wireless/rtlwifi/core.c
> index f6179bc..686d256 100644
> --- a/drivers/net/wireless/rtlwifi/core.c
> +++ b/drivers/net/wireless/rtlwifi/core.c
> @@ -1133,7 +1133,8 @@ static void rtl_op_bss_info_changed(struct ieee80211_hw *hw,
>   		ppsc->report_linked = (mstatus == RT_MEDIA_CONNECT) ?
>   				      true : false;
>
> -		if (rtlpriv->cfg->ops->get_btc_status())
> +		if (rtlpriv->cfg->ops->get_btc_status &&
> +		    rtlpriv->cfg->ops->get_btc_status())
>   			rtlpriv->btcoexist.btc_ops->btc_mediastatus_notify(
>   							rtlpriv, mstatus);
>   	}
> @@ -1373,7 +1374,8 @@ static void rtl_op_sw_scan_start(struct ieee80211_hw *hw)
>   		return;
>   	}
>
> -	if (rtlpriv->cfg->ops->get_btc_status())
> +	if (rtlpriv->cfg->ops->get_btc_status &&
> +	    rtlpriv->cfg->ops->get_btc_status())
>   		rtlpriv->btcoexist.btc_ops->btc_scan_notify(rtlpriv, 1);
>
>   	if (rtlpriv->dm.supp_phymode_switch) {
> @@ -1425,7 +1427,8 @@ static void rtl_op_sw_scan_complete(struct ieee80211_hw *hw)
>   	}
>
>   	rtlpriv->cfg->ops->scan_operation_backup(hw, SCAN_OPT_RESTORE);
> -	if (rtlpriv->cfg->ops->get_btc_status())
> +	if (rtlpriv->cfg->ops->get_btc_status &&
> +	    rtlpriv->cfg->ops->get_btc_status())
>   		rtlpriv->btcoexist.btc_ops->btc_scan_notify(rtlpriv, 0);
>   }
>
> diff --git a/drivers/net/wireless/rtlwifi/pci.c b/drivers/net/wireless/rtlwifi/pci.c
> index 25daa87..ed3364d 100644
> --- a/drivers/net/wireless/rtlwifi/pci.c
> +++ b/drivers/net/wireless/rtlwifi/pci.c
> @@ -1833,7 +1833,8 @@ static void rtl_pci_stop(struct ieee80211_hw *hw)
>   	unsigned long flags;
>   	u8 RFInProgressTimeOut = 0;
>
> -	if (rtlpriv->cfg->ops->get_btc_status())
> +	if (rtlpriv->cfg->ops->get_btc_status &&
> +	    rtlpriv->cfg->ops->get_btc_status())
>   		rtlpriv->btcoexist.btc_ops->btc_halt_notify();
>
>   	/*
> diff --git a/drivers/net/wireless/rtlwifi/ps.c b/drivers/net/wireless/rtlwifi/ps.c
> index b69321d..2278af9 100644
> --- a/drivers/net/wireless/rtlwifi/ps.c
> +++ b/drivers/net/wireless/rtlwifi/ps.c
> @@ -261,7 +261,8 @@ void rtl_ips_nic_off_wq_callback(void *data)
>   			ppsc->in_powersavemode = true;
>
>   			/* call before RF off */
> -			if (rtlpriv->cfg->ops->get_btc_status())
> +			if (rtlpriv->cfg->ops->get_btc_status &&
> +			    rtlpriv->cfg->ops->get_btc_status())
>   				rtlpriv->btcoexist.btc_ops->btc_ips_notify(rtlpriv,
>   									ppsc->inactive_pwrstate);
>
> @@ -306,7 +307,8 @@ void rtl_ips_nic_on(struct ieee80211_hw *hw)
>   			ppsc->in_powersavemode = false;
>   			_rtl_ps_inactive_ps(hw);
>   			/* call after RF on */
> -			if (rtlpriv->cfg->ops->get_btc_status())
> +			if (rtlpriv->cfg->ops->get_btc_status &&
> +			    rtlpriv->cfg->ops->get_btc_status())
>   				rtlpriv->btcoexist.btc_ops->btc_ips_notify(rtlpriv,
>   									ppsc->inactive_pwrstate);
>   		}
> @@ -390,14 +392,16 @@ void rtl_lps_set_psmode(struct ieee80211_hw *hw, u8 rt_psmode)
>   			if (ppsc->p2p_ps_info.opp_ps)
>   				rtl_p2p_ps_cmd(hw , P2P_PS_ENABLE);
>
> -			if (rtlpriv->cfg->ops->get_btc_status())
> +			if (rtlpriv->cfg->ops->get_btc_status &&
> +			    rtlpriv->cfg->ops->get_btc_status())
>   				rtlpriv->btcoexist.btc_ops->btc_lps_notify(rtlpriv, rt_psmode);
>   		} else {
>   			if (rtl_get_fwlps_doze(hw)) {
>   				RT_TRACE(rtlpriv, COMP_RF, DBG_DMESG,
>   					 "FW LPS enter ps_mode:%x\n",
>   					 ppsc->fwctrl_psmode);
> -				if (rtlpriv->cfg->ops->get_btc_status())
> +				if (rtlpriv->cfg->ops->get_btc_status &&
> +				    rtlpriv->cfg->ops->get_btc_status())
>   					rtlpriv->btcoexist.btc_ops->btc_lps_notify(rtlpriv, rt_psmode);
>   				enter_fwlps = true;
>   				ppsc->pwr_mode = ppsc->fwctrl_psmode;
> --
> 2.1.2
>

--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Mike Galbraith Nov. 5, 2014, 9:16 a.m. UTC | #2
On Wed, 2014-10-29 at 23:30 -0500, Larry Finger wrote: 
> On 10/29/2014 06:28 PM, Murilo Opsfelder Araujo wrote:
> > This is a complement of commit 08054200117a95afc14c3d2ed3a38bf4e345bf78
> > "rtlwifi: Add check for get_btc_status callback".
> >
> > With this patch, next-20141029 at least does not panic with rtl8192se
> > device.
> >
> 
> This patch is OK, but as noted it is not complete.
> 
> I have patches to fix all the kernel panics for rtl8192se AND rtl8192ce. There 
> are missing parts, but I would prefer submitting mine, which would conflict with 
> this one. For that reason, NACK for this one, and please apply the set I am 
> submitting now.

It's all in there now, but my RTL8191SEvB is still dead.  Squabbling
with it isn't going all that well either.

As soon as 38506ece rtlwifi: rtl_pci: Start modification for new drivers
is applied, explosions appear.  Subsequently applying...

08054200 rtlwifi: Add check for get_btc_status callback
c0386f15 rtlwifi: rtl8192ce: rtl8192de: rtl8192se: Fix handling for missing get_btc_status
50147969 rtlwifi: rtl8192se: Fix duplicate calls to ieee80211_register_hw()
30c5ccc6 rtlwifi: rtl8192se: Add missing section to read descriptor setting
75a916e1 rtlwifi: rtl8192se: Fix firmware loading

...fixes that mess up, but leaves the interface dead in the same manner
as if nothing has been reverted.  So it _seems_ the bustage lurks in
38506ece somewhere.  Too bad it's non-dinky, and written in wifi-ese :)

-Mike

Full revert series: 
patches/revert-75a916e1944fea8347d2245c62567187e4eff9dd
patches/revert-8ae3c16e41b02db8ffe4121468519d6352baedc1
patches/revert-30c5ccc6afee39754cff75ad8d775ad39a2ce989
patches/revert-501479699ff484ba8acc1d07022271f00cfc55a3
patches/revert-c0386f1584127442d0f2aea41bc948056d6b1337
patches/revert-08054200117a95afc14c3d2ed3a38bf4e345bf78
patches/revert-4f2b244c7d5b81ce4f0c6c0382f3a3b7c2dbec1c
patches/revert-cefe3dfdb9f5f498cae9871f7e52800f5e22c614
patches/revert-b2d624a5810203a1a8b7735e1ec5685109b22fc3
patches/revert-d514aefb8ce89562ef2d7dcddc530e5de6287c4b
patches/revert-598a0df07fc6c4642f9b0497cef1233e41d4c987
patches/revert-47481d977cb2987ab363202c68a79ec1bccd357c
patches/revert-1fca350b761631d182c2e8bce530896e66404bc2
patches/revert-3f08e47291879fb047d7d4464d2beaedfea4eb63
patches/revert-989377e1cc9e713822d148d2e638d6c63d8a94b1
patches/revert-574a7930d7c4d0fe4295868e52a5277bd9595b5e
patches/revert-ef09396ef622572c604d4977e76f6151ef68ed21
patches/revert-557f933113a42a48ec617b81b5ea53fd7202b1ed
patches/revert-9f087a924427c01190b205f0051be00808c99828
patches/revert-5c99f04fec93068147a3e95b439b345f203ac5b9
patches/revert-0529c6b8176135bcae1ab66bed6c1288456fbdec
patches/revert-b1a3bfc97cd95681c511515534b84843998f3ea0
patches/revert-7fe3b3abb5da3a105d87640db693c41259138294
patches/revert-34ed780a6afc4df5e3285d20fac721c591e0724e
patches/revert-21e4b0726dc671c423e2dc9a85364716219c4502
patches/revert-c151aed6aa146e9587590051aba9da68b9370f9b
patches/revert-f3a97e93814aeac3f13e857a0071726acc9bd626
patches/revert-d3feae41a3473a0f7b431d6af4e092865d586e52
patches/revert-3c67b8f9f3b5bb1207c9bb198e5ef04ff56921dd
patches/revert-9afa2e44f4d8f9d031f815c32bb8f225f0f6746b
patches/revert-f7953b2ad66cc5fc66e13d5c0a40e61b45cdfca8
patches/revert-38506ecefab911785d5e1aa5889f6eeb462e0954
patches/revert-fd09ff958777cf583d7541f180991c0fc50bd2f7
patches/revert-560e334dbd9907ecdd25318fbdb33179c5d5a3bd
patches/revert-5eef40e5687da4ad0123e231e4fe952a12655f0b
patches/revert-6b5447ce630cdc231caf4f958325f8fa925216bf
patches/revert-dbb30ebeefaf01121b32ae6b5baf29524f3a0b30
patches/revert-4f4378dead3792d21577739f07869fbd843dab23
patches/revert-ed364abffd6e19bec67b7ccda8237213b8b37640
patches/revert-c96fd200e9af8ad4c4891ef579044a75c659d8c7
patches/revert-2ec7f01c35727574953dbd884d7d45da940a25ee
patches/revert-f5b5869095819970333dc9de54eed5c552407d35
patches/revert-2187e9a2ce575ee85a1ce31fa2ecbc0f580c105f
patches/revert-e8f3fef412d4ffd8cb1bd5cd7a6e5572e21bf80a
patches/revert-e79fff28587c9437282c863722d1fa186143f62a

--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Larry Finger Nov. 5, 2014, 6:12 p.m. UTC | #3
On 11/05/2014 03:16 AM, Mike Galbraith wrote:
> On Wed, 2014-10-29 at 23:30 -0500, Larry Finger wrote:
>> On 10/29/2014 06:28 PM, Murilo Opsfelder Araujo wrote:
>>> This is a complement of commit 08054200117a95afc14c3d2ed3a38bf4e345bf78
>>> "rtlwifi: Add check for get_btc_status callback".
>>>
>>> With this patch, next-20141029 at least does not panic with rtl8192se
>>> device.
>>>
>>
>> This patch is OK, but as noted it is not complete.
>>
>> I have patches to fix all the kernel panics for rtl8192se AND rtl8192ce. There
>> are missing parts, but I would prefer submitting mine, which would conflict with
>> this one. For that reason, NACK for this one, and please apply the set I am
>> submitting now.
>
> It's all in there now, but my RTL8191SEvB is still dead.  Squabbling
> with it isn't going all that well either.
>
> As soon as 38506ece rtlwifi: rtl_pci: Start modification for new drivers
> is applied, explosions appear.  Subsequently applying...
>
> 08054200 rtlwifi: Add check for get_btc_status callback
> c0386f15 rtlwifi: rtl8192ce: rtl8192de: rtl8192se: Fix handling for missing get_btc_status
> 50147969 rtlwifi: rtl8192se: Fix duplicate calls to ieee80211_register_hw()
> 30c5ccc6 rtlwifi: rtl8192se: Add missing section to read descriptor setting
> 75a916e1 rtlwifi: rtl8192se: Fix firmware loading
>
> ...fixes that mess up, but leaves the interface dead in the same manner
> as if nothing has been reverted.  So it _seems_ the bustage lurks in
> 38506ece somewhere.  Too bad it's non-dinky, and written in wifi-ese :)

Yes, I am aware that rtl8192se is failing, and now that I am back from vacation, 
I am working on the problem. If you want to use the driver with kernel 3.18, 
clone the repo at http://github.com/lwfinger/rtlwifi_new.git and build and 
install either the master or kernel_version branches. Both work.

I am in the process of trying to find what the crucial difference is between 
that repo and the kernel version.

Larry


--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Mike Galbraith Nov. 6, 2014, 3:03 a.m. UTC | #4
On Wed, 2014-11-05 at 12:12 -0600, Larry Finger wrote:

> Yes, I am aware that rtl8192se is failing, and now that I am back from vacation, 
> I am working on the problem. If you want to use the driver with kernel 3.18, 
> clone the repo at http://github.com/lwfinger/rtlwifi_new.git and build and 
> install either the master or kernel_version branches. Both work.

Nah, no hurry.  My lappy is about to go on 4 weeks vacation, and has a
bulging suitcase full of kernels to wear :)

-Mike

--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Murilo Opsfelder Araújo Nov. 6, 2014, 11:40 a.m. UTC | #5
On 11/05/2014 04:12 PM, Larry Finger wrote:
> On 11/05/2014 03:16 AM, Mike Galbraith wrote:
>> On Wed, 2014-10-29 at 23:30 -0500, Larry Finger wrote:
>>> On 10/29/2014 06:28 PM, Murilo Opsfelder Araujo wrote:
>>>> This is a complement of commit 08054200117a95afc14c3d2ed3a38bf4e345bf78
>>>> "rtlwifi: Add check for get_btc_status callback".
>>>>
>>>> With this patch, next-20141029 at least does not panic with rtl8192se
>>>> device.
>>>>
>>>
>>> This patch is OK, but as noted it is not complete.
>>>
>>> I have patches to fix all the kernel panics for rtl8192se AND
>>> rtl8192ce. There
>>> are missing parts, but I would prefer submitting mine, which would
>>> conflict with
>>> this one. For that reason, NACK for this one, and please apply the
>>> set I am
>>> submitting now.
>>
>> It's all in there now, but my RTL8191SEvB is still dead.  Squabbling
>> with it isn't going all that well either.
>>
>> As soon as 38506ece rtlwifi: rtl_pci: Start modification for new drivers
>> is applied, explosions appear.  Subsequently applying...
>>
>> 08054200 rtlwifi: Add check for get_btc_status callback
>> c0386f15 rtlwifi: rtl8192ce: rtl8192de: rtl8192se: Fix handling for
>> missing get_btc_status
>> 50147969 rtlwifi: rtl8192se: Fix duplicate calls to
>> ieee80211_register_hw()
>> 30c5ccc6 rtlwifi: rtl8192se: Add missing section to read descriptor
>> setting
>> 75a916e1 rtlwifi: rtl8192se: Fix firmware loading
>>
>> ...fixes that mess up, but leaves the interface dead in the same manner
>> as if nothing has been reverted.  So it _seems_ the bustage lurks in
>> 38506ece somewhere.  Too bad it's non-dinky, and written in wifi-ese :)
> 
> Yes, I am aware that rtl8192se is failing, and now that I am back from
> vacation, I am working on the problem. If you want to use the driver
> with kernel 3.18, clone the repo at
> http://github.com/lwfinger/rtlwifi_new.git and build and install either
> the master or kernel_version branches. Both work.
> 
> I am in the process of trying to find what the crucial difference is
> between that repo and the kernel version.
> 
> Larry
> 
> 
I'm sending to everyone so others can jump in as well.

Here are the steps I've followed.

Installed and booted my kernel:

$ sudo dpkg -i linux-image-3.18.0-rc3-next-20141105-panda_3.18.0-rc3-next-20141105-panda-1_amd64.deb linux-headers-3.18.0-rc3-next-20141105-panda_3.18.0-rc3-next-20141105-panda-1_amd64.deb

Built modules from Larry's github repository.

$ cd rtlwifi_new
$ make
$ sudo make install

$ sudo modprobe -rv rtl8192se
rmmod rtl8192se
rmmod rtl_pci
rmmod rtlwifi
rmmod mac80211
rmmod cfg80211

The module does not load:

$ sudo modprobe -v rtl8192se
insmod /lib/modules/3.18.0-rc3-next-20141105-panda/kernel/net/wireless/cfg80211.ko
insmod /lib/modules/3.18.0-rc3-next-20141105-panda/kernel/net/mac80211/mac80211.ko
insmod /lib/modules/3.18.0-rc3-next-20141105-panda/kernel/drivers/net/wireless/rtlwifi/rtlwifi.ko
insmod /lib/modules/3.18.0-rc3-next-20141105-panda/kernel/drivers/net/wireless/rtlwifi/rtl_pci.ko
insmod /lib/modules/3.18.0-rc3-next-20141105-panda/extra/rtl8192se.ko
ERROR: could not insert 'rtl8192se': Invalid argument

And /var/log/messages showed:

Nov  5 22:28:01 laptop kernel: [  301.276806] rtl8192se: disagrees about version of symbol rtl_process_phyinfo
Nov  5 22:28:01 laptop kernel: [  301.276812] rtl8192se: Unknown symbol rtl_process_phyinfo (err -22)
Nov  5 22:28:01 laptop kernel: [  301.276864] rtl8192se: disagrees about version of symbol rtl_get_tcb_desc
Nov  5 22:28:01 laptop kernel: [  301.276866] rtl8192se: Unknown symbol rtl_get_tcb_desc (err -22)
Murilo Opsfelder Araújo Nov. 6, 2014, 10:52 p.m. UTC | #6
On 11/06/2014 09:40 AM, Murilo Opsfelder Araujo wrote:
> On 11/05/2014 04:12 PM, Larry Finger wrote:
>> On 11/05/2014 03:16 AM, Mike Galbraith wrote:
>>> On Wed, 2014-10-29 at 23:30 -0500, Larry Finger wrote:
>>>> On 10/29/2014 06:28 PM, Murilo Opsfelder Araujo wrote:
>>>>> This is a complement of commit 08054200117a95afc14c3d2ed3a38bf4e345bf78
>>>>> "rtlwifi: Add check for get_btc_status callback".
>>>>>
>>>>> With this patch, next-20141029 at least does not panic with rtl8192se
>>>>> device.
>>>>>
>>>>
>>>> This patch is OK, but as noted it is not complete.
>>>>
>>>> I have patches to fix all the kernel panics for rtl8192se AND
>>>> rtl8192ce. There
>>>> are missing parts, but I would prefer submitting mine, which would
>>>> conflict with
>>>> this one. For that reason, NACK for this one, and please apply the
>>>> set I am
>>>> submitting now.
>>>
>>> It's all in there now, but my RTL8191SEvB is still dead.  Squabbling
>>> with it isn't going all that well either.
>>>
>>> As soon as 38506ece rtlwifi: rtl_pci: Start modification for new drivers
>>> is applied, explosions appear.  Subsequently applying...
>>>
>>> 08054200 rtlwifi: Add check for get_btc_status callback
>>> c0386f15 rtlwifi: rtl8192ce: rtl8192de: rtl8192se: Fix handling for
>>> missing get_btc_status
>>> 50147969 rtlwifi: rtl8192se: Fix duplicate calls to
>>> ieee80211_register_hw()
>>> 30c5ccc6 rtlwifi: rtl8192se: Add missing section to read descriptor
>>> setting
>>> 75a916e1 rtlwifi: rtl8192se: Fix firmware loading
>>>
>>> ...fixes that mess up, but leaves the interface dead in the same manner
>>> as if nothing has been reverted.  So it _seems_ the bustage lurks in
>>> 38506ece somewhere.  Too bad it's non-dinky, and written in wifi-ese :)
>>
>> Yes, I am aware that rtl8192se is failing, and now that I am back from
>> vacation, I am working on the problem. If you want to use the driver
>> with kernel 3.18, clone the repo at
>> http://github.com/lwfinger/rtlwifi_new.git and build and install either
>> the master or kernel_version branches. Both work.
>>
>> I am in the process of trying to find what the crucial difference is
>> between that repo and the kernel version.
>>
>> Larry
>>
>>
> I'm sending to everyone so others can jump in as well.
> 
> Here are the steps I've followed.
> 
> Installed and booted my kernel:
> 
> $ sudo dpkg -i linux-image-3.18.0-rc3-next-20141105-panda_3.18.0-rc3-next-20141105-panda-1_amd64.deb linux-headers-3.18.0-rc3-next-20141105-panda_3.18.0-rc3-next-20141105-panda-1_amd64.deb
> 
> Built modules from Larry's github repository.
> 
> $ cd rtlwifi_new
> $ make
> $ sudo make install
> 
> $ sudo modprobe -rv rtl8192se
> rmmod rtl8192se
> rmmod rtl_pci
> rmmod rtlwifi
> rmmod mac80211
> rmmod cfg80211
> 
> The module does not load:
> 
> $ sudo modprobe -v rtl8192se
> insmod /lib/modules/3.18.0-rc3-next-20141105-panda/kernel/net/wireless/cfg80211.ko
> insmod /lib/modules/3.18.0-rc3-next-20141105-panda/kernel/net/mac80211/mac80211.ko
> insmod /lib/modules/3.18.0-rc3-next-20141105-panda/kernel/drivers/net/wireless/rtlwifi/rtlwifi.ko
> insmod /lib/modules/3.18.0-rc3-next-20141105-panda/kernel/drivers/net/wireless/rtlwifi/rtl_pci.ko
> insmod /lib/modules/3.18.0-rc3-next-20141105-panda/extra/rtl8192se.ko
> ERROR: could not insert 'rtl8192se': Invalid argument
> 
> And /var/log/messages showed:
> 
> Nov  5 22:28:01 laptop kernel: [  301.276806] rtl8192se: disagrees about version of symbol rtl_process_phyinfo
> Nov  5 22:28:01 laptop kernel: [  301.276812] rtl8192se: Unknown symbol rtl_process_phyinfo (err -22)
> Nov  5 22:28:01 laptop kernel: [  301.276864] rtl8192se: disagrees about version of symbol rtl_get_tcb_desc
> Nov  5 22:28:01 laptop kernel: [  301.276866] rtl8192se: Unknown symbol rtl_get_tcb_desc (err -22)
> 

Here is what I did in order to get the rtl8192se from Larry's repo to
work:

$ cd rtlwifi_new
$ make

$ sudo modprobe -rv rtl8192se
rmmod rtl8192se
rmmod rtl_pci
rmmod rtlwifi
rmmod mac80211
rmmod cfg80211

$ sudo modprobe -v cfg80211
insmod /lib/modules/3.18.0-rc3-next-20141106-panda/kernel/net/wireless/cfg80211.ko

$ sudo modprobe -v mac80211
insmod /lib/modules/3.18.0-rc3-next-20141106-panda/kernel/net/mac80211/mac80211.ko

$ sudo insmod ./rtlwifi.ko
$ sudo insmod ./rtl_pci.ko
$ sudo insmod ./rtl8192se/rtl8192se.ko

Cascardo helped me to investigate this and the issue was that modprobe
was loading the core rtl drivers from the next-20141105 and the
rtl8192se from Larry's repo.  Thus, rtl8192se didn't have all its
required symbols at loading time.

Loading the drivers in reverse order using insmod did the trick.

Larry, your rtl8192se from rtlwifi_new repository is working pretty
fine on my hardware.  I'm looking forward to see that code landing
linux 3.18.

Thanks everyone for the help and support.  At least now, I have a
workaround.

Apreciated!
Larry Finger Nov. 6, 2014, 11:30 p.m. UTC | #7
On 11/06/2014 04:52 PM, Murilo Opsfelder Araujo wrote:
> On 11/06/2014 09:40 AM, Murilo Opsfelder Araujo wrote:
>> On 11/05/2014 04:12 PM, Larry Finger wrote:
>>> On 11/05/2014 03:16 AM, Mike Galbraith wrote:
>>>> On Wed, 2014-10-29 at 23:30 -0500, Larry Finger wrote:
>>>>> On 10/29/2014 06:28 PM, Murilo Opsfelder Araujo wrote:
>>>>>> This is a complement of commit 08054200117a95afc14c3d2ed3a38bf4e345bf78
>>>>>> "rtlwifi: Add check for get_btc_status callback".
>>>>>>
>>>>>> With this patch, next-20141029 at least does not panic with rtl8192se
>>>>>> device.
>>>>>>
>>>>>
>>>>> This patch is OK, but as noted it is not complete.
>>>>>
>>>>> I have patches to fix all the kernel panics for rtl8192se AND
>>>>> rtl8192ce. There
>>>>> are missing parts, but I would prefer submitting mine, which would
>>>>> conflict with
>>>>> this one. For that reason, NACK for this one, and please apply the
>>>>> set I am
>>>>> submitting now.
>>>>
>>>> It's all in there now, but my RTL8191SEvB is still dead.  Squabbling
>>>> with it isn't going all that well either.
>>>>
>>>> As soon as 38506ece rtlwifi: rtl_pci: Start modification for new drivers
>>>> is applied, explosions appear.  Subsequently applying...
>>>>
>>>> 08054200 rtlwifi: Add check for get_btc_status callback
>>>> c0386f15 rtlwifi: rtl8192ce: rtl8192de: rtl8192se: Fix handling for
>>>> missing get_btc_status
>>>> 50147969 rtlwifi: rtl8192se: Fix duplicate calls to
>>>> ieee80211_register_hw()
>>>> 30c5ccc6 rtlwifi: rtl8192se: Add missing section to read descriptor
>>>> setting
>>>> 75a916e1 rtlwifi: rtl8192se: Fix firmware loading
>>>>
>>>> ...fixes that mess up, but leaves the interface dead in the same manner
>>>> as if nothing has been reverted.  So it _seems_ the bustage lurks in
>>>> 38506ece somewhere.  Too bad it's non-dinky, and written in wifi-ese :)
>>>
>>> Yes, I am aware that rtl8192se is failing, and now that I am back from
>>> vacation, I am working on the problem. If you want to use the driver
>>> with kernel 3.18, clone the repo at
>>> http://github.com/lwfinger/rtlwifi_new.git and build and install either
>>> the master or kernel_version branches. Both work.
>>>
>>> I am in the process of trying to find what the crucial difference is
>>> between that repo and the kernel version.
>>>
>>> Larry
>>>
>>>
>> I'm sending to everyone so others can jump in as well.
>>
>> Here are the steps I've followed.
>>
>> Installed and booted my kernel:
>>
>> $ sudo dpkg -i linux-image-3.18.0-rc3-next-20141105-panda_3.18.0-rc3-next-20141105-panda-1_amd64.deb linux-headers-3.18.0-rc3-next-20141105-panda_3.18.0-rc3-next-20141105-panda-1_amd64.deb
>>
>> Built modules from Larry's github repository.
>>
>> $ cd rtlwifi_new
>> $ make
>> $ sudo make install
>>
>> $ sudo modprobe -rv rtl8192se
>> rmmod rtl8192se
>> rmmod rtl_pci
>> rmmod rtlwifi
>> rmmod mac80211
>> rmmod cfg80211
>>
>> The module does not load:
>>
>> $ sudo modprobe -v rtl8192se
>> insmod /lib/modules/3.18.0-rc3-next-20141105-panda/kernel/net/wireless/cfg80211.ko
>> insmod /lib/modules/3.18.0-rc3-next-20141105-panda/kernel/net/mac80211/mac80211.ko
>> insmod /lib/modules/3.18.0-rc3-next-20141105-panda/kernel/drivers/net/wireless/rtlwifi/rtlwifi.ko
>> insmod /lib/modules/3.18.0-rc3-next-20141105-panda/kernel/drivers/net/wireless/rtlwifi/rtl_pci.ko
>> insmod /lib/modules/3.18.0-rc3-next-20141105-panda/extra/rtl8192se.ko
>> ERROR: could not insert 'rtl8192se': Invalid argument
>>
>> And /var/log/messages showed:
>>
>> Nov  5 22:28:01 laptop kernel: [  301.276806] rtl8192se: disagrees about version of symbol rtl_process_phyinfo
>> Nov  5 22:28:01 laptop kernel: [  301.276812] rtl8192se: Unknown symbol rtl_process_phyinfo (err -22)
>> Nov  5 22:28:01 laptop kernel: [  301.276864] rtl8192se: disagrees about version of symbol rtl_get_tcb_desc
>> Nov  5 22:28:01 laptop kernel: [  301.276866] rtl8192se: Unknown symbol rtl_get_tcb_desc (err -22)
>>
>
> Here is what I did in order to get the rtl8192se from Larry's repo to
> work:
>
> $ cd rtlwifi_new
> $ make
>
> $ sudo modprobe -rv rtl8192se
> rmmod rtl8192se
> rmmod rtl_pci
> rmmod rtlwifi
> rmmod mac80211
> rmmod cfg80211
>
> $ sudo modprobe -v cfg80211
> insmod /lib/modules/3.18.0-rc3-next-20141106-panda/kernel/net/wireless/cfg80211.ko
>
> $ sudo modprobe -v mac80211
> insmod /lib/modules/3.18.0-rc3-next-20141106-panda/kernel/net/mac80211/mac80211.ko
>
> $ sudo insmod ./rtlwifi.ko
> $ sudo insmod ./rtl_pci.ko
> $ sudo insmod ./rtl8192se/rtl8192se.ko
>
> Cascardo helped me to investigate this and the issue was that modprobe
> was loading the core rtl drivers from the next-20141105 and the
> rtl8192se from Larry's repo.  Thus, rtl8192se didn't have all its
> required symbols at loading time.
>
> Loading the drivers in reverse order using insmod did the trick.
>
> Larry, your rtl8192se from rtlwifi_new repository is working pretty
> fine on my hardware.  I'm looking forward to see that code landing
> linux 3.18.

I am happy that it is working now; however, if you had done "sudo make install", 
the new drivers would have been in the proper directories, and you would not 
have gotten the incorrect symbol errors, or need to use the insmod commands that 
you post.

Larry


--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Murilo Opsfelder Araújo Nov. 12, 2014, 11:03 p.m. UTC | #8
On Thu, Nov 6, 2014 at 9:30 PM, Larry Finger <Larry.Finger@lwfinger.net> wrote:
> On 11/06/2014 04:52 PM, Murilo Opsfelder Araujo wrote:
>>
>> On 11/06/2014 09:40 AM, Murilo Opsfelder Araujo wrote:
>>>
>>> On 11/05/2014 04:12 PM, Larry Finger wrote:
>>>>
>>>> On 11/05/2014 03:16 AM, Mike Galbraith wrote:
>>>>>
>>>>> On Wed, 2014-10-29 at 23:30 -0500, Larry Finger wrote:
>>>>>>
>>>>>> On 10/29/2014 06:28 PM, Murilo Opsfelder Araujo wrote:
>>>>>>>
>>>>>>> This is a complement of commit
>>>>>>> 08054200117a95afc14c3d2ed3a38bf4e345bf78
>>>>>>> "rtlwifi: Add check for get_btc_status callback".
>>>>>>>
>>>>>>> With this patch, next-20141029 at least does not panic with rtl8192se
>>>>>>> device.
>>>>>>>
>>>>>>
>>>>>> This patch is OK, but as noted it is not complete.
>>>>>>
>>>>>> I have patches to fix all the kernel panics for rtl8192se AND
>>>>>> rtl8192ce. There
>>>>>> are missing parts, but I would prefer submitting mine, which would
>>>>>> conflict with
>>>>>> this one. For that reason, NACK for this one, and please apply the
>>>>>> set I am
>>>>>> submitting now.
>>>>>
>>>>>
>>>>> It's all in there now, but my RTL8191SEvB is still dead.  Squabbling
>>>>> with it isn't going all that well either.
>>>>>
>>>>> As soon as 38506ece rtlwifi: rtl_pci: Start modification for new
>>>>> drivers
>>>>> is applied, explosions appear.  Subsequently applying...
>>>>>
>>>>> 08054200 rtlwifi: Add check for get_btc_status callback
>>>>> c0386f15 rtlwifi: rtl8192ce: rtl8192de: rtl8192se: Fix handling for
>>>>> missing get_btc_status
>>>>> 50147969 rtlwifi: rtl8192se: Fix duplicate calls to
>>>>> ieee80211_register_hw()
>>>>> 30c5ccc6 rtlwifi: rtl8192se: Add missing section to read descriptor
>>>>> setting
>>>>> 75a916e1 rtlwifi: rtl8192se: Fix firmware loading
>>>>>
>>>>> ...fixes that mess up, but leaves the interface dead in the same manner
>>>>> as if nothing has been reverted.  So it _seems_ the bustage lurks in
>>>>> 38506ece somewhere.  Too bad it's non-dinky, and written in wifi-ese :)
>>>>
>>>>
>>>> Yes, I am aware that rtl8192se is failing, and now that I am back from
>>>> vacation, I am working on the problem. If you want to use the driver
>>>> with kernel 3.18, clone the repo at
>>>> http://github.com/lwfinger/rtlwifi_new.git and build and install either
>>>> the master or kernel_version branches. Both work.
>>>>
>>>> I am in the process of trying to find what the crucial difference is
>>>> between that repo and the kernel version.
>>>>
>>>> Larry
>>>>
>>>>
>>> I'm sending to everyone so others can jump in as well.
>>>
>>> Here are the steps I've followed.
>>>
>>> Installed and booted my kernel:
>>>
>>> $ sudo dpkg -i
>>> linux-image-3.18.0-rc3-next-20141105-panda_3.18.0-rc3-next-20141105-panda-1_amd64.deb
>>> linux-headers-3.18.0-rc3-next-20141105-panda_3.18.0-rc3-next-20141105-panda-1_amd64.deb
>>>
>>> Built modules from Larry's github repository.
>>>
>>> $ cd rtlwifi_new
>>> $ make
>>> $ sudo make install
>>>
>>> $ sudo modprobe -rv rtl8192se
>>> rmmod rtl8192se
>>> rmmod rtl_pci
>>> rmmod rtlwifi
>>> rmmod mac80211
>>> rmmod cfg80211
>>>
>>> The module does not load:
>>>
>>> $ sudo modprobe -v rtl8192se
>>> insmod
>>> /lib/modules/3.18.0-rc3-next-20141105-panda/kernel/net/wireless/cfg80211.ko
>>> insmod
>>> /lib/modules/3.18.0-rc3-next-20141105-panda/kernel/net/mac80211/mac80211.ko
>>> insmod
>>> /lib/modules/3.18.0-rc3-next-20141105-panda/kernel/drivers/net/wireless/rtlwifi/rtlwifi.ko
>>> insmod
>>> /lib/modules/3.18.0-rc3-next-20141105-panda/kernel/drivers/net/wireless/rtlwifi/rtl_pci.ko
>>> insmod /lib/modules/3.18.0-rc3-next-20141105-panda/extra/rtl8192se.ko
>>> ERROR: could not insert 'rtl8192se': Invalid argument
>>>
>>> And /var/log/messages showed:
>>>
>>> Nov  5 22:28:01 laptop kernel: [  301.276806] rtl8192se: disagrees about
>>> version of symbol rtl_process_phyinfo
>>> Nov  5 22:28:01 laptop kernel: [  301.276812] rtl8192se: Unknown symbol
>>> rtl_process_phyinfo (err -22)
>>> Nov  5 22:28:01 laptop kernel: [  301.276864] rtl8192se: disagrees about
>>> version of symbol rtl_get_tcb_desc
>>> Nov  5 22:28:01 laptop kernel: [  301.276866] rtl8192se: Unknown symbol
>>> rtl_get_tcb_desc (err -22)
>>>
>>
>> Here is what I did in order to get the rtl8192se from Larry's repo to
>> work:
>>
>> $ cd rtlwifi_new
>> $ make
>>
>> $ sudo modprobe -rv rtl8192se
>> rmmod rtl8192se
>> rmmod rtl_pci
>> rmmod rtlwifi
>> rmmod mac80211
>> rmmod cfg80211
>>
>> $ sudo modprobe -v cfg80211
>> insmod
>> /lib/modules/3.18.0-rc3-next-20141106-panda/kernel/net/wireless/cfg80211.ko
>>
>> $ sudo modprobe -v mac80211
>> insmod
>> /lib/modules/3.18.0-rc3-next-20141106-panda/kernel/net/mac80211/mac80211.ko
>>
>> $ sudo insmod ./rtlwifi.ko
>> $ sudo insmod ./rtl_pci.ko
>> $ sudo insmod ./rtl8192se/rtl8192se.ko
>>
>> Cascardo helped me to investigate this and the issue was that modprobe
>> was loading the core rtl drivers from the next-20141105 and the
>> rtl8192se from Larry's repo.  Thus, rtl8192se didn't have all its
>> required symbols at loading time.
>>
>> Loading the drivers in reverse order using insmod did the trick.
>>
>> Larry, your rtl8192se from rtlwifi_new repository is working pretty
>> fine on my hardware.  I'm looking forward to see that code landing
>> linux 3.18.
>
>
> I am happy that it is working now; however, if you had done "sudo make
> install", the new drivers would have been in the proper directories, and you
> would not have gotten the incorrect symbol errors, or need to use the insmod
> commands that you post.
>
> Larry
>
>
Hello, Larry.

I'd like to let you know that next-20141112 brought my rtl8192se
device back to life.  I didn't need to build rtlwifi_new to be able to
connect to my wifi network.  It worked just fine.

Thank you all.
Mike Galbraith Nov. 14, 2014, 3:41 p.m. UTC | #9
On Wed, 2014-11-12 at 21:03 -0200, Murilo Opsfelder Araújo wrote:

> Hello, Larry.
> 
> I'd like to let you know that next-20141112 brought my rtl8192se
> device back to life.  I didn't need to build rtlwifi_new to be able to
> connect to my wifi network.  It worked just fine.

Yeah, unsurprisingly, merging those fixed up my lappy as well.

	-Mike

--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/drivers/net/wireless/rtlwifi/base.c b/drivers/net/wireless/rtlwifi/base.c
index 40b6d1d..1a51577 100644
--- a/drivers/net/wireless/rtlwifi/base.c
+++ b/drivers/net/wireless/rtlwifi/base.c
@@ -1234,7 +1234,8 @@  EXPORT_SYMBOL_GPL(rtl_action_proc);
 static void setup_arp_tx(struct rtl_priv *rtlpriv, struct rtl_ps_ctl *ppsc)
 {
 	rtlpriv->ra.is_special_data = true;
-	if (rtlpriv->cfg->ops->get_btc_status())
+	if (rtlpriv->cfg->ops->get_btc_status &&
+	    rtlpriv->cfg->ops->get_btc_status())
 		rtlpriv->btcoexist.btc_ops->btc_special_packet_notify(
 					rtlpriv, 1);
 	rtlpriv->enter_ps = false;
@@ -1629,7 +1630,8 @@  void rtl_watchdog_wq_callback(void *data)
 		}
 	}

-	if (rtlpriv->cfg->ops->get_btc_status())
+	if (rtlpriv->cfg->ops->get_btc_status &&
+	    rtlpriv->cfg->ops->get_btc_status())
 		rtlpriv->btcoexist.btc_ops->btc_periodical(rtlpriv);

 	rtlpriv->link_info.bcn_rx_inperiod = 0;
diff --git a/drivers/net/wireless/rtlwifi/core.c b/drivers/net/wireless/rtlwifi/core.c
index f6179bc..686d256 100644
--- a/drivers/net/wireless/rtlwifi/core.c
+++ b/drivers/net/wireless/rtlwifi/core.c
@@ -1133,7 +1133,8 @@  static void rtl_op_bss_info_changed(struct ieee80211_hw *hw,
 		ppsc->report_linked = (mstatus == RT_MEDIA_CONNECT) ?
 				      true : false;

-		if (rtlpriv->cfg->ops->get_btc_status())
+		if (rtlpriv->cfg->ops->get_btc_status &&
+		    rtlpriv->cfg->ops->get_btc_status())
 			rtlpriv->btcoexist.btc_ops->btc_mediastatus_notify(
 							rtlpriv, mstatus);
 	}
@@ -1373,7 +1374,8 @@  static void rtl_op_sw_scan_start(struct ieee80211_hw *hw)
 		return;
 	}

-	if (rtlpriv->cfg->ops->get_btc_status())
+	if (rtlpriv->cfg->ops->get_btc_status &&
+	    rtlpriv->cfg->ops->get_btc_status())
 		rtlpriv->btcoexist.btc_ops->btc_scan_notify(rtlpriv, 1);

 	if (rtlpriv->dm.supp_phymode_switch) {
@@ -1425,7 +1427,8 @@  static void rtl_op_sw_scan_complete(struct ieee80211_hw *hw)
 	}

 	rtlpriv->cfg->ops->scan_operation_backup(hw, SCAN_OPT_RESTORE);
-	if (rtlpriv->cfg->ops->get_btc_status())
+	if (rtlpriv->cfg->ops->get_btc_status &&
+	    rtlpriv->cfg->ops->get_btc_status())
 		rtlpriv->btcoexist.btc_ops->btc_scan_notify(rtlpriv, 0);
 }

diff --git a/drivers/net/wireless/rtlwifi/pci.c b/drivers/net/wireless/rtlwifi/pci.c
index 25daa87..ed3364d 100644
--- a/drivers/net/wireless/rtlwifi/pci.c
+++ b/drivers/net/wireless/rtlwifi/pci.c
@@ -1833,7 +1833,8 @@  static void rtl_pci_stop(struct ieee80211_hw *hw)
 	unsigned long flags;
 	u8 RFInProgressTimeOut = 0;

-	if (rtlpriv->cfg->ops->get_btc_status())
+	if (rtlpriv->cfg->ops->get_btc_status &&
+	    rtlpriv->cfg->ops->get_btc_status())
 		rtlpriv->btcoexist.btc_ops->btc_halt_notify();

 	/*
diff --git a/drivers/net/wireless/rtlwifi/ps.c b/drivers/net/wireless/rtlwifi/ps.c
index b69321d..2278af9 100644
--- a/drivers/net/wireless/rtlwifi/ps.c
+++ b/drivers/net/wireless/rtlwifi/ps.c
@@ -261,7 +261,8 @@  void rtl_ips_nic_off_wq_callback(void *data)
 			ppsc->in_powersavemode = true;

 			/* call before RF off */
-			if (rtlpriv->cfg->ops->get_btc_status())
+			if (rtlpriv->cfg->ops->get_btc_status &&
+			    rtlpriv->cfg->ops->get_btc_status())
 				rtlpriv->btcoexist.btc_ops->btc_ips_notify(rtlpriv,
 									ppsc->inactive_pwrstate);

@@ -306,7 +307,8 @@  void rtl_ips_nic_on(struct ieee80211_hw *hw)
 			ppsc->in_powersavemode = false;
 			_rtl_ps_inactive_ps(hw);
 			/* call after RF on */
-			if (rtlpriv->cfg->ops->get_btc_status())
+			if (rtlpriv->cfg->ops->get_btc_status &&
+			    rtlpriv->cfg->ops->get_btc_status())
 				rtlpriv->btcoexist.btc_ops->btc_ips_notify(rtlpriv,
 									ppsc->inactive_pwrstate);
 		}
@@ -390,14 +392,16 @@  void rtl_lps_set_psmode(struct ieee80211_hw *hw, u8 rt_psmode)
 			if (ppsc->p2p_ps_info.opp_ps)
 				rtl_p2p_ps_cmd(hw , P2P_PS_ENABLE);

-			if (rtlpriv->cfg->ops->get_btc_status())
+			if (rtlpriv->cfg->ops->get_btc_status &&
+			    rtlpriv->cfg->ops->get_btc_status())
 				rtlpriv->btcoexist.btc_ops->btc_lps_notify(rtlpriv, rt_psmode);
 		} else {
 			if (rtl_get_fwlps_doze(hw)) {
 				RT_TRACE(rtlpriv, COMP_RF, DBG_DMESG,
 					 "FW LPS enter ps_mode:%x\n",
 					 ppsc->fwctrl_psmode);
-				if (rtlpriv->cfg->ops->get_btc_status())
+				if (rtlpriv->cfg->ops->get_btc_status &&
+				    rtlpriv->cfg->ops->get_btc_status())
 					rtlpriv->btcoexist.btc_ops->btc_lps_notify(rtlpriv, rt_psmode);
 				enter_fwlps = true;
 				ppsc->pwr_mode = ppsc->fwctrl_psmode;