qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH V9 16/16] acpi-piix4: Add Xen hypercall for slee


From: Isaku Yamahata
Subject: Re: [Qemu-devel] [PATCH V9 16/16] acpi-piix4: Add Xen hypercall for sleep state.
Date: Wed, 26 Jan 2011 11:49:24 +0900
User-agent: Mutt/1.5.19 (2009-01-05)

On Tue, Jan 25, 2011 at 02:29:20PM +0000, address@hidden wrote:
> From: Anthony PERARD <address@hidden>
> 
> Signed-off-by: Anthony PERARD <address@hidden>
> ---
>  hw/acpi_piix4.c |    4 ++++
>  hw/xen.h        |    2 ++
>  xen-all.c       |    7 +++++++
>  xen-stub.c      |    4 ++++
>  4 files changed, 17 insertions(+), 0 deletions(-)
> 
> diff --git a/hw/acpi_piix4.c b/hw/acpi_piix4.c
> index 5bbc2b5..ea94bf9 100644
> --- a/hw/acpi_piix4.c
> +++ b/hw/acpi_piix4.c
> @@ -23,6 +23,7 @@
>  #include "acpi.h"
>  #include "sysemu.h"
>  #include "range.h"
> +#include "xen.h"
>  
>  //#define DEBUG
>  
> @@ -181,6 +182,9 @@ static void pm_ioport_write(IORange *ioport, uint64_t 
> addr, unsigned width,
>                      if (s->cmos_s3) {
>                          qemu_irq_raise(s->cmos_s3);
>                      }
> +                    if (xen_enabled()) {
> +                        xen_set_hvm_sleep_state();
> +                    }
>                  default:
>                      break;
>                  }

Why not utilize cmos_s3 callback?
Something like

-       cmos_s3 = qemu_allocate_irqs(pc_cmos_set_s3_resume, rtc_state, 1);
+       cmos_s3 = qemu_allocate_irqs(xen_cmos_set_s3_resume, rtc_state, 1);
        smbus = piix4_pm_init(pci_bus, piix3_devfn + 3, 0xb100,
                              isa_reserve_irq(9), *cmos_s3, *smi_irq,
                              kvm_enabled());


xen_cmos_set_s3_resume()
        pc_cmos_set_s3_resume()
        xen_set_hvm_sleep_state()


thanks,

> diff --git a/hw/xen.h b/hw/xen.h
> index dd3fb68..8920550 100644
> --- a/hw/xen.h
> +++ b/hw/xen.h
> @@ -44,6 +44,8 @@ int xen_pci_slot_get_pirq(PCIDevice *pci_dev, int irq_num);
>  void xen_piix3_set_irq(void *opaque, int irq_num, int level);
>  void xen_piix_pci_write_config_client(uint32_t address, uint32_t val, int 
> len);
>  
> +void xen_set_hvm_sleep_state(void);
> +
>  int xen_init(int smp_cpus);
>  
>  #if defined(NEED_CPU_H) && !defined(CONFIG_USER_ONLY)
> diff --git a/xen-all.c b/xen-all.c
> index c2d37d6..86ebfcb 100644
> --- a/xen-all.c
> +++ b/xen-all.c
> @@ -464,6 +464,13 @@ static void xen_main_loop_prepare(XenIOState *state)
>  }
>  
>  
> +/* ACPI */
> +
> +void xen_set_hvm_sleep_state(void)
> +{
> +    xc_set_hvm_param(xen_xc, xen_domid, HVM_PARAM_ACPI_S_STATE, 3);
> +}
> +
>  /* Initialise Xen */
>  
>  static void xen_vm_change_state_handler(void *opaque, int running, int 
> reason)
> diff --git a/xen-stub.c b/xen-stub.c
> index c9f477d..d22f475 100644
> --- a/xen-stub.c
> +++ b/xen-stub.c
> @@ -28,6 +28,10 @@ void xen_ram_alloc(ram_addr_t ram_addr, ram_addr_t size)
>  {
>  }
>  
> +void xen_set_hvm_sleep_state(void)
> +{
> +}
> +
>  int xen_init(int smp_cpus)
>  {
>      return -ENOSYS;
> -- 
> 1.7.1
> 
> 

-- 
yamahata



reply via email to

[Prev in Thread] Current Thread [Next in Thread]