Thanks, applied to master.

On Tue, Jul 22, 2014 at 10:22:30PM -0700, Justin Pettit wrote:
> 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

Reply via email to