RE: uio: power management of user-space drivers
From: Benenati, Chris J
Date: Tue Feb 15 2011 - 19:35:31 EST
Well, for example, a device may have complex application-driven hardware state,
which in turn in turn can be driven by user inputs. That state will be lost when
the system powers down. It might be necessary to invoke the driver suspend()
function before power is dropped, to read registers and preserve that state.
It is definitely necessary to call the resume function to reprogram the registers
when the power is restored.
-----Original Message-----
From: Hans J. Koch [mailto:hjk@xxxxxxxxxxxx]
Sent: Tuesday, February 15, 2011 4:21 PM
To: Benenati, Chris J
Cc: Hans J. Koch; linux-kernel@xxxxxxxxxxxxxxx; Greg KH
Subject: Re: uio: power management of user-space drivers
On Tue, Feb 15, 2011 at 03:27:10PM -0800, Benenati, Chris J wrote:
Could you please limit the line length in your mails to something like
80 characters?
> Thanks for your reply. I understand (pretty much) the suspend/resume interface
> and its registration via the Linux device model.
>
> However, that is a kernel-level interface. Assuming you have a kernel component to
> your driver, I suppose it could register a suspend() function and communicate it to
> the user space part of the driver.
>
> But in a case like suspend-to-RAM, the kernel freezes user space threads before the
> suspend() functions are invoked. By the time the suspend function is called, it
> is too late to communicate with user space.
>
> Is there a form of user-space driver notification supported by the kernel? Or does
> the kernel portion of the driver have to register for kernel notifications (which
> precede thread freezing) and alert the user space portion before it is frozen?
What are you trying to achieve?
Could you give an example of the problem you're facing in your application?
Let me guess: suspend/resume functions are supposed to leave your hardware in
a consistent state and you don't know the state if the suspend() catches you
in the middle of your userspace processing?
I remember the Android guys had problems like that and invented some
"suspend blockers". However, I don't remember what the final answer in that
discussion was. Greg?
Thanks,
Hans
>
> -----Original Message-----
> From: Hans J. Koch [mailto:hjk@xxxxxxxxxxxx]
> Sent: Tuesday, February 15, 2011 3:13 PM
> To: Benenati, Chris J
> Cc: hjk@xxxxxxxxxxxx
> Subject: Re: power management of user-space drivers
>
> On Tue, Feb 15, 2011 at 01:46:03PM -0800, Benenati, Chris J wrote:
> > Somebody brought your web page http://www.kernel.org/doc/htmldocs/uio-howto.html to my attention.
>
> Hi Chris,
> first of all: Please don't send private mail to kernel maintainers unless
> you're willing to pay for private consultation. UIO is discussed on the
> Linux Kernel Mailing List (LKML), and it's a benefit for everyone if these
> discussions are public and can be found in the archives by search engines.
>
> So, please make sure you Cc: LKML (linux-kernel@xxxxxxxxxxxxxxx) in any
> further mails.
>
> >
> > How do you handle power management with such a driver? For example, if state has to be saved before a suspend-to-RAM, or reinitialized on the subsequent resume.
>
> You need to do that yourself, e.g. for a PCI card by implementing a suspend()
> and resume() function and setting the respective pointers in struct pci_driver.
> These functions will be called automatically by the driver core, and you can do
> whatever you need there.
>
> A way to implement such a thing for platform devices can be found in
> drivers/uio/uio_pdrv_genirq.c
>
> Thanks,
> Hans
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/