linux-acpi.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* acpi_os_read_memory() from interrupt context
@ 2010-08-04 17:19 Bjorn Helgaas
  2010-08-04 22:26 ` [Devel] " Moore, Robert
  2010-08-11  9:25 ` Andi Kleen
  0 siblings, 2 replies; 3+ messages in thread
From: Bjorn Helgaas @ 2010-08-04 17:19 UTC (permalink / raw)
  To: linux-acpi, devel

Linux reads some ACPI registers from interrupt context.  For example,
we read the PM1 Status register in the SCI interrupt handler via
this path:

    acpi_irq
      acpi_ev_sci_xrupt_handler
        acpi_ev_fixed_event_detect
          acpi_hw_register_read
            acpi_hw_read_multiple
              acpi_read

But acpi_read() takes a generic address structure, and if that
address happens to be in memory space (not I/O port space), we use
acpi_os_read_memory().  In Linux, that uses ioremap() to map the
address, and that doesn't work from interrupt context.

I can imagine fixing this by doing the ioremap() at boot-time
rather than at interrupt-time, but most of this interrupt path
is in the ACPI CA, not in Linux itself, so it would probably
require some redesign in the CA.

Any suggestions?

Bjorn

^ permalink raw reply	[flat|nested] 3+ messages in thread

* RE: [Devel] acpi_os_read_memory() from interrupt context
  2010-08-04 17:19 acpi_os_read_memory() from interrupt context Bjorn Helgaas
@ 2010-08-04 22:26 ` Moore, Robert
  2010-08-11  9:25 ` Andi Kleen
  1 sibling, 0 replies; 3+ messages in thread
From: Moore, Robert @ 2010-08-04 22:26 UTC (permalink / raw)
  To: Bjorn Helgaas, linux-acpi@vger.kernel.org, devel@acpica.org

If you need to pre-map the ACPI registers, I would expect the host to build a list of these during initialization as you mention, then lookup and use the appropriate mapping in acpi_os_read_memory.  The acpi_os memory interfaces are not generic memory interfaces; they are only used for memory-mapped ACPI registers, so it is entirely appropriate to do whatever you need to do to obtain a mapping for the registers when at interrupt level.



>-----Original Message-----
>From: devel-bounces@acpica.org [mailto:devel-bounces@acpica.org] On Behalf
>Of Bjorn Helgaas
>Sent: Wednesday, August 04, 2010 10:19 AM
>To: linux-acpi@vger.kernel.org; devel@acpica.org
>Subject: [Devel] acpi_os_read_memory() from interrupt context
>
>Linux reads some ACPI registers from interrupt context.  For example,
>we read the PM1 Status register in the SCI interrupt handler via
>this path:
>
>    acpi_irq
>      acpi_ev_sci_xrupt_handler
>        acpi_ev_fixed_event_detect
>          acpi_hw_register_read
>            acpi_hw_read_multiple
>              acpi_read
>
>But acpi_read() takes a generic address structure, and if that
>address happens to be in memory space (not I/O port space), we use
>acpi_os_read_memory().  In Linux, that uses ioremap() to map the
>address, and that doesn't work from interrupt context.
>
>I can imagine fixing this by doing the ioremap() at boot-time
>rather than at interrupt-time, but most of this interrupt path
>is in the ACPI CA, not in Linux itself, so it would probably
>require some redesign in the CA.
>
>Any suggestions?
>
>Bjorn
>_______________________________________________
>Devel mailing list
>Devel@acpica.org
>http://lists.acpica.org/listinfo/devel

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: acpi_os_read_memory() from interrupt context
  2010-08-04 17:19 acpi_os_read_memory() from interrupt context Bjorn Helgaas
  2010-08-04 22:26 ` [Devel] " Moore, Robert
@ 2010-08-11  9:25 ` Andi Kleen
  1 sibling, 0 replies; 3+ messages in thread
From: Andi Kleen @ 2010-08-11  9:25 UTC (permalink / raw)
  To: Bjorn Helgaas; +Cc: linux-acpi, devel, ying.huang

Bjorn Helgaas <bjorn.helgaas@hp.com> writes:
> require some redesign in the CA.
>
> Any suggestions?

pre-map. Ying developed a pre map infrastructure for this for the ERST
code. You could probably reuse that.

-Andi

-- 
ak@linux.intel.com -- Speaking for myself only.

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2010-08-11  9:25 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-08-04 17:19 acpi_os_read_memory() from interrupt context Bjorn Helgaas
2010-08-04 22:26 ` [Devel] " Moore, Robert
2010-08-11  9:25 ` Andi Kleen

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).