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

Reply via email to