Hi Julien,

> On 23 Oct 2023, at 19:52, Julien Grall <jul...@xen.org> wrote:
> 
> From: Julien Grall <jgr...@amazon.com>
> 
> The 'break' the XEN_DOMCTL_set_address_size is unreachable and tools
> like Eclair will report as a violation of Misra Rule 2.1.
> 
> Furthermore, the nested switch is not very easy to read. So move
> out the nested switch in a separate function to improve the
> readability and hopefully address the MISRA violation.
> 
> Reported-by: Nicola Vetrini <nicola.vetr...@bugseng.com>
> Signed-off-by: Julien Grall <jgr...@amazon.com>

Reviewed-by: Bertrand Marquis <bertrand.marq...@arm.com>

Cheers
Bertrand

> 
> ---
> 
> Only compiled tested. Waiting for the CI to confirm there is no
> regression.
> ---
> xen/arch/arm/arm64/domctl.c | 34 +++++++++++++++++++---------------
> 1 file changed, 19 insertions(+), 15 deletions(-)
> 
> diff --git a/xen/arch/arm/arm64/domctl.c b/xen/arch/arm/arm64/domctl.c
> index 14fc622e9956..8720d126c97d 100644
> --- a/xen/arch/arm/arm64/domctl.c
> +++ b/xen/arch/arm/arm64/domctl.c
> @@ -33,27 +33,31 @@ static long switch_mode(struct domain *d, enum 
> domain_type type)
>     return 0;
> }
> 
> +static long set_address_size(struct domain *d, uint32_t address_size)
> +{
> +    switch ( address_size )
> +    {
> +    case 32:
> +        if ( !cpu_has_el1_32 )
> +            return -EINVAL;
> +        /* SVE is not supported for 32 bit domain */
> +        if ( is_sve_domain(d) )
> +            return -EINVAL;
> +        return switch_mode(d, DOMAIN_32BIT);
> +    case 64:
> +        return switch_mode(d, DOMAIN_64BIT);
> +    default:
> +        return -EINVAL;
> +    }
> +}
> +
> long subarch_do_domctl(struct xen_domctl *domctl, struct domain *d,
>                        XEN_GUEST_HANDLE_PARAM(xen_domctl_t) u_domctl)
> {
>     switch ( domctl->cmd )
>     {
>     case XEN_DOMCTL_set_address_size:
> -        switch ( domctl->u.address_size.size )
> -        {
> -        case 32:
> -            if ( !cpu_has_el1_32 )
> -                return -EINVAL;
> -            /* SVE is not supported for 32 bit domain */
> -            if ( is_sve_domain(d) )
> -                return -EINVAL;
> -            return switch_mode(d, DOMAIN_32BIT);
> -        case 64:
> -            return switch_mode(d, DOMAIN_64BIT);
> -        default:
> -            return -EINVAL;
> -        }
> -        break;
> +        return set_address_size(d, domctl->u.address_size.size);
> 
>     default:
>         return -ENOSYS;
> -- 
> 2.40.1
> 
> 


Reply via email to