{
xen_sysctl_physinfo_t *pi = &sysctl->u.physinfo;
- ret = xsm_physinfo();
- if ( ret )
- break;
-
-
memset(pi, 0, sizeof(*pi));
pi->threads_per_core =
cpumask_weight(per_cpu(cpu_sibling_mask, 0));
uint32_t i, max_cpu_index, last_online_cpu;
xen_sysctl_topologyinfo_t *ti = &sysctl->u.topologyinfo;
- ret = xsm_physinfo();
- if ( ret )
- break;
-
last_online_cpu = cpumask_last(&cpu_online_map);
max_cpu_index = min_t(uint32_t, ti->max_cpu_index, last_online_cpu);
ti->max_cpu_index = last_online_cpu;
uint32_t i, j, max_node_index, last_online_node;
xen_sysctl_numainfo_t *ni = &sysctl->u.numainfo;
- ret = xsm_physinfo();
- if ( ret )
- break;
-
last_online_node = last_node(node_online_map);
max_node_index = min_t(uint32_t, ni->max_node_index, last_online_node);
ni->max_node_index = last_online_node;
break;
case XEN_SYSCTL_tbuf_op:
- ret = xsm_tbufcontrol();
- if ( ret )
- break;
-
ret = tb_control(&op->u.tbuf_op);
break;
case XEN_SYSCTL_sched_id:
- ret = xsm_sched_id();
- if ( ret )
- break;
-
op->u.sched_id.sched_id = sched_id();
break;
#ifdef PERF_COUNTERS
case XEN_SYSCTL_perfc_op:
- ret = xsm_perfcontrol();
- if ( ret )
- break;
-
ret = perfc_control(&op->u.perfc_op);
break;
#endif
#ifdef LOCK_PROFILE
case XEN_SYSCTL_lockprof_op:
- ret = xsm_lockprof();
- if ( ret )
- break;
-
ret = spinlock_profile_control(&op->u.lockprof_op);
break;
#endif
char c;
uint32_t i;
- ret = xsm_debug_keys();
- if ( ret )
- break;
-
ret = -EFAULT;
for ( i = 0; i < op->u.debug_keys.nr_keys; i++ )
{
nr_cpus = min(op->u.getcpuinfo.max_cpus, nr_cpu_ids);
- ret = xsm_getcpuinfo();
- if ( ret )
- break;
-
ret = -EFAULT;
for ( i = 0; i < nr_cpus; i++ )
{
break;
case XEN_SYSCTL_availheap:
- ret = xsm_availheap();
- if ( ret )
- break;
-
op->u.availheap.avail_bytes = avail_domheap_pages_region(
op->u.availheap.node,
op->u.availheap.min_bitwidth,
#ifdef HAS_ACPI
case XEN_SYSCTL_get_pmstat:
- ret = xsm_get_pmstat();
- if ( ret )
- break;
-
ret = do_get_pm_info(&op->u.get_pmstat);
break;
case XEN_SYSCTL_pm_op:
- ret = xsm_pm_op();
- if ( ret )
- break;
-
ret = do_pm_op(&op->u.pm_op);
if ( ret == -EAGAIN )
copyback = 1;
break;
case XEN_SYSCTL_cpupool_op:
- ret = xsm_cpupool_op();
- if ( ret )
- break;
-
ret = cpupool_do_sysctl(&op->u.cpupool_op);
break;
case XEN_SYSCTL_scheduler_op:
- ret = xsm_sched_op();
- if ( ret )
- break;
-
ret = sched_adjust_global(&op->u.scheduler_op);
break;
return 0;
}
-static XSM_INLINE int xsm_tbufcontrol(void)
-{
- return 0;
-}
-
static XSM_INLINE int xsm_readconsole(uint32_t clear)
{
return 0;
}
-static XSM_INLINE int xsm_sched_id(void)
-{
- return 0;
-}
-
-static XSM_INLINE int xsm_perfcontrol(void)
-{
- return 0;
-}
-
-static XSM_INLINE int xsm_debug_keys(void)
-{
- return 0;
-}
-
static XSM_INLINE int xsm_getcpuinfo(void)
{
return 0;
}
-static XSM_INLINE int xsm_get_pmstat(void)
-{
- return 0;
-}
-
static XSM_INLINE int xsm_setpminfo(void)
{
return 0;
return 0;
}
-static XSM_INLINE int xsm_availheap(void)
-{
- return 0;
-}
-
static XSM_INLINE int xsm_alloc_security_domain(struct domain *d)
{
return 0;
return 0;
}
-static XSM_INLINE int xsm_lockprof(void)
-{
- return 0;
-}
-
-static XSM_INLINE int xsm_cpupool_op(void)
-{
- return 0;
-}
-
-static XSM_INLINE int xsm_sched_op(void)
-{
- return 0;
-}
-
static XSM_INLINE long xsm_do_xsm_op(XEN_GUEST_HANDLE_PARAM(xsm_op_t) op)
{
return -ENOSYS;
return 0;
}
-static XSM_INLINE int xsm_physinfo(void)
-{
- return 0;
-}
-
static XSM_INLINE int xsm_platform_quirk(uint32_t quirk)
{
return 0;
int (*set_target) (struct domain *d, struct domain *e);
int (*domctl) (struct domain *d, int cmd);
int (*sysctl) (int cmd);
- int (*tbufcontrol) (void);
int (*readconsole) (uint32_t clear);
- int (*sched_id) (void);
- int (*perfcontrol) (void);
- int (*debug_keys) (void);
int (*getcpuinfo) (void);
- int (*availheap) (void);
- int (*get_pmstat) (void);
int (*setpminfo) (void);
int (*pm_op) (void);
int (*do_mca) (void);
int (*resource_setup_misc) (void);
int (*page_offline)(uint32_t cmd);
- int (*lockprof)(void);
- int (*cpupool_op)(void);
- int (*sched_op)(void);
long (*do_xsm_op) (XEN_GUEST_HANDLE_PARAM(xsm_op_t) op);
int (*xen_settime) (void);
int (*memtype) (uint32_t access);
int (*microcode) (void);
- int (*physinfo) (void);
int (*platform_quirk) (uint32_t);
int (*platform_op) (uint32_t cmd);
int (*firmware_info) (void);
return xsm_ops->sysctl(cmd);
}
-static inline int xsm_tbufcontrol (void)
-{
- return xsm_ops->tbufcontrol();
-}
-
static inline int xsm_readconsole (uint32_t clear)
{
return xsm_ops->readconsole(clear);
}
-static inline int xsm_sched_id (void)
-{
- return xsm_ops->sched_id();
-}
-
-static inline int xsm_perfcontrol (void)
-{
- return xsm_ops->perfcontrol();
-}
-
-static inline int xsm_debug_keys (void)
-{
- return xsm_ops->debug_keys();
-}
-
-static inline int xsm_availheap (void)
-{
- return xsm_ops->availheap();
-}
-
-static inline int xsm_getcpuinfo (void)
+static inline int xsm_getcpuinfo(void)
{
return xsm_ops->getcpuinfo();
}
-static inline int xsm_get_pmstat(void)
-{
- return xsm_ops->get_pmstat();
-}
-
static inline int xsm_setpminfo(void)
{
return xsm_ops->setpminfo();
return xsm_ops->page_offline(cmd);
}
-static inline int xsm_lockprof(void)
-{
- return xsm_ops->lockprof();
-}
-
-static inline int xsm_cpupool_op(void)
-{
- return xsm_ops->cpupool_op();
-}
-
-static inline int xsm_sched_op(void)
-{
- return xsm_ops->sched_op();
-}
-
static inline long xsm_do_xsm_op (XEN_GUEST_HANDLE_PARAM(xsm_op_t) op)
{
return xsm_ops->do_xsm_op(op);
return xsm_ops->microcode();
}
-static inline int xsm_physinfo (void)
-{
- return xsm_ops->physinfo();
-}
-
static inline int xsm_platform_quirk (uint32_t quirk)
{
return xsm_ops->platform_quirk(quirk);
set_to_dummy_if_null(ops, set_target);
set_to_dummy_if_null(ops, domctl);
set_to_dummy_if_null(ops, sysctl);
- set_to_dummy_if_null(ops, tbufcontrol);
set_to_dummy_if_null(ops, readconsole);
- set_to_dummy_if_null(ops, sched_id);
- set_to_dummy_if_null(ops, perfcontrol);
- set_to_dummy_if_null(ops, debug_keys);
set_to_dummy_if_null(ops, getcpuinfo);
- set_to_dummy_if_null(ops, availheap);
- set_to_dummy_if_null(ops, get_pmstat);
set_to_dummy_if_null(ops, setpminfo);
set_to_dummy_if_null(ops, pm_op);
set_to_dummy_if_null(ops, do_mca);
set_to_dummy_if_null(ops, resource_setup_misc);
set_to_dummy_if_null(ops, page_offline);
- set_to_dummy_if_null(ops, lockprof);
- set_to_dummy_if_null(ops, cpupool_op);
- set_to_dummy_if_null(ops, sched_op);
set_to_dummy_if_null(ops, do_xsm_op);
set_to_dummy_if_null(ops, xen_settime);
set_to_dummy_if_null(ops, memtype);
set_to_dummy_if_null(ops, microcode);
- set_to_dummy_if_null(ops, physinfo);
set_to_dummy_if_null(ops, platform_quirk);
set_to_dummy_if_null(ops, platform_op);
set_to_dummy_if_null(ops, firmware_info);
{
/* These have individual XSM hooks */
case XEN_SYSCTL_readconsole:
+ case XEN_SYSCTL_getdomaininfolist:
+ case XEN_SYSCTL_page_offline_op:
+#ifdef CONFIG_X86
+ case XEN_SYSCTL_cpu_hotplug:
+#endif
+ return 0;
+
case XEN_SYSCTL_tbuf_op:
+ return domain_has_xen(current->domain, XEN__TBUFCONTROL);
+
case XEN_SYSCTL_sched_id:
+ return domain_has_xen(current->domain, XEN__SCHEDULER);
+
case XEN_SYSCTL_perfc_op:
- case XEN_SYSCTL_getdomaininfolist:
+ return domain_has_xen(current->domain, XEN__PERFCONTROL);
+
case XEN_SYSCTL_debug_keys:
+ return domain_has_xen(current->domain, XEN__DEBUG);
+
case XEN_SYSCTL_getcpuinfo:
+ return domain_has_xen(current->domain, XEN__GETCPUINFO);
+
case XEN_SYSCTL_availheap:
+ return domain_has_xen(current->domain, XEN__HEAP);
+
case XEN_SYSCTL_get_pmstat:
+ return domain_has_xen(current->domain, XEN__PM_OP);
+
case XEN_SYSCTL_pm_op:
- case XEN_SYSCTL_page_offline_op:
+ return domain_has_xen(current->domain, XEN__PM_OP);
+
case XEN_SYSCTL_lockprof_op:
+ return domain_has_xen(current->domain, XEN__LOCKPROF);
+
case XEN_SYSCTL_cpupool_op:
+ return domain_has_xen(current->domain, XEN__CPUPOOL_OP);
+
case XEN_SYSCTL_scheduler_op:
-#ifdef CONFIG_X86
+ return domain_has_xen(current->domain, XEN__SCHED_OP);
+
case XEN_SYSCTL_physinfo:
- case XEN_SYSCTL_cpu_hotplug:
case XEN_SYSCTL_topologyinfo:
case XEN_SYSCTL_numainfo:
-#endif
- return 0;
+ return domain_has_xen(current->domain, XEN__PHYSINFO);
+
default:
printk("flask_sysctl: Unknown op %d\n", cmd);
return -EPERM;
}
}
-static int flask_tbufcontrol(void)
-{
- return domain_has_xen(current->domain, XEN__TBUFCONTROL);
-}
-
static int flask_readconsole(uint32_t clear)
{
u32 perms = XEN__READCONSOLE;
return domain_has_xen(current->domain, perms);
}
-static int flask_sched_id(void)
-{
- return domain_has_xen(current->domain, XEN__SCHEDULER);
-}
-
-static int flask_debug_keys(void)
-{
- return domain_has_xen(current->domain, XEN__DEBUG);
-}
-
-static int flask_getcpuinfo(void)
-{
- return domain_has_xen(current->domain, XEN__GETCPUINFO);
-}
-
-static int flask_availheap(void)
-{
- return domain_has_xen(current->domain, XEN__HEAP);
-}
-
-static int flask_get_pmstat(void)
-{
- return domain_has_xen(current->domain, XEN__PM_OP);
-}
-
-static int flask_setpminfo(void)
-{
- return domain_has_xen(current->domain, XEN__PM_OP);
-}
-
-static int flask_pm_op(void)
-{
- return domain_has_xen(current->domain, XEN__PM_OP);
-}
-
static int flask_do_mca(void)
{
return domain_has_xen(current->domain, XEN__MCA_OP);
}
}
-static inline int flask_lockprof(void)
-{
- return domain_has_xen(current->domain, XEN__LOCKPROF);
-}
-
-static inline int flask_cpupool_op(void)
-{
- return domain_has_xen(current->domain, XEN__CPUPOOL_OP);
-}
-
-static inline int flask_sched_op(void)
-{
- return domain_has_xen(current->domain, XEN__SCHED_OP);
-}
-
-static int flask_perfcontrol(void)
-{
- return domain_has_xen(current->domain, XEN__PERFCONTROL);
-}
-
#ifdef CONFIG_X86
static int flask_shadow_control(struct domain *d, uint32_t op)
{
return domain_has_xen(current->domain, XEN__MICROCODE);
}
-static int flask_physinfo(void)
-{
- return domain_has_xen(current->domain, XEN__PHYSINFO);
-}
-
static int flask_platform_quirk(uint32_t quirk)
{
return avc_current_has_perm(SECINITSID_XEN, SECCLASS_XEN, XEN__QUIRK, NULL);
case XENPF_enter_acpi_sleep:
case XENPF_change_freq:
case XENPF_getidletime:
- case XENPF_set_processor_pminfo:
- case XENPF_get_cpuinfo:
- case XENPF_get_cpu_version:
case XENPF_cpu_online:
case XENPF_cpu_offline:
case XENPF_cpu_hotadd:
case XENPF_mem_hotadd:
/* These operations have their own XSM hooks */
return 0;
+
+ case XENPF_set_processor_pminfo:
case XENPF_core_parking:
return domain_has_xen(current->domain, XEN__PM_OP);
+
+ case XENPF_get_cpu_version:
+ case XENPF_get_cpuinfo:
+ return domain_has_xen(current->domain, XEN__GETCPUINFO);
+
default:
printk("flask_platform_op: Unknown op %d\n", op);
return -EPERM;
.set_target = flask_set_target,
.domctl = flask_domctl,
.sysctl = flask_sysctl,
- .tbufcontrol = flask_tbufcontrol,
.readconsole = flask_readconsole,
- .sched_id = flask_sched_id,
- .perfcontrol = flask_perfcontrol,
- .debug_keys = flask_debug_keys,
- .getcpuinfo = flask_getcpuinfo,
- .availheap = flask_availheap,
- .get_pmstat = flask_get_pmstat,
- .setpminfo = flask_setpminfo,
- .pm_op = flask_pm_op,
.do_mca = flask_do_mca,
.evtchn_unbound = flask_evtchn_unbound,
.resource_setup_misc = flask_resource_setup_misc,
.page_offline = flask_page_offline,
- .lockprof = flask_lockprof,
- .cpupool_op = flask_cpupool_op,
- .sched_op = flask_sched_op,
.do_xsm_op = do_flask_op,
.xen_settime = flask_xen_settime,
.memtype = flask_memtype,
.microcode = flask_microcode,
- .physinfo = flask_physinfo,
.platform_quirk = flask_platform_quirk,
.platform_op = flask_platform_op,
.firmware_info = flask_firmware_info,