Re: [RFC] serio driver: speed up resume

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



<rafael and linux-pm cc'd>

On Tue, 24 Jun 2008, Shaohua Li wrote:

> On Mon, 2008-06-16 at 17:09 +0800, Shaohua Li wrote:
> > serio_resume will call into psmouse_extensions(). In my test, the
> > routine is very slow, it blocks resume about 1 sec. Below patch (move
> > resume to kseriod, just like boot time probe) cures the issue in my
> > test, and seems no side effect. I'm no familiar with serio driver, so
> > please check.

> Any comments from input guys?

none that i can see.

Rafael,
can you put this patch in with your suspend test patches?
I would do so, but as I'll be out for a bit I'll not
be here to babysit it if something breaks.

thanks,
-Len

> 
> > Signed-off-by: Shaohua Li <shaohua.li@xxxxxxxxx>
> > 
> > diff --git a/drivers/input/serio/serio.c b/drivers/input/serio/serio.c
> > index 7f52938..7dad33f 100644
> > --- a/drivers/input/serio/serio.c
> > +++ b/drivers/input/serio/serio.c
> > @@ -163,6 +163,7 @@ enum serio_event_type {
> >         SERIO_RECONNECT_PORT,
> >         SERIO_REGISTER_PORT,
> >         SERIO_ATTACH_DRIVER,
> > +       SERIO_RESUME_PORT,
> >  };
> > 
> >  struct serio_event {
> > @@ -287,6 +288,13 @@ static struct serio_event *serio_get_event(void)
> >         return event;
> >  }
> > 
> > +#ifdef CONFIG_PM
> > +static void serio_resume_port(struct device *dev);
> > +#else
> > +static inline void serio_resume_port(struct device *dev)
> > +{
> > +}
> > +#endif /* CONFIG_PM */
> >  static void serio_handle_event(void)
> >  {
> >         struct serio_event *event;
> > @@ -319,6 +327,10 @@ static void serio_handle_event(void)
> >                                 serio_attach_driver(event->object);
> >                                 break;
> > 
> > +                       case SERIO_RESUME_PORT:
> > +                               serio_resume_port(event->object);
> > +                               break;
> > +
> >                         default:
> >                                 break;
> >                 }
> > @@ -922,21 +934,26 @@ static int serio_suspend(struct device *dev,
> > pm_message_t state)
> >         return 0;
> >  }
> > 
> > -static int serio_resume(struct device *dev)
> > +static void serio_resume_port(struct device *dev)
> >  {
> >         struct serio *serio = to_serio_port(dev);
> > 
> > -       if (dev->power.power_state.event != PM_EVENT_ON &&
> > -           serio_reconnect_driver(serio)) {
> > -               /*
> > -                * Driver re-probing can take a while, so better let
> > kseriod
> > -                * deal with it.
> > -                */
> > -               serio_rescan(serio);
> > +       if (serio_reconnect_driver(serio)) {
> > +               serio_disconnect_port(serio);
> > +               serio_find_driver(serio);
> >         }
> > 
> >         dev->power.power_state = PMSG_ON;
> > +}
> > 
> > +static int serio_resume(struct device *dev)
> > +{
> > +       /*
> > +        * Driver reconnect can take a while, so better let kseriod
> > +        * deal with it.
> > +        */
> > +       if (dev->power.power_state.event != PM_EVENT_ON)
> > +               serio_queue_event(dev, NULL, SERIO_RESUME_PORT);
> >         return 0;
> >  }
> >  #endif /* CONFIG_PM */
> > 
> > 
> > --
> > To unsubscribe from this list: send the line "unsubscribe linux-acpi"
> > in
> > the body of a message to majordomo@xxxxxxxxxxxxxxx
> > More majordomo info at  http://vger.kernel.org/majordomo-info.html
> > 
> > 
> 
_______________________________________________
linux-pm mailing list
linux-pm@xxxxxxxxxxxxxxxxxxxxxxxxxx
https://lists.linux-foundation.org/mailman/listinfo/linux-pm

[Index of Archives]     [Linux ACPI]     [Netdev]     [Ethernet Bridging]     [Linux Wireless]     [CPU Freq]     [Kernel Newbies]     [Fedora Kernel]     [Security]     [Linux for Hams]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux Admin]     [Samba]

  Powered by Linux