On Thu, May 18, 2023 at 04:08:34PM -0400, Mike Pattrick wrote:
> Several xlate actions used in recursive translation currently store a
> large amount of information on the stack. This can result in handler
> threads quickly running out of stack space despite before
> xlate_resubmit_resource_check() is able to terminate translation. This
> patch reduces stack usage by over 3kb from several translation actions.
>
> This patch also moves some trace function from do_xlate_actions into its
> own function to reduce stack usage.
>
> Reported-at: https://bugzilla.redhat.com/show_bug.cgi?id=2104779
> Signed-off-by: Mike Pattrick <[email protected]>
>
> ---
>
> Since v1:
> - Refactored code into specialized functions and renamed variables for
> improved readability.
>
> ---
> ofproto/ofproto-dpif-xlate.c | 223 ++++++++++++++++++++++-------------
> 1 file changed, 141 insertions(+), 82 deletions(-)
>
> diff --git a/ofproto/ofproto-dpif-xlate.c b/ofproto/ofproto-dpif-xlate.c
> index 29f4daa63..abfa717e2 100644
> --- a/ofproto/ofproto-dpif-xlate.c
> +++ b/ofproto/ofproto-dpif-xlate.c
> @@ -501,6 +501,90 @@ ctx_cancel_freeze(struct xlate_ctx *ctx)
>
> static void finish_freezing(struct xlate_ctx *ctx);
>
> +/* These functions and structure are used to save stack space in actions that
> + * need to retain a large amount of xlate_ctx state. */
> +struct xretained_state {
> + union mf_subvalue new_stack[1024 / sizeof(union mf_subvalue)];
> + uint64_t actset_stub[1024 / 8];
> + struct ofpbuf old_stack;
> + struct ofpbuf old_action_set;
> + struct flow old_flow;
> + struct flow old_base;
> + struct flow_tnl flow_tnl;
> +};
> +
> +/* The return of this function must be freed by xretain_state_restore(). */
> +static inline struct xretained_state *
> +xretain_state_save(struct xlate_ctx *ctx)
Hi Mike,
nit: I don't think the inline keyword is needed here, or elsewhere in this
patch. Because the compiler should be able to figure this out.
So unless there is a strong reason I'd prefer to drop 'inline'.
Otherwise the patch looks good to me.
_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev