|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v2 01/20] x86: make hvm_{get/set}_param accessible
On 18/12/2019 19:40, Tamas K Lengyel wrote:
> diff --git a/xen/arch/x86/hvm/hvm.c b/xen/arch/x86/hvm/hvm.c
> index 614ed60fe4..5a3a962fbb 100644
> --- a/xen/arch/x86/hvm/hvm.c
> +++ b/xen/arch/x86/hvm/hvm.c
> @@ -4072,16 +4072,17 @@ static int hvmop_set_evtchn_upcall_vector(
> }
>
> static int hvm_allow_set_param(struct domain *d,
> - const struct xen_hvm_param *a)
> + uint32_t index,
> + uint64_t new_value)
These two lines can be folded together.
> @@ -4134,13 +4135,11 @@ static int hvm_allow_set_param(struct domain *d,
> return rc;
> }
>
> -static int hvmop_set_param(
> +int hvmop_set_param(
> XEN_GUEST_HANDLE_PARAM(xen_hvm_param_t) arg)
and here.
> @@ -4160,23 +4159,42 @@ static int hvmop_set_param(
> if ( !is_hvm_domain(d) )
> goto out;
>
> - rc = hvm_allow_set_param(d, &a);
> + rc = hvm_set_param(d, a.index, a.value);
> +
> + out:
> + rcu_unlock_domain(d);
> + return rc;
> +}
> +
> +int hvm_set_param(
> + struct domain *d,
> + uint32_t index,
> + uint64_t value)
and again.
> @@ -4340,34 +4358,33 @@ static int hvmop_set_param(
> * 256 bits interrupt redirection bitmap + 64k bits I/O bitmap
> * plus one padding byte).
> */
> - if ( (a.value >> 32) > sizeof(struct tss32) +
> + if ( (value >> 32) > sizeof(struct tss32) +
> (0x100 / 8) + (0x10000 / 8) + 1 )
> - a.value = (uint32_t)a.value |
> + value = (uint32_t)value |
> ((sizeof(struct tss32) + (0x100 / 8) +
> (0x10000 / 8) + 1) << 32);
Can you reindent the surrounding lines so they line up again?
> @@ -4429,42 +4446,60 @@ static int hvmop_get_param(
> if ( !is_hvm_domain(d) )
> goto out;
>
> - rc = hvm_allow_get_param(d, &a);
> + rc = hvm_get_param(d, a.index, &a.value);
> if ( rc )
> goto out;
>
> - switch ( a.index )
> + rc = __copy_to_guest(arg, &a, 1) ? -EFAULT : 0;
> +
> + HVM_DBG_LOG(DBG_LEVEL_HCALL, "get param %u = %"PRIx64,
> + a.index, a.value);
> +
> + out:
> + rcu_unlock_domain(d);
> + return rc;
> +}
> +
> +int hvm_get_param(
> + struct domain *d,
> + uint32_t index,
> + uint64_t *value)
Fold.
> +{
> + int rc;
> +
> + if ( index >= HVM_NR_PARAMS || !value )
No need for !value. It had better only ever point onto the hypervisor
stack now that this is an internal function.
> diff --git a/xen/include/asm-x86/hvm/hvm.h b/xen/include/asm-x86/hvm/hvm.h
> index 1d7b66f927..a6f4ae76a1 100644
> --- a/xen/include/asm-x86/hvm/hvm.h
> +++ b/xen/include/asm-x86/hvm/hvm.h
> @@ -335,6 +335,10 @@ unsigned long hvm_cr4_guest_valid_bits(const struct
> domain *d, bool restore);
> bool hvm_flush_vcpu_tlb(bool (*flush_vcpu)(void *ctxt, struct vcpu *v),
> void *ctxt);
>
> +/* Caller must hold domain locks */
How about asserting so?
No major problems so Acked-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |