1. 25 Oct, 2010 6 commits
    • Myron Stowe's avatar
      ACPI: Page based coalescing of I/O remappings optimization · 4a3cba5e
      Myron Stowe authored
      This patch optimizes ACPI MMIO remappings by keeping track of the
      remappings on a PAGE_SIZE granularity.
      
      When an ioremap() occurs, the underlying infrastructure works on a 'page'
      based granularity.  As such, an ioremap() request for 1 byte for example,
      will end up mapping in an entire (PAGE_SIZE) page.  Huang Ying took
      advantage of this in commit 15651291 by
      checking if subsequent ioremap() requests reside within any of the list's
      existing remappings still in place, and if so, incrementing a reference
      count on the existing mapping as opposed to performing another ioremap().
      Signed-off-by: default avatarMyron Stowe <myron.stowe@hp.com>
      Signed-off-by: default avatarLen Brown <len.brown@intel.com>
      4a3cba5e
    • Myron Stowe's avatar
      ACPI: Convert simple locking to RCU based locking · 78cdb3ed
      Myron Stowe authored
      Convert the simple locking introduced earlier for the ACPI MMIO
      remappings list to an RCU based locking scheme.
      Signed-off-by: default avatarMyron Stowe <myron.stowe@hp.com>
      Signed-off-by: default avatarLen Brown <len.brown@intel.com>
      78cdb3ed
    • Myron Stowe's avatar
      ACPI: Pre-map 'system event' related register blocks · d362edaf
      Myron Stowe authored
      During ACPI initialization, pre-map fixed hardware registers that are
      accessed during ACPI's 'system event' related IRQ handing.
      
      ACPI's 'system event' handing accesses specific fixed hardware
      registers; namely PM1a event, PM1b event, GPE0, and GPE1 register
      blocks which are declared within the FADT.  If these registers are
      backed by MMIO, as opposed to I/O port space, accessing them within
      interrupt context will cause a panic as acpi_os_read_memory()
      depends on ioremap() in such cases - BZ 18012.
      
      By utilizing the functionality provided in the previous two patches -
      ACPI: Maintain a list of ACPI memory mapped I/O remappings, and, ACPI:
      Add interfaces for ioremapping/iounmapping ACPI registers - accesses
      to ACPI MMIO areas will now be safe from within interrupt contexts (IRQ
      and/or NMI) provided the area was pre-mapped.  This solves BZ 18012.
      
      ACPI "System Event" reference(s):
        ACPI Specification, Revision 4.0, Section 3 "ACPI Overview",
        3.8 "System Events", 5.6 "ACPI Event Programming Model".
      
      Reference: https://bugzilla.kernel.org/show_bug.cgi?id=18012
      
      Reported-by: <bjorn.helgaas@hp.com>
      Signed-off-by: default avatarMyron Stowe <myron.stowe@hp.com>
      Signed-off-by: default avatarLen Brown <len.brown@intel.com>
      d362edaf
    • Myron Stowe's avatar
      ACPI: Add interfaces for ioremapping/iounmapping ACPI registers · 29718521
      Myron Stowe authored
      Add remapping and unmapping interfaces for ACPI registers that are
      backed by memory mapped I/O (MMIO).  These interfaces, along with
      the MMIO remapping list, enable accesses of such registers from within
      interrupt context.
      
      ACPI Generic Address Structure (GAS) reference (ACPI's fixed/generic
      hardware registers use the GAS format):
        ACPI Specification, Revision 4.0, Section 5.2.3.1, "Generic Address
        Structure".
      Signed-off-by: default avatarMyron Stowe <myron.stowe@hp.com>
      Signed-off-by: default avatarLen Brown <len.brown@intel.com>
      29718521
    • Myron Stowe's avatar
      ACPI: Maintain a list of ACPI memory mapped I/O remappings · 620242ae
      Myron Stowe authored
      For memory mapped I/O (MMIO) remappings, add a list to maintain the
      remappings and augment the corresponding mapping and unmapping interface
      routines (acpi_os_map_memory() and acpi_os_unmap_memory()) to
      dynamically add to, and delete from, the list.
      
      The current ACPI I/O accessing methods - acpi_read() and acpi_write() -
      end up calling ioremap() when accessing MMIO.  This prevents use of these
      methods within interrupt context (IRQ and/or NMI), since ioremap() may
      block to allocate memory.  Maintaining a list of MMIO remappings enables
      accesses to such areas from within interrupt context provided they have
      been pre-mapped.
      Signed-off-by: default avatarMyron Stowe <myron.stowe@hp.com>
      Signed-off-by: default avatarLen Brown <len.brown@intel.com>
      620242ae
    • Myron Stowe's avatar
      ACPI: Fix ioremap size for MMIO reads and writes · b3ba1efe
      Myron Stowe authored
      The size used for I/O remapping MMIO read and write accesses has not
      accounted for the basis of ACPI's Generic Address Structure (GAS)
      'Register Bit Width' field which is bits, not bytes.  This patch
      adjusts the ioremap() 'size' argument accordingly.
      
      ACPI "Generic Register" reference:
        ACPI Specification, Revision 4.0, Section 5.2.3.1, "Generic Address
        Structure".
      Signed-off-by: default avatarMyron Stowe <myron.stowe@hp.com>
      Signed-off-by: default avatarLen Brown <len.brown@intel.com>
      b3ba1efe
  2. 20 Oct, 2010 5 commits
  3. 19 Oct, 2010 7 commits
  4. 18 Oct, 2010 18 commits
  5. 17 Oct, 2010 4 commits