From: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
To: linux-kernel@vger.kernel.org, rjw@sisk.pl, tglx@linutronix.de,
hpa@zytor.com, x86@kernel.org, len.brown@intel.com,
joseph.cihula@intel.com, shane.wang@intel.com,
xen-devel@lists.xensource.com,
linux-pm@lists.linux-foundation.org,
tboot-devel@lists.sourceforge.net, linux-acpi@vger.kernel.org,
liang.tang@oracle.com, ke.yu@intel.com, kevin.tian@intel.com,
jeremy@goop.org
Subject: [PATCH v2] ACPI S3 to work under Xen.
Date: Thu, 29 Sep 2011 16:16:46 -0400 [thread overview]
Message-ID: <1317327414-24072-1-git-send-email-konrad.wilk@oracle.com> (raw)
Attached is an [v2] set of patches to enable S3 to work with the Xen hypervisor.
Changes since the RFC posting [http://comments.gmane.org/gmane.linux.acpi.devel/50701] by
Liang Tang:
- Per review comments added: __unused__ attribute, support for PM1A/B if more than 16-bit,
copyright/license.
- Added support for PHYSDEVOP_restore_msi_ext call.
The relationship that Xen has with Linux kernel is symbiotic. The Linux
kernel does the ACPI "stuff" and tells the hypervisor to do the low-level
stuff (such as program the IOAPIC, setup vectors, etc). The realm of
ACPI S3 is more complex as we need to save the CPU state (and Intel TXT
values - which the hypervisor has to do).
The major difficulties we hit was with 'acpi_suspend_lowlevel' - which tweaks
a lot of lowlevel values and some of them are not properly handled by Xen.
Liang Tang has figured which ones of them we trip over (read below) - and he
suggested that perhaps we can provide a registration mechanism to abstract
this away. The reason for all of this is that Linux does not talk to the
BIOS directly - instead it simply walks through the necessary ACPI methods
and then issues hypercall to Xen which then further completes the remaining
suspend steps.
So the attached patches do exactly that - there are two entry points
in the ACPI.
1). For S3: acpi_suspend_lowlevel -> .. lots of code -> acpi_enter_sleep_state
2). For S1/S4/S5: acpi_enter_sleep_state
The first naive idea was of abstracting away in the 'acpi_enter_sleep_state'
function the tboot_sleep code so that we can use it too. And low-behold - it
worked splendidly for powering off (S5 I believe)
For S3 that did not work - during suspend the hypervisor tripped over when
saving cr8. During resume it tripped over at restoring the cr3, cr8, idt,
and gdt values.
When I posted the RFC, the feedback I got was to use a higher upper interface
to make the call to the hypervisor. Instead of doing it at the lower pv-ops
case for cr3, cr8, idt, gdt, etc. The code I've to say - is much nicer than
doing it via pv-ops.
Anyhow, please take a look!
Konrad Rzeszutek Wilk (5):
x86: Expand the x86_msi_ops to have a restore MSIs.
x86, acpi, tboot: Have a ACPI sleep override instead of calling tboot_sleep.
xen: Utilize the restore_msi_irqs hook.
xen/acpi/sleep: Enable ACPI sleep via the __acpi_override_sleep
xen/acpi/sleep: Register to the acpi_suspend_lowlevel a callback.
Liang Tang (2):
x86/acpi/sleep: Provide registration for acpi_suspend_lowlevel.
xen/pci:use hypercall PHYSDEVOP_restore_msi_ext to restore MSI/MSI-X vectors
Yu Ke (1):
xen/acpi: Domain0 acpi parser related platform hypercall
arch/ia64/include/asm/xen/interface.h | 1 +
arch/x86/include/asm/acpi.h | 6 +-
arch/x86/include/asm/pci.h | 9 +
arch/x86/include/asm/x86_init.h | 1 +
arch/x86/include/asm/xen/hypercall.h | 8 +
arch/x86/include/asm/xen/interface.h | 1 +
arch/x86/kernel/acpi/boot.c | 6 +
arch/x86/kernel/acpi/sleep.c | 4 +-
arch/x86/kernel/acpi/sleep.h | 2 +
arch/x86/kernel/tboot.c | 14 +-
arch/x86/kernel/x86_init.c | 1 +
arch/x86/pci/xen.c | 29 +++
arch/x86/xen/enlighten.c | 3 +
drivers/acpi/acpica/hwsleep.c | 12 +-
drivers/acpi/sleep.c | 2 +
drivers/pci/msi.c | 29 +++-
drivers/xen/Makefile | 2 +-
drivers/xen/acpi.c | 65 +++++++
include/linux/tboot.h | 3 +-
include/xen/acpi.h | 70 +++++++
include/xen/interface/physdev.h | 15 ++
include/xen/interface/platform.h | 320 +++++++++++++++++++++++++++++++++
include/xen/interface/xen.h | 1 +
23 files changed, 591 insertions(+), 13 deletions(-)
next reply other threads:[~2011-09-29 20:20 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-09-29 20:16 Konrad Rzeszutek Wilk [this message]
2011-09-29 20:16 ` [PATCH 1/8] x86: Expand the x86_msi_ops to have a restore MSIs Konrad Rzeszutek Wilk
2011-09-29 20:16 ` [PATCH 2/8] x86, acpi, tboot: Have a ACPI sleep override instead of calling tboot_sleep Konrad Rzeszutek Wilk
2011-09-29 20:28 ` Cihula, Joseph
2011-09-29 20:16 ` [PATCH 3/8] x86/acpi/sleep: Provide registration for acpi_suspend_lowlevel Konrad Rzeszutek Wilk
2011-09-29 20:30 ` Cihula, Joseph
2011-09-29 20:16 ` [PATCH 4/8] xen: Utilize the restore_msi_irqs hook Konrad Rzeszutek Wilk
2011-09-29 20:16 ` [PATCH 5/8] xen/acpi: Domain0 acpi parser related platform hypercall Konrad Rzeszutek Wilk
2011-09-29 20:16 ` [PATCH 6/8] xen/acpi/sleep: Enable ACPI sleep via the __acpi_override_sleep Konrad Rzeszutek Wilk
2011-09-29 20:16 ` [PATCH 7/8] xen/acpi/sleep: Register to the acpi_suspend_lowlevel a callback Konrad Rzeszutek Wilk
2011-09-29 20:16 ` [PATCH 8/8] xen/pci:use hypercall PHYSDEVOP_restore_msi_ext to restore MSI/MSI-X vectors Konrad Rzeszutek Wilk
2011-10-11 20:08 ` [PATCH v2] ACPI S3 to work under Xen Konrad Rzeszutek Wilk
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1317327414-24072-1-git-send-email-konrad.wilk@oracle.com \
--to=konrad.wilk@oracle.com \
--cc=hpa@zytor.com \
--cc=jeremy@goop.org \
--cc=joseph.cihula@intel.com \
--cc=ke.yu@intel.com \
--cc=kevin.tian@intel.com \
--cc=len.brown@intel.com \
--cc=liang.tang@oracle.com \
--cc=linux-acpi@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pm@lists.linux-foundation.org \
--cc=rjw@sisk.pl \
--cc=shane.wang@intel.com \
--cc=tboot-devel@lists.sourceforge.net \
--cc=tglx@linutronix.de \
--cc=x86@kernel.org \
--cc=xen-devel@lists.xensource.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®