xlate: Skip recirculation for output and set actions
Until
8bf009bf8ab4 ("xlate: Always recirculate after an MPLS POP to a
non-MPLS ethertype.") the translation code took some care to only
recirculate as a result of a pop_mpls action if necessary. This was
implemented using per-action checks and resulted in some maintenance
burden.
Unfortunately recirculation is a relatively expensive operation and a
performance degradation of up to 35% has been observed with the above
mentioned patch applied for the arguably common case of:
pop_mpls,set(l2 field),output
This patch attempts to strike a balance between performance and
maintainability by special casing set and output actions such
that recirculation may be avoided.
This partially reverts the above mentioned commit. In particular most
of the C code outside of do_xlate_actions().
Signed-off-by: Simon Horman <simon.horman@netronome.com>
Acked-by: Jarno Rajahalme <jarno@ovn.org>