mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 10:11:27 +01:00
domain: expose newly introduced hypercalls as XENFEAT
XENFEAT_runstate_phys_area is exposed to all architectures, while XENFEAT_vcpu_time_phys_area is currently only implemented for x86, and hence the feature flag is also only exposed on x86. Additionally add dummy guards with TODOs in the respective hypercall implementations, to signal the intention to control the availability of those hypercalls on a guest-by-guest basis from the toolstack. Signed-off-by: Roger Pau Monné <roger.pau@citrix.com> Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com> Release-acked-by: Henry Wang <Henry.Wang@arm.com>
This commit is contained in:
1 parent
6ba8384592
commit
48a3fd1432
6 files changed
+27
-1
No files matched your search
@@ -31,6 +31,8 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/)
|
||||
- Add Intel Hardware P-States (HWP) cpufreq driver.
|
||||
- On Arm, experimental support for dynamic addition/removal of Xen device tree
|
||||
nodes using a device tree overlay binary (.dtbo).
|
||||
- Introduce two new hypercalls to map the vCPU runstate and time areas by
|
||||
physical rather than linear/virtual addresses.
|
||||
|
||||
### Removed
|
||||
- On x86, the "pku" command line option has been removed. It has never
|
||||
|
||||
@@ -1580,6 +1580,10 @@ long do_vcpu_op(int cmd, unsigned int vcpuid, XEN_GUEST_HANDLE_PARAM(void) arg)
|
||||
{
|
||||
struct vcpu_register_time_memory_area area;
|
||||
|
||||
rc = -ENOSYS;
|
||||
if ( 0 /* TODO: Dom's XENFEAT_vcpu_time_phys_area setting */ )
|
||||
break;
|
||||
|
||||
rc = -EFAULT;
|
||||
if ( copy_from_guest(&area.addr.p, arg, 1) )
|
||||
break;
|
||||
|
||||
@@ -1998,6 +1998,10 @@ long common_vcpu_op(int cmd, struct vcpu *v, XEN_GUEST_HANDLE_PARAM(void) arg)
|
||||
{
|
||||
struct vcpu_register_runstate_memory_area area;
|
||||
|
||||
rc = -ENOSYS;
|
||||
if ( 0 /* TODO: Dom's XENFEAT_runstate_phys_area setting */ )
|
||||
break;
|
||||
|
||||
rc = -EFAULT;
|
||||
if ( copy_from_guest(&area.addr.p, arg, 1) )
|
||||
break;
|
||||
|
||||
+5
-1
@@ -607,7 +607,11 @@ long do_xen_version(int cmd, XEN_GUEST_HANDLE_PARAM(void) arg)
|
||||
switch ( fi.submap_idx )
|
||||
{
|
||||
case 0:
|
||||
fi.submap = (1U << XENFEAT_memory_op_vnode_supported);
|
||||
fi.submap = (1U << XENFEAT_memory_op_vnode_supported) |
|
||||
#ifdef CONFIG_X86
|
||||
(1U << XENFEAT_vcpu_time_phys_area) |
|
||||
#endif
|
||||
(1U << XENFEAT_runstate_phys_area);
|
||||
if ( VM_ASSIST(d, pae_extended_cr3) )
|
||||
fi.submap |= (1U << XENFEAT_pae_pgdir_above_4gb);
|
||||
if ( paging_mode_translate(d) )
|
||||
|
||||
@@ -111,6 +111,15 @@
|
||||
#define XENFEAT_not_direct_mapped 16
|
||||
#define XENFEAT_direct_mapped 17
|
||||
|
||||
/*
|
||||
* Signal whether the domain is able to use the following hypercalls:
|
||||
*
|
||||
* VCPUOP_register_runstate_phys_area
|
||||
* VCPUOP_register_vcpu_time_phys_area
|
||||
*/
|
||||
#define XENFEAT_runstate_phys_area 18
|
||||
#define XENFEAT_vcpu_time_phys_area 19
|
||||
|
||||
#define XENFEAT_NR_SUBMAPS 1
|
||||
|
||||
#endif /* __XEN_PUBLIC_FEATURES_H__ */
|
||||
|
||||
@@ -236,6 +236,9 @@ DEFINE_XEN_GUEST_HANDLE(vcpu_register_time_memory_area_t);
|
||||
* Note that the area registered via VCPUOP_register_runstate_memory_area will
|
||||
* be updated in the same manner as the one registered via virtual address PLUS
|
||||
* VMASST_TYPE_runstate_update_flag engaged by the domain.
|
||||
*
|
||||
* XENFEAT_{runstate,vcpu_time}_phys_area feature bits signal the availability
|
||||
* of these ops.
|
||||
*/
|
||||
#define VCPUOP_register_runstate_phys_area 14
|
||||
#define VCPUOP_register_vcpu_time_phys_area 15
|
||||
|
||||