[ovs-dev] [PATCH 3/4] ofproto-dpif-xlate: Drop 'may_learn' parameter from xlate_push_stats().
Ben Pfaff
blp at nicira.com
Fri Aug 22 22:47:53 UTC 2014
Both existing callers calculated 'may_learn' as 'stats->n_packets > 0', so
it was redundant. Because xlate_push_stats() is now entirely a no-op if
'stats->n_packets' is 0, we can now delete the tests entirely from the
cases that previously only ran if 'may_learn'.
Signed-off-by: Ben Pfaff <blp at nicira.com>
---
ofproto/ofproto-dpif-upcall.c | 17 ++++++++---------
ofproto/ofproto-dpif-xlate.c | 13 ++++---------
ofproto/ofproto-dpif-xlate.h | 5 ++---
3 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/ofproto/ofproto-dpif-upcall.c b/ofproto/ofproto-dpif-upcall.c
index 5f1d6d5..b5e1253 100644
--- a/ofproto/ofproto-dpif-upcall.c
+++ b/ofproto/ofproto-dpif-upcall.c
@@ -1283,7 +1283,7 @@ revalidate_ukey(struct udpif *udpif, struct udpif_key *ukey,
long long int last_used;
int error;
size_t i;
- bool may_learn, ok;
+ bool ok;
ok = false;
xoutp = NULL;
@@ -1312,9 +1312,8 @@ revalidate_ukey(struct udpif *udpif, struct udpif_key *ukey,
goto exit;
}
- may_learn = push.n_packets > 0;
if (ukey->xcache && !udpif->need_revalidate) {
- xlate_push_stats(ukey->xcache, may_learn, &push);
+ xlate_push_stats(ukey->xcache, &push);
ok = true;
goto exit;
}
@@ -1339,9 +1338,11 @@ revalidate_ukey(struct udpif *udpif, struct udpif_key *ukey,
xlate_in_init(&xin, ofproto, &flow, ofp_in_port, NULL, push.tcp_flags,
NULL);
- xin.resubmit_stats = push.n_packets ? &push : NULL;
+ if (push.n_packets) {
+ xin.resubmit_stats = &push;
+ xin.may_learn = true;
+ }
xin.xcache = ukey->xcache;
- xin.may_learn = may_learn;
xin.skip_wildcards = !udpif->need_revalidate;
xlate_actions(&xin, &xout);
xoutp = &xout;
@@ -1443,13 +1444,11 @@ push_dump_ops__(struct udpif *udpif, struct dump_op *ops, size_t n_ops)
struct netflow *netflow;
ofp_port_t ofp_in_port;
struct flow flow;
- bool may_learn;
int error;
- may_learn = push->n_packets > 0;
ovs_mutex_lock(&op->ukey->mutex);
if (op->ukey->xcache) {
- xlate_push_stats(op->ukey->xcache, may_learn, push);
+ xlate_push_stats(op->ukey->xcache, push);
ovs_mutex_unlock(&op->ukey->mutex);
continue;
}
@@ -1469,7 +1468,7 @@ push_dump_ops__(struct udpif *udpif, struct dump_op *ops, size_t n_ops)
xlate_in_init(&xin, ofproto, &flow, ofp_in_port, NULL,
push->tcp_flags, NULL);
xin.resubmit_stats = push->n_packets ? push : NULL;
- xin.may_learn = may_learn;
+ xin.may_learn = push->n_packets > 0;
xin.skip_wildcards = true;
xlate_actions_for_side_effects(&xin);
diff --git a/ofproto/ofproto-dpif-xlate.c b/ofproto/ofproto-dpif-xlate.c
index ccf0991..4ad74e3 100644
--- a/ofproto/ofproto-dpif-xlate.c
+++ b/ofproto/ofproto-dpif-xlate.c
@@ -4285,7 +4285,7 @@ xlate_cache_normal(struct ofproto_dpif *ofproto, struct flow *flow, int vlan)
/* Push stats and perform side effects of flow translation. */
void
-xlate_push_stats(struct xlate_cache *xcache, bool may_learn,
+xlate_push_stats(struct xlate_cache *xcache,
const struct dpif_flow_stats *stats)
{
struct xc_entry *entry;
@@ -4317,16 +4317,11 @@ xlate_push_stats(struct xlate_cache *xcache, bool may_learn,
stats->n_packets, stats->n_bytes);
break;
case XC_LEARN:
- if (may_learn) {
- ofproto_dpif_flow_mod(entry->u.learn.ofproto,
- entry->u.learn.fm);
- }
+ ofproto_dpif_flow_mod(entry->u.learn.ofproto, entry->u.learn.fm);
break;
case XC_NORMAL:
- if (may_learn) {
- xlate_cache_normal(entry->u.normal.ofproto,
- entry->u.normal.flow, entry->u.normal.vlan);
- }
+ xlate_cache_normal(entry->u.normal.ofproto, entry->u.normal.flow,
+ entry->u.normal.vlan);
break;
case XC_FIN_TIMEOUT:
xlate_fin_timeout__(entry->u.fin.rule, stats->tcp_flags,
diff --git a/ofproto/ofproto-dpif-xlate.h b/ofproto/ofproto-dpif-xlate.h
index 7394249..834c22b 100644
--- a/ofproto/ofproto-dpif-xlate.h
+++ b/ofproto/ofproto-dpif-xlate.h
@@ -1,4 +1,4 @@
-/* Copyright (c) 2009, 2010, 2011, 2012, 2013 Nicira, Inc.
+/* Copyright (c) 2009, 2010, 2011, 2012, 2013, 2014 Nicira, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -189,8 +189,7 @@ void xlate_out_copy(struct xlate_out *dst, const struct xlate_out *src);
int xlate_send_packet(const struct ofport_dpif *, struct ofpbuf *);
struct xlate_cache *xlate_cache_new(void);
-void xlate_push_stats(struct xlate_cache *, bool may_learn,
- const struct dpif_flow_stats *);
+void xlate_push_stats(struct xlate_cache *, const struct dpif_flow_stats *);
void xlate_cache_clear(struct xlate_cache *);
void xlate_cache_delete(struct xlate_cache *);
--
1.7.10.4
More information about the dev
mailing list