Message ID | 1490346920-104476-3-git-send-email-dlu998@gmail.com |
---|---|
State | Changes Requested |
Delegated to: | Daniele Di Proietto |
Headers | show |
Thanks for doing this Acked-by: Daniele Di Proietto <diproiettod@ovn.org> 2017-03-24 2:15 GMT-07:00 Darrell Ball <dlu998@gmail.com>: > Signed-off-by: Darrell Ball <dlu998@gmail.com> > Acked-by: Flavio Leitner <fbl@sysclose.org> > --- > lib/conntrack.c | 58 +++++++++++---------------------------------------------- > 1 file changed, 11 insertions(+), 47 deletions(-) > > diff --git a/lib/conntrack.c b/lib/conntrack.c > index 4f490fb..9a0763e 100644 > --- a/lib/conntrack.c > +++ b/lib/conntrack.c > @@ -318,22 +318,9 @@ conntrack_execute(struct conntrack *ct, struct dp_packet_batch *pkt_batch, > { > struct dp_packet **pkts = pkt_batch->packets; > size_t cnt = pkt_batch->count; > -#if !defined(__CHECKER__) && !defined(_WIN32) > - const size_t KEY_ARRAY_SIZE = cnt; > -#else > - enum { KEY_ARRAY_SIZE = NETDEV_MAX_BURST }; > -#endif > - struct conn_lookup_ctx ctxs[KEY_ARRAY_SIZE]; > - int8_t bucket_list[CONNTRACK_BUCKETS]; > - struct { > - unsigned bucket; > - unsigned long maps; > - } arr[KEY_ARRAY_SIZE]; > + struct conn_lookup_ctx ctx; > long long now = time_msec(); > size_t i = 0; > - uint8_t arrcnt = 0; > - > - BUILD_ASSERT_DECL(sizeof arr[0].maps * CHAR_BIT >= NETDEV_MAX_BURST); > > if (helper) { > static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(5, 5); > @@ -342,48 +329,25 @@ conntrack_execute(struct conntrack *ct, struct dp_packet_batch *pkt_batch, > /* Continue without the helper */ > } > > - memset(bucket_list, INT8_C(-1), sizeof bucket_list); > for (i = 0; i < cnt; i++) { > - unsigned bucket; > > - if (!conn_key_extract(ct, pkts[i], dl_type, &ctxs[i], zone)) { > + if (!conn_key_extract(ct, pkts[i], dl_type, &ctx, zone)) { > write_ct_md(pkts[i], CS_INVALID, zone, NULL, NULL); > continue; > } > > - bucket = hash_to_bucket(ctxs[i].hash); > - if (bucket_list[bucket] == INT8_C(-1)) { > - bucket_list[bucket] = arrcnt; > - > - arr[arrcnt].maps = 0; > - ULLONG_SET1(arr[arrcnt].maps, i); > - arr[arrcnt++].bucket = bucket; > - } else { > - ULLONG_SET1(arr[bucket_list[bucket]].maps, i); > - } > - } > - > - for (i = 0; i < arrcnt; i++) { > - struct conntrack_bucket *ctb = &ct->buckets[arr[i].bucket]; > - size_t j; > - > + struct conntrack_bucket *ctb = &ct->buckets[i]; > ct_lock_lock(&ctb->lock); > + conn_key_lookup(ctb, &ctx, now); > + struct conn *conn = process_one(ct, pkts[i], &ctx, zone, > + force, commit, now); > > - ULLONG_FOR_EACH_1(j, arr[i].maps) { > - struct conn *conn; > - > - conn_key_lookup(ctb, &ctxs[j], now); > - > - conn = process_one(ct, pkts[j], &ctxs[j], zone, force, commit, > - now); > - > - if (conn && setmark) { > - set_mark(pkts[j], conn, setmark[0], setmark[1]); > - } > + if (conn && setmark) { > + set_mark(pkts[i], conn, setmark[0], setmark[1]); > + } > > - if (conn && setlabel) { > - set_label(pkts[j], conn, &setlabel[0], &setlabel[1]); > - } > + if (conn && setlabel) { > + set_label(pkts[i], conn, &setlabel[0], &setlabel[1]); > } > ct_lock_unlock(&ctb->lock); > } > -- > 1.9.1 > > _______________________________________________ > dev mailing list > dev@openvswitch.org > https://mail.openvswitch.org/mailman/listinfo/ovs-dev
Would be nice to have a commit message, with the motivation for the change. Jarno > On Mar 24, 2017, at 2:15 AM, Darrell Ball <dlu998@gmail.com> wrote: > > Signed-off-by: Darrell Ball <dlu998@gmail.com> > Acked-by: Flavio Leitner <fbl@sysclose.org> > --- > lib/conntrack.c | 58 +++++++++++---------------------------------------------- > 1 file changed, 11 insertions(+), 47 deletions(-) > > diff --git a/lib/conntrack.c b/lib/conntrack.c > index 4f490fb..9a0763e 100644 > --- a/lib/conntrack.c > +++ b/lib/conntrack.c > @@ -318,22 +318,9 @@ conntrack_execute(struct conntrack *ct, struct dp_packet_batch *pkt_batch, > { > struct dp_packet **pkts = pkt_batch->packets; > size_t cnt = pkt_batch->count; > -#if !defined(__CHECKER__) && !defined(_WIN32) > - const size_t KEY_ARRAY_SIZE = cnt; > -#else > - enum { KEY_ARRAY_SIZE = NETDEV_MAX_BURST }; > -#endif > - struct conn_lookup_ctx ctxs[KEY_ARRAY_SIZE]; > - int8_t bucket_list[CONNTRACK_BUCKETS]; > - struct { > - unsigned bucket; > - unsigned long maps; > - } arr[KEY_ARRAY_SIZE]; > + struct conn_lookup_ctx ctx; > long long now = time_msec(); > size_t i = 0; > - uint8_t arrcnt = 0; > - > - BUILD_ASSERT_DECL(sizeof arr[0].maps * CHAR_BIT >= NETDEV_MAX_BURST); > > if (helper) { > static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(5, 5); > @@ -342,48 +329,25 @@ conntrack_execute(struct conntrack *ct, struct dp_packet_batch *pkt_batch, > /* Continue without the helper */ > } > > - memset(bucket_list, INT8_C(-1), sizeof bucket_list); > for (i = 0; i < cnt; i++) { > - unsigned bucket; > > - if (!conn_key_extract(ct, pkts[i], dl_type, &ctxs[i], zone)) { > + if (!conn_key_extract(ct, pkts[i], dl_type, &ctx, zone)) { > write_ct_md(pkts[i], CS_INVALID, zone, NULL, NULL); > continue; > } > > - bucket = hash_to_bucket(ctxs[i].hash); > - if (bucket_list[bucket] == INT8_C(-1)) { > - bucket_list[bucket] = arrcnt; > - > - arr[arrcnt].maps = 0; > - ULLONG_SET1(arr[arrcnt].maps, i); > - arr[arrcnt++].bucket = bucket; > - } else { > - ULLONG_SET1(arr[bucket_list[bucket]].maps, i); > - } > - } > - > - for (i = 0; i < arrcnt; i++) { > - struct conntrack_bucket *ctb = &ct->buckets[arr[i].bucket]; > - size_t j; > - > + struct conntrack_bucket *ctb = &ct->buckets[i]; > ct_lock_lock(&ctb->lock); > + conn_key_lookup(ctb, &ctx, now); > + struct conn *conn = process_one(ct, pkts[i], &ctx, zone, > + force, commit, now); > > - ULLONG_FOR_EACH_1(j, arr[i].maps) { > - struct conn *conn; > - > - conn_key_lookup(ctb, &ctxs[j], now); > - > - conn = process_one(ct, pkts[j], &ctxs[j], zone, force, commit, > - now); > - > - if (conn && setmark) { > - set_mark(pkts[j], conn, setmark[0], setmark[1]); > - } > + if (conn && setmark) { > + set_mark(pkts[i], conn, setmark[0], setmark[1]); > + } > > - if (conn && setlabel) { > - set_label(pkts[j], conn, &setlabel[0], &setlabel[1]); > - } > + if (conn && setlabel) { > + set_label(pkts[i], conn, &setlabel[0], &setlabel[1]); > } > ct_lock_unlock(&ctb->lock); > } > -- > 1.9.1 > > _______________________________________________ > dev mailing list > dev@openvswitch.org > https://mail.openvswitch.org/mailman/listinfo/ovs-dev
Thanks for pointing that out; it was on my todo list from before and I forgot about it. On 5/1/17, 10:54 AM, "ovs-dev-bounces@openvswitch.org on behalf of Jarno Rajahalme" <ovs-dev-bounces@openvswitch.org on behalf of jarno@ovn.org> wrote: Would be nice to have a commit message, with the motivation for the change. Jarno > On Mar 24, 2017, at 2:15 AM, Darrell Ball <dlu998@gmail.com> wrote: > > Signed-off-by: Darrell Ball <dlu998@gmail.com> > Acked-by: Flavio Leitner <fbl@sysclose.org> > --- > lib/conntrack.c | 58 +++++++++++---------------------------------------------- > 1 file changed, 11 insertions(+), 47 deletions(-) > > diff --git a/lib/conntrack.c b/lib/conntrack.c > index 4f490fb..9a0763e 100644 > --- a/lib/conntrack.c > +++ b/lib/conntrack.c > @@ -318,22 +318,9 @@ conntrack_execute(struct conntrack *ct, struct dp_packet_batch *pkt_batch, > { > struct dp_packet **pkts = pkt_batch->packets; > size_t cnt = pkt_batch->count; > -#if !defined(__CHECKER__) && !defined(_WIN32) > - const size_t KEY_ARRAY_SIZE = cnt; > -#else > - enum { KEY_ARRAY_SIZE = NETDEV_MAX_BURST }; > -#endif > - struct conn_lookup_ctx ctxs[KEY_ARRAY_SIZE]; > - int8_t bucket_list[CONNTRACK_BUCKETS]; > - struct { > - unsigned bucket; > - unsigned long maps; > - } arr[KEY_ARRAY_SIZE]; > + struct conn_lookup_ctx ctx; > long long now = time_msec(); > size_t i = 0; > - uint8_t arrcnt = 0; > - > - BUILD_ASSERT_DECL(sizeof arr[0].maps * CHAR_BIT >= NETDEV_MAX_BURST); > > if (helper) { > static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(5, 5); > @@ -342,48 +329,25 @@ conntrack_execute(struct conntrack *ct, struct dp_packet_batch *pkt_batch, > /* Continue without the helper */ > } > > - memset(bucket_list, INT8_C(-1), sizeof bucket_list); > for (i = 0; i < cnt; i++) { > - unsigned bucket; > > - if (!conn_key_extract(ct, pkts[i], dl_type, &ctxs[i], zone)) { > + if (!conn_key_extract(ct, pkts[i], dl_type, &ctx, zone)) { > write_ct_md(pkts[i], CS_INVALID, zone, NULL, NULL); > continue; > } > > - bucket = hash_to_bucket(ctxs[i].hash); > - if (bucket_list[bucket] == INT8_C(-1)) { > - bucket_list[bucket] = arrcnt; > - > - arr[arrcnt].maps = 0; > - ULLONG_SET1(arr[arrcnt].maps, i); > - arr[arrcnt++].bucket = bucket; > - } else { > - ULLONG_SET1(arr[bucket_list[bucket]].maps, i); > - } > - } > - > - for (i = 0; i < arrcnt; i++) { > - struct conntrack_bucket *ctb = &ct->buckets[arr[i].bucket]; > - size_t j; > - > + struct conntrack_bucket *ctb = &ct->buckets[i]; > ct_lock_lock(&ctb->lock); > + conn_key_lookup(ctb, &ctx, now); > + struct conn *conn = process_one(ct, pkts[i], &ctx, zone, > + force, commit, now); > > - ULLONG_FOR_EACH_1(j, arr[i].maps) { > - struct conn *conn; > - > - conn_key_lookup(ctb, &ctxs[j], now); > - > - conn = process_one(ct, pkts[j], &ctxs[j], zone, force, commit, > - now); > - > - if (conn && setmark) { > - set_mark(pkts[j], conn, setmark[0], setmark[1]); > - } > + if (conn && setmark) { > + set_mark(pkts[i], conn, setmark[0], setmark[1]); > + } > > - if (conn && setlabel) { > - set_label(pkts[j], conn, &setlabel[0], &setlabel[1]); > - } > + if (conn && setlabel) { > + set_label(pkts[i], conn, &setlabel[0], &setlabel[1]); > } > ct_lock_unlock(&ctb->lock); > } > -- > 1.9.1 > > _______________________________________________ > dev mailing list > dev@openvswitch.org > https://urldefense.proofpoint.com/v2/url?u=https-3A__mail.openvswitch.org_mailman_listinfo_ovs-2Ddev&d=DwICAg&c=uilaK90D4TOVoH58JNXRgQ&r=BVhFA09CGX7JQ5Ih-uZnsw&m=6g0A5S-JcYSJgz5d0NvkCE57V_TZhpdjImW7b6GhnIY&s=mtFK9-RPvtX_F1wWJM0SgoFhEWQ2c7v3iiUpUIQiA_A&e= _______________________________________________ dev mailing list dev@openvswitch.org https://urldefense.proofpoint.com/v2/url?u=https-3A__mail.openvswitch.org_mailman_listinfo_ovs-2Ddev&d=DwICAg&c=uilaK90D4TOVoH58JNXRgQ&r=BVhFA09CGX7JQ5Ih-uZnsw&m=6g0A5S-JcYSJgz5d0NvkCE57V_TZhpdjImW7b6GhnIY&s=mtFK9-RPvtX_F1wWJM0SgoFhEWQ2c7v3iiUpUIQiA_A&e=
diff --git a/lib/conntrack.c b/lib/conntrack.c index 4f490fb..9a0763e 100644 --- a/lib/conntrack.c +++ b/lib/conntrack.c @@ -318,22 +318,9 @@ conntrack_execute(struct conntrack *ct, struct dp_packet_batch *pkt_batch, { struct dp_packet **pkts = pkt_batch->packets; size_t cnt = pkt_batch->count; -#if !defined(__CHECKER__) && !defined(_WIN32) - const size_t KEY_ARRAY_SIZE = cnt; -#else - enum { KEY_ARRAY_SIZE = NETDEV_MAX_BURST }; -#endif - struct conn_lookup_ctx ctxs[KEY_ARRAY_SIZE]; - int8_t bucket_list[CONNTRACK_BUCKETS]; - struct { - unsigned bucket; - unsigned long maps; - } arr[KEY_ARRAY_SIZE]; + struct conn_lookup_ctx ctx; long long now = time_msec(); size_t i = 0; - uint8_t arrcnt = 0; - - BUILD_ASSERT_DECL(sizeof arr[0].maps * CHAR_BIT >= NETDEV_MAX_BURST); if (helper) { static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(5, 5); @@ -342,48 +329,25 @@ conntrack_execute(struct conntrack *ct, struct dp_packet_batch *pkt_batch, /* Continue without the helper */ } - memset(bucket_list, INT8_C(-1), sizeof bucket_list); for (i = 0; i < cnt; i++) { - unsigned bucket; - if (!conn_key_extract(ct, pkts[i], dl_type, &ctxs[i], zone)) { + if (!conn_key_extract(ct, pkts[i], dl_type, &ctx, zone)) { write_ct_md(pkts[i], CS_INVALID, zone, NULL, NULL); continue; } - bucket = hash_to_bucket(ctxs[i].hash); - if (bucket_list[bucket] == INT8_C(-1)) { - bucket_list[bucket] = arrcnt; - - arr[arrcnt].maps = 0; - ULLONG_SET1(arr[arrcnt].maps, i); - arr[arrcnt++].bucket = bucket; - } else { - ULLONG_SET1(arr[bucket_list[bucket]].maps, i); - } - } - - for (i = 0; i < arrcnt; i++) { - struct conntrack_bucket *ctb = &ct->buckets[arr[i].bucket]; - size_t j; - + struct conntrack_bucket *ctb = &ct->buckets[i]; ct_lock_lock(&ctb->lock); + conn_key_lookup(ctb, &ctx, now); + struct conn *conn = process_one(ct, pkts[i], &ctx, zone, + force, commit, now); - ULLONG_FOR_EACH_1(j, arr[i].maps) { - struct conn *conn; - - conn_key_lookup(ctb, &ctxs[j], now); - - conn = process_one(ct, pkts[j], &ctxs[j], zone, force, commit, - now); - - if (conn && setmark) { - set_mark(pkts[j], conn, setmark[0], setmark[1]); - } + if (conn && setmark) { + set_mark(pkts[i], conn, setmark[0], setmark[1]); + } - if (conn && setlabel) { - set_label(pkts[j], conn, &setlabel[0], &setlabel[1]); - } + if (conn && setlabel) { + set_label(pkts[i], conn, &setlabel[0], &setlabel[1]); } ct_lock_unlock(&ctb->lock); }