On 12/13/17 4:19 AM, Jesper Dangaard Brouer wrote: > + > +void xdp_rxq_info_unreg(struct xdp_rxq_info *xdp_rxq) > +{ > + xdp_rxq->reg_state = REG_STATE_UNREGISTRED; > +} > +EXPORT_SYMBOL_GPL(xdp_rxq_info_unreg); > + > +void xdp_rxq_info_init(struct xdp_rxq_info *xdp_rxq) > +{ > + if (xdp_rxq->reg_state == REG_STATE_REGISTRED) { > + WARN(1, "Missing unregister, handled but fix driver\n"); > + xdp_rxq_info_unreg(xdp_rxq); > + } > + memset(xdp_rxq, 0, sizeof(*xdp_rxq)); > + xdp_rxq->queue_index = U32_MAX; > + xdp_rxq->reg_state = REG_STATE_NEW; > +} > +EXPORT_SYMBOL_GPL(xdp_rxq_info_init); > + > +void xdp_rxq_info_reg(struct xdp_rxq_info *xdp_rxq) > +{ > + WARN(!xdp_rxq->dev, "Missing net_device from driver"); > + WARN(xdp_rxq->queue_index == U32_MAX, "Miss queue_index from driver"); > + WARN(!(xdp_rxq->reg_state == REG_STATE_NEW),"API violation, miss init"); > + xdp_rxq->reg_state = REG_STATE_REGISTRED; > +} > +EXPORT_SYMBOL_GPL(xdp_rxq_info_reg); >
Rather than WARN()'s why not make the _reg and _init functions return an int that indicates an error? For example you don't want to continue if the dev is expected but missing.