[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH v2 5/7] x86: generalize padding field handling



On Wed, Jul 01, 2020 at 12:27:37PM +0200, Jan Beulich wrote:
> The original intention was to ignore padding fields, but the pattern
> matched only ones whose names started with an underscore. Also match
> fields whose names are in line with the C spec by not having a leading
> underscore. (Note that the leading ^ in the sed regexps was pointless
> and hence get dropped.)
> 
> This requires adjusting some vNUMA macros, to avoid triggering
> "enumeration value ... not handled in switch" warnings, which - due to
> -Werror - would cause the build to fail. (I have to admit that I find
> these padding fields odd, when translation of the containing structure
> is needed anyway.)
> 
> Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx>

Reviewed-by: Roger Pau Monné <roger.pau@xxxxxxxxxx>

> ---
> While for translation macros skipping padding fields pretty surely is a
> reasonable thing to do, we may want to consider not ignoring them when
> generating checking macros.
> 
> --- a/xen/common/compat/memory.c
> +++ b/xen/common/compat/memory.c
> @@ -354,10 +354,13 @@ int compat_memory_op(unsigned int cmd, X
>                  return -EFAULT;
>  
>  #define XLAT_vnuma_topology_info_HNDL_vdistance_h(_d_, _s_)          \
> +            case XLAT_vnuma_topology_info_vdistance_pad:                \
>              guest_from_compat_handle((_d_)->vdistance.h, (_s_)->vdistance.h)
>  #define XLAT_vnuma_topology_info_HNDL_vcpu_to_vnode_h(_d_, _s_)              
> \
> +            case XLAT_vnuma_topology_info_vcpu_to_vnode_pad:            \
>              guest_from_compat_handle((_d_)->vcpu_to_vnode.h, 
> (_s_)->vcpu_to_vnode.h)
>  #define XLAT_vnuma_topology_info_HNDL_vmemrange_h(_d_, _s_)          \
> +            case XLAT_vnuma_topology_info_vmemrange_pad:                \
>              guest_from_compat_handle((_d_)->vmemrange.h, (_s_)->vmemrange.h)

I find this quite ugly, would it be better to just handle them with a
default case in the XLAT_ macros?

AFAICT it will also set (_d_)->vmemrange.h twice?

>  
>              XLAT_vnuma_topology_info(nat.vnuma, &cmp.vnuma);
> --- a/xen/tools/get-fields.sh
> +++ b/xen/tools/get-fields.sh
> @@ -218,7 +218,7 @@ for line in sys.stdin.readlines():
>                               fi
>                               ;;
>                       [\,\;])
> -                             if [ $level = 2 -a -n "$(echo $id | $SED 
> 's,^_pad[[:digit:]]*,,')" ]
> +                             if [ $level = 2 -a -n "$(echo $id | $SED 
> 's,_\?pad[[:digit:]]*,,')" ]
>                               then
>                                       if [ $kind = union ]
>                                       then
> @@ -347,7 +347,7 @@ build_body ()
>                       fi
>                       ;;
>               [\,\;])
> -                     if [ $level = 2 -a -n "$(echo $id | $SED 
> 's,^_pad[[:digit:]]*,,')" ]
> +                     if [ $level = 2 -a -n "$(echo $id | $SED 
> 's,_\?pad[[:digit:]]*,,')" ]
>                       then
>                               if [ -z "$array" -a -z "$array_type" ]
>                               then
> @@ -437,7 +437,7 @@ check_field ()
>                               id=$token
>                               ;;
>                       [\,\;])
> -                             if [ $level = 2 -a -n "$(echo $id | $SED 
> 's,^_pad[[:digit:]]*,,')" ]
> +                             if [ $level = 2 -a -n "$(echo $id | $SED 
> 's,_\?pad[[:digit:]]*,,')" ]
>                               then
>                                       check_field $1 $2 $3.$id "$fields"
>                                       test "$token" != ";" || fields= id=
> @@ -491,7 +491,7 @@ build_check ()
>                       test $level != 2 -o $arrlvl != 1 || id=$token
>                       ;;
>               [\,\;])
> -                     if [ $level = 2 -a -n "$(echo $id | $SED 
> 's,^_pad[[:digit:]]*,,')" ]
> +                     if [ $level = 2 -a -n "$(echo $id | $SED 
> 's,_\?pad[[:digit:]]*,,')" ]
>                       then
>                               check_field $kind $1 $id "$fields"
>                               test "$token" != ";" || fields= id=

I have to admit I'm not overly happy with this level of repetition
(not that you introduce it here), but I would prefer to have the
regexp in a single place if possible, it's easy to miss instances
IMO.

Thanks.



 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.