|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH 03/10] viridian: introduce a per-cpu hypercall_vpmask and accessor functions...
On 11.11.2020 21:07, Paul Durrant wrote:
> --- a/xen/arch/x86/hvm/viridian/viridian.c
> +++ b/xen/arch/x86/hvm/viridian/viridian.c
> @@ -507,15 +507,41 @@ void viridian_domain_deinit(struct domain *d)
> XFREE(d->arch.hvm.viridian);
> }
>
> +struct hypercall_vpmask {
> + DECLARE_BITMAP(mask, HVM_MAX_VCPUS);
> +};
> +
> +static DEFINE_PER_CPU(struct hypercall_vpmask, hypercall_vpmask);
> +
> +static void vpmask_empty(struct hypercall_vpmask *vpmask)
const?
> +{
> + bitmap_zero(vpmask->mask, HVM_MAX_VCPUS);
> +}
> +
> +static void vpmask_set(struct hypercall_vpmask *vpmask, unsigned int vp)
> +{
> + __set_bit(vp, vpmask->mask);
Perhaps assert vp in range here and ...
> +}
> +
> +static void vpmask_fill(struct hypercall_vpmask *vpmask)
> +{
> + bitmap_fill(vpmask->mask, HVM_MAX_VCPUS);
> +}
> +
> +static bool vpmask_test(struct hypercall_vpmask *vpmask, unsigned int vp)
> +{
> + return test_bit(vp, vpmask->mask);
... here?
This also wants const again.
> @@ -567,13 +594,29 @@ static int hvcall_flush(union hypercall_input *input,
> * so err on the safe side.
> */
> if ( input_params.flags & HV_FLUSH_ALL_PROCESSORS )
> - input_params.vcpu_mask = ~0ul;
> + vpmask_fill(vpmask);
> + else
> + {
> + unsigned int vp;
> +
> + vpmask_empty(vpmask);
> + for (vp = 0; vp < 64; vp++)
Nit: Missing blanks.
> + {
> + if ( !input_params.vcpu_mask )
> + break;
> +
> + if ( input_params.vcpu_mask & 1 )
> + vpmask_set(vpmask, vp);
> +
> + input_params.vcpu_mask >>= 1;
> + }
Wouldn't bitmap_zero() + bitmap_copy() (in a suitable wrapper)
be quite a bit cheaper a way to achieve the same effect?
Jan
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |