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 <[email protected]>
_______________________________________________
dev mailing list
[email protected]
http://openvswitch.org/mailman/listinfo/dev