Skip to contentSkip to conversation

Add configuration options to selectively disable S3 and S4 (V2)

PATCH In review Paul Durrant 3 participants 9 messages Nov 18, 2011 Arm/actions semi architecture

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 Add configuration options to selectively disable S3 and S4 (V2)

This patch series adds the ability to selectively disable the S3 and S4 ACPI power states for HVM guests.

Since there is a general move towards retiring the hvm_info_table structure, the first patch moves the acpi_enabled flag out of the hvm_info_table and into a xenstore key (platform/acpi).
The second patch then introduces the acpi_s3 and acpi_s4 configuration parameters to the xl config file (default=1). These result in population of new platform/acpi_s3 and platform/acpi_s4 xenstore keys. hvmloader then reads these keys to determine whether or not to include SSDTs containing the _S3 and _S4 packages respectively.

#1 lore raw

PATCH 1/1 Move acpi_enabled out of hvm_info_table into xenstore

# HG changeset patch
# User Paul Durrant <[email protected]> # Date 1321612132 0
# Node ID d22ef0f60497772ac17b086e7f589434a2344fe8 # Parent dbdc840f8f62db58321b5009e5e0f7833066386f Move acpi_enabled out of hvm_info_table into xenstore

Since hvmloader has a xentore client, use a platform key in xenstore to indicate whether ACPI is enabled or not rather than the shared hvm_info_table structure.

tools/firmware/hvmloader/hvmloader.c +4 -1
diff -r dbdc840f8f62 -r d22ef0f60497 tools/firmware/hvmloader/hvmloader.c
@@ -423,6 +423,7 @@ int main(void)
     const struct bios_config *bios;
     int option_rom_sz = 0, vgabios_sz = 0, etherboot_sz = 0;
     uint32_t etherboot_phys_addr = 0, option_rom_phys_addr = 0;
+    int acpi_enabled;
 
     /* Initialise hypercall stubs with RET, rendering them no-ops. */
     memset((void *)HYPERCALL_PHYSICAL_ADDRESS, 0xc3 /* RET */, PAGE_SIZE);
@@ -506,7 +507,9 @@ int main(void)
                                              option_rom_phys_addr);
     }
 
