Re: [Qemu-devel] [PATCH v4 03/17] spapr_rtas: add get/set-power-level RTAS interfaces

2015-02-09 Thread Nathan Fontenot
On 01/27/2015 06:42 PM, Michael Roth wrote:
 Quoting Tyrel Datwyler (2015-01-27 16:05:52)
 On 01/27/2015 01:36 PM, Michael Roth wrote:
 Quoting David Gibson (2015-01-26 23:24:11)
 On Sun, Jan 25, 2015 at 11:21:26PM -0600, Michael Roth wrote:
 Quoting David Gibson (2015-01-16 00:21:55)
 On Tue, Dec 23, 2014 at 06:30:17AM -0600, Michael Roth wrote:
 From: Nathan Fontenot nf...@linux.vnet.ibm.com

 Signed-off-by: Nathan Fontenot nf...@linux.vnet.ibm.com
 Signed-off-by: Michael Roth mdr...@linux.vnet.ibm.com
 ---
  hw/ppc/spapr_rtas.c | 25 +
  1 file changed, 25 insertions(+)

 diff --git a/hw/ppc/spapr_rtas.c b/hw/ppc/spapr_rtas.c
 index 2ec2a8e..a2fb533 100644
 --- a/hw/ppc/spapr_rtas.c
 +++ b/hw/ppc/spapr_rtas.c
 @@ -290,6 +290,27 @@ static void rtas_ibm_os_term(PowerPCCPU *cpu,
  rtas_st(rets, 0, ret);
  }
  
 +static void rtas_set_power_level(PowerPCCPU *cpu, sPAPREnvironment 
 *spapr,
 + uint32_t token, uint32_t nargs,
 + target_ulong args, uint32_t nret,
 + target_ulong rets)
 +{
 +/* we currently only use a single, live insert powerdomain for
 + * hotplugged/dlpar'd resources, so the power is always live/full 
 (100)
 + */

 Even so, you should at least validate the number of args and rets, and
 preferably check that the user isn't attempt to set something for some
 other, non-existent power domain.

 +rtas_st(rets, 0, RTAS_OUT_SUCCESS);
 +rtas_st(rets, 1, 100);
 +}
 +
 +static void rtas_get_power_level(PowerPCCPU *cpu, sPAPREnvironment 
 *spapr,
 +  uint32_t token, uint32_t nargs,
 +  target_ulong args, uint32_t nret,
 +  target_ulong rets)
 +{
 +rtas_st(rets, 0, RTAS_OUT_SUCCESS);
 +rtas_st(rets, 1, 100);
 +}
 +
  static struct rtas_call {
  const char *name;
  spapr_rtas_fn fn;
 @@ -419,6 +440,10 @@ static void core_rtas_register_types(void)
  rtas_ibm_set_system_parameter);
  spapr_rtas_register(RTAS_IBM_OS_TERM, ibm,os-term,
  rtas_ibm_os_term);
 +spapr_rtas_register(RTAS_SET_POWER_LEVEL, set-power-level,
 +rtas_set_power_level);
 +spapr_rtas_register(RTAS_GET_POWER_LEVEL, get-power-level,
 +rtas_get_power_level);
  }
  
  type_init(core_rtas_register_types)

 This code should probably go in spapr_drc.c.  The idea that spapr_rtas
 was just the RTAS dispatch code, and RTAS functions that had no other
 home.  Generally RTAS functions should live with the devices they're
 connected to.

 In this particular case the calls act on a power domain which isn't
 actually modeled in QEMU (we just assume a single live-insertion domain
 which just magically does everything we want), so I think it makes
 sense to leave these here.

 Yeah, fair enough.

 Hmm, looking at it again, set-indicator and get-sensor-state aren't actually
 specific to DR, but might be extended to handle a number of other types of
 sensors in the future (Reset Component, Error Log, and Global Interrupt
 Queue Control may be interesting in this regard).

 So it looks like only configure-connector is specifically for DR. Still
 planning on moving it to spapr_drc_rtas.c, unless you'd prefer not to
 at this point (it'll be lonely for the foreseable future).

 I will point out that configure-connector would be used for
 hibernation/migration if we ever implement it as it is defined by PAPR.
 I know for migration there had been some talk in the past about someday
 doing it the right way.
 
 Interesting. Do you know if calls are still tied to DRCs in this case, or
 is is there something more general like fetching the entire device-tree? I
 didn't see anything in PAPR+ 2.7 outside of the DR use-case where it acts
 on a particular DRC.
 

It does act on a specific DRC. When doing device tree update for 
migration/hibernation
we first call rtas_update_nodes which passes back list containing among other 
things
a drc index for each new node that needs to be added to the device tree.

-Nathan


 -Tyrel



 But for the others it does make sense to tie them with spapr_drc.c, or
 maybe spapr_drc_rtas.c to maintain the encapsulation of DRC state behind
 well-defined accessors.

 Ok.

 -- 
 David Gibson| I'll have my music baroque, and my code
 david AT gibson.dropbear.id.au  | minimalist, thank you.  NOT _the_ _other_
 | _way_ _around_!
 http://www.ozlabs.org/~dgibson




Re: [Qemu-devel] [PATCH v4 03/17] spapr_rtas: add get/set-power-level RTAS interfaces

2015-01-27 Thread Michael Roth
Quoting David Gibson (2015-01-26 23:24:11)
 On Sun, Jan 25, 2015 at 11:21:26PM -0600, Michael Roth wrote:
  Quoting David Gibson (2015-01-16 00:21:55)
   On Tue, Dec 23, 2014 at 06:30:17AM -0600, Michael Roth wrote:
From: Nathan Fontenot nf...@linux.vnet.ibm.com

Signed-off-by: Nathan Fontenot nf...@linux.vnet.ibm.com
Signed-off-by: Michael Roth mdr...@linux.vnet.ibm.com
---
 hw/ppc/spapr_rtas.c | 25 +
 1 file changed, 25 insertions(+)

diff --git a/hw/ppc/spapr_rtas.c b/hw/ppc/spapr_rtas.c
index 2ec2a8e..a2fb533 100644
--- a/hw/ppc/spapr_rtas.c
+++ b/hw/ppc/spapr_rtas.c
@@ -290,6 +290,27 @@ static void rtas_ibm_os_term(PowerPCCPU *cpu,
 rtas_st(rets, 0, ret);
 }
 
+static void rtas_set_power_level(PowerPCCPU *cpu, sPAPREnvironment 
*spapr,
+ uint32_t token, uint32_t nargs,
+ target_ulong args, uint32_t nret,
+ target_ulong rets)
+{
+/* we currently only use a single, live insert powerdomain for
+ * hotplugged/dlpar'd resources, so the power is always live/full 
(100)
+ */
   
   Even so, you should at least validate the number of args and rets, and
   preferably check that the user isn't attempt to set something for some
   other, non-existent power domain.
   
+rtas_st(rets, 0, RTAS_OUT_SUCCESS);
+rtas_st(rets, 1, 100);
+}
+
+static void rtas_get_power_level(PowerPCCPU *cpu, sPAPREnvironment 
*spapr,
+  uint32_t token, uint32_t nargs,
+  target_ulong args, uint32_t nret,
+  target_ulong rets)
+{
+rtas_st(rets, 0, RTAS_OUT_SUCCESS);
+rtas_st(rets, 1, 100);
+}
+
 static struct rtas_call {
 const char *name;
 spapr_rtas_fn fn;
@@ -419,6 +440,10 @@ static void core_rtas_register_types(void)
 rtas_ibm_set_system_parameter);
 spapr_rtas_register(RTAS_IBM_OS_TERM, ibm,os-term,
 rtas_ibm_os_term);
+spapr_rtas_register(RTAS_SET_POWER_LEVEL, set-power-level,
+rtas_set_power_level);
+spapr_rtas_register(RTAS_GET_POWER_LEVEL, get-power-level,
+rtas_get_power_level);
 }
 
 type_init(core_rtas_register_types)
   
   This code should probably go in spapr_drc.c.  The idea that spapr_rtas
   was just the RTAS dispatch code, and RTAS functions that had no other
   home.  Generally RTAS functions should live with the devices they're
   connected to.
  
  In this particular case the calls act on a power domain which isn't
  actually modeled in QEMU (we just assume a single live-insertion domain
  which just magically does everything we want), so I think it makes
  sense to leave these here.
 
 Yeah, fair enough.

Hmm, looking at it again, set-indicator and get-sensor-state aren't actually
specific to DR, but might be extended to handle a number of other types of
sensors in the future (Reset Component, Error Log, and Global Interrupt
Queue Control may be interesting in this regard).

So it looks like only configure-connector is specifically for DR. Still
planning on moving it to spapr_drc_rtas.c, unless you'd prefer not to
at this point (it'll be lonely for the foreseable future).

 
  But for the others it does make sense to tie them with spapr_drc.c, or
  maybe spapr_drc_rtas.c to maintain the encapsulation of DRC state behind
  well-defined accessors.
 
 Ok.
 
 -- 
 David Gibson| I'll have my music baroque, and my code
 david AT gibson.dropbear.id.au  | minimalist, thank you.  NOT _the_ _other_
 | _way_ _around_!
 http://www.ozlabs.org/~dgibson




Re: [Qemu-devel] [PATCH v4 03/17] spapr_rtas: add get/set-power-level RTAS interfaces

2015-01-27 Thread Tyrel Datwyler
On 01/27/2015 01:36 PM, Michael Roth wrote:
 Quoting David Gibson (2015-01-26 23:24:11)
 On Sun, Jan 25, 2015 at 11:21:26PM -0600, Michael Roth wrote:
 Quoting David Gibson (2015-01-16 00:21:55)
 On Tue, Dec 23, 2014 at 06:30:17AM -0600, Michael Roth wrote:
 From: Nathan Fontenot nf...@linux.vnet.ibm.com

 Signed-off-by: Nathan Fontenot nf...@linux.vnet.ibm.com
 Signed-off-by: Michael Roth mdr...@linux.vnet.ibm.com
 ---
  hw/ppc/spapr_rtas.c | 25 +
  1 file changed, 25 insertions(+)

 diff --git a/hw/ppc/spapr_rtas.c b/hw/ppc/spapr_rtas.c
 index 2ec2a8e..a2fb533 100644
 --- a/hw/ppc/spapr_rtas.c
 +++ b/hw/ppc/spapr_rtas.c
 @@ -290,6 +290,27 @@ static void rtas_ibm_os_term(PowerPCCPU *cpu,
  rtas_st(rets, 0, ret);
  }
  
 +static void rtas_set_power_level(PowerPCCPU *cpu, sPAPREnvironment 
 *spapr,
 + uint32_t token, uint32_t nargs,
 + target_ulong args, uint32_t nret,
 + target_ulong rets)
 +{
 +/* we currently only use a single, live insert powerdomain for
 + * hotplugged/dlpar'd resources, so the power is always live/full 
 (100)
 + */

 Even so, you should at least validate the number of args and rets, and
 preferably check that the user isn't attempt to set something for some
 other, non-existent power domain.

 +rtas_st(rets, 0, RTAS_OUT_SUCCESS);
 +rtas_st(rets, 1, 100);
 +}
 +
 +static void rtas_get_power_level(PowerPCCPU *cpu, sPAPREnvironment 
 *spapr,
 +  uint32_t token, uint32_t nargs,
 +  target_ulong args, uint32_t nret,
 +  target_ulong rets)
 +{
 +rtas_st(rets, 0, RTAS_OUT_SUCCESS);
 +rtas_st(rets, 1, 100);
 +}
 +
  static struct rtas_call {
  const char *name;
  spapr_rtas_fn fn;
 @@ -419,6 +440,10 @@ static void core_rtas_register_types(void)
  rtas_ibm_set_system_parameter);
  spapr_rtas_register(RTAS_IBM_OS_TERM, ibm,os-term,
  rtas_ibm_os_term);
 +spapr_rtas_register(RTAS_SET_POWER_LEVEL, set-power-level,
 +rtas_set_power_level);
 +spapr_rtas_register(RTAS_GET_POWER_LEVEL, get-power-level,
 +rtas_get_power_level);
  }
  
  type_init(core_rtas_register_types)

 This code should probably go in spapr_drc.c.  The idea that spapr_rtas
 was just the RTAS dispatch code, and RTAS functions that had no other
 home.  Generally RTAS functions should live with the devices they're
 connected to.

 In this particular case the calls act on a power domain which isn't
 actually modeled in QEMU (we just assume a single live-insertion domain
 which just magically does everything we want), so I think it makes
 sense to leave these here.

 Yeah, fair enough.
 
 Hmm, looking at it again, set-indicator and get-sensor-state aren't actually
 specific to DR, but might be extended to handle a number of other types of
 sensors in the future (Reset Component, Error Log, and Global Interrupt
 Queue Control may be interesting in this regard).
 
 So it looks like only configure-connector is specifically for DR. Still
 planning on moving it to spapr_drc_rtas.c, unless you'd prefer not to
 at this point (it'll be lonely for the foreseable future).

I will point out that configure-connector would be used for
hibernation/migration if we ever implement it as it is defined by PAPR.
I know for migration there had been some talk in the past about someday
doing it the right way.

-Tyrel

 

 But for the others it does make sense to tie them with spapr_drc.c, or
 maybe spapr_drc_rtas.c to maintain the encapsulation of DRC state behind
 well-defined accessors.

 Ok.

 -- 
 David Gibson| I'll have my music baroque, and my code
 david AT gibson.dropbear.id.au  | minimalist, thank you.  NOT _the_ _other_
 | _way_ _around_!
 http://www.ozlabs.org/~dgibson




Re: [Qemu-devel] [PATCH v4 03/17] spapr_rtas: add get/set-power-level RTAS interfaces

2015-01-26 Thread Michael Roth
Quoting David Gibson (2015-01-16 00:21:55)
 On Tue, Dec 23, 2014 at 06:30:17AM -0600, Michael Roth wrote:
  From: Nathan Fontenot nf...@linux.vnet.ibm.com
  
  Signed-off-by: Nathan Fontenot nf...@linux.vnet.ibm.com
  Signed-off-by: Michael Roth mdr...@linux.vnet.ibm.com
  ---
   hw/ppc/spapr_rtas.c | 25 +
   1 file changed, 25 insertions(+)
  
  diff --git a/hw/ppc/spapr_rtas.c b/hw/ppc/spapr_rtas.c
  index 2ec2a8e..a2fb533 100644
  --- a/hw/ppc/spapr_rtas.c
  +++ b/hw/ppc/spapr_rtas.c
  @@ -290,6 +290,27 @@ static void rtas_ibm_os_term(PowerPCCPU *cpu,
   rtas_st(rets, 0, ret);
   }
   
  +static void rtas_set_power_level(PowerPCCPU *cpu, sPAPREnvironment *spapr,
  + uint32_t token, uint32_t nargs,
  + target_ulong args, uint32_t nret,
  + target_ulong rets)
  +{
  +/* we currently only use a single, live insert powerdomain for
  + * hotplugged/dlpar'd resources, so the power is always live/full (100)
  + */
 
 Even so, you should at least validate the number of args and rets, and
 preferably check that the user isn't attempt to set something for some
 other, non-existent power domain.
 
  +rtas_st(rets, 0, RTAS_OUT_SUCCESS);
  +rtas_st(rets, 1, 100);
  +}
  +
  +static void rtas_get_power_level(PowerPCCPU *cpu, sPAPREnvironment *spapr,
  +  uint32_t token, uint32_t nargs,
  +  target_ulong args, uint32_t nret,
  +  target_ulong rets)
  +{
  +rtas_st(rets, 0, RTAS_OUT_SUCCESS);
  +rtas_st(rets, 1, 100);
  +}
  +
   static struct rtas_call {
   const char *name;
   spapr_rtas_fn fn;
  @@ -419,6 +440,10 @@ static void core_rtas_register_types(void)
   rtas_ibm_set_system_parameter);
   spapr_rtas_register(RTAS_IBM_OS_TERM, ibm,os-term,
   rtas_ibm_os_term);
  +spapr_rtas_register(RTAS_SET_POWER_LEVEL, set-power-level,
  +rtas_set_power_level);
  +spapr_rtas_register(RTAS_GET_POWER_LEVEL, get-power-level,
  +rtas_get_power_level);
   }
   
   type_init(core_rtas_register_types)
 
 This code should probably go in spapr_drc.c.  The idea that spapr_rtas
 was just the RTAS dispatch code, and RTAS functions that had no other
 home.  Generally RTAS functions should live with the devices they're
 connected to.

