1. 15 1月, 2011 1 次提交
  2. 07 1月, 2011 1 次提交
    • R
      ACPI / ACPICA: Fix global lock acquisition · 9cd03144
      Rafael J. Wysocki 提交于
      There are two problems with the ACPICA's current implementation of
      the global lock acquisition.  First, acpi_ev_global_lock_handler(),
      which in fact is an interface to the outside of the kernel, doesn't
      validate its input, so it only works correctly if the other side
      (i.e. the ACPI firmware) is fully specification-compliant (as far
      as the global lock is concerned).  Unfortunately, that's known not
      to be the case on some systems (i.e. we get spurious global lock
      signaling interrupts without the pending flag set on some systems).
      Second, acpi_ev_global_lock_handler() attempts to acquire the global
      lock on behalf of a thread waiting for it without checking if there
      actually is such a thread.  Both of these shortcomings need to be
      addressed to prevent all possible race conditions from happening.
      
      Rework acpi_ev_global_lock_handler() so that it doesn't try to
      acquire the global lock and make it signal the availability of the
      global lock to the waiting thread instead.  Make sure that the
      availability of the global lock can only be signaled when there
      is a thread waiting for it and that it can't be signaled more than
      once in a row (to keep acpi_gbl_global_lock_semaphore in balance).
      Signed-off-by: NRafael J. Wysocki <rjw@sisk.pl>
      Signed-off-by: NLen Brown <len.brown@intel.com>
      9cd03144
  3. 01 10月, 2010 1 次提交
  4. 20 4月, 2010 1 次提交
  5. 23 2月, 2010 1 次提交
    • R
      ACPI / ACPICA: Multiple system notify handlers per device · 3f0be671
      Rafael J. Wysocki 提交于
      Currently it only is possible to install one system notify handler
      per namespace node, but this is not enough for PCI run-time power
      management, because we need to install power management notifiers for
      devices that already have hotplug notifiers installed.  While in
      principle this could be handled at the PCI level, that would be
      suboptimal due to the way in which the ACPI-based PCI hotplug code is
      designed.
      
      For this reason, modify ACPICA so that it is possible to install more
      than one system notify handler per namespace node.  Namely, make
      acpi_install_notify_handler(), acpi_remove_notify_handler() and
      acpi_ev_notify_dispatch() use a list of system notify handler objects
      associated with a namespace node.
      
      Make acpi_remove_notify_handler() call acpi_os_wait_events_complete()
      upfront to avoid a situation in which concurrent instance of
      acpi_remove_notify_handler() removes the handler from under us while
      we're waiting for the event queues to flush.
      Signed-off-by: NRafael J. Wysocki <rjw@sisk.pl>
      Signed-off-by: NJesse Barnes <jbarnes@virtuousgeek.org>
      3f0be671
  6. 23 1月, 2010 1 次提交
  7. 28 3月, 2009 2 次提交
  8. 27 3月, 2009 1 次提交
  9. 09 1月, 2009 2 次提交
  10. 31 12月, 2008 2 次提交
  11. 30 12月, 2008 2 次提交
  12. 17 7月, 2008 1 次提交
  13. 24 4月, 2008 1 次提交
  14. 23 4月, 2008 4 次提交
  15. 10 5月, 2007 3 次提交
  16. 15 3月, 2007 2 次提交
  17. 07 3月, 2007 1 次提交
  18. 16 2月, 2007 1 次提交
    • A
      Execute AML Notify() requests on stack. · 5f7748cf
      Alexey Starikovskiy 提交于
      HP nx6125/nx6325/... machines have a _GPE handler with an infinite
      loop sending Notify() events to different ACPI subsystems.
      
      The notify handler in the ACPI thermal driver is a C-routine,
      which may invoke the ACPI interpreter again to get access
      to some ACPI variables such as temperature.  (acpi_evaluate_xxx)
      On these HP machines such an evaluation changes state of an ASL variable
      and lets the loop above break.
      
      In the current ACPI implementation, Notify requests are being deferred
      to the same kacpid workqueue on which the above GPE handler with
      infinite loop is executing. Thus we have a deadlock -- loop will
      continue to spin, sending notify events, and at the same time
      preventing these notify events from being run on a workqueue. All
      notify events are deferred, thus we see explosion in memory consumption.
      
      Also as GPE handling is blocked, machines overheat because ACPI-based
      fan control is stalled.  Eventually by external poll of the same
      acpi_evaluate, kacpid is released and all the queued notify events are
      free to run, thus 100% CPU utilization by kacpid for several seconds
      or more.
      
      To prevent this failure,  Linux must not send notify events to the
      kacpid workqueue -- either executing them immediately or putting them
      on some other thread.
      
      The first attempt to create a new thread was done by Peter Wainwright
      He created a bunch of threads, which were stealing work from a kacpid
      workqueue.
      This patch appeared in 2.6.15-based kernel shipped with Ubuntu 6.06 LTS.
      
      Second attempt was done by Alexey Starikovskiy, who created a new thread
      for each Notify event. This worked OK on HP nx machines,
      but broke Linus' Compaq n620c, by producing threads with a speed what
      they stopped the machine completely.
      Thus this patch was reverted from 2.6.18-rc2.
      
      Alexey re-made the patch to create second workqueue just for notify events,
      thus hopping it will not break Linus' machine. Patch was tested on the
      same HP nx machines in #5534 and #7122, but this broke Linus' machine
      also and was reverted from 2.6.19-rc with much fanfair.
      
      The 4th patch inserted schedule_timeout(1) into deferred
      execution of kacpid, if we had any notify requests pending, but Linus
      decided that it was too complex (involved either changes to workqueue
      to see if it's empty or atomic inc/dec).  Then a 5th attempt did a
      yield() to every GPE execution.
      
      Finally, this 6th generation patch simply executes the notify handler
      on the stack.  Previous attempts to do this simple solution failed
      because of issues in AML mutex re-entrancy which are now fixed
      by the previous patch in this series.
      
      http://bugzilla.kernel.org/show_bug.cgi?id=5534Signed-off-by: NAlexey Starikovskiy <alexey.y.starikovskiy@linux.intel.com>
      Signed-off-by: NLen Brown <len.brown@intel.com>
      5f7748cf
  19. 03 2月, 2007 7 次提交
  20. 07 11月, 2006 1 次提交
  21. 14 10月, 2006 1 次提交
  22. 14 6月, 2006 3 次提交
    • B
      ACPI: ACPICA 20060526 · 4119532c
      Bob Moore 提交于
      Restructured, flattened, and simplified the internal
      interfaces for namespace object evaluation - resulting
      in smaller code, less CPU stack use, and fewer
      interfaces. (With assistance from Mikhail Kouzmich)
      
      Fixed a problem with the CopyObject operator where the
      first parameter was not typed correctly for the parser,
      interpreter, compiler, and disassembler. Caused various
      errors and unexpected behavior.
      
      Fixed a problem where a ShiftLeft or ShiftRight of
      more than 64 bits produced incorrect results with some
      C compilers. Since the behavior of C compilers when
      the shift value is larger than the datatype width is
      apparently not well defined, the interpreter now detects
      this condition and simply returns zero as expected in all
      such cases. (BZ 395)
      
      Fixed problem reports (Valery Podrezov) integrated: -
      Update String-to-Integer conversion to match ACPI 3.0A spec
      http://bugzilla.kernel.org/show_bug.cgi?id=5329
      Allow interpreter to handle nested method declarations
      http://bugzilla.kernel.org/show_bug.cgi?id=5361
      
      Fixed problem reports (Fiodor Suietov) integrated: -
      acpi_terminate() doesn't free debug memory allocation
      list objects (BZ 355) - After Core Subsystem
      shutdown, acpi_subsystem_status() returns AE_OK (BZ 356) -
      acpi_os_unmap_memory() for RSDP can be invoked inconsistently
      (BZ 357) - Resource Manager should return AE_TYPE for
      non-device objects (BZ 358) - Incomplete cleanup branch
      in AcpiNsEvaluateRelative (BZ 359) - Use acpi_os_free()
      instead of ACPI_FREE in acpi_rs_set_srs_method_data (BZ 360)
      - Incomplete cleanup branch in acpi_ps_parse_aml (BZ 361) -
      Incomplete cleanup branch in acpi_ds_delete_walk_state (BZ 362)
      - acpi_get_table_header returns AE_NO_ACPI_TABLES until DSDT
      is loaded (BZ 365) - Status of the Global Initialization
      Handler call not used (BZ 366) - Incorrect object parameter
      to Global Initialization Handler (BZ 367)
      Signed-off-by: NBob Moore <robert.moore@intel.com>
      Signed-off-by: NLen Brown <len.brown@intel.com>
      4119532c
    • B
      ACPI: ACPICA 20060512 · 958dd242
      Bob Moore 提交于
      Replaced the acpi_os_queue_for_execution() with a new
      interface named acpi_os_execute(). The major difference is
      that the new interface does not have a Priority parameter,
      this appeared to be useless and has been replaced by
      a Type parameter. The Type tells the OS what type of
      execution is being requested, such as global lock handler,
      notify handler, GPE handler, etc. This allows the host
      to queue and execute the request as appropriate for the
      request type, possibly using different work queues and
      different priorities for the various request types. This
      enables fixes for multithreading deadlock problems such as
      http://bugzilla.kernel.org/show_bug.cgi?id=5534
      (Alexey Starikovskiy and Bob Moore)
      
      Fixed a possible memory leak associated with the
      support for the so-called "implicit return" ACPI
      extension. Reported by FreeBSD  (Fiodor Suietov)
      http://bugzilla.kernel.org/show_bug.cgi?id=6514
      
      Fixed a problem with the Load() operator where a table
      load from an operation region could overwrite an internal
      table buffer by up to 7 bytes and cause alignment faults
      on IPF systems. (With assistance from Luming Yu)
      Signed-off-by: NBob Moore <robert.moore@intel.com>
      Signed-off-by: NLen Brown <len.brown@intel.com>
      958dd242
    • B
      ACPI: ACPICA 20060421 · b229cf92
      Bob Moore 提交于
      Removed a device initialization optimization introduced in
      20051216 where the _STA method was not run unless an _INI
      was also present for the same device. This optimization
      could cause problems because it could allow _INI methods
      to be run within a not-present device subtree (If a
      not-present device had no _INI, _STA would not be run,
      the not-present status would not be discovered, and the
      children of the device would be incorrectly traversed.)
      
      Implemented a new _STA optimization where namespace
      subtrees that do not contain _INI are identified and
      ignored during device initialization. Selectively running
      _STA can significantly improve boot time on large machines
      (with assistance from Len Brown.)
      
      Implemented support for the device initialization case
      where the returned _STA flags indicate a device not-present
      but functioning. In this case, _INI is not run, but the
      device children are examined for presence, as per the
      ACPI specification.
      
      Implemented an additional change to the IndexField support
      in order to conform to MS behavior. The value written to
      the Index Register is not simply a byte offset, it is a
      byte offset in units of the access width of the parent
      Index Field. (Fiodor Suietov)
      
      Defined and deployed a new OSL interface,
      acpi_os_validate_address().  This interface is called during
      the creation of all AML operation regions, and allows
      the host OS to exert control over what addresses it will
      allow the AML code to access. Operation Regions whose
      addresses are disallowed will cause a runtime exception
      when they are actually accessed (will not affect or abort
      table loading.)
      
      Defined and deployed a new OSL interface,
      acpi_os_validate_interface().  This interface allows the host OS
      to match the various "optional" interface/behavior strings
      for the _OSI predefined control method as appropriate
      (with assistance from Bjorn Helgaas.)
      
      Restructured and corrected various problems in the
      exception handling code paths within DsCallControlMethod
      and DsTerminateControlMethod in dsmethod (with assistance
      from Takayoshi Kochi.)
      
      Modified the Linux source converter to ignore quoted string
      literals while converting identifiers from mixed to lower
      case. This will correct problems with the disassembler
      and other areas where such strings must not be modified.
      
      The ACPI_FUNCTION_* macros no longer require quotes around
      the function name. This allows the Linux source converter
      to convert the names, now that the converter ignores
      quoted strings.
      Signed-off-by: NBob Moore <robert.moore@intel.com>
      Signed-off-by: NLen Brown <len.brown@intel.com>
      b229cf92