On Thu, 10 Jan 2019 16:50:51 +0000 Harry van Haaren <harry.van.haa...@intel.com> wrote:
> Although C compilation works with the struct rte_mbuf_sched > declared inside the struct rte_mbuf namespace, C++ fails to > compile. This fix moves the rte_mbuf_sched struct up to the > global namespace, instead of declaring it inside the struct > mbuf namespace. > > The struct rte_mbuf_sched is being used on the stack in > rte_mbuf_sched_get() and as a cast in _set(). For this > reason, it must be exposed as an available type. > > Fixes: 5d3f72100904 ("mbuf: implement generic format for sched field") > > Signed-off-by: Harry van Haaren <harry.van.haa...@intel.com> > I believe this was done so that the compiler doesn't generate bad code. If you reference the mbuf to get the fields then each operation becomes a load shift and mask operation to get to the bitfield. But if they are local then this is all done on a single register value. Check the generated code. One solution would be to move this into a private header file where C++ won't find it.