[ovs-dev] [PATCH 1/5] dpif-netdev: Store actions data and size contiguously.
Ethan Jackson
ethan at nicira.com
Mon Apr 20 19:35:49 UTC 2015
I'll merge this shortly.
Acked-by: Ethan Jackson <ethan at nicira.com>
On Wed, Apr 15, 2015 at 11:11 AM, Daniele Di Proietto
<diproiettod at vmware.com> wrote:
> As stated by the comment above the structure, the 'action' pointer does not
> change during the 'dp_netdev_actions' lifetime: we might as well embed
> the pointed memory into the structure.
>
> The commit also updates the description of dp_netdev_actions_create().
>
> Signed-off-by: Daniele Di Proietto <diproiettod at vmware.com>
> ---
> lib/dpif-netdev.c | 12 +++++-------
> 1 file changed, 5 insertions(+), 7 deletions(-)
>
> diff --git a/lib/dpif-netdev.c b/lib/dpif-netdev.c
> index 2cdb2cd..cad063d 100644
> --- a/lib/dpif-netdev.c
> +++ b/lib/dpif-netdev.c
> @@ -332,8 +332,8 @@ static int dpif_netdev_flow_from_nlattrs(const struct nlattr *, uint32_t,
> struct dp_netdev_actions {
> /* These members are immutable: they do not change during the struct's
> * lifetime. */
> - struct nlattr *actions; /* Sequence of OVS_ACTION_ATTR_* attributes. */
> unsigned int size; /* Size of 'actions', in bytes. */
> + struct nlattr actions[]; /* Sequence of OVS_ACTION_ATTR_* attributes. */
> };
>
> struct dp_netdev_actions *dp_netdev_actions_create(const struct nlattr *,
> @@ -2432,16 +2432,15 @@ dpif_netdev_queue_to_priority(const struct dpif *dpif OVS_UNUSED,
> }
>
>
> -/* Creates and returns a new 'struct dp_netdev_actions', with a reference count
> - * of 1, whose actions are a copy of from the 'ofpacts_len' bytes of
> - * 'ofpacts'. */
> +/* Creates and returns a new 'struct dp_netdev_actions', whose actions are
> + * a copy of the 'ofpacts_len' bytes of 'ofpacts'. */
> struct dp_netdev_actions *
> dp_netdev_actions_create(const struct nlattr *actions, size_t size)
> {
> struct dp_netdev_actions *netdev_actions;
>
> - netdev_actions = xmalloc(sizeof *netdev_actions);
> - netdev_actions->actions = xmemdup(actions, size);
> + netdev_actions = xmalloc(sizeof *netdev_actions + size);
> + memcpy(netdev_actions->actions, actions, size);
> netdev_actions->size = size;
>
> return netdev_actions;
> @@ -2456,7 +2455,6 @@ dp_netdev_flow_get_actions(const struct dp_netdev_flow *flow)
> static void
> dp_netdev_actions_free(struct dp_netdev_actions *actions)
> {
> - free(actions->actions);
> free(actions);
> }
>
> --
> 2.1.4
>
> _______________________________________________
> dev mailing list
> dev at openvswitch.org
> http://openvswitch.org/mailman/listinfo/dev
More information about the dev
mailing list