On Tue, Apr 15, 2014 at 6:42 AM, Alex Wang <al...@nicira.com> wrote:
> In order to allow handlers directly read upcalls from datapath,
> we need to support per-handler netlink socket for each vport in
> datapath.  This commit makes this happen.  Also, it is guaranteed
> backward and forward compatibility with previous branch.
>
> Signed-off-by: Alex Wang <al...@nicira.com>
> Acked-by: Thomas Graf <tg...@redhat.com>
>
> ---
> V7 -> V8:
> - declare "u32 *ids" as "u32 ids[]" to save space and pointer indirection.
> - use rcu_dereference() when the dereference only happens within the
>   rcu read-side critical section.
> - fix the comments.
>
> V6 -> V7:
> - rebase.
>
> V5 -> V6:
> - '__force' cast 'struct vport_portids *' in ovs_vport_free().
>
> V4 -> V5:
> - use nla_memcpy() instead of memcpy().
> - move 'struct rcu_head' back in the 'struct vport_portids'
>   for cacheline efficiency.
>
> V3 -> V4:
> - define the type of OVS_VPORT_ATTR_UPCALL_PID to NLA_U32.
> - add check of the OVS_VPORT_ATTR_UPCALL_PID in attr array in
>   ovs_vport_cmd_set().
> - use reciprocal_div() in the modular computation, to reduce the
>   overhead.
>
> V2 -> V3:
> - use OVS_DP_ATTR_USER_FEATURES to control the type of
>   OVS_VPORT_ATTR_UPCALL_PID attribute returned by the ovs_vport_cmd_get().
> - directly free the 'vport->upcall_portids' in ovs_vport_free().
> - add check to guarantee pids array length is always positive.
>
> PATCH -> V2:
> - rebase.
>
> major changes since RFC:
> - guarantee the compatibility with branch-2.1 userspace.
> - use rcu to protect upcall port_id array multi-access.
> - use skb_get_rxhash() to select the port id to send upcall.
....

> diff --git a/datapath/vport.h b/datapath/vport.h
> index 18b723e..09ecf7c 100644
> --- a/datapath/vport.h
> +++ b/datapath/vport.h
> @@ -23,6 +23,7 @@
>  #include <linux/list.h>
>  #include <linux/netlink.h>
>  #include <linux/openvswitch.h>
> +#include <linux/reciprocal_div.h>
>  #include <linux/skbuff.h>
>  #include <linux/spinlock.h>
>  #include <linux/u64_stats_sync.h>
> @@ -50,6 +51,11 @@ void ovs_vport_get_stats(struct vport *, struct 
> ovs_vport_stats *);
>  int ovs_vport_set_options(struct vport *, struct nlattr *options);
>  int ovs_vport_get_options(const struct vport *, struct sk_buff *);
>
> +int ovs_vport_set_upcall_portids(struct vport *, struct nlattr *pids);
> +int ovs_vport_get_upcall_portids(const struct vport *, struct sk_buff *);
> +
extra blank line.
> +u32 ovs_vport_find_portid(const struct vport *, struct sk_buff *);
> +
Lets rename to make the consistent.
s/ovs_vport_find_portid/ovs_vport_find_upcall_portid

>  int ovs_vport_send(struct vport *, struct sk_buff *);
>
>  /* The following definitions are for implementers of vport devices: */
> @@ -60,13 +66,27 @@ struct vport_err_stats {
>         u64 tx_dropped;
>         u64 tx_errors;
>  };

Looks good to me.
Acked-by: Pravin B Shelar <pshe...@nicira.com>

Thanks.
_______________________________________________
dev mailing list
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev

Reply via email to