In this particular case the calls act on a power domain which isn't
actually modeled in QEMU (we just assume a single live-insertion domain
which just magically does everything we want), so I think it makes
sense to leave these here.

But for the others it does make sense to tie them with spapr_drc.c, or
maybe spapr_drc_rtas.c to maintain the encapsulation of DRC state behind
well-defined accessors.

 
 -- 
 David Gibson| I'll have my music baroque, and my code
 david AT gibson.dropbear.id.au  | minimalist, thank you.  NOT _the_ _other_
 | _way_ _around_!
 http://www.ozlabs.org/~dgibson




Re: [Qemu-devel] [PATCH v4 03/17] spapr_rtas: add get/set-power-level RTAS interfaces

2015-01-26 Thread David Gibson
On Sun, Jan 25, 2015 at 11:21:26PM -0600, Michael Roth wrote:
 Quoting David Gibson (2015-01-16 00:21:55)
  On Tue, Dec 23, 2014 at 06:30:17AM -0600, Michael Roth wrote:
   From: Nathan Fontenot nf...@linux.vnet.ibm.com
   
   Signed-off-by: Nathan Fontenot nf...@linux.vnet.ibm.com
   Signed-off-by: Michael Roth mdr...@linux.vnet.ibm.com
   ---
hw/ppc/spapr_rtas.c | 25 +
1 file changed, 25 insertions(+)
   
   diff --git a/hw/ppc/spapr_rtas.c b/hw/ppc/spapr_rtas.c
   index 2ec2a8e..a2fb533 100644
   --- a/hw/ppc/spapr_rtas.c
   +++ b/hw/ppc/spapr_rtas.c
   @@ -290,6 +290,27 @@ static void rtas_ibm_os_term(PowerPCCPU *cpu,
rtas_st(rets, 0, ret);
}

   +static void rtas_set_power_level(PowerPCCPU *cpu, sPAPREnvironment 
   *spapr,
   + uint32_t token, uint32_t nargs,
   + target_ulong args, uint32_t nret,
   + target_ulong rets)
   +{
   +/* we currently only use a single, live insert powerdomain for
   + * hotplugged/dlpar'd resources, so the power is always live/full 
   (100)
   + */
  
  Even so, you should at least validate the number of args and rets, and
  preferably check that the user isn't attempt to set something for some
  other, non-existent power domain.
  
   +rtas_st(rets, 0, RTAS_OUT_SUCCESS);
   +rtas_st(rets, 1, 100);
   +}
   +
   +static void rtas_get_power_level(PowerPCCPU *cpu, sPAPREnvironment 
   *spapr,
   +  uint32_t token, uint32_t nargs,
   +  target_ulong args, uint32_t nret,
   +  target_ulong rets)
   +{
   +rtas_st(rets, 0, RTAS_OUT_SUCCESS);
   +rtas_st(rets, 1, 100);
   +}
   +
static struct rtas_call {
const char *name;
spapr_rtas_fn fn;
   @@ -419,6 +440,10 @@ static void core_rtas_register_types(void)
rtas_ibm_set_system_parameter);
spapr_rtas_register(RTAS_IBM_OS_TERM, ibm,os-term,
rtas_ibm_os_term);
   +spapr_rtas_register(RTAS_SET_POWER_LEVEL, set-power-level,
   +rtas_set_power_level);
   +spapr_rtas_register(RTAS_GET_POWER_LEVEL, get-power-level,
   +rtas_get_power_level);
}

type_init(core_rtas_register_types)
  
  This code should probably go in spapr_drc.c.  The idea that spapr_rtas
  was just the RTAS dispatch code, and RTAS functions that had no other
  home.  Generally RTAS functions should live with the devices they're
  connected to.
 
 In this particular case the calls act on a power domain which isn't
 actually modeled in QEMU (we just assume a single live-insertion domain
 which just magically does everything we want), so I think it makes
 sense to leave these here.

Yeah, fair enough.

 But for the others it does make sense to tie them with spapr_drc.c, or
 maybe spapr_drc_rtas.c to maintain the encapsulation of DRC state behind
 well-defined accessors.

Ok.

-- 
David Gibson| I'll have my music baroque, and my code
david AT gibson.dropbear.id.au  | minimalist, thank you.  NOT _the_ _other_
| _way_ _around_!
http://www.ozlabs.org/~dgibson


pgpeJqJaNh0nI.pgp
Description: PGP signature


Re: [Qemu-devel] [PATCH v4 03/17] spapr_rtas: add get/set-power-level RTAS interfaces

2015-01-15 Thread David Gibson
On Tue, Dec 23, 2014 at 06:30:17AM -0600, Michael Roth wrote:
 From: Nathan Fontenot nf...@linux.vnet.ibm.com
 
 Signed-off-by: Nathan Fontenot nf...@linux.vnet.ibm.com
 Signed-off-by: Michael Roth mdr...@linux.vnet.ibm.com
 ---
  hw/ppc/spapr_rtas.c | 25 +
  1 file changed, 25 insertions(+)
 
 diff --git a/hw/ppc/spapr_rtas.c b/hw/ppc/spapr_rtas.c
 index 2ec2a8e..a2fb533 100644
 --- a/hw/ppc/spapr_rtas.c
 +++ b/hw/ppc/spapr_rtas.c
 @@ -290,6 +290,27 @@ static void rtas_ibm_os_term(PowerPCCPU *cpu,
  rtas_st(rets, 0, ret);
  }
  
 +static void rtas_set_power_level(PowerPCCPU *cpu, sPAPREnvironment *spapr,
 + uint32_t token, uint32_t nargs,
 + target_ulong args, uint32_t nret,
 + target_ulong rets)
 +{
 +/* we currently only use a single, live insert powerdomain for
 + * hotplugged/dlpar'd resources, so the power is always live/full (100)
 + */

Even so, you should at least validate the number of args and rets, and
preferably check that the user isn't attempt to set something for some
other, non-existent power domain.

 +rtas_st(rets, 0, RTAS_OUT_SUCCESS);
 +rtas_st(rets, 1, 100);
 +}
 +
 +static void rtas_get_power_level(PowerPCCPU *cpu, sPAPREnvironment *spapr,
 +  uint32_t token, uint32_t nargs,
 +  target_ulong args, uint32_t nret,
 +  target_ulong rets)
 +{
 +rtas_st(rets, 0, RTAS_OUT_SUCCESS);
 +rtas_st(rets, 1, 100);
 +}
 +
  static struct rtas_call {
  const char *name;
  spapr_rtas_fn fn;
 @@ -419,6 +440,10 @@ static void core_rtas_register_types(void)
  rtas_ibm_set_system_parameter);
  spapr_rtas_register(RTAS_IBM_OS_TERM, ibm,os-term,
  rtas_ibm_os_term);
 +spapr_rtas_register(RTAS_SET_POWER_LEVEL, set-power-level,
 +rtas_set_power_level);
 +spapr_rtas_register(RTAS_GET_POWER_LEVEL, get-power-level,
 +rtas_get_power_level);
  }
  
  type_init(core_rtas_register_types)

This code should probably go in spapr_drc.c.  The idea that spapr_rtas
was just the RTAS dispatch code, and RTAS functions that had no other
home.  Generally RTAS functions should live with the devices they're
connected to.

-- 
David Gibson| I'll have my music baroque, and my code
david AT gibson.dropbear.id.au  | minimalist, thank you.  NOT _the_ _other_
| _way_ _around_!
http://www.ozlabs.org/~dgibson


pgpn6a6hXnB0r.pgp
Description: PGP signature


[Qemu-devel] [PATCH v4 03/17] spapr_rtas: add get/set-power-level RTAS interfaces

2014-12-23 Thread Michael Roth
From: Nathan Fontenot nf...@linux.vnet.ibm.com

Signed-off-by: Nathan Fontenot nf...@linux.vnet.ibm.com
Signed-off-by: Michael Roth mdr...@linux.vnet.ibm.com
---
 hw/ppc/spapr_rtas.c | 25 +
 1 file changed, 25 insertions(+)

diff --git a/hw/ppc/spapr_rtas.c b/hw/ppc/spapr_rtas.c
index 2ec2a8e..a2fb533 100644
--- a/hw/ppc/spapr_rtas.c
+++ b/hw/ppc/spapr_rtas.c
@@ -290,6 +290,27 @@ static void rtas_ibm_os_term(PowerPCCPU *cpu,
 rtas_st(rets, 0, ret);
 }
 
+static void rtas_set_power_level(PowerPCCPU *cpu, sPAPREnvironment *spapr,
+ uint32_t token, uint32_t nargs,
+ target_ulong args, uint32_t nret,
+ target_ulong rets)
+{
+/* we currently only use a single, live insert powerdomain for
+ * hotplugged/dlpar'd resources, so the power is always live/full (100)
+ */
+rtas_st(rets, 0, RTAS_OUT_SUCCESS);
+rtas_st(rets, 1, 100);
+}
+
+static void rtas_get_power_level(PowerPCCPU *cpu, sPAPREnvironment *spapr,
+  uint32_t token, uint32_t nargs,
+  target_ulong args, uint32_t nret,
+  target_ulong rets)
+{
+rtas_st(rets, 0, RTAS_OUT_SUCCESS);
+rtas_st(rets, 1, 100);
+}
+
 static struct rtas_call {
 const char *name;
 spapr_rtas_fn fn;
@@ -419,6 +440,10 @@ static void core_rtas_register_types(void)
 rtas_ibm_set_system_parameter);
 spapr_rtas_register(RTAS_IBM_OS_TERM, ibm,os-term,
 rtas_ibm_os_term);
+spapr_rtas_register(RTAS_SET_POWER_LEVEL, set-power-level,
+rtas_set_power_level);
+spapr_rtas_register(RTAS_GET_POWER_LEVEL, get-power-level,
+rtas_get_power_level);
 }
 
 type_init(core_rtas_register_types)
-- 
1.9.1