|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 2/4] introduce arch_get_features()
Hi Juergen,
On 11/14/2014 09:37 AM, Juergen Gross wrote:
> The XENVER_get_features sub command of the xen_version hypercall is
> handled completely in common/kernel.c despite of some architecture
> dependant parts.
>
> Move the architecture dependant parts in an own function in
> arch/*/domain.c
>
> Signed-off-by: Juergen Gross <jgross@xxxxxxxx>
For the ARM part:
Reviewed-by: Julien Grall <julien.grall@xxxxxxxxxx>
Regards,
> ---
> xen/arch/arm/domain.c | 5 +++++
> xen/arch/x86/domain.c | 30 ++++++++++++++++++++++++++++++
> xen/common/kernel.c | 22 ++--------------------
> xen/include/xen/domain.h | 2 ++
> 4 files changed, 39 insertions(+), 20 deletions(-)
>
> diff --git a/xen/arch/arm/domain.c b/xen/arch/arm/domain.c
> index 7221bc8..dc5a3fb 100644
> --- a/xen/arch/arm/domain.c
> +++ b/xen/arch/arm/domain.c
> @@ -823,6 +823,11 @@ void vcpu_block_unless_event_pending(struct vcpu *v)
> vcpu_unblock(current);
> }
>
> +uint32_t arch_get_features(struct domain *d, unsigned int submap_idx)
> +{
> + return 0;
> +}
> +
> /*
> * Local variables:
> * mode: C
> diff --git a/xen/arch/x86/domain.c b/xen/arch/x86/domain.c
> index ae0a344..d98aabd 100644
> --- a/xen/arch/x86/domain.c
> +++ b/xen/arch/x86/domain.c
> @@ -2166,6 +2166,36 @@ static int __init init_vcpu_kick_softirq(void)
> }
> __initcall(init_vcpu_kick_softirq);
>
> +uint32_t arch_get_features(struct domain *d, unsigned int submap_idx)
> +{
> + uint32_t submap = 0;
> +
> + switch ( submap_idx )
> + {
> + case 0:
> + switch ( d->guest_type )
> + {
> + case guest_type_pv:
> + submap |= (1U << XENFEAT_mmu_pt_update_preserve_ad) |
> + (1U << XENFEAT_highmem_assist) |
> + (1U << XENFEAT_gnttab_map_avail_bits);
> + break;
> + case guest_type_pvh:
> + submap |= (1U << XENFEAT_hvm_safe_pvclock) |
> + (1U << XENFEAT_supervisor_mode_kernel) |
> + (1U << XENFEAT_hvm_callback_vector);
> + break;
> + case guest_type_hvm:
> + submap |= (1U << XENFEAT_hvm_safe_pvclock) |
> + (1U << XENFEAT_hvm_callback_vector) |
> + (1U << XENFEAT_hvm_pirqs);
> + break;
> + }
> + break;
> + }
> +
> + return submap;
> +}
>
> /*
> * Local variables:
> diff --git a/xen/common/kernel.c b/xen/common/kernel.c
> index d23c422..d22a860 100644
> --- a/xen/common/kernel.c
> +++ b/xen/common/kernel.c
> @@ -312,31 +312,13 @@ DO(xen_version)(int cmd, XEN_GUEST_HANDLE_PARAM(void)
> arg)
> fi.submap |= 1U << XENFEAT_supervisor_mode_kernel;
> if ( is_hardware_domain(current->domain) )
> fi.submap |= 1U << XENFEAT_dom0;
> -#ifdef CONFIG_X86
> - switch ( d->guest_type )
> - {
> - case guest_type_pv:
> - fi.submap |= (1U << XENFEAT_mmu_pt_update_preserve_ad) |
> - (1U << XENFEAT_highmem_assist) |
> - (1U << XENFEAT_gnttab_map_avail_bits);
> - break;
> - case guest_type_pvh:
> - fi.submap |= (1U << XENFEAT_hvm_safe_pvclock) |
> - (1U << XENFEAT_supervisor_mode_kernel) |
> - (1U << XENFEAT_hvm_callback_vector);
> - break;
> - case guest_type_hvm:
> - fi.submap |= (1U << XENFEAT_hvm_safe_pvclock) |
> - (1U << XENFEAT_hvm_callback_vector) |
> - (1U << XENFEAT_hvm_pirqs);
> - break;
> - }
> -#endif
> break;
> default:
> return -EINVAL;
> }
>
> + fi.submap |= arch_get_features(d, fi.submap_idx);
> +
> if ( copy_to_guest(arg, &fi, 1) )
> return -EFAULT;
> return 0;
> diff --git a/xen/include/xen/domain.h b/xen/include/xen/domain.h
> index 9215b0e..0d12dc0 100644
> --- a/xen/include/xen/domain.h
> +++ b/xen/include/xen/domain.h
> @@ -80,6 +80,8 @@ extern spinlock_t vcpu_alloc_lock;
> bool_t domctl_lock_acquire(void);
> void domctl_lock_release(void);
>
> +uint32_t arch_get_features(struct domain *d, unsigned int submap_idx);
> +
> /*
> * Continue the current hypercall via func(data) on specified cpu.
> * If this function returns 0 then the function is guaranteed to run at some
>
--
Julien Grall
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |