• Thomas Renninger's avatar
    ACPI: track opregion names to avoid driver resource conflicts. · df92e695
    Thomas Renninger authored
    Small ACPICA extension to be able to store the name of operation regions in osl.c later
    
    In ACPI, AML can define accesses to IO ports and System Memory by Operation
    Regions.  Those are not registered as done by PNPACPI using resource templates
    (and _CRS/_SRS methods).
    
    The IO ports and System Memory regions may get accessed by arbitrary AML code.
     When native drivers are accessing the same resources bad things can happen
    (e.g.  a critical shutdown temperature of 3000 C every 2 months or so).
    
    It is not really possible to register the operation regions via
    request_resource, as they often overlap with pnp or other resources (e.g.
    statically setup IO resources below 0x100).
    
    This approach stores all Operation Region declarations (IO and System Memory
    only) at ACPI table parse time.  It offers a similar functionality like
    request_region and let drivers which are known to possibly use the same IO
    ports and Memory which are also often used by ACPI (hwmon and i2c) check for
    ACPI interference.
    
    A boot parameter acpi_enforce_resources=strict/lax/no is provided, which
    is default set to lax:
      - strict: let conflicting drivers fail to load with an error message
      - lax:    let conflicting driver work normal with a warning message
      - no:     no functional change at all
    Depending on the feedback and the kind of interferences we see, this
    should be set to strict at later time.
    
    Goal of this patch set is:
      - Identify ACPI interferences in bug reports (very hard to reproduce
        and to identify)
      - Find BIOSes for that an ACPI driver should exist for specific HW
        instead of a native one.
      - stability in general
    
    Provide acpi_check_{mem_}region.
    
    Drivers can additionally check against possible ACPI interference by also
    invoking this shortly before they call request_region.
    If -EBUSY is returned, the driver must not load.
    Use acpi_enforce_resources=strict/lax/no options to:
      - strict: let conflicting drivers fail to load with an error message
      - lax:    let conflicting driver work normal with a warning message
      - no:     no functional change at all
    
    Cc: "Mark M. Hoffman" <mhoffman@lightlink.com>
    Cc: Jean Delvare <khali@linux-fr.org>
    Cc: Len Brown <lenb@kernel.org>
    Cc: Bjorn Helgaas <bjorn.helgaas@hp.com>
    Signed-off-by: default avatarThomas Renninger <trenn@suse.de>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLen Brown <len.brown@intel.com>
    df92e695
dsopcode.c 31.6 KB