1. 31 10月, 2013 8 次提交
    • L
      ACPICA: Update aclinux.h for new OSL override mechanism. · 93220587
      Lv Zheng 提交于
      The new ACPICA OSL override mechanism is used to solve these issues
      for the Linux OSL:
       1. Linux can implement OSL using a macro.
       2. Linux can implement OSL using an inlined function.
       3. Linux can leave OSL not implemented for __KERNEL__ undefined code
          fragments.
       4. Linux can add sparse declarators (__iomem) to OSL.
       5. Linux can add memory tuning declarators (__init/__exit) to OSL.
      This patch also moves Linux specific OSL to aclinux.h which has not been
      maintained in the ACPICA code base.  Lv Zheng.
      
      Known issue:
      
       From ACPICA's perspective, actypes.h should be included after inclusion
       of acenv.h.  But currently in Linux, aclinux.h included by acenv.h has
       included actypes.h to find ACPICA types for inline functions.  This is a
       known and existing issue and currently there is no real problem caused
       by this issue for Linux kernel build.  Thus this issue is not covered by
       this cleanup commit.
      Signed-off-by: NLv Zheng <lv.zheng@intel.com>
      Signed-off-by: NRafael J. Wysocki <rafael.j.wysocki@intel.com>
      93220587
    • L
      ACPICA: Add support to allow host OS to redefine individual OSL prototypes. · 7e94632f
      Lv Zheng 提交于
      This change enables the host OS to redefine OSL prototypes found in the
      acpiosxf.h file. This allows the host OS to implement OSL interfaces with
      a macro or inlined function. Further, it allows the host OS to add any
      additional required modifiers such as __iomem, __init, __exit, etc.,
      as necessary on a per-interface basis. Enables maximum flexibility
      for the OSL interfaces. Lv Zheng.
      Signed-off-by: NLv Zheng <lv.zheng@intel.com>
      Signed-off-by: NBob Moore <robert.moore@intel.com>
      Signed-off-by: NRafael J. Wysocki <rafael.j.wysocki@intel.com>
      7e94632f
    • B
      ACPICA: Simplify configuration of global ACPI_REDUCED_HARDWARE macro. · c0144dc0
      Bob Moore 提交于
      Surround definition of this with a #ifndef so that the kernel
      can define it elsewhere if desired.
      Signed-off-by: NBob Moore <robert.moore@intel.com>
      Signed-off-by: NLv Zheng <lv.zheng@intel.com>
      Signed-off-by: NRafael J. Wysocki <rafael.j.wysocki@intel.com>
      c0144dc0
    • L
      ACPICA: Fix indentation issues for macro invocations. · cd27d79f
      Lv Zheng 提交于
      During the automatic translation of the upstream ACPICA source code
      into Linux kernel source code some extra white spaces are added by
      the "indent" program at the beginning of each line which is an
      invocation of a macro and there is no ";" at the end of the line.
      
      For this reason, a new mode has been added to the translation scripts
      to remove the extra spaces inserted before invoking such macros and add
      an empty line between the invocations of such macros (like the other
      function declarations).  This new mode is executed after executing
      "indent" during the Linux release process.  Consequently, some
      existing ACPICA source code in the Linux kernel tree needs to be
      adjusted to allow the new scripts to work correctly.
      
      The affected macros and files are:
       1. ACPI_HW_DEPENDENT_RETURN (acpixf.h/acdebug.h/acevents.h):
          This macro is used as a wrapper for hardware dependent APIs to offer
          a stub when the reduced hardware is configured during compilation.
       2. ACPI_EXPORT_SYMBOL (utglobal.c):
          This macro is used by Linux to export symbols to be found by Linux
          modules.  All such invocations are well formatted except those
          exported as global variables.
      
      This can help to reduce the source code differences between Linux
      and upstream ACPICA, and also help to automate the release process.
      No functional or binary generation changes should result from it.
      Lv Zheng.
      
      [rjw: Changelog]
      Signed-off-by: NLv Zheng <lv.zheng@intel.com>
      Signed-off-by: NBob Moore <robert.moore@intel.com>
      Signed-off-by: NRafael J. Wysocki <rafael.j.wysocki@intel.com>
      cd27d79f
    • L
      ACPICA: Prevent possible build issues for use of ACPI_PRINTF_LIKE macro · 4506bf23
      Lv Zheng 提交于
      The following build error:
       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         CC      arch/x86/kernel/setup.o
       In file included from include/acpi/acpi.h:64:0,
                        from include/linux/iscsi_ibft.h:24,
                        from arch/x86/kernel/setup.c:43:
       include/acpi/acpixf.h:543:1: error: expected ',' or ';' before '{' token
       include/acpi/acpixf.h:540:1: warning: 'acpi_error' declared 'static' but never defined [-Wunused-function]
       make[2]: *** [arch/x86/kernel/setup.o] Error 1
       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      can be triggerred by the following stub function (if implemented):
       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
       static inline void ACPI_INTERNAL_VAR_XFACE
       acpi_error(const char *module_name,
       	   u32 line_number, const char *format, ...) ACPI_PRINTF_LIKE(3)
       {
       }
       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      
      This patch changes the position of ACPI_PRINTF_LIKE(x) to follow the
      style of __printf(x, x+1) used in Linux to prevent such issues from
      happening.  Lv Zheng.
      Signed-off-by: NLv Zheng <lv.zheng@intel.com>
      Signed-off-by: NBob Moore <robert.moore@intel.com>
      Signed-off-by: NRafael J. Wysocki <rafael.j.wysocki@intel.com>
      4506bf23
    • L
      ACPICA: Deploy ACPI_EXPORT_SYMBOL_INIT for main ACPICA initialization interfaces. · d21f600b
      Lv Zheng 提交于
      This changes can reduce source code differences between Linux and ACPICA
      upstream to help improving the release automation.
      
      The side effect of applying this patch in Linux is:
      1. Some ACPICA initialization/termination APIs are no longer exported in
         Linux, these include:
          acpi_load_tables
          acpi_initialize_subsystem
          acpi_enable_subsystem
          acpi_initialize_objects
          acpi_terminate
      2. This patch does not affect the following APIs as they are currently not
         marked with ACPI_EXPORT_SYMBOL in Linux:
          acpi_reallocate_root_table
          acpi_initialize_tables
      Such functions should not be exported as they are internal to ACPI
      subsystem in Linux, and will only be invoked inside of ACPI subsystem's
      initialization routines marked with __init and termination routines marked
      with __exit.  While on other OSPMs, such functions may still need to be
      exported.
      
      Thus this patch adds the configurability for ACPICA, so that it leaves
      OSPMs to determine if the __init/__exit marked functions should be exported
      or not.  Lv Zheng.
      Signed-off-by: NLv Zheng <lv.zheng@intel.com>
      Signed-off-by: NBob Moore <robert.moore@intel.com>
      Signed-off-by: NRafael J. Wysocki <rafael.j.wysocki@intel.com>
      d21f600b
    • B
      ACPICA: Clarify ACPI_FREE_BUFFER usage. · bb1cab3d
      Bob Moore 提交于
      Add a comment to clarify reason for using ACPI_FREE_BUFFER directly
      instead of ACPI_FREE.
      
      In addition to that, change one instance in which ACPI_FREE_BUFFER()
      should be used instead of ACPI_FREE().
      
      [rjw: Subject and changelog]
      Signed-off-by: NBob Moore <robert.moore@intel.com>
      Signed-off-by: NLv Zheng <lv.zheng@intel.com>
      Signed-off-by: NRafael J. Wysocki <rafael.j.wysocki@intel.com>
      bb1cab3d
    • L
      ACPICA: Add EXPORT_ACPI_INTERFACES macro to external interface modules. · 839e928f
      Lv Zheng 提交于
      For Linux, there are no functional changes/binary generation differences
      introduced by this patch.
      
      This change adds a new macro to all files that contain external ACPICA
      interfaces. It can be detected and used by the host (via the host-specific
      header) for any special processing required for such modules. Lv Zheng.
      Signed-off-by: NLv Zheng <lv.zheng@intel.com>
      Signed-off-by: NRafael J. Wysocki <rafael.j.wysocki@intel.com>
      839e928f
  2. 30 10月, 2013 4 次提交
  3. 24 9月, 2013 6 次提交
  4. 30 8月, 2013 1 次提交
    • R
      ACPI / hotplug: Remove containers synchronously · f943db40
      Rafael J. Wysocki 提交于
      The current protocol for handling hot remove of containers is very
      fragile and causes acpi_eject_store() to acquire acpi_scan_lock
      which may deadlock with the removal of the device that it is called
      for (the reason is that device sysfs attributes cannot be removed
      while their callbacks are being executed and ACPI device objects
      are removed under acpi_scan_lock).
      
      The problem is related to the fact that containers are handled by
      acpi_bus_device_eject() in a special way, which is to emit an
      offline uevent instead of just removing the container.  Then, user
      space is expected to handle that uevent and use the container's
      "eject" attribute to actually remove it.  That is fragile, because
      user space may fail to complete the ejection (for example, by not
      using the container's "eject" attribute at all) leaving the BIOS
      kind of in a limbo.  Moreover, if the eject event is not signaled
      for a container itself, but for its parent device object (or
      generally, for an ancestor above it in the ACPI namespace), the
      container will be removed straight away without doing that whole
      dance.
      
      For this reason, modify acpi_bus_device_eject() to remove containers
      synchronously like any other objects (user space will get its uevent
      anyway in case it does some other things in response to it) and
      remove the eject_pending ACPI device flag that is not used any more.
      This way acpi_eject_store() doesn't have a reason to acquire
      acpi_scan_lock any more and one possible deadlock scenario goes
      away (plus the code is simplified a bit).
      Reported-and-tested-by: NGu Zheng <guz.fnst@cn.fujitsu.com>
      Signed-off-by: NRafael J. Wysocki <rafael.j.wysocki@intel.com>
      Acked-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      Acked-by: NToshi Kani <toshi.kani@hp.com>
      f943db40
  5. 13 8月, 2013 3 次提交
  6. 08 8月, 2013 1 次提交
    • R
      ACPI: Try harder to resolve _ADR collisions for bridges · 60f75b8e
      Rafael J. Wysocki 提交于
      In theory, under a given ACPI namespace node there should be only
      one child device object with _ADR whose value matches a given bus
      address exactly.  In practice, however, there are systems in which
      multiple child device objects under a given parent have _ADR matching
      exactly the same address.  In those cases we use _STA to determine
      which of the multiple matching devices is enabled, since some systems
      are known to indicate which ACPI device object to associate with the
      given physical (usually PCI) device this way.
      
      Unfortunately, as it turns out, there are systems in which many
      device objects under the same parent have _ADR matching exactly the
      same bus address and none of them has _STA, in which case they all
      should be regarded as enabled according to the spec.  Still, if
      those device objects are supposed to represent bridges (e.g. this
      is the case for device objects corresponding to PCIe ports), we can
      try harder and skip the ones that have no child device objects in the
      ACPI namespace.  With luck, we can avoid using device objects that we
      are not expected to use this way.
      
      Although this only works for bridges whose children also have ACPI
      namespace representation, it is sufficient to address graphics
      adapter detection issues on some systems, so rework the code finding
      a matching device ACPI handle for a given bus address to implement
      this idea.
      
      Introduce a new function, acpi_find_child(), taking three arguments:
      the ACPI handle of the device's parent, a bus address suitable for
      the device's bus type and a bool indicating if the device is a
      bridge and make it work as outlined above.  Reimplement the function
      currently used for this purpose, acpi_get_child(), as a call to
      acpi_find_child() with the last argument set to 'false' and make
      the PCI subsystem use acpi_find_child() with the bridge information
      passed as the last argument to it.  [Lan Tianyu notices that it is
      not sufficient to use pci_is_bridge() for that, because the device's
      subordinate pointer hasn't been set yet at this point, so use
      hdr_type instead.]
      
      This change fixes a regression introduced inadvertently by commit
      33f767d7 (ACPI: Rework acpi_get_child() to be more efficient) which
      overlooked the fact that for acpi_walk_namespace() "post-order" means
      "after all children have been visited" rather than "on the way back",
      so for device objects without children and for namespace walks of
      depth 1, as in the acpi_get_child() case, the "post-order" callbacks
      ordering is actually the same as the ordering of "pre-order" ones.
      Since that commit changed the namespace walk in acpi_get_child() to
      terminate after finding the first matching object instead of going
      through all of them and returning the last one, it effectively
      changed the result returned by that function in some rare cases and
      that led to problems (the switch from a "pre-order" to a "post-order"
      callback was supposed to prevent that from happening, but it was
      ineffective).
      
      As it turns out, the systems where the change made by commit
      33f767d7 actually matters are those where there are multiple ACPI
      device objects representing the same PCIe port (which effectively
      is a bridge).  Moreover, only one of them, and the one we are
      expected to use, has child device objects in the ACPI namespace,
      so the regression can be addressed as described above.
      
      References: https://bugzilla.kernel.org/show_bug.cgi?id=60561Reported-by: NPeter Wu <lekensteyn@gmail.com>
      Tested-by: NVladimir Lalov <mail@vlalov.com>
      Signed-off-by: NRafael J. Wysocki <rafael.j.wysocki@intel.com>
      Acked-by: NBjorn Helgaas <bhelgaas@google.com>
      Cc: 3.9+ <stable@vger.kernel.org> # 3.9+
      60f75b8e
  7. 06 8月, 2013 2 次提交
  8. 30 7月, 2013 1 次提交
  9. 26 7月, 2013 1 次提交
  10. 23 7月, 2013 3 次提交
  11. 18 7月, 2013 2 次提交
    • R
      ACPI / video / i915: No ACPI backlight if firmware expects Windows 8 · 8c5bd7ad
      Rafael J. Wysocki 提交于
      According to Matthew Garrett, "Windows 8 leaves backlight control up
      to individual graphics drivers rather than making ACPI calls itself.
      There's plenty of evidence to suggest that the Intel driver for
      Windows [8] doesn't use the ACPI interface, including the fact that
      it's broken on a bunch of machines when the OS claims to support
      Windows 8.  The simplest thing to do appears to be to disable the
      ACPI backlight interface on these systems".
      
      There's a problem with that approach, however, because simply
      avoiding to register the ACPI backlight interface if the firmware
      calls _OSI for Windows 8 may not work in the following situations:
       (1) The ACPI backlight interface actually works on the given system
           and the i915 driver is not loaded (e.g. another graphics driver
           is used).
       (2) The ACPI backlight interface doesn't work on the given system,
           but there is a vendor platform driver that will register its
           own, equally broken, backlight interface if not prevented from
           doing so by the ACPI subsystem.
      Therefore we need to allow the ACPI backlight interface to be
      registered until the i915 driver is loaded which then will unregister
      it if the firmware has called _OSI for Windows 8 (or will register
      the ACPI video driver without backlight support if not already
      present).
      
      For this reason, introduce an alternative function for registering
      ACPI video, acpi_video_register_with_quirks(), that will check
      whether or not the ACPI video driver has already been registered
      and whether or not the backlight Windows 8 quirk has to be applied.
      If the quirk has to be applied, it will block the ACPI backlight
      support and either unregister the backlight interface if the ACPI
      video driver has already been registered, or register the ACPI
      video driver without the backlight interface otherwise.  Make
      the i915 driver use acpi_video_register_with_quirks() instead of
      acpi_video_register() in i915_driver_load().
      
      This change is based on earlier patches from Matthew Garrett,
      Chun-Yi Lee and Seth Forshee and includes a fix from Aaron Lu's.
      
      References: https://bugzilla.kernel.org/show_bug.cgi?id=51231Tested-by: NAaron Lu <aaron.lu@intel.com>
      Tested-by: NIgor Gnatenko <i.gnatenko.brain@gmail.com>
      Tested-by: NYves-Alexis Perez <corsac@debian.org>
      Signed-off-by: NRafael J. Wysocki <rafael.j.wysocki@intel.com>
      Reviewed-by: NAaron Lu <aaron.lu@intel.com>
      Acked-by: NMatthew Garrett <matthew.garrett@nebula.com>
      8c5bd7ad
    • A
      ACPICA: expose OSI version · 242b2287
      Aaron Lu 提交于
      Expose acpi_gbl_osi_data so that code outside of ACPICA can check
      the value of the last successfull _OSI call.  The definitions for
      OSI versions are moved to actypes.h so that other components can
      access them too.
      
      Based on a patch from Matthew Garrett which in turn was based on
      an earlier patch from Seth Forshee.
      
      [rjw: Changelog]
      Signed-off-by: NAaron Lu <aaron.lu@intel.com>
      Signed-off-by: NRafael J. Wysocki <rafael.j.wysocki@intel.com>
      242b2287
  12. 15 7月, 2013 8 次提交