public inbox for linux-pm@vger.kernel.org
 help / color / mirror / Atom feed
From: "Rafael J. Wysocki" <rjw@sisk.pl>
To: Jan Scholz <scholz@fias.uni-frankfurt.de>
Cc: Adrian Bunk <bunk@kernel.org>,
	linux-kernel@vger.kernel.org,
	Johannes Berg <johannes@sipsolutions.net>,
	Ingo Molnar <mingo@elte.hu>,
	pm list <linux-pm@lists.linux-foundation.org>
Subject: Re: [regression, bisected] adb trackpad disappears after suspend to ram
Date: Wed, 3 Jun 2009 22:00:54 +0200	[thread overview]
Message-ID: <200906032200.55563.rjw@sisk.pl> (raw)
In-Reply-To: <877hzty0hm.fsf@scholz.fias.uni-frankfurt.de>


[-- Attachment #1.1: Type: text/plain, Size: 9506 bytes --]

On Wednesday 03 June 2009, Jan Scholz wrote:
> "Rafael J. Wysocki" <rjw@sisk.pl> writes:
> 
> > On Tuesday 02 June 2009, Jan Scholz wrote:                                 
> >> "Rafael J. Wysocki" <rjw@sisk.pl> writes:                                
> >>                                                                          
> >> > On Monday 01 June 2009, Jan Scholz wrote:                              
> >> >> "Rafael J. Wysocki" <rjw@sisk.pl> writes:                             
> >> >>                                                                       
> >> >> > On Friday 29 May 2009, Jan Scholz wrote:                            
> >> >> >> Benjamin Herrenschmidt <benh@kernel.crashing.org> writes:          
> >> >> >>                                                                    
> >> >> >> >> We are too late in the cycle to revert this commit and it       
> > really is needed to                                                        
> >> >> >> >> fix a more serious issue. Nevertheless knowing that it caused   
> > the problem to                                                             
> >> >> >> >> appear on your system is also important.                        
> >> >> >> >>                                                                 
> >> >> >> >> Ben, do you have an idea what may be going on here? Does        
> > __disable_irq() mask                                                       
> >> >> >> >> the interrupt on this platform?                                 
> >> >> >> >                                                                  
> >> >> >> > I suppose so :-) I'll have to check what's going on, it's not    
> >> >> >> > immediately clear to me.                                         
> >> >> >> >                                                                  
> >> >> >> > Cheers,                                                          
> >> >> >> > Ben.                                                             
> >> >> >> >                                                                  
> >> >> >> >>                                                                 
> >> >> >> >> I'd like to see a boot log, preferably containing a             
> > suspend-resume in which                                                    
> >> >> >> >> the problem was reproduced.                                     
> >> >> >>                                                                    
> >> >> >> Here is a log from booting, through several suspend cycles, until  
> > the                                                                        
> >> >> >> trackpad disappeared. The first few suspends were done while X was 
> >> >> >> running but from the console. As you can tell from lines like      
> >> >> >> May 28 23:51:26 [kernel] adb devices: [2]: 2 c4 [3]: 3 1 [7]: 7 1f 
> >> >> >> the trackpad was still present. The last suspend was done from     
> > within X,                                                                  
> >> >> >> here the trackpad did not make it.                                 
> >> >> >> May 28 23:58:09 [kernel] adb devices: [2]: 2 c4 [7]: 7 1f          
> >> >> >> However, there have been cases, although not in this log, were the 
> >> >> >> trackpad has been alive even when suspending from within X.        
> >> >> >                                                                     
> >> >> > This means the problem is probably timing-related.                  
> >> >> >                                                                     
> >> >> > Can you please try to comment out suspend_device_irqs() and         
> >> >> > resume_device_irqs() in drivers/base/power/main.c and see if that   
> > changes                                                                    
> >> >> > anything? It's not entirely safe (well, that's why the calls are    
> > there after                                                                
> >> >> > all), but hopefully the box won't hang during this test.            
> >> >> >                                                                     
> >> >>                                                                       
> >> >> Tried that against v2.6.30-rc7 and it seems to fix the issue. I did   
> > ~10                                                                        
> >> >> suspend-resume cycles from the console (which worked just like        
> > before)                                                                    
> >> >> and ~20 cycles from within X and the trackpad is still alive.         
> >> >                                                                        
> >> > So, it seems we lose and interrupt during resume and that confuses the 
> >> > ADB controller driver or something like this. Do you use the keyboard  
> > or                                                                         
> >> > the trackpad as a wake-up device?                                      
> >>                                                                          
> >> I do the wakeup by pressing keys on the keyboard. I'd try wakeup via the 
> >> trackpad's button, but I have no idea how to activate that.              
> >>                                                                          
> >> > Please additionally try to go back to the original code, put           
> >> > 'sleepy_trackpad = 1' at the beginning of do_adb_reset_bus() in        
> >> > drivers/macintosh/adb.c and see if the problem is reproducible with    
> > that.                                                                      
> >>                                                                          
> >> Tried this, but it does not help.                                        
> >>                                                                          
> >> What I haven't noticed before is, that even if the trackpad already      
> >> disappeared, an additional suspend-resume cycle from the console brought 
> >> it back to life every time. Sometimes this worked from within X as well, 
> >> just not with such a high probability as from the console.               
> >> However, this is independent from 'sleepy_trackpad = 1'.                 
> >
> > OK, the patch is below, but I haven't had the opportunity to test it yet.  
> >
> > Can you please check if it helps, on top of 2.6.30-rc8?                    
> >
> > Best,                                                                      
> > Rafael                                                                     
> >
> > ---                                                                        
> > kernel/irq/manage.c | 12 ++++++++----                                      
> > 1 file changed, 8 insertions(+), 4 deletions(-)                            
> >
> > Index: linux-2.6/kernel/irq/manage.c                                       
> > ===================================================================        
> > --- linux-2.6.orig/kernel/irq/manage.c                                     
> > +++ linux-2.6/kernel/irq/manage.c                                          
> > @@ -187,9 +187,9 @@ static inline int setup_affinity(unsigne               
> > void __disable_irq(struct irq_desc *desc, unsigned int irq, bool suspend)  
> > {                                                                          
> > if (suspend) {                                                             
> > - if (!desc->action || (desc->action->flags & IRQF_TIMER))                 
> > - return;                                                                  
> > - desc->status |= IRQ_SUSPENDED;                                           
> > + if (desc->action && !(desc->action->flags & IRQF_TIMER))                 
> > + desc->status |= IRQ_SUSPENDED | IRQ_DISABLED;                            
> > + return;                                                                  
> > }                                                                          
> >
> > if (!desc->depth++) {                                                      
> > @@ -250,8 +250,12 @@ EXPORT_SYMBOL(disable_irq);                           
> >
> > void __enable_irq(struct irq_desc *desc, unsigned int irq, bool resume)    
> > {                                                                          
> > - if (resume)                                                              
> > + if (resume) {                                                            
> > desc->status &= ~IRQ_SUSPENDED;                                            
> > + if (!desc->depth)                                                        
> > + desc->status &= ~IRQ_DISABLED;                                           
> > + return;                                                                  
> > + }                                                                        
> >
> > switch (desc->depth) {                                                     
> > case 0:                                                                    
> 
> Hi Rafael,
> 
> I tried your patch, but it makes my box crash on wakeup. It even reset
> the hwclock which normally only happens with completely empty battery
> and without AC.

Ouch, sorry.

In that case I have no idea why it breaks.

Johannes also reported a problem with MacBook that was most probably introduced
by the suspend reordering changes, but that one related to hibernation.

Best,
Rafael

[-- Attachment #1.2: Type: text/html, Size: 12955 bytes --]

[-- Attachment #2: Type: text/plain, Size: 0 bytes --]



  parent reply	other threads:[~2009-06-03 20:00 UTC|newest]

Thread overview: 21+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <878wkl6vce.fsf@scholz.fias.uni-frankfurt.de>
     [not found] ` <87prdt3bgb.fsf@scholz.fias.uni-frankfurt.de>
2009-05-28 16:58   ` [regression, bisected] adb trackpad disappears after suspend to ram Rafael J. Wysocki
     [not found]   ` <200905281858.37729.rjw@sisk.pl>
2009-05-28 22:23     ` Benjamin Herrenschmidt
     [not found]     ` <1243549422.17903.10.camel@pasglop>
2009-05-28 22:39       ` Jan Scholz
     [not found]       ` <87tz34n97p.fsf@scholz.fias.uni-frankfurt.de>
2009-05-29 18:10         ` Rafael J. Wysocki
     [not found]         ` <200905292010.10615.rjw@sisk.pl>
2009-06-01 13:44           ` Jan Scholz
     [not found]           ` <87fxekxe3w.fsf@scholz.fias.uni-frankfurt.de>
2009-06-01 16:36             ` Rafael J. Wysocki
     [not found]             ` <200906011836.15507.rjw@sisk.pl>
2009-06-01 22:34               ` Jan Scholz
     [not found]               ` <877hzv8txp.fsf@scholz.fias.uni-frankfurt.de>
2009-06-01 22:42                 ` Rafael J. Wysocki
     [not found]                 ` <200906020042.37036.rjw@sisk.pl>
2009-06-01 22:52                   ` Benjamin Herrenschmidt
2009-06-03 10:02                 ` Rafael J. Wysocki
2009-06-03 12:18                   ` Jan Scholz
     [not found]                   ` <877hzty0hm.fsf@scholz.fias.uni-frankfurt.de>
2009-06-03 20:00                     ` Rafael J. Wysocki [this message]
2009-06-03 20:20                       ` Rafael J. Wysocki
2009-06-03 22:17                         ` Jan Scholz
2009-09-23  3:32                       ` Benjamin Herrenschmidt
2009-09-23 13:38                         ` Rafael J. Wysocki
     [not found]                         ` <200909231538.51227.rjw@sisk.pl>
2009-09-23 21:28                           ` Benjamin Herrenschmidt
2009-09-23 23:12                           ` Jan Scholz
     [not found]                           ` <1253741332.7103.324.camel@pasglop>
2009-10-07 17:10                             ` Jan Scholz
2009-10-07 20:18                               ` Rafael J. Wysocki
2009-06-02  4:49               ` Benjamin Herrenschmidt

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=200906032200.55563.rjw@sisk.pl \
    --to=rjw@sisk.pl \
    --cc=bunk@kernel.org \
    --cc=johannes@sipsolutions.net \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-pm@lists.linux-foundation.org \
    --cc=mingo@elte.hu \
    --cc=scholz@fias.uni-frankfurt.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox