aboutsummaryrefslogtreecommitdiffstats
path: root/xen/common/sysctl.c
diff options
context:
space:
mode:
authorKeir Fraser <keir.fraser@citrix.com>2008-12-10 13:27:41 +0000
committerKeir Fraser <keir.fraser@citrix.com>2008-12-10 13:27:41 +0000
commit7542c4ff00f26a91840afb3336058e8782399365 (patch)
treeb14eaad4185402e0e6f3070a61a023919054dd4c /xen/common/sysctl.c
parent630b6713472007f100b40bf100246ca169b23a14 (diff)
downloadxen-7542c4ff00f26a91840afb3336058e8782399365.tar.gz
xen-7542c4ff00f26a91840afb3336058e8782399365.tar.bz2
xen-7542c4ff00f26a91840afb3336058e8782399365.zip
Add user PM control interface
Signed-off-by: Liu, Jinsong <jinsong.liu@intel.com>
Diffstat (limited to 'xen/common/sysctl.c')
-rw-r--r--xen/common/sysctl.c16
1 files changed, 16 insertions, 0 deletions
diff --git a/xen/common/sysctl.c b/xen/common/sysctl.c
index c3f1b42716..9350cfe3c2 100644
--- a/xen/common/sysctl.c
+++ b/xen/common/sysctl.c
@@ -26,6 +26,7 @@
#include <xsm/xsm.h>
extern int do_get_pm_info(struct xen_sysctl_get_pmstat *op);
+extern int do_pm_op(struct xen_sysctl_pm_op *op);
extern long arch_do_sysctl(
struct xen_sysctl *op, XEN_GUEST_HANDLE(xen_sysctl_t) u_sysctl);
@@ -224,6 +225,21 @@ long do_sysctl(XEN_GUEST_HANDLE(xen_sysctl_t) u_sysctl)
}
break;
+ case XEN_SYSCTL_pm_op:
+ {
+ ret = do_pm_op(&op->u.pm_op);
+ if ( ret && (ret != -EAGAIN) )
+ break;
+
+ if ( op->u.pm_op.cmd == GET_CPUFREQ_PARA )
+ if ( copy_to_guest(u_sysctl, op, 1) )
+ {
+ ret = -EFAULT;
+ break;
+ }
+ }
+ break;
+
default:
ret = arch_do_sysctl(op, u_sysctl);
break;