Thx for the revision,
> +/* Removes 'rule' from 'cls', also destructing the 'rule'. */ > +static void > +dpcls_remove(struct dpcls *cls, struct dpcls_rule *rule) > +{ > + struct dpcls_subtable *subtable; > + > + ovs_assert(rule->mask); > + > + INIT_CONTAINER(subtable, rule->mask, mask); > + > + if (cmap_remove(&subtable->rules, &rule->cmap_node, rule->flow.hash) > + == 0) { > + dpcls_destroy_subtable(cls, subtable); > + } > + > + rule->mask = NULL; > +} > The assignment here caused a segfault in test, since there could be pmd threads referring to the flow when dpcls_remove() is called. We should not reset the pointer. 32 UDP flows Spirent test showed no observable improvement but let's wait for the per-pmd-thread classifier/flow-table~ Otherwise, all tested and looked good~ Acked-by: Alex Wang <al...@nicira.com> _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev