On Sun, Jul 08, 2018 at 01:24:42PM +0300, Leon Romanovsky wrote: > +static int UVERBS_HANDLER(MLX5_IB_METHOD_CREATE_FLOW)(struct ib_device *ib_dev, > + struct ib_uverbs_file *file, > + struct uverbs_attr_bundle *attrs) > +{ > + struct mlx5_ib_dev *dev = to_mdev(ib_dev); Same comment as before, the dev needs to come from uboj->context->device > -/* Used by drivers to declare a complete parsing tree for a single method that > - * differs only in having additional driver specific attributes. > +/* Used by drivers to declare a complete parsing tree for new methods > */ > -#define ADD_UVERBS_ATTRIBUTES_SIMPLE(_name, _object_id, _method_id, ...) \ > - static const struct uverbs_attr_def *const UVERBS_METHOD_ATTRS( \ > - _method_id)[] = { __VA_ARGS__ }; \ > - static const struct uverbs_method_def UVERBS_METHOD(_method_id) = { \ > - .id = _method_id, \ > - .num_attrs = ARRAY_SIZE(UVERBS_METHOD_ATTRS(_method_id)), \ > - .attrs = &UVERBS_METHOD_ATTRS(_method_id), \ > - }; \ > +#define ADD_UVERBS_METHODS(_name, _object_id, ...) \ > static const struct uverbs_method_def *const UVERBS_OBJECT_METHODS( \ > - _object_id)[] = { &UVERBS_METHOD(_method_id) }; \ > + _object_id)[] = { __VA_ARGS__ }; \ > static const struct uverbs_object_def _name##_struct = { \ > .id = _object_id, \ > - .num_methods = 1, \ > + .num_methods = ARRAY_SIZE(UVERBS_OBJECT_METHODS(_object_id)), \ > .methods = &UVERBS_OBJECT_METHODS(_object_id) \ > }; \ > static const struct uverbs_object_def *const _name##_ptrs[] = { \ > @@ -123,4 +115,17 @@ > .objects = &_name##_ptrs, \ > } > > +/* Used by drivers to declare a complete parsing tree for a single method that > + * differs only in having additional driver specific attributes. > + */ > +#define ADD_UVERBS_ATTRIBUTES_SIMPLE(_name, _object_id, _method_id, ...) \ > + static const struct uverbs_attr_def *const UVERBS_METHOD_ATTRS( \ > + _method_id)[] = { __VA_ARGS__ }; \ > + static const struct uverbs_method_def UVERBS_METHOD(_method_id) = { \ > + .id = _method_id, \ > + .num_attrs = ARRAY_SIZE(UVERBS_METHOD_ATTRS(_method_id)), \ > + .attrs = &UVERBS_METHOD_ATTRS(_method_id), \ > + }; \ > + ADD_UVERBS_METHODS(_name, _object_id, _method_id) Wow. How does that even compile? Oh I see, the only two users are passing in a 0 constant which the compiler will understand as NULL without a warning. I guess this is an instant crash at runtime? Should be: ADD_UVERBS_METHODS(_name, _object_id, &UVERBS_METHOD(_method_id) 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