1. 28 6月, 2013 1 次提交
    • M
      ACPI: implement acpi_os_get_timer() according the spec · 10619066
      Mika Westerberg 提交于
      ACPI Timer() opcode should return monotonically increasing clock with 100ns
      granularity according the ACPI 5.0 spec.
      
      Testing the current Timer() implementation with following ASL code (and an
      additional debug print in acpi_os_sleep() to get the sleep times dumped out
      to dmesg):
      
      	// Test: 10ms
      	Store(Timer, Local1)
      	Sleep(10)
      	Divide(Subtract(Timer, Local1), 10000,, Local1)
      	Sleep(Local1)
      
      	// Test: 200ms
      	Store(Timer, Local1)
      	Sleep(200)
      	Divide(Subtract(Timer, Local1), 10000,, Local1)
      	Sleep(Local1)
      
      	// Test 1300ms
      	Store(Timer, Local1)
      	Sleep(1300)
      	Divide(Subtract(Timer, Local1), 10000,, Local1)
      	Sleep(Local1)
      
      The second sleep value is calculated using Timer(). If the implementation
      is good enough we should be able to get the second value pretty close to
      the first.
      
      However, the current Timer() gives pretty bad sleep times:
      
      	[   11.488100] ACPI: acpi_os_get_timer() TBD
      	[   11.492150] ACPI: Sleep(10)
      	[   11.502993] ACPI: Sleep(0)
      	[   11.506315] ACPI: Sleep(200)
      	[   11.706237] ACPI: Sleep(0)
      	[   11.709550] ACPI: Sleep(1300)
      	[   13.008929] ACPI: Sleep(0)
      
      Fix this with the help of ktime_get(). Once the fix is applied and run
      against the same ASL code we get:
      
      	[   11.486786] ACPI: Sleep(10)
      	[   11.499029] ACPI: Sleep(12)
      	[   11.512350] ACPI: Sleep(200)
      	[   11.712282] ACPI: Sleep(200)
      	[   11.912170] ACPI: Sleep(1300)
      	[   13.211577] ACPI: Sleep(1300)
      
      That is much more closer to the values we expected.
      Signed-off-by: NMika Westerberg <mika.westerberg@linux.intel.com>
      Signed-off-by: NRafael J. Wysocki <rafael.j.wysocki@intel.com>
      10619066
  2. 16 6月, 2013 1 次提交
  3. 24 4月, 2013 1 次提交
  4. 25 3月, 2013 1 次提交
  5. 10 2月, 2013 1 次提交
  6. 31 1月, 2013 1 次提交
    • M
      efi: Make 'efi_enabled' a function to query EFI facilities · 83e68189
      Matt Fleming 提交于
      Originally 'efi_enabled' indicated whether a kernel was booted from
      EFI firmware. Over time its semantics have changed, and it now
      indicates whether or not we are booted on an EFI machine with
      bit-native firmware, e.g. 64-bit kernel with 64-bit firmware.
      
      The immediate motivation for this patch is the bug report at,
      
          https://bugs.launchpad.net/ubuntu-cdimage/+bug/1040557
      
      which details how running a platform driver on an EFI machine that is
      designed to run under BIOS can cause the machine to become
      bricked. Also, the following report,
      
          https://bugzilla.kernel.org/show_bug.cgi?id=47121
      
      details how running said driver can also cause Machine Check
      Exceptions. Drivers need a new means of detecting whether they're
      running on an EFI machine, as sadly the expression,
      
          if (!efi_enabled)
      
      hasn't been a sufficient condition for quite some time.
      
      Users actually want to query 'efi_enabled' for different reasons -
      what they really want access to is the list of available EFI
      facilities.
      
      For instance, the x86 reboot code needs to know whether it can invoke
      the ResetSystem() function provided by the EFI runtime services, while
      the ACPI OSL code wants to know whether the EFI config tables were
      mapped successfully. There are also checks in some of the platform
      driver code to simply see if they're running on an EFI machine (which
      would make it a bad idea to do BIOS-y things).
      
      This patch is a prereq for the samsung-laptop fix patch.
      
      Cc: David Airlie <airlied@linux.ie>
      Cc: Corentin Chary <corentincj@iksaif.net>
      Cc: Matthew Garrett <mjg59@srcf.ucam.org>
      Cc: Dave Jiang <dave.jiang@intel.com>
      Cc: Olof Johansson <olof@lixom.net>
      Cc: Peter Jones <pjones@redhat.com>
      Cc: Colin Ian King <colin.king@canonical.com>
      Cc: Steve Langasek <steve.langasek@canonical.com>
      Cc: Tony Luck <tony.luck@intel.com>
      Cc: Konrad Rzeszutek Wilk <konrad@kernel.org>
      Cc: Rafael J. Wysocki <rjw@sisk.pl>
      Cc: <stable@vger.kernel.org>
      Signed-off-by: NMatt Fleming <matt.fleming@intel.com>
      Signed-off-by: NH. Peter Anvin <hpa@linux.intel.com>
      83e68189
  7. 26 1月, 2013 1 次提交
  8. 21 1月, 2013 1 次提交
  9. 15 11月, 2012 2 次提交
  10. 01 10月, 2012 3 次提交
  11. 01 6月, 2012 1 次提交
  12. 19 4月, 2012 1 次提交
    • T
      Revert "ACPI: Make ACPI interrupt threaded" · 9ecf8c0d
      Thomas Gleixner 提交于
      This reverts commit 6fe0d062.
      
      Paul bisected this regression.
      
      The conversion was done blindly and is wrong, as it does not provide a
      primary handler to disable the level type irq on the device level.
      Neither does it set the IRQF_ONESHOT flag which handles that at the irq
      line level.  This can't be done as the interrupt might be shared, though
      we might extend the core to force it.
      
      So an interrupt on this line will wake up the thread, but immediately
      unmask the irq after that.  Due to the interrupt being level type the
      hardware interrupt is raised over and over and prevents the irq thread
      from handling it.  Fail.
      
      request_irq() unfortunately does not refuse such a request and the patch
      was obviously never tested with real interrupts.
      Bisected-by: NPaul Bolle <pebolle@tiscali.nl>
      Signed-off-by: NThomas Gleixner <tglx@linutronix.de>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      9ecf8c0d
  13. 30 3月, 2012 3 次提交
  14. 22 3月, 2012 2 次提交
  15. 14 3月, 2012 1 次提交
  16. 21 1月, 2012 2 次提交
    • M
      ACPI, APEI: Add RAM mapping support to ACPI · ba242d5b
      Myron Stowe 提交于
      This patch adds support for RAM to ACPI's mapping capabilities in order
      to support APEI error injection (EINJ) actions.
      
      This patch re-factors similar functionality introduced in commit
      76da3fb3, bringing it into osl.c in preparation for removing
      ./drivers/acpi/atomicio.[ch].
      Signed-off-by: NMyron Stowe <myron.stowe@redhat.com>
      Signed-off-by: NLen Brown <len.brown@intel.com>
      ba242d5b
    • M
      ACPI, APEI: Add 64-bit read/write support for APEI on i386 · e615bf5b
      Myron Stowe 提交于
      Base ACPI (CA) currently does not support atomic 64-bit reads and writes
      (acpi_read() and acpi_write() split 64-bit loads/stores into two
      32-bit transfers) yet APEI expects 64-bit transfer capability, even
      when running on 32-bit systems.
      
      This patch implements 64-bit read and write routines for APEI usage.
      
      This patch re-factors similar functionality introduced in commit
      04c25997, bringing it into the ACPI subsystem in preparation for
      removing ./drivers/acpi/atomicio.[ch].  In the implementation I have
      replicated acpi_os_read_memory() and acpi_os_write_memory(), creating
      64-bit versions for APEI to utilize, as opposed to something more
      elegant.  My thinking is that we should attempt to see if we can get
      ACPI's CA/OSL changed so that the existing acpi_read() and acpi_write()
      interfaces are natively 64-bit capable and then subsequently remove the
      replication.
      Signed-off-by: NMyron Stowe <myron.stowe@redhat.com>
      Signed-off-by: NLen Brown <len.brown@intel.com>
      e615bf5b
  17. 17 1月, 2012 3 次提交
  18. 15 10月, 2011 1 次提交
    • P
      PCI hotplug: acpiphp: Prevent deadlock on PCI-to-PCI bridge remove · 6af8bef1
      Prarit Bhargava 提交于
      I originally submitted a patch to workaround this by pushing all Ejection
      Requests and Device Checks onto the kacpi_hotplug queue.
      
      http://marc.info/?l=linux-acpi&m=131678270930105&w=2
      
      The patch is still insufficient in that Bus Checks also need to be added.
      
      Rather than add all events, including non-PCI-hotplug events, to the
      hotplug queue, mjg suggested that a better approach would be to modify
      the acpiphp driver so only acpiphp events would be added to the
      kacpi_hotplug queue.
      
      It's a longer patch, but at least we maintain the benefit of having separate
      queues in ACPI.  This, of course, is still only a workaround the problem.
      As Bjorn and mjg pointed out, we have to refactor a lot of this code to do
      the right thing but at this point it is a better to have this code working.
      
      The acpi core places all events on the kacpi_notify queue.  When the acpiphp
      driver is loaded and a PCI card with a PCI-to-PCI bridge is removed the
      following call sequence occurs:
      
      cleanup_p2p_bridge()
      	    -> cleanup_bridge()
      		    -> acpi_remove_notify_handler()
      			    -> acpi_os_wait_events_complete()
      				    -> flush_workqueue(kacpi_notify_wq)
      
      which is the queue we are currently executing on and the process will hang.
      
      Move all hotplug acpiphp events onto the kacpi_hotplug workqueue.  In
      handle_hotplug_event_bridge() and handle_hotplug_event_func() we can simply
      push the rest of the work onto the kacpi_hotplug queue and then avoid the
      deadlock.
      Signed-off-by: NPrarit Bhargava <prarit@redhat.com>
      Cc: mjg@redhat.com
      Cc: bhelgaas@google.com
      Cc: linux-acpi@vger.kernel.org
      Signed-off-by: NJesse Barnes <jbarnes@virtuousgeek.org>
      6af8bef1
  19. 03 8月, 2011 1 次提交
  20. 02 8月, 2011 1 次提交
  21. 17 7月, 2011 1 次提交
  22. 14 7月, 2011 1 次提交
  23. 25 3月, 2011 1 次提交
  24. 25 2月, 2011 7 次提交
  25. 09 2月, 2011 1 次提交
    • R
      ACPI: Fix acpi_os_read_memory() and acpi_os_write_memory() (v2) · 884b821f
      Rafael J. Wysocki 提交于
      The functions acpi_os_read_memory() and acpi_os_write_memory() do
      two wrong things.  First, they shouldn't call rcu_read_unlock()
      before the looked up address is actually used for I/O, because in
      that case the iomap it belongs to may be removed before the I/O
      is done.  Second, if they have to create a new mapping, they should
      check the returned virtual address and tell the caller that the
      operation failed if it is NULL (in fact, I think they even should not
      attempt to map an address that's not present in one of the existing
      ACPI iomaps, because that may cause problems to happen when they are
      called from nonpreemptible context and their callers ought to know
      what they are doing and map the requisite memory regions beforehand).
      
      Make these functions call rcu_read_unlock() when the I/O is complete
      (or if it's necessary to map the given address "on the fly") and
      return an error code if the requested physical address is not present
      in the existing ACPI iomaps and cannot be mapped.
      Signed-off-by: NRafael J. Wysocki <rjw@sisk.pl>
      884b821f