[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 15, 2020 at 08:36:10AM +0200, Jan Beulich wrote: > On 14.07.2020 16:29, Roger Pau Monné wrote: > > 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> > > Thanks. > > >> --- > >> 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. > > (note this remark, towards your question at the end) > > >> --- 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? > > Default cases explicitly do not get added to be able to spot missing > case labels, as most compilers will warn about such when the controlling > expression is of enum type. As you say on the comment above, ignoring those for translation macros would be better, and would avoid the ugliness of having to add the _pad cases here. > > AFAICT it will also set (_d_)->vmemrange.h twice? > > I'm not seeing it (and if it was, I'd then also wonder why not for the > other two handles above). This is the generated macro: > > #define XLAT_vnuma_topology_info(_d_, _s_) do { \ > (_d_)->domid = (_s_)->domid; \ > (_d_)->nr_vnodes = (_s_)->nr_vnodes; \ > (_d_)->nr_vcpus = (_s_)->nr_vcpus; \ > (_d_)->nr_vmemranges = (_s_)->nr_vmemranges; \ > switch (vdistance) { \ > case XLAT_vnuma_topology_info_vdistance_h: \ > XLAT_vnuma_topology_info_HNDL_vdistance_h(_d_, _s_); \ > break; \ > } \ > switch (vcpu_to_vnode) { \ > case XLAT_vnuma_topology_info_vcpu_to_vnode_h: \ > XLAT_vnuma_topology_info_HNDL_vcpu_to_vnode_h(_d_, _s_); \ > break; \ > } \ > switch (vmemrange) { \ > case XLAT_vnuma_topology_info_vmemrange_h: \ > XLAT_vnuma_topology_info_HNDL_vmemrange_h(_d_, _s_); \ > break; \ > } \ > } while (0) > > Am I overlooking any further aspect? No, vdistance, vcpu_to_vnode and vmemrange are set by the caller, so the enums will never have the _pad value, and hence the assignation will be done only once, you are right. Thanks, Roger.
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |