[ovs-dev] [batch v2 3/5] dpif-netdev: Take the classifier rdlock once per batch.
Jarno Rajahalme
jrajahalme at nicira.com
Mon Jun 30 20:31:02 UTC 2014
Acked-by: Jarno Rajahalme <jrajahalme at nicira.com>
Jarno
On Jun 30, 2014, at 1:11 PM, Ethan Jackson <ethan at nicira.com> wrote:
> Signed-off-by: Ethan Jackson <ethan at nicira.com>
> ---
> lib/dpif-netdev.c | 8 +++++---
> 1 file changed, 5 insertions(+), 3 deletions(-)
>
> diff --git a/lib/dpif-netdev.c b/lib/dpif-netdev.c
> index 8954e1b..4deb763 100644
> --- a/lib/dpif-netdev.c
> +++ b/lib/dpif-netdev.c
> @@ -1073,15 +1073,13 @@ dp_netdev_flow_cast(const struct cls_rule *cr)
>
> static struct dp_netdev_flow *
> dp_netdev_lookup_flow(const struct dp_netdev *dp, const struct miniflow *key)
> - OVS_EXCLUDED(dp->cls.rwlock)
> + OVS_REQ_RDLOCK(dp->cls.rwlock)
> {
> struct dp_netdev_flow *netdev_flow;
> struct cls_rule *rule;
>
> - fat_rwlock_rdlock(&dp->cls.rwlock);
> rule = classifier_lookup_miniflow_first(&dp->cls, key);
> netdev_flow = dp_netdev_flow_cast(rule);
> - fat_rwlock_unlock(&dp->cls.rwlock);
>
> return netdev_flow;
> }
> @@ -1320,7 +1318,9 @@ dpif_netdev_flow_put(struct dpif *dpif, const struct dpif_flow_put *put)
> miniflow_init(&miniflow, &flow);
>
> ovs_mutex_lock(&dp->flow_mutex);
> + fat_rwlock_rdlock(&dp->cls.rwlock);
> netdev_flow = dp_netdev_lookup_flow(dp, &miniflow);
> + fat_rwlock_unlock(&dp->cls.rwlock);
> if (!netdev_flow) {
> if (put->flags & DPIF_FP_CREATE) {
> if (hmap_count(&dp->flow_table) < MAX_FLOWS) {
> @@ -2080,6 +2080,7 @@ dp_netdev_input(struct dp_netdev *dp, struct dpif_packet **packets, int cnt,
>
> miniflow_initialize(&key.flow, key.buf);
>
> + fat_rwlock_rdlock(&dp->cls.rwlock);
> for (i = 0; i < cnt; i++) {
> struct dp_netdev_flow *netdev_flow;
> struct ofpbuf *buf = &packets[i]->ofpbuf;
> @@ -2120,6 +2121,7 @@ dp_netdev_input(struct dp_netdev *dp, struct dpif_packet **packets, int cnt,
> }
> }
> }
> + fat_rwlock_unlock(&dp->cls.rwlock);
>
> if (batch.flow) {
> packet_batch_execute(&batch, dp);
> --
> 1.8.1.2
>
> _______________________________________________
> dev mailing list
> dev at openvswitch.org
> http://openvswitch.org/mailman/listinfo/dev
More information about the dev
mailing list