|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [RFC PATCH 2/9] common: Isolate XENVER_get_features into a separate function
Make do_xen_version more readable by moving the main XENVER_get_features
into a separate function.
No functional changes intended.
Signed-off-by: Teddy Astie <teddy.astie@xxxxxxxxxx>
---
xen/common/kernel.c | 84 +++++++++++++++++++++++++--------------------
1 file changed, 46 insertions(+), 38 deletions(-)
diff --git a/xen/common/kernel.c b/xen/common/kernel.c
index 5be668ba85..eff6db6c8f 100644
--- a/xen/common/kernel.c
+++ b/xen/common/kernel.c
@@ -569,6 +569,50 @@ static long xenver_varbuf_op(int cmd,
XEN_GUEST_HANDLE_PARAM(void) arg)
return sz;
}
+static long xenver_get_features(struct domain *d, uint32_t submap_idx,
uint32_t *submap)
+{
+ switch ( submap_idx )
+ {
+ case 0:
+ *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) )
+ *submap |= (1U << XENFEAT_pae_pgdir_above_4gb);
+ if ( paging_mode_translate(d) )
+ *submap |=
+ (1U << XENFEAT_writable_page_tables) |
+ (1U << XENFEAT_auto_translated_physmap);
+ if ( is_hardware_domain(d) )
+ *submap |= 1U << XENFEAT_dom0;
+#ifdef CONFIG_ARM
+ *submap |= (1U << XENFEAT_ARM_SMCCC_supported);
+#endif
+#ifdef CONFIG_X86
+ if ( is_pv_domain(d) )
+ *submap |= (1U << XENFEAT_mmu_pt_update_preserve_ad) |
+ (1U << XENFEAT_highmem_assist) |
+ (1U << XENFEAT_gnttab_map_avail_bits);
+ else
+ *submap |= (1U << XENFEAT_hvm_safe_pvclock) |
+ (1U << XENFEAT_hvm_callback_vector) |
+ (has_pirq(d) ? (1U << XENFEAT_hvm_pirqs) : 0);
+ *submap |= (1U << XENFEAT_dm_msix_all_writes);
+#endif
+ if ( !paging_mode_translate(d) || is_domain_direct_mapped(d) )
+ *submap |= (1U << XENFEAT_direct_mapped);
+ else
+ *submap |= (1U << XENFEAT_not_direct_mapped);
+ break;
+ default:
+ return -EINVAL;
+ }
+
+ return 0;
+}
+
long do_xen_version(int cmd, XEN_GUEST_HANDLE_PARAM(void) arg)
{
bool deny = xsm_xen_version(XSM_OTHER, cmd);
@@ -675,45 +719,9 @@ long do_xen_version(int cmd, XEN_GUEST_HANDLE_PARAM(void)
arg)
if ( copy_from_guest(&fi, arg, 1) )
return -EFAULT;
- switch ( fi.submap_idx )
- {
- case 0:
- 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) )
- fi.submap |=
- (1U << XENFEAT_writable_page_tables) |
- (1U << XENFEAT_auto_translated_physmap);
- if ( is_hardware_domain(d) )
- fi.submap |= 1U << XENFEAT_dom0;
-#ifdef CONFIG_ARM
- fi.submap |= (1U << XENFEAT_ARM_SMCCC_supported);
-#endif
-#ifdef CONFIG_X86
- if ( is_pv_domain(d) )
- fi.submap |= (1U << XENFEAT_mmu_pt_update_preserve_ad) |
- (1U << XENFEAT_highmem_assist) |
- (1U << XENFEAT_gnttab_map_avail_bits);
- else
- fi.submap |= (1U << XENFEAT_hvm_safe_pvclock) |
- (1U << XENFEAT_hvm_callback_vector) |
- (has_pirq(d) ? (1U << XENFEAT_hvm_pirqs) : 0);
- fi.submap |= (1U << XENFEAT_dm_msix_all_writes);
-#endif
- if ( !paging_mode_translate(d) || is_domain_direct_mapped(d) )
- fi.submap |= (1U << XENFEAT_direct_mapped);
- else
- fi.submap |= (1U << XENFEAT_not_direct_mapped);
- break;
- default:
+ if ( xenver_get_features(d, fi.submap_idx, &fi.submap) )
return -EINVAL;
- }
-
+
if ( __copy_to_guest(arg, &fi, 1) )
return -EFAULT;
return 0;
--
2.50.1
Teddy Astie | Vates XCP-ng Developer
XCP-ng & Xen Orchestra - Vates solutions
web: https://vates.tech
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |