|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH v2] xen/sched: validate RTDS putinfo period and budget
On 25/03/2026 3:24 pm, Oleksii Moisieiev wrote:
> The RTDS domain-wide XEN_DOMCTL_SCHEDOP_putinfo path only checks for
> zero values before applying period and budget to all vCPUs in the
> domain.
>
> This is weaker than the per-vCPU XEN_DOMCTL_SCHEDOP_putvcpuinfo path,
> which already rejects values below the minimum, above the maximum, and
> cases where budget exceeds period.
>
> Use the same validation rules for putinfo as for putvcpuinfo, so
> invalid domain-wide updates are rejected with -EINVAL instead of being
> applied inconsistently.
>
> Signed-off-by: Oleksii Moisieiev <oleksii_moisieiev@xxxxxxxx>
> ---
>
> Changes in v2:
> - introduce rt_validate_params helper function to check period and budget
>
> xen/common/sched/rt.c | 37 ++++++++++++++++++++++++-------------
> 1 file changed, 24 insertions(+), 13 deletions(-)
>
> diff --git a/xen/common/sched/rt.c b/xen/common/sched/rt.c
> index 7b1f64a779..645b091de7 100644
> --- a/xen/common/sched/rt.c
> +++ b/xen/common/sched/rt.c
> @@ -1362,6 +1362,20 @@ out:
> unit_schedule_unlock_irq(lock, unit);
> }
>
> +static int
> +rt_validate_params(uint32_t period_us, uint32_t budget_us,
> + s_time_t *period, s_time_t *budget)
> +{
> + *period = MICROSECS(period_us);
> + *budget = MICROSECS(budget_us);
> +
> + if ( *period > RTDS_MAX_PERIOD || *budget < RTDS_MIN_BUDGET ||
> + *budget > *period || *period < RTDS_MIN_PERIOD )
> + return -EINVAL;
> +
> + return 0;
> +}
Code written like this is horrible; both to read, and in terms of
generated code. Because of potential aliasing, that's 7 distinct memory
accesses because the values cannot be cached in registers.
You'll get far better code generation by writing it more like:
{
s_time_t p = MICROSECS(period_us);
s_time_t b = MICROSECS(budget_us);
if ( p > RTDS_MAX_PERIOD || ... )
return -EINVAL;
*period = p;
*budget = b;
return 0;
}
See https://godbolt.org/z/W63TY8qTW
But it would also be better still if you passed op->u.rtds into this
function rather than {period,budget}_us separately.
~Andrew
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |