lkml.org 
[lkml]   [2015]   [Nov]   [16]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    SubjectRe: [RFC PATCH 1/2] genirq: Add runtime resume/suspend support for IRQ chips
    From
    Hi Jon,

    On Mon, Nov 16, 2015 at 11:34 AM, Jon Hunter <jonathanh@nvidia.com> wrote:
    > On 16/11/15 09:49, Geert Uytterhoeven wrote:
    >> On Mon, Nov 16, 2015 at 10:46 AM, Jon Hunter <jonathanh@nvidia.com> wrote:
    >>> On 13/11/15 20:01, Thomas Gleixner wrote:
    >>>> On Fri, 13 Nov 2015, Jon Hunter wrote:
    >>>>> On 12/11/15 23:20, Kevin Hilman wrote:
    >>>>>> If all the RPM devices in the domain go idle, it will be powered off
    >>>>>> independently of the status of the irqchip because the irqchip isn't
    >>>>>> using RPM.
    >>>>>
    >>>>> That's dependent on how the irqchip uses these helpers. If these helpers
    >>>>> invoke RPM then that will not be the case.
    >>>>
    >>>> You need a very proper description of how that domain is working. If
    >>>> all devices are idle, it's not necessary correct to power down the
    >>>> irqchip as is might serve other devices as well.
    >>>
    >>> Agreed. The irqchip should only be powered down if there are no
    >>> interrupts in-use/requested. Runtime-pm will keep a reference count for
    >>> all requested IRQs.
    >>
    >> That means the irqchip won't be powered down automatically when the
    >> last user is powered down, unless all users release their irqs during
    >> suspend.
    >
    > Right.
    >
    >> Handling it automatically needs more bookkeeping than a simple reference
    >> count.
    >
    > So what would you suggest? Adding a pm_runtime_register_irq() API that
    > would register an IRQ with the device that you want RPM to handle? Not
    > sure if there is a better/easier way to handle this.

    The irqchip needs to keep track how many times request_irq() has been
    called, cfr. your suggestion above.

    On the other side, the system needs to keep track how many times request_irq()
    has been called for each irqchip, so it can subtract those numbers from the
    irqchip's counters during suspend of the device, and re-add them during resume.
    So we need at least a "struct device *" parameter for request_irq().
    devm_request_irq() already has that, but not all drivers use that.

    However, I think this should be looked at into the context of "[RFD]
    Functional dependencies between devices".
    https://lwn.net/Articles/662205/
    https://lkml.org/lkml/2015/10/27/388

    There can be other dependencies than interrupts between devices.
    All functions using dependencies need a "struct device *" parameter to
    record information.

    Gr{oetje,eeting}s,

    Geert

    --
    Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org

    In personal conversations with technical people, I call myself a hacker. But
    when I'm talking to journalists I just say "programmer" or something like that.
    -- Linus Torvalds


    \
     
     \ /
      Last update: 2015-11-16 12:01    [W:4.655 / U:0.052 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site