Re: 答复: 答复: 3.1-rc6+ rtl8192se issue
From: Borislav Petkov <bp@alien8.de>
Date: 2011-09-22 07:51:22
Also in:
lkml
On Wed, Sep 21, 2011 at 10:29:15PM -0500, Larry Finger wrote:
On 09/21/2011 08:24 PM, 李朝明 wrote:quoted
Dear Sir: I can't find _rtl_pci_lps_leave_tasklet in my driver, So I want to kown which driver did you use. Would you like to try this new driver with ips =0 and lps = 0, or some combination of these two functions.It is not in my driver either. Where did that driver come from?
That's actually _rtl_pci_ips_leave_tasklet with an "i"
in "_ips_" and it is a wrapper around rtl_lps_leave() in
<drivers/net/wireless/rtlwifi/pci.c>
Basically, that's the tasklet handler for ips_leave_tasklet regged in
_rtl_pci_init_struct():
tasklet_init(&rtlpriv->works.ips_leave_tasklet,
(void (*)(unsigned long))_rtl_pci_ips_leave_tasklet,
(unsigned long)hw);
The sluggishness is consistent with the tasklet choking on something,
from looking at rtl_lps_leave() it grabs some spinlocks and then enables
IRQs in the middle of it with a very explanatory comment /* FIXME */
ontop of it which looks very suspicious to me:
/*Leave the leisure power save mode.*/
void rtl_lps_leave(struct ieee80211_hw *hw)
{
struct rtl_priv *rtlpriv = rtl_priv(hw);
struct rtl_ps_ctl *ppsc = rtl_psc(rtl_priv(hw));
struct rtl_hal *rtlhal = rtl_hal(rtl_priv(hw));
spin_lock(&rtlpriv->locks.lps_lock);
if (ppsc->fwctrl_lps) {
if (ppsc->dot11_psmode != EACTIVE) {
/*FIX ME */
rtlpriv->cfg->ops->enable_interrupt(hw);
...
But since I don't know anything about networking drivers, I'm actually
hoping that you guys could have an idea here.
HTH.
--
Regards/Gruss,
Boris.