From: "Rafael J. Wysocki" <rjw@sisk.pl>
To: Jeremy Fitzhardinge <jeremy@goop.org>
Cc: "Brown, Len" <len.brown@intel.com>,
linux-acpi@vger.kernel.org,
Xen-devel <xen-devel@lists.xensource.com>,
the arch/x86 maintainers <x86@kernel.org>
Subject: Re: Paravirtualizing bits of acpi access
Date: Sat, 21 Mar 2009 18:10:53 +0100 [thread overview]
Message-ID: <200903211810.53990.rjw@sisk.pl> (raw)
In-Reply-To: <49C484B7.20100@goop.org>
On Saturday 21 March 2009, Jeremy Fitzhardinge wrote:
> Hi Len,
>
> I have a patch here ported from the linux2.6.18-xen tree to make host S3
> suspend work under Xen (attached).
>
> The salient part is this:
>
> --- a/drivers/acpi/acpica/hwsleep.c
> +++ b/drivers/acpi/acpica/hwsleep.c
> @@ -46,6 +46,9 @@
> #include "accommon.h"
> #include "actables.h"
>
> +#include <xen/acpi.h>
> +#include <asm/xen/hypervisor.h>
> +
> #define _COMPONENT ACPI_HARDWARE
> ACPI_MODULE_NAME("hwsleep")
>
> @@ -337,14 +340,19 @@ acpi_status asmlinkage acpi_enter_sleep_state(u8 sleep_state)
>
> ACPI_FLUSH_CPU_CACHE();
>
> - status = acpi_hw_register_write(ACPI_REGISTER_PM1A_CONTROL,
> - PM1Acontrol);
> - if (ACPI_FAILURE(status)) {
> - return_ACPI_STATUS(status);
> - }
> + if (!xen_pv_domain()) {
> + status = acpi_hw_register_write(ACPI_REGISTER_PM1A_CONTROL,
> + PM1Acontrol);
> + if (ACPI_FAILURE(status)) {
> + return_ACPI_STATUS(status);
> + }
> +
> + status = acpi_hw_register_write(ACPI_REGISTER_PM1B_CONTROL,
> + PM1Bcontrol);
> + } else
> + status = acpi_notify_hypervisor_state(sleep_state,
> + PM1Acontrol, PM1Bcontrol);
>
> - status = acpi_hw_register_write(ACPI_REGISTER_PM1B_CONTROL,
> - PM1Bcontrol);
> if (ACPI_FAILURE(status)) {
> return_ACPI_STATUS(status);
> }
>
>
> where acpi_notify_hypervisor_state() more or less maps directly onto a
> Xen hypercall, which in turn performs the corresponding acpi operation
> from within Xen.
>
> I'm guessing you won't find this patch appealing as-is because it sticks
> a great big if (xen) into an otherwise arch (and OS?) independent piece
> of code. In this particular instance, its fairly easy to envisage
> encapsulating these two register writes into their own function which
> architectures can override, which makes it fairly easy for me to put a
> Xen hook in somewhere on the arch/x86 side of the fence.
>
> But because Xen ends up doing the low-level cpu state save/restore,
> several other parts of the S3 suspend path can be skipped on the Linux
> side. I'm wondering if you have any thoughts about how that can be
> done, or if putting the Xen code in as-is is acceptable?
>
> (BTW, xen_pv_domain() expands to a constant 0 when Xen isn't enabled in
> the config, so the Xen-dependent bits will collapse down to nothing.
> But it is defined in asm/xen/hypervisor.h, which is only present on x86
> and ia64 architectures; on the other hand, believe those are the only
> architectures using acpi.)
Well, why don't you implement the platform suspend operations for Xen?
I guess you don't want ACPI _PTS to be executed during suspend as well.
Rafael
next prev parent reply other threads:[~2009-03-21 17:11 UTC|newest]
Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-03-21 6:09 Paravirtualizing bits of acpi access Jeremy Fitzhardinge
2009-03-21 17:10 ` Rafael J. Wysocki [this message]
2009-03-22 4:26 ` Jeremy Fitzhardinge
2009-03-22 11:28 ` Rafael J. Wysocki
2009-03-22 13:14 ` Ingo Molnar
2009-03-22 13:17 ` Rafael J. Wysocki
2009-03-22 17:07 ` Jeremy Fitzhardinge
2009-03-22 18:00 ` Rafael J. Wysocki
2009-03-23 3:29 ` Tian, Kevin
2009-03-23 18:20 ` [Xen-devel] " Rafael J. Wysocki
2009-03-23 19:07 ` Jeremy Fitzhardinge
2009-03-23 20:27 ` Rafael J. Wysocki
2009-03-23 20:42 ` Jeremy Fitzhardinge
2009-03-24 5:14 ` Jeremy Fitzhardinge
2009-03-24 5:33 ` Tian, Kevin
2009-03-24 5:42 ` Jeremy Fitzhardinge
2009-03-24 5:45 ` Tian, Kevin
2009-03-24 7:05 ` Jeremy Fitzhardinge
2009-03-24 16:45 ` Bjorn Helgaas
2009-03-24 17:28 ` Jeremy Fitzhardinge
2009-03-24 17:51 ` [Xen-devel] " Cihula, Joseph
2009-03-27 21:57 ` Len Brown
2009-03-27 23:20 ` Jeremy Fitzhardinge
2009-03-28 1:01 ` Len Brown
2009-03-28 2:19 ` Tian, Kevin
2009-03-28 3:19 ` Jeremy Fitzhardinge
2009-03-28 13:56 ` Rafael J. Wysocki
2009-03-24 23:40 ` Tian, Kevin
2009-03-24 23:51 ` Tian, Kevin
2009-03-25 0:45 ` Jeremy Fitzhardinge
2009-03-23 19:52 ` [Xen-devel] " Matthew Garrett
2009-03-23 20:22 ` Rafael J. Wysocki
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=200903211810.53990.rjw@sisk.pl \
--to=rjw@sisk.pl \
--cc=jeremy@goop.org \
--cc=len.brown@intel.com \
--cc=linux-acpi@vger.kernel.org \
--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