-    if ( hvm_info->acpi_enabled )
+    acpi_enabled = !strncmp(xenstore_read("platform/acpi", "1"), "1", 1);
+
+    if ( acpi_enabled )
     {
         struct xen_hvm_param p = {
             .domid = DOMID_SELF,
tools/libxc/xc_hvm_build.c +0 -1
diff -r dbdc840f8f62 -r d22ef0f60497 tools/libxc/xc_hvm_build.c
@@ -67,7 +67,6 @@ static void build_hvm_info(void *hvm_inf
     hvm_info->length = sizeof(struct hvm_info_table);
 
     /* Sensible defaults: these can be overridden by the caller. */
-    hvm_info->acpi_enabled = 1;
     hvm_info->apic_mode = 1;
     hvm_info->nr_vcpus = 1;
     memset(hvm_info->vcpu_online, 0xff, sizeof(hvm_info->vcpu_online));
tools/libxl/libxl_create.c +5 -0
diff -r dbdc840f8f62 -r d22ef0f60497 tools/libxl/libxl_create.c
@@ -188,6 +188,11 @@ int libxl__domain_build(libxl__gc *gc,
         vments[3] = "hvm";
         vments[4] = "start_time";
         vments[5] = libxl__sprintf(gc, "%lu.%02d", start_time.tv_sec,(int)start_time.tv_usec/10000);
+
+        localents = libxl__calloc(gc, 3, sizeof(char *));
+        localents[0] = "platform/acpi";
+        localents[1] = (info->u.hvm.acpi) ? "1" : "0";
+
         break;
     case LIBXL_DOMAIN_TYPE_PV:
         ret = libxl__build_pv(gc, domid, info, state);
tools/libxl/libxl_dom.c +0 -1
diff -r dbdc840f8f62 -r d22ef0f60497 tools/libxl/libxl_dom.c
@@ -248,7 +248,6 @@ static int hvm_build_set_params(xc_inter
         return -1;
 
     va_hvm = (struct hvm_info_table *)(va_map + HVM_INFO_OFFSET);
-    va_hvm->acpi_enabled = info->u.hvm.acpi;
     va_hvm->apic_mode = info->u.hvm.apic;
     va_hvm->nr_vcpus = info->max_vcpus;
     memcpy(va_hvm->vcpu_online, &info->cur_vcpus, sizeof(info->cur_vcpus));
tools/python/xen/lowlevel/xc/xc.c +0 -1
diff -r dbdc840f8f62 -r d22ef0f60497 tools/python/xen/lowlevel/xc/xc.c
@@ -996,7 +996,6 @@ static PyObject *pyxc_hvm_build(XcObject
     if ( va_map == NULL )
         return PyErr_SetFromErrno(xc_error_obj);
     va_hvm = (struct hvm_info_table *)(va_map + HVM_INFO_OFFSET);
-    va_hvm->acpi_enabled = acpi;
     va_hvm->apic_mode    = apic;
     va_hvm->nr_vcpus     = vcpus;
     memcpy(va_hvm->vcpu_online, vcpu_avail, sizeof(vcpu_avail));
xen/include/public/hvm/hvm_info_table.h +0 -3
diff -r dbdc840f8f62 -r d22ef0f60497 xen/include/public/hvm/hvm_info_table.h
@@ -37,9 +37,6 @@ struct hvm_info_table {
     uint32_t    length;
     uint8_t     checksum;
 
-    /* Should firmware build ACPI tables? */
-    uint8_t     acpi_enabled;
-
     /* Should firmware build APIC descriptors (APIC MADT / MP BIOS)? */
     uint8_t     apic_mode;
#2 lore raw

PATCH 1/1 Add configuration options to selectively disable S3 and S4 ACPI power states

In reply to Paul Durrant

# HG changeset patch
# User Paul Durrant <[email protected]>
# Date 1321612133 0
# Node ID 66bdcb90560f1b996fa34c549834b479a5157cd3
# Parent d22ef0f60497772ac17b086e7f589434a2344fe8
Add configuration options to selectively disable S3 and S4 ACPI power states.

Introduce acpi_s3 and acpi_s4 configuration options (default=1). The S3 and S4 packages are moved into separate SSDTs and their inclusion is controlled by the new configuration options.

tools/firmware/hvmloader/acpi/Makefile +2 -2
diff -r d22ef0f60497 -r 66bdcb90560f tools/firmware/hvmloader/acpi/Makefile
@@ -26,7 +26,7 @@ CFLAGS += $(CFLAGS_xeninclude)
 vpath iasl $(PATH)
 all: acpi.a
 
-ssdt_pm.h ssdt_tpm.h: %.h: %.asl iasl
+ssdt_s3.h ssdt_s4.h ssdt_pm.h ssdt_tpm.h: %.h: %.asl iasl
 	iasl -vs -p $* -tc $<
 	sed -e 's/AmlCode/$*/g' $*.hex >$@
 	rm -f $*.hex $*.aml
@@ -57,7 +57,7 @@ iasl:
 	@echo 
 	@exit 1
 
-build.o: ssdt_pm.h ssdt_tpm.h
+build.o: ssdt_s3.h ssdt_s4.h ssdt_pm.h ssdt_tpm.h
 
 acpi.a: $(OBJS)
 	$(AR) rc $@ $(OBJS)
tools/firmware/hvmloader/acpi/acpi2_0.h +2 -0
diff -r d22ef0f60497 -r 66bdcb90560f tools/firmware/hvmloader/acpi/acpi2_0.h
@@ -396,6 +396,8 @@ struct acpi_config {
     int dsdt_anycpu_len;
     unsigned char *dsdt_15cpu;
     int dsdt_15cpu_len;
+    int ssdt_s3_enabled;
+    int ssdt_s4_enabled;
 };
 
 void acpi_build_tables(struct acpi_config *config, unsigned int physical);
tools/firmware/hvmloader/acpi/build.c +23 -2
diff -r d22ef0f60497 -r 66bdcb90560f tools/firmware/hvmloader/acpi/build.c
@@ -17,6 +17,9 @@
  */
 
 #include "acpi2_0.h"
+#include "ssdt_s3.h"
+#include "ssdt_s4.h"
+#include "ssdt_s5.h"
 #include "ssdt_tpm.h"
 #include "ssdt_pm.h"
 #include "../config.h"
@@ -196,7 +199,8 @@ static struct acpi_20_waet *construct_wa
 }
 
 static int construct_secondary_tables(unsigned long *table_ptrs,
-                                      struct acpi_info *info)
+                                      struct acpi_info *info,
+                                      struct acpi_config *config)
 {
     int nr_tables = 0;
     struct acpi_20_madt *madt;
@@ -235,6 +239,22 @@ static int construct_secondary_tables(un
         table_ptrs[nr_tables++] = (unsigned long)ssdt;
     }
 
+    if ( config->ssdt_s3_enabled )
+    {
+        ssdt = mem_alloc(sizeof(ssdt_s3), 16);
+        if (!ssdt) return -1;
+        memcpy(ssdt, ssdt_s3, sizeof(ssdt_s3));
+        table_ptrs[nr_tables++] = (unsigned long)ssdt;
+    }
+
+    if ( config->ssdt_s4_enabled )
+    {
+        ssdt = mem_alloc(sizeof(ssdt_s4), 16);
+        if (!ssdt) return -1;
+        memcpy(ssdt, ssdt_s4, sizeof(ssdt_s4));
+        table_ptrs[nr_tables++] = (unsigned long)ssdt;
+    }
+
     /* TPM TCPA and SSDT. */
     tis_hdr = (uint16_t *)0xFED40F00;
     if ( (tis_hdr[0] == tis_signature[0]) &&
@@ -353,7 +373,8 @@ void acpi_build_tables(struct acpi_confi
                  offsetof(struct acpi_header, checksum),
                  sizeof(struct acpi_20_fadt));
 
-    nr_secondaries = construct_secondary_tables(secondary_tables, acpi_info);
+    nr_secondaries = construct_secondary_tables(secondary_tables, acpi_info,
+                                                config);
     if ( nr_secondaries < 0 )
         goto oom;
 
tools/firmware/hvmloader/acpi/dsdt.asl +1 -18
diff -r d22ef0f60497 -r 66bdcb90560f tools/firmware/hvmloader/acpi/dsdt.asl
@@ -27,24 +27,7 @@ DefinitionBlock ("DSDT.aml", "DSDT", 2, 
     Name (\APCL, 0x00010000)
     Name (\PUID, 0x00)
 
-    /*
-     * S3 (suspend-to-ram), S4 (suspend-to-disc) and S5 (power-off) type codes:
-     * must match piix4 emulation.
-     */
-    Name (\_S3, Package (0x04)
-    {
-        0x01,  /* PM1a_CNT.SLP_TYP */
-        0x01,  /* PM1b_CNT.SLP_TYP */
-        0x0,   /* reserved */
-        0x0    /* reserved */
-    })
-    Name (\_S4, Package (0x04)
-    {
-        0x00,  /* PM1a_CNT.SLP_TYP */
-        0x00,  /* PM1b_CNT.SLP_TYP */
-        0x00,  /* reserved */
-        0x00   /* reserved */
-    })
+    /* _S3 and _S4 are in separate SSDTs */
     Name (\_S5, Package (0x04)
     {
         0x00,  /* PM1a_CNT.SLP_TYP */
tools/firmware/hvmloader/acpi/ssdt_s3.asl new file +32 -0
diff -r d22ef0f60497 -r 66bdcb90560f tools/firmware/hvmloader/acpi/ssdt_s3.asl
@@ -0,0 +1,32 @@
+/*
+ * ssdt_s3.asl
+ *
+ * Copyright (c) 2011  Citrix Systems, Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
+DefinitionBlock ("SSDT_S3.aml", "SSDT", 2, "Xen", "HVM", 0)
+{
+    /* Must match piix emulation */
+    Name (\_S3, Package (0x04)
+    {
+        0x01,  /* PM1a_CNT.SLP_TYP */
+        0x01,  /* PM1b_CNT.SLP_TYP */
+        0x0,   /* reserved */
+        0x0    /* reserved */
+    })
+}
+
tools/firmware/hvmloader/acpi/ssdt_s4.asl new file +32 -0
diff -r d22ef0f60497 -r 66bdcb90560f tools/firmware/hvmloader/acpi/ssdt_s4.asl
@@ -0,0 +1,32 @@
+/*
+ * ssdt_s4.asl
+ *
+ * Copyright (c) 2011  Citrix Systems, Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
+DefinitionBlock ("SSDT_S4.aml", "SSDT", 2, "Xen", "HVM", 0)
+{
+    /* Must match piix emulation */
+    Name (\_S4, Package (0x04)
+    {
+        0x00,  /* PM1a_CNT.SLP_TYP */
+        0x00,  /* PM1b_CNT.SLP_TYP */
+        0x00,  /* reserved */
+        0x00   /* reserved */
+    })
+}
+
tools/firmware/hvmloader/config.h +1 -1
diff -r d22ef0f60497 -r 66bdcb90560f tools/firmware/hvmloader/config.h
@@ -27,7 +27,7 @@ struct bios_config {
 
     void (*e820_setup)(void);
 
-    void (*acpi_build_tables)(void);
+    void (*acpi_build_tables)(int, int);
     void (*create_mp_tables)(void);
     void (*create_smbios_tables)(void);
     void (*create_pir_tables)(void);
tools/firmware/hvmloader/hvmloader.c +8 -2
diff -r d22ef0f60497 -r 66bdcb90560f tools/firmware/hvmloader/hvmloader.c
@@ -516,11 +516,17 @@ int main(void)
             .index = HVM_PARAM_ACPI_IOPORTS_LOCATION,
             .value = 1,
         };
+        int s3_enabled, s4_enabled;
+
+        s3_enabled = !strncmp(xenstore_read("platform/acpi_s3", "1"), "1", 1);
+        s4_enabled = !strncmp(xenstore_read("platform/acpi_s4", "1"), "1", 1);
 
         if ( bios->acpi_build_tables )
         {
-            printf("Loading ACPI ...\n");
-            bios->acpi_build_tables();
+            printf("Loading ACPI (S3=%s S4=%s) ...\n",
+                   (s3_enabled) ? "ON" : "OFF",
+                   (s4_enabled) ? "ON" : "OFF");
+            bios->acpi_build_tables(s3_enabled, s4_enabled);
         }
 
         acpi_enable_sci();
tools/firmware/hvmloader/rombios.c +3 -1
diff -r d22ef0f60497 -r 66bdcb90560f tools/firmware/hvmloader/rombios.c
@@ -112,13 +112,15 @@ static void reset_bios_checksum(void)
     *((uint8_t *)(ROMBIOS_BEGIN + ROMBIOS_MAXOFFSET)) = -checksum;
 }
 
-static void rombios_acpi_build_tables(void)
+static void rombios_acpi_build_tables(int s3_enabled, int s4_enabled)
 {
     struct acpi_config config = {
         .dsdt_anycpu = dsdt_anycpu,
         .dsdt_anycpu_len = dsdt_anycpu_len,
         .dsdt_15cpu = dsdt_15cpu,
         .dsdt_15cpu_len = dsdt_15cpu_len,
+        .ssdt_s3_enabled = s3_enabled,
+        .ssdt_s4_enabled = s4_enabled,
     };
 
     acpi_build_tables(&config, ACPI_PHYSICAL_ADDRESS);
tools/firmware/hvmloader/seabios.c +3 -1
diff -r d22ef0f60497 -r 66bdcb90560f tools/firmware/hvmloader/seabios.c
@@ -91,7 +91,7 @@ static void add_table(uint32_t t)
     info->tables_nr++;
 }
 
-static void seabios_acpi_build_tables(void)
+static void seabios_acpi_build_tables(int s3_enabled, int s4_enabled)
 {
     uint32_t rsdp = (uint32_t)scratch_alloc(sizeof(struct acpi_20_rsdp), 0);
     struct acpi_config config = {
@@ -99,6 +99,8 @@ static void seabios_acpi_build_tables(vo
         .dsdt_anycpu_len = dsdt_anycpu_qemu_xen_len,
         .dsdt_15cpu = NULL,
         .dsdt_15cpu_len = 0,
+        .ssdt_s3_enabled = s3_enabled,
+        .ssdt_s4_enabled = s4_enabled,
     };
 
     acpi_build_tables(&config, rsdp);
tools/libxl/libxl_create.c +7 -1
diff -r d22ef0f60497 -r 66bdcb90560f tools/libxl/libxl_create.c
@@ -93,6 +93,8 @@ int libxl_init_build_info(libxl_ctx *ctx
         b_info->u.hvm.pae = 1;
         b_info->u.hvm.apic = 1;
         b_info->u.hvm.acpi = 1;
+        b_info->u.hvm.acpi_s3 = 1;
+        b_info->u.hvm.acpi_s4 = 1;
         b_info->u.hvm.nx = 1;
         b_info->u.hvm.viridian = 0;
         b_info->u.hvm.hpet = 1;
@@ -189,9 +191,13 @@ int libxl__domain_build(libxl__gc *gc,
         vments[4] = "start_time";
         vments[5] = libxl__sprintf(gc, "%lu.%02d", start_time.tv_sec,(int)start_time.tv_usec/10000);
 
-        localents = libxl__calloc(gc, 3, sizeof(char *));
+        localents = libxl__calloc(gc, 7, sizeof(char *));
         localents[0] = "platform/acpi";
         localents[1] = (info->u.hvm.acpi) ? "1" : "0";
+        localents[2] = "platform/acpi_s3";
+        localents[3] = (info->u.hvm.acpi_s3) ? "1" : "0";
+        localents[4] = "platform/acpi_s4";
+        localents[5] = (info->u.hvm.acpi_s4) ? "1" : "0";
 
         break;
     case LIBXL_DOMAIN_TYPE_PV:
tools/libxl/libxl_types.idl +2 -0
diff -r d22ef0f60497 -r 66bdcb90560f tools/libxl/libxl_types.idl
@@ -167,6 +167,8 @@ libxl_domain_build_info = Struct("domain
                                        ("pae", bool),
                                        ("apic", bool),
                                        ("acpi", bool),
+                                       ("acpi_s3", bool),
+                                       ("acpi_s4", bool),
                                        ("nx", bool),
                                        ("viridian", bool),
                                        ("timeoffset", string),
tools/libxl/xl_cmdimpl.c +4 -0
diff -r d22ef0f60497 -r 66bdcb90560f tools/libxl/xl_cmdimpl.c
@@ -683,6 +683,10 @@ static void parse_config_data(const char
             b_info->u.hvm.apic = l;
         if (!xlu_cfg_get_long (config, "acpi", &l))
             b_info->u.hvm.acpi = l;
+        if (!xlu_cfg_get_long (config, "acpi_s3", &l))
+            b_info->u.hvm.acpi_s3 = l;
+        if (!xlu_cfg_get_long (config, "acpi_s4", &l))
+            b_info->u.hvm.acpi_s4 = l;
         if (!xlu_cfg_get_long (config, "nx", &l))
             b_info->u.hvm.nx = l;
         if (!xlu_cfg_get_long (config, "viridian", &l))
#3 lore raw

RE: [PATCH 2 of 2] Add configuration options to selectively disable S3 and S4 ACPI power states

Sorry, this has one line of extraneous noise in. I will resend.

Paul

Quoted 383 lines

-----Original Message-----
From: Paul Durrant [mailto:[email protected]]
Sent: 18 November 2011 10:29
To: [email protected]
Cc: Paul Durrant
Subject: [PATCH 2 of 2] Add configuration options to selectively disable S3 and S4 ACPI power states

# HG changeset patch
# User Paul Durrant <[email protected]> # Date 1321612133 0 # Node ID 66bdcb90560f1b996fa34c549834b479a5157cd3
# Parent d22ef0f60497772ac17b086e7f589434a2344fe8
Add configuration options to selectively disable S3 and S4 ACPI power states.

Introduce acpi_s3 and acpi_s4 configuration options (default=1). The S3 and S4 packages are moved into separate SSDTs and their inclusion is controlled by the new configuration options.

diff -r d22ef0f60497 -r 66bdcb90560f
tools/firmware/hvmloader/acpi/Makefile
--- a/tools/firmware/hvmloader/acpi/Makefile Fri Nov 18 10:28:52
2011 +0000
+++ b/tools/firmware/hvmloader/acpi/Makefile Fri Nov 18 10:28:53
2011 +0000

tools/firmware/hvmloader/acpi/Makefile +2 -2
@@ -26,7 +26,7 @@ CFLAGS += $(CFLAGS_xeninclude)  vpath iasl $(PATH)
 all: acpi.a
 
-ssdt_pm.h ssdt_tpm.h: %.h: %.asl iasl
+ssdt_s3.h ssdt_s4.h ssdt_pm.h ssdt_tpm.h: %.h: %.asl iasl
 	iasl -vs -p $* -tc $<
 	sed -e 's/AmlCode/$*/g' $*.hex >$@
 	rm -f $*.hex $*.aml
@@ -57,7 +57,7 @@ iasl:
 	@echo
 	@exit 1
 
-build.o: ssdt_pm.h ssdt_tpm.h
+build.o: ssdt_s3.h ssdt_s4.h ssdt_pm.h ssdt_tpm.h
 
 acpi.a: $(OBJS)
 	$(AR) rc $@ $(OBJS)

diff -r d22ef0f60497 -r 66bdcb90560f
tools/firmware/hvmloader/acpi/acpi2_0.h
--- a/tools/firmware/hvmloader/acpi/acpi2_0.h Fri Nov 18 10:28:52
2011 +0000
+++ b/tools/firmware/hvmloader/acpi/acpi2_0.h Fri Nov 18 10:28:53
2011 +0000

tools/firmware/hvmloader/acpi/acpi2_0.h +2 -0
@@ -396,6 +396,8 @@ struct acpi_config {
     int dsdt_anycpu_len;
     unsigned char *dsdt_15cpu;
     int dsdt_15cpu_len;
+    int ssdt_s3_enabled;
+    int ssdt_s4_enabled;
 };
 
 void acpi_build_tables(struct acpi_config *config, unsigned int

physical); diff -r d22ef0f60497 -r 66bdcb90560f
tools/firmware/hvmloader/acpi/build.c
--- a/tools/firmware/hvmloader/acpi/build.c Fri Nov 18 10:28:52
2011 +0000
+++ b/tools/firmware/hvmloader/acpi/build.c Fri Nov 18 10:28:53
2011 +0000

tools/firmware/hvmloader/acpi/build.c +21 -1
@@ -17,6 +17,9 @@
  */
 
 #include "acpi2_0.h"
+#include "ssdt_s3.h"
+#include "ssdt_s4.h"
+#include "ssdt_s5.h"
 #include "ssdt_tpm.h"
 #include "ssdt_pm.h"
 #include "../config.h"
@@ -196,7 +199,8 @@ static struct acpi_20_waet *construct_wa  }
 
 static int construct_secondary_tables(unsigned long *table_ptrs,
-                                      struct acpi_info *info)
+                                      struct acpi_info *info,
+                                      struct acpi_config *config)
 {
     int nr_tables = 0;
     struct acpi_20_madt *madt;
@@ -235,6 +239,22 @@ static int construct_secondary_tables(un
         table_ptrs[nr_tables++] = (unsigned long)ssdt;
     }
 
+    if ( config->ssdt_s3_enabled )
+    {
+        ssdt = mem_alloc(sizeof(ssdt_s3), 16);
+        if (!ssdt) return -1;
+        memcpy(ssdt, ssdt_s3, sizeof(ssdt_s3));
+        table_ptrs[nr_tables++] = (unsigned long)ssdt;
+    }
+
+    if ( config->ssdt_s4_enabled )
+    {
+        ssdt = mem_alloc(sizeof(ssdt_s4), 16);
+        if (!ssdt) return -1;
+        memcpy(ssdt, ssdt_s4, sizeof(ssdt_s4));
+        table_ptrs[nr_tables++] = (unsigned long)ssdt;
+    }
+
     /* TPM TCPA and SSDT. */
     tis_hdr = (uint16_t *)0xFED40F00;
     if ( (tis_hdr[0] == tis_signature[0]) && @@ -353,7 +373,8 @@

void acpi_build_tables(struct acpi_confi
offsetof(struct acpi_header, checksum), sizeof(struct acpi_20_fadt));

- nr_secondaries = construct_secondary_tables(secondary_tables,
acpi_info);
+ nr_secondaries = construct_secondary_tables(secondary_tables,
acpi_info,
+ config);
if ( nr_secondaries < 0 )
goto oom;

diff -r d22ef0f60497 -r 66bdcb90560f
tools/firmware/hvmloader/acpi/dsdt.asl
--- a/tools/firmware/hvmloader/acpi/dsdt.asl Fri Nov 18 10:28:52
2011 +0000
+++ b/tools/firmware/hvmloader/acpi/dsdt.asl Fri Nov 18 10:28:53
2011 +0000

tools/firmware/hvmloader/acpi/dsdt.asl +0 -2
@@ -27,24 +27,7 @@ DefinitionBlock ("DSDT.aml", "DSDT", 2,
     Name (\APCL, 0x00010000)
     Name (\PUID, 0x00)
 
-    /*
-     * S3 (suspend-to-ram), S4 (suspend-to-disc) and S5 (power-off)

type codes:

tools/firmware/hvmloader/acpi/dsdt.asl +1 -16
-     * must match piix4 emulation.
-     */
-    Name (\_S3, Package (0x04)
-    {
-        0x01,  /* PM1a_CNT.SLP_TYP */
-        0x01,  /* PM1b_CNT.SLP_TYP */
-        0x0,   /* reserved */
-        0x0    /* reserved */
-    })
-    Name (\_S4, Package (0x04)
-    {
-        0x00,  /* PM1a_CNT.SLP_TYP */
-        0x00,  /* PM1b_CNT.SLP_TYP */
-        0x00,  /* reserved */
-        0x00   /* reserved */
-    })
+    /* _S3 and _S4 are in separate SSDTs */
     Name (\_S5, Package (0x04)
     {
         0x00,  /* PM1a_CNT.SLP_TYP */

diff -r d22ef0f60497 -r 66bdcb90560f
tools/firmware/hvmloader/acpi/ssdt_s3.asl

tools/firmware/hvmloader/acpi/ssdt_s3.asl new file +0 -0

2011 +0000

tools/firmware/hvmloader/acpi/ssdt_s3.asl new file +6 -0
@@ -0,0 +1,32 @@
+/*
+ * ssdt_s3.asl
+ *
+ * Copyright (c) 2011  Citrix Systems, Inc.
+ *
+ * This program is free software; you can redistribute it and/or

modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111- 1307

tools/firmware/hvmloader/acpi/ssdt_s3.asl new file +13 -0
+USA  */
+
+DefinitionBlock ("SSDT_S3.aml", "SSDT", 2, "Xen", "HVM", 0) {
+    /* Must match piix emulation */
+    Name (\_S3, Package (0x04)
+    {
+        0x01,  /* PM1a_CNT.SLP_TYP */
+        0x01,  /* PM1b_CNT.SLP_TYP */
+        0x0,   /* reserved */
+        0x0    /* reserved */
+    })
+}
+

diff -r d22ef0f60497 -r 66bdcb90560f
tools/firmware/hvmloader/acpi/ssdt_s4.asl

tools/firmware/hvmloader/acpi/ssdt_s4.asl new file +0 -0

2011 +0000

tools/firmware/hvmloader/acpi/ssdt_s4.asl new file +6 -0
@@ -0,0 +1,32 @@
+/*
+ * ssdt_s4.asl
+ *
+ * Copyright (c) 2011  Citrix Systems, Inc.
+ *
+ * This program is free software; you can redistribute it and/or

modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111- 1307

tools/firmware/hvmloader/acpi/ssdt_s4.asl new file +13 -0
+USA  */
+
+DefinitionBlock ("SSDT_S4.aml", "SSDT", 2, "Xen", "HVM", 0) {
+    /* Must match piix emulation */
+    Name (\_S4, Package (0x04)
+    {
+        0x00,  /* PM1a_CNT.SLP_TYP */
+        0x00,  /* PM1b_CNT.SLP_TYP */
+        0x00,  /* reserved */
+        0x00   /* reserved */
+    })
+}
+

diff -r d22ef0f60497 -r 66bdcb90560f
tools/firmware/hvmloader/config.h
--- a/tools/firmware/hvmloader/config.h Fri Nov 18 10:28:52 2011
+0000
+++ b/tools/firmware/hvmloader/config.h Fri Nov 18 10:28:53 2011
+0000

tools/firmware/hvmloader/acpi/ssdt_s4.asl new file +1 -1
@@ -27,7 +27,7 @@ struct bios_config {
 
     void (*e820_setup)(void);
 
-    void (*acpi_build_tables)(void);
+    void (*acpi_build_tables)(int, int);
     void (*create_mp_tables)(void);
     void (*create_smbios_tables)(void);
     void (*create_pir_tables)(void);

diff -r d22ef0f60497 -r 66bdcb90560f
tools/firmware/hvmloader/hvmloader.c
--- a/tools/firmware/hvmloader/hvmloader.c Fri Nov 18 10:28:52
2011 +0000
+++ b/tools/firmware/hvmloader/hvmloader.c Fri Nov 18 10:28:53
2011 +0000

tools/firmware/hvmloader/acpi/ssdt_s4.asl new file +9 -2
@@ -516,11 +516,17 @@ int main(void)
             .index = HVM_PARAM_ACPI_IOPORTS_LOCATION,
             .value = 1,
         };
+        int s3_enabled, s4_enabled;
+
+        s3_enabled = !strncmp(xenstore_read("platform/acpi_s3",
 "1"), "1", 1);
+        s4_enabled = !strncmp(xenstore_read("platform/acpi_s4",
 "1"),
+ "1", 1);
 
         if ( bios->acpi_build_tables )
         {
-            printf("Loading ACPI ...\n");
-            bios->acpi_build_tables();
+            printf("Loading ACPI (S3=%s S4=%s) ...\n",
+                   (s3_enabled) ? "ON" : "OFF",
+                   (s4_enabled) ? "ON" : "OFF");
+            bios->acpi_build_tables(s3_enabled, s4_enabled);
         }
 
         acpi_enable_sci();

diff -r d22ef0f60497 -r 66bdcb90560f
tools/firmware/hvmloader/rombios.c
--- a/tools/firmware/hvmloader/rombios.c Fri Nov 18 10:28:52 2011
+0000
+++ b/tools/firmware/hvmloader/rombios.c Fri Nov 18 10:28:53 2011
+0000

tools/firmware/hvmloader/acpi/ssdt_s4.asl new file +3 -1
@@ -112,13 +112,15 @@ static void reset_bios_checksum(void)
     *((uint8_t *)(ROMBIOS_BEGIN + ROMBIOS_MAXOFFSET)) = -checksum;
 }
 
-static void rombios_acpi_build_tables(void)
+static void rombios_acpi_build_tables(int s3_enabled, int
 s4_enabled)
 {
     struct acpi_config config = {
         .dsdt_anycpu = dsdt_anycpu,
         .dsdt_anycpu_len = dsdt_anycpu_len,
         .dsdt_15cpu = dsdt_15cpu,
         .dsdt_15cpu_len = dsdt_15cpu_len,
+        .ssdt_s3_enabled = s3_enabled,
+        .ssdt_s4_enabled = s4_enabled,
     };
 

acpi_build_tables(&config, ACPI_PHYSICAL_ADDRESS); diff -r
d22ef0f60497 -r 66bdcb90560f tools/firmware/hvmloader/seabios.c
--- a/tools/firmware/hvmloader/seabios.c Fri Nov 18 10:28:52 2011
+0000
+++ b/tools/firmware/hvmloader/seabios.c Fri Nov 18 10:28:53 2011
+0000

tools/firmware/hvmloader/acpi/ssdt_s4.asl new file +1 -1
@@ -91,7 +91,7 @@ static void add_table(uint32_t t)
     info->tables_nr++;
 }
 
-static void seabios_acpi_build_tables(void)
+static void seabios_acpi_build_tables(int s3_enabled, int
 s4_enabled)
 {
     uint32_t rsdp = (uint32_t)scratch_alloc(sizeof(struct
acpi_20_rsdp), 0);
     struct acpi_config config = {
tools/firmware/hvmloader/acpi/ssdt_s4.asl new file +2 -0
@@ -99,6 +99,8 @@ static void seabios_acpi_build_tables(vo
         .dsdt_anycpu_len = dsdt_anycpu_qemu_xen_len,
         .dsdt_15cpu = NULL,
         .dsdt_15cpu_len = 0,
+        .ssdt_s3_enabled = s3_enabled,
+        .ssdt_s4_enabled = s4_enabled,
     };
 
     acpi_build_tables(&config, rsdp);

diff -r d22ef0f60497 -r 66bdcb90560f tools/libxl/libxl_create.c

tools/libxl/libxl_create.c +7 -1
@@ -93,6 +93,8 @@ int libxl_init_build_info(libxl_ctx *ctx
         b_info->u.hvm.pae = 1;
         b_info->u.hvm.apic = 1;
         b_info->u.hvm.acpi = 1;
+        b_info->u.hvm.acpi_s3 = 1;
+        b_info->u.hvm.acpi_s4 = 1;
         b_info->u.hvm.nx = 1;
         b_info->u.hvm.viridian = 0;
         b_info->u.hvm.hpet = 1;
@@ -189,9 +191,13 @@ int libxl__domain_build(libxl__gc *gc,
         vments[4] = "start_time";
         vments[5] = libxl__sprintf(gc, "%lu.%02d",
 start_time.tv_sec,(int)start_time.tv_usec/10000);
 
-        localents = libxl__calloc(gc, 3, sizeof(char *));
+        localents = libxl__calloc(gc, 7, sizeof(char *));
         localents[0] = "platform/acpi";
         localents[1] = (info->u.hvm.acpi) ? "1" : "0";
+        localents[2] = "platform/acpi_s3";
+        localents[3] = (info->u.hvm.acpi_s3) ? "1" : "0";
+        localents[4] = "platform/acpi_s4";
+        localents[5] = (info->u.hvm.acpi_s4) ? "1" : "0";
 
         break;

case LIBXL_DOMAIN_TYPE_PV:
diff -r d22ef0f60497 -r 66bdcb90560f tools/libxl/libxl_types.idl

tools/libxl/libxl_types.idl +2 -1
@@ -167,6 +167,8 @@ libxl_domain_build_info = Struct("domain
                                        ("pae", bool),
                                        ("apic", bool),
                                        ("acpi", bool),
+                                       ("acpi_s3", bool),
+                                       ("acpi_s4", bool),
                                        ("nx", bool),
                                        ("viridian", bool),
                                        ("timeoffset", string), diff
-r d22ef0f60497 -r 66bdcb90560f tools/libxl/xl_cmdimpl.c
tools/libxl/xl_cmdimpl.c +4 -0
@@ -683,6 +683,10 @@ static void parse_config_data(const char
             b_info->u.hvm.apic = l;
         if (!xlu_cfg_get_long (config, "acpi", &l))
             b_info->u.hvm.acpi = l;
+        if (!xlu_cfg_get_long (config, "acpi_s3", &l))
+            b_info->u.hvm.acpi_s3 = l;
+        if (!xlu_cfg_get_long (config, "acpi_s4", &l))
+            b_info->u.hvm.acpi_s4 = l;
         if (!xlu_cfg_get_long (config, "nx", &l))
             b_info->u.hvm.nx = l;
         if (!xlu_cfg_get_long (config, "viridian", &l))
#4 lore raw

Re: [PATCH 2 of 2] Add configuration options to selectively disable S3 and S4 ACPI power states

In reply to Paul Durrant

tools/firmware/hvmloader/hvmloader.c Fri Nov 18 10:28:53 2011 +0000 int main(void) · line 522

Quoted 11 lines · Paul Durrant

diff -r d22ef0f60497 -r 66bdcb90560f tools/firmware/hvmloader/hvmloader.c

tools/firmware/hvmloader/hvmloader.c Fri Nov 18 10:28:53 2011 +0000 renamed from tools/firmware/hvmloader/hvmloader.c Fri Nov 18 10:28:52 2011 +0000 +4 -0
@@ -516,11 +516,17 @@ int main(void)
             .index = HVM_PARAM_ACPI_IOPORTS_LOCATION,
             .value = 1,
         };
+        int s3_enabled, s4_enabled;
+
+        s3_enabled = !strncmp(xenstore_read("platform/acpi_s3", "1"), "1", 1);
+        s4_enabled = !strncmp(xenstore_read("platform/acpi_s4", "1"), "1", 1);

Is it not possible to do these in the underlying acpi_build_tables and avoid the need to plumb them right the way through?

tools/firmware/hvmloader/hvmloader.c Fri Nov 18 10:28:53 2011 +0000 int main(void) · line 527

Quoted 7 lines
tools/firmware/hvmloader/hvmloader.c Fri Nov 18 10:28:53 2011 +0000 renamed from tools/firmware/hvmloader/hvmloader.c Fri Nov 18 10:28:52 2011 +0000 +3 -2
         if ( bios->acpi_build_tables )
         {
-            printf("Loading ACPI ...\n");
-            bios->acpi_build_tables();
+            printf("Loading ACPI (S3=%s S4=%s) ...\n",
+                   (s3_enabled) ? "ON" : "OFF",
+                   (s4_enabled) ? "ON" : "OFF");

If possible this printf could also be pushed down so you can continue to print the config info.

tools/firmware/hvmloader/hvmloader.c Fri Nov 18 10:28:53 2011 +0000 int main(void) · line 531

Quoted 4 lines
tools/firmware/hvmloader/hvmloader.c Fri Nov 18 10:28:53 2011 +0000 renamed from tools/firmware/hvmloader/hvmloader.c Fri Nov 18 10:28:52 2011 +0000 +1 -0
+            bios->acpi_build_tables(s3_enabled, s4_enabled);
         }
 
         acpi_enable_sci();

Ian.

#5 lore raw

RE: [PATCH 2 of 2] Add configuration options to selectively disable S3 and S4 ACPI power states

Quoted 23 lines

-----Original Message-----
From: Ian Campbell
Sent: 18 November 2011 10:41
To: Paul Durrant
Cc: [email protected]
Subject: Re: [Xen-devel] [PATCH 2 of 2] Add configuration options to selectively disable S3 and S4 ACPI power states

Quoted 1 line · Paul Durrant

diff -r d22ef0f60497 -r 66bdcb90560f

tools/firmware/hvmloader/hvmloader.c

Quoted 1 line

--- a/tools/firmware/hvmloader/hvmloader.c Fri Nov 18

10:28:52 2011 +0000

Quoted 1 line

+++ b/tools/firmware/hvmloader/hvmloader.c Fri Nov 18

10:28:53 2011 +0000

tools/firmware/hvmloader/hvmloader.c int main(void) · line 521

Quoted 7 lines
tools/firmware/hvmloader/hvmloader.c +3 -0
@@ -516,11 +516,17 @@ int main(void)
             .index = HVM_PARAM_ACPI_IOPORTS_LOCATION,
             .value = 1,
         };
+        int s3_enabled, s4_enabled;
+
+        s3_enabled = !strncmp(xenstore_read("platform/acpi_s3",

"1"), "1", 1);

Quoted 7 lines

Review int main(void) · line 522

Quoted 1 line
(quoted diff) +1 -0
+        s4_enabled = !strncmp(xenstore_read("platform/acpi_s4",

"1"),

Review int main(void) · line 523

Quoted 1 line
(quoted diff) +1 -0
+ "1", 1);

Is it not possible to do these in the underlying acpi_build_tables and avoid the need to plumb them right the way through?

I guess that would be possible. It just seemed logical to group the acpi config xenstore reads close together. If we're happy to distribute use of the xenstore client code to all corners of the source then I can certainly do that.

Quoted 11 lines

tools/firmware/hvmloader/hvmloader.c int main(void) · line 528

Quoted 7 lines
tools/firmware/hvmloader/hvmloader.c +3 -2
         if ( bios->acpi_build_tables )
         {
-            printf("Loading ACPI ...\n");
-            bios->acpi_build_tables();
+            printf("Loading ACPI (S3=%s S4=%s) ...\n",
+                   (s3_enabled) ? "ON" : "OFF",
+                   (s4_enabled) ? "ON" : "OFF");

If possible this printf could also be pushed down so you can continue to print the config info.

Well, if the xenstore reads are pushed down then I'd clearly need to do that too :-)

Quoted 7 lines

tools/firmware/hvmloader/hvmloader.c int main(void) · line 532

Quoted 4 lines
tools/firmware/hvmloader/hvmloader.c +1 -0
+            bios->acpi_build_tables(s3_enabled, s4_enabled);
         }
 
         acpi_enable_sci();

Ian.

Paul

_______________________________________________
Xen-devel mailing list
[email protected]
http://lists.xensource.com/xen-devel

#6 lore raw

RE: [PATCH 2 of 2] Add configuration options to selectively disable S3 and S4 ACPI power states

Quoted 27 lines · Paul Durrant
Quoted 27 lines

-----Original Message-----
From: Ian Campbell
Sent: 18 November 2011 10:41
To: Paul Durrant
Cc: [email protected]
Subject: Re: [Xen-devel] [PATCH 2 of 2] Add configuration options to selectively disable S3 and S4 ACPI power states

Quoted 1 line · Paul Durrant

diff -r d22ef0f60497 -r 66bdcb90560f

tools/firmware/hvmloader/hvmloader.c

Quoted 1 line

--- a/tools/firmware/hvmloader/hvmloader.c Fri Nov 18

10:28:52 2011 +0000

Quoted 1 line

+++ b/tools/firmware/hvmloader/hvmloader.c Fri Nov 18

10:28:53 2011 +0000

tools/firmware/hvmloader/hvmloader.c int main(void) · line 521

Quoted 7 lines
tools/firmware/hvmloader/hvmloader.c +3 -0
@@ -516,11 +516,17 @@ int main(void)
             .index = HVM_PARAM_ACPI_IOPORTS_LOCATION,
             .value = 1,
         };
+        int s3_enabled, s4_enabled;
+
+        s3_enabled = !strncmp(xenstore_read("platform/acpi_s3",

"1"), "1", 1);

Review int main(void) · line 522

Quoted 1 line
(quoted diff) +1 -0
+        s4_enabled = !strncmp(xenstore_read("platform/acpi_s4",

"1"),

Quoted 1 line
(quoted diff) +1 -0
+ "1", 1);
Quoted 8 lines
Quoted 3 lines

Is it not possible to do these in the underlying acpi_build_tables and avoid the need to plumb them right the way through?

I guess that would be possible. It just seemed logical to group the acpi config xenstore reads close together. If we're happy to distribute use of the xenstore client code to all corners of the source then I can certainly do that.

FWIW I think that's ok.

if we wanted to keep them together we could push the acpi check itself down too and just return without doing anything in that case. I don't think it's worth it though...

Quoted 9 lines
Quoted 9 lines
Quoted 8 lines
tools/firmware/hvmloader/hvmloader.c +3 -2
         if ( bios->acpi_build_tables )
         {
-            printf("Loading ACPI ...\n");
-            bios->acpi_build_tables();
+            printf("Loading ACPI (S3=%s S4=%s) ...\n",
+                   (s3_enabled) ? "ON" : "OFF",
+                   (s4_enabled) ? "ON" : "OFF");
Quoted 5 lines
Quoted 3 lines

If possible this printf could also be pushed down so you can continue to print the config info.

Well, if the xenstore reads are pushed down then I'd clearly need to do that too :-)

That what I was trying (and failing) to say...

Quoted 10 lines
Quoted 8 lines

tools/firmware/hvmloader/hvmloader.c int main(void) · line 532

Quoted 5 lines
tools/firmware/hvmloader/hvmloader.c +1 -0
+            bios->acpi_build_tables(s3_enabled, s4_enabled);
         }
 
         acpi_enable_sci();

Ian.

Paul

#7 lore raw

Re: [PATCH 2 of 2] Add configuration options to selectively disable S3 and S4 ACPI power states

In reply to Paul Durrant
Quoted 27 lines · Paul Durrant
Quoted 27 lines

-----Original Message-----
From: Ian Campbell
Sent: 18 November 2011 10:41
To: Paul Durrant
Cc: [email protected]
Subject: Re: [Xen-devel] [PATCH 2 of 2] Add configuration options to selectively disable S3 and S4 ACPI power states

Quoted 1 line · Paul Durrant

diff -r d22ef0f60497 -r 66bdcb90560f

tools/firmware/hvmloader/hvmloader.c

Quoted 1 line

--- a/tools/firmware/hvmloader/hvmloader.c Fri Nov 18

10:28:52 2011 +0000

Quoted 1 line

+++ b/tools/firmware/hvmloader/hvmloader.c Fri Nov 18

10:28:53 2011 +0000

tools/firmware/hvmloader/hvmloader.c int main(void) · line 521

Quoted 7 lines
tools/firmware/hvmloader/hvmloader.c +3 -0
@@ -516,11 +516,17 @@ int main(void)
             .index = HVM_PARAM_ACPI_IOPORTS_LOCATION,
             .value = 1,
         };
+        int s3_enabled, s4_enabled;
+
+        s3_enabled = !strncmp(xenstore_read("platform/acpi_s3",

"1"), "1", 1);

Review int main(void) · line 522

Quoted 1 line
(quoted diff) +1 -0
+        s4_enabled = !strncmp(xenstore_read("platform/acpi_s4",

"1"),

Quoted 1 line
(quoted diff) +1 -0
+ "1", 1);
Quoted 8 lines
Quoted 3 lines

Is it not possible to do these in the underlying acpi_build_tables and avoid the need to plumb them right the way through?

I guess that would be possible. It just seemed logical to group the acpi config xenstore reads close together. If we're happy to distribute use of the xenstore client code to all corners of the source then I can certainly do that.

I think distributing the xenstore reads is fine. I will apply the final patch series that you sent, that includes this change.

-- Keir

Quoted 28 lines
Quoted 11 lines

tools/firmware/hvmloader/hvmloader.c int main(void) · line 528

Quoted 7 lines
tools/firmware/hvmloader/hvmloader.c +3 -2
         if ( bios->acpi_build_tables )
         {
-            printf("Loading ACPI ...\n");
-            bios->acpi_build_tables();
+            printf("Loading ACPI (S3=%s S4=%s) ...\n",
+                   (s3_enabled) ? "ON" : "OFF",
+                   (s4_enabled) ? "ON" : "OFF");

If possible this printf could also be pushed down so you can continue to print the config info.

Well, if the xenstore reads are pushed down then I'd clearly need to do that too :-)

Quoted 7 lines

tools/firmware/hvmloader/hvmloader.c int main(void) · line 532

Quoted 4 lines
tools/firmware/hvmloader/hvmloader.c +1 -0
+            bios->acpi_build_tables(s3_enabled, s4_enabled);
         }
 
         acpi_enable_sci();

Ian.

Paul
_______________________________________________
Xen-devel mailing list
[email protected]
http://lists.xensource.com/xen-devel

#8 lore raw
In reply to Paul Durrant
Quoted 11 lines · Paul Durrant

This patch series adds the ability to selectively disable the S3 and S4 ACPI power states for HVM guests.

Since there is a general move towards retiring the hvm_info_table structure, the first patch moves the acpi_enabled flag out of the hvm_info_table and into a xenstore key (platform/acpi).
The second patch then introduces the acpi_s3 and acpi_s4 configuration parameters to the xl config file (default=1). These result in population of new platform/acpi_s3 and platform/acpi_s4 xenstore keys. hvmloader then reads these keys to determine whether or not to include SSDTs containing the _S3 and _S4 packages respectively.

Way nicer. I'll check these in.

-- Keir

Quoted 5 lines

_______________________________________________
Xen-devel mailing list
[email protected]
http://lists.xensource.com/xen-devel