Acked-by: Justin Pettit <jpet...@nicira.com>
On July 22, 2014 at 9:13:58 PM, Ben Pfaff (b...@nicira.com) wrote: > Commit db73f7166a6 (netdev-dpdk: Fix race condition with DPDK mempools in > non pmd threads) switched to a new way of setting up 'upcall->packet', but > only initialized two of the fields in the packet. This could cause > core dumps and other strange behavior. In particular it caused failures in > several unit tests on XenServer. > > This commit fixes the problem by initializing the entire ofpbuf. > > Signed-off-by: Ben Pfaff > --- > lib/dpif-netdev.c | 5 +++-- > 1 file changed, 3 insertions(+), 2 deletions(-) > > diff --git a/lib/dpif-netdev.c b/lib/dpif-netdev.c > index cfd7539..742b118 100644 > --- a/lib/dpif-netdev.c > +++ b/lib/dpif-netdev.c > @@ -2153,6 +2153,7 @@ OVS_REQUIRES(q->mutex) > struct ofpbuf *buf = &u->buf; > size_t buf_size; > struct flow flow; > + void *data; > > upcall->type = type; > > @@ -2179,8 +2180,8 @@ OVS_REQUIRES(q->mutex) > /* We have to perform a copy of the packet, because we cannot send DPDK > * mbufs to a non pmd thread. When the upcall processing will be done > * in the pmd thread, this copy can be avoided */ > - ofpbuf_set_data(&upcall->packet, ofpbuf_put(buf, ofpbuf_data(packet), > - ofpbuf_size(packet))); > + data = ofpbuf_put(buf, ofpbuf_data(packet), ofpbuf_size(packet)); > + ofpbuf_use_stub(&upcall->packet, data, ofpbuf_size(packet)); > ofpbuf_set_size(&upcall->packet, ofpbuf_size(packet)); > > seq_change(q->seq); > -- > 1.9.1 > > _______________________________________________ > dev mailing list > dev@openvswitch.org > http://openvswitch.org/mailman/listinfo/dev > _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev