On Thu, Jul 26, 2018 at 08:03:23AM +0300, Leon Romanovsky wrote: > On Wed, Jul 25, 2018 at 08:46:33AM -0600, Jason Gunthorpe wrote: > > On Wed, Jul 25, 2018 at 08:47:09AM +0300, Leon Romanovsky wrote: > > > On Tue, Jul 24, 2018 at 02:37:11PM -0600, Jason Gunthorpe wrote: > > > > This clearly indicates that the input is a bitwise combination of values > > > > in an enum, and identifies which enum contains the definition of the bits. > > > > > > > > Special accessors are provided that handle the mandatory validation of the > > > > allowed bits and enforce the correct type for bitwise flags. > > > > > > > > If we had introduced this at the start then the kabi would have uniformly > > > > used u64 data to pass flags, however today there is a mixture of u64 and > > > > u32 flags. All places are converted to accept both sizes and the accessor > > > > fixes it. This allows all existing flags to grow to u64 in future without > > > > any hassle. > > > > > > > > Finally all flags are, by definition, optional. If flags are not passed > > > > the accessor does not fail, but provides a value of zero. > > > > > > > > Signed-off-by: Jason Gunthorpe <jgg@xxxxxxxxxxxx> > > > > > > .... > > > > > > > +#define UVERBS_ATTR_FLAGS_IN(_attr_id, _enum_type, ...) \ > > > > + UVERBS_ATTR_PTR_IN( \ > > > > + _attr_id, \ > > > > + UVERBS_ATTR_SIZE(sizeof(_enum_type) * 0 + sizeof(u32), \ > > > > > > ^^^^^ > > > What did you mean by " * 0"? > > > > This is a meta-programming technique to confirm that _enum_type is a > > valid expression. > > > > Otherwise _enum_type is not used in the macro at all and could have a typo.. > > > > Maybe it should be > > > > sizeof(_enum_type *)*0 > > > > which further requires enum_type to be a type expression.. > > I didn't check it, but think that BUILD_BUG_ON(!sizeof(_enum_type)) will > do the trick without "meta-programming technique". Sure, it has to be spelled BUILD_BUG_ON_ZERO() though Jason -- To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html