> +struct ib_qp *ib_create_qp_user(struct ib_device *dev, struct ib_pd *pd, > + struct ib_qp_init_attr *attr, > + struct ib_udata *udata, > + struct ib_uqp_object *uobj, const char *caller); > +static inline struct ib_qp *ib_create_qp_uverbs(struct ib_device *dev, > + struct ib_pd *pd, > + struct ib_qp_init_attr *attr, > + struct ib_udata *udata, > + struct ib_uqp_object *uobj) > +{ > + if (attr->qp_type == IB_QPT_XRC_TGT) > + return ib_create_qp_user(dev, pd, attr, NULL, uobj, > + KBUILD_MODNAME); > + > + return ib_create_qp_user(dev, pd, attr, udata, uobj, NULL); Why not always pass along the udata and caller and just not use them in the low-level code?