Thanks. I think that this commit is a code cleanup on its own, so I applied this to master.
On Thu, Oct 30, 2014 at 04:34:15PM -0700, Jarno Rajahalme wrote: > Acked-by: Jarno Rajahalme <jrajaha...@nicira.com> > > On Oct 30, 2014, at 3:36 PM, Ben Pfaff <b...@nicira.com> wrote: > > > OpenFlow has priorities in the 16-bit unsigned range, from 0 to 65535. > > In the classifier, it is sometimes useful to be able to have values below > > and above this range. With the 'unsigned int' type used for priorities > > until now, there were no values below the range, so some code worked > > around it by converting priorities to 64-bit signed integers. This didn't > > seem so great to me given that a plain 'int' also had the needed range. > > This commit therefore changes the type used for priorities to int. > > > > The interesting parts of this change are in pvector.h and classifier.c, > > where one can see the elimination of the use of int64_t. > > > > Signed-off-by: Ben Pfaff <b...@nicira.com> > > --- > > v1->v2: Switch priority type to 'int', instead of trying to change all the > > "greater than"s to "greater than or equals" and in later patches doing a > > lot of awkward +1s. > > --- > > lib/classifier-private.h | 5 ++--- > > lib/classifier.c | 24 ++++++++++-------------- > > lib/classifier.h | 9 ++++----- > > lib/match.c | 11 +++++------ > > lib/match.h | 9 ++++----- > > lib/ofp-util.h | 2 +- > > lib/pvector.c | 12 +++++++----- > > lib/pvector.h | 14 ++++++++------ > > ofproto/in-band.c | 4 ++-- > > ofproto/ofproto-provider.h | 6 ++---- > > ofproto/ofproto.c | 13 ++++++------- > > tests/test-classifier.c | 29 ++++++++++++++--------------- > > utilities/ovs-ofctl.c | 6 +++--- > > 13 files changed, 68 insertions(+), 76 deletions(-) > > > > diff --git a/lib/classifier-private.h b/lib/classifier-private.h > > index 10d29a5..145efbb 100644 > > --- a/lib/classifier-private.h > > +++ b/lib/classifier-private.h > > @@ -33,8 +33,7 @@ struct cls_subtable { > > /* The fields are only used by writers. */ > > int n_rules OVS_GUARDED; /* Number of rules, including > > * duplicates. */ > > - unsigned int max_priority OVS_GUARDED; /* Max priority of any rule in > > - * the subtable. */ > > + int max_priority OVS_GUARDED; /* Max priority of any rule in subtable. > > */ > > unsigned int max_count OVS_GUARDED; /* Count of max_priority rules. > > */ > > > > /* These fields are accessed by readers who care about wildcarding. */ > > @@ -72,7 +71,7 @@ struct cls_match { > > struct cls_partition *partition OVS_GUARDED; > > > > /* Accessed by readers interested in wildcarding. */ > > - unsigned int priority; /* Larger numbers are higher priorities. */ > > + int priority; /* Larger numbers are higher priorities. */ > > struct cmap_node index_nodes[CLS_MAX_INDICES]; /* Within subtable's > > * 'indices'. */ > > /* Accessed by all readers. */ > > diff --git a/lib/classifier.c b/lib/classifier.c > > index 9f306b9..dab43ec 100644 > > --- a/lib/classifier.c > > +++ b/lib/classifier.c > > @@ -114,11 +114,10 @@ static bool mask_prefix_bits_set(const struct > > flow_wildcards *, > > * > > * The caller must eventually destroy 'rule' with cls_rule_destroy(). > > * > > - * (OpenFlow uses priorities between 0 and UINT16_MAX, inclusive, but > > - * internally Open vSwitch supports a wider range.) */ > > + * Clients should not use priority INT_MIN. (OpenFlow uses priorities > > between > > + * 0 and UINT16_MAX, inclusive.) */ > > void > > -cls_rule_init(struct cls_rule *rule, > > - const struct match *match, unsigned int priority) > > +cls_rule_init(struct cls_rule *rule, const struct match *match, int > > priority) > > { > > minimatch_init(&rule->match, match); > > rule->priority = priority; > > @@ -128,8 +127,7 @@ cls_rule_init(struct cls_rule *rule, > > /* Same as cls_rule_init() for initialization from a "struct minimatch". */ > > void > > cls_rule_init_from_minimatch(struct cls_rule *rule, > > - const struct minimatch *match, > > - unsigned int priority) > > + const struct minimatch *match, int priority) > > { > > minimatch_clone(&rule->match, match); > > rule->priority = priority; > > @@ -607,7 +605,7 @@ classifier_remove(struct classifier *cls, struct > > cls_rule *rule) > > && --subtable->max_count == 0) { > > /* Find the new 'max_priority' and 'max_count'. */ > > struct cls_match *head; > > - unsigned int max_priority = 0; > > + int max_priority = INT_MIN; > > > > CMAP_FOR_EACH (head, cmap_node, &subtable->rules) { > > if (head->priority > max_priority) { > > @@ -668,7 +666,7 @@ classifier_lookup(const struct classifier *cls, const > > struct flow *flow, > > { > > const struct cls_partition *partition; > > tag_type tags; > > - int64_t best_priority = -1; > > + int best_priority = INT_MIN; > > const struct cls_match *best; > > struct trie_ctx trie_ctx[CLS_MAX_TRIES]; > > struct cls_subtable *subtable; > > @@ -717,8 +715,8 @@ classifier_lookup(const struct classifier *cls, const > > struct flow *flow, > > } > > > > rule = find_match_wc(subtable, flow, trie_ctx, cls->n_tries, wc); > > - if (rule && (int64_t)rule->priority > best_priority) { > > - best_priority = (int64_t)rule->priority; > > + if (rule && rule->priority > best_priority) { > > + best_priority = rule->priority; > > best = rule; > > } > > } > > @@ -767,8 +765,7 @@ out: > > * contain an exact match. */ > > struct cls_rule * > > classifier_find_match_exactly(const struct classifier *cls, > > - const struct match *target, > > - unsigned int priority) > > + const struct match *target, int priority) > > { > > struct cls_rule *retval; > > struct cls_rule cr; > > @@ -789,11 +786,10 @@ classifier_rule_overlaps(const struct classifier *cls, > > OVS_EXCLUDED(cls->mutex) > > { > > struct cls_subtable *subtable; > > - int64_t stop_at_priority = (int64_t)target->priority - 1; > > > > ovs_mutex_lock(&cls->mutex); > > /* Iterate subtables in the descending max priority order. */ > > - PVECTOR_FOR_EACH_PRIORITY (subtable, stop_at_priority, 2, > > + PVECTOR_FOR_EACH_PRIORITY (subtable, target->priority - 1, 2, > > sizeof(struct cls_subtable), > > &cls->subtables) { > > uint32_t storage[FLOW_U32S]; > > struct minimask mask; > > diff --git a/lib/classifier.h b/lib/classifier.h > > index c910ac4..92be5bf 100644 > > --- a/lib/classifier.h > > +++ b/lib/classifier.h > > @@ -258,14 +258,13 @@ struct classifier { > > /* A rule to be inserted to the classifier. */ > > struct cls_rule { > > struct minimatch match; /* Matching rule. */ > > - unsigned int priority; /* Larger numbers are higher priorities. > > */ > > + int priority; /* Larger numbers are higher priorities. > > */ > > struct cls_match *cls_match; /* NULL if rule is not in a classifier. */ > > }; > > > > -void cls_rule_init(struct cls_rule *, const struct match *, > > - unsigned int priority); > > +void cls_rule_init(struct cls_rule *, const struct match *, int priority); > > void cls_rule_init_from_minimatch(struct cls_rule *, const struct minimatch > > *, > > - unsigned int priority); > > + int priority); > > void cls_rule_clone(struct cls_rule *, const struct cls_rule *); > > void cls_rule_move(struct cls_rule *dst, struct cls_rule *src); > > void cls_rule_destroy(struct cls_rule *); > > @@ -303,7 +302,7 @@ struct cls_rule *classifier_find_rule_exactly(const > > struct classifier *, > > > > struct cls_rule *classifier_find_match_exactly(const struct classifier *, > > const struct match *, > > - unsigned int priority); > > + int priority); > > > > /* Iteration. */ > > > > diff --git a/lib/match.c b/lib/match.c > > index 1a28396..9a84546 100644 > > --- a/lib/match.c > > +++ b/lib/match.c > > @@ -853,7 +853,7 @@ format_flow_tunnel(struct ds *s, const struct match > > *match) > > /* Appends a string representation of 'match' to 's'. If 'priority' is > > * different from OFP_DEFAULT_PRIORITY, includes it in 's'. */ > > void > > -match_format(const struct match *match, struct ds *s, unsigned int > > priority) > > +match_format(const struct match *match, struct ds *s, int priority) > > { > > const struct flow_wildcards *wc = &match->wc; > > size_t start_len = s->length; > > @@ -866,7 +866,7 @@ match_format(const struct match *match, struct ds *s, > > unsigned int priority) > > BUILD_ASSERT_DECL(FLOW_WC_SEQ == 27); > > > > if (priority != OFP_DEFAULT_PRIORITY) { > > - ds_put_format(s, "priority=%u,", priority); > > + ds_put_format(s, "priority=%d,", priority); > > } > > > > format_uint32_masked(s, "pkt_mark", f->pkt_mark, wc->masks.pkt_mark); > > @@ -1110,7 +1110,7 @@ match_format(const struct match *match, struct ds *s, > > unsigned int priority) > > * different from OFP_DEFAULT_PRIORITY, includes it in the string. The > > caller > > * must free the string (with free()). */ > > char * > > -match_to_string(const struct match *match, unsigned int priority) > > +match_to_string(const struct match *match, int priority) > > { > > struct ds s = DS_EMPTY_INITIALIZER; > > match_format(match, &s, priority); > > @@ -1204,8 +1204,7 @@ minimatch_matches_flow(const struct minimatch *match, > > /* Appends a string representation of 'match' to 's'. If 'priority' is > > * different from OFP_DEFAULT_PRIORITY, includes it in 's'. */ > > void > > -minimatch_format(const struct minimatch *match, struct ds *s, > > - unsigned int priority) > > +minimatch_format(const struct minimatch *match, struct ds *s, int priority) > > { > > struct match megamatch; > > > > @@ -1217,7 +1216,7 @@ minimatch_format(const struct minimatch *match, > > struct ds *s, > > * different from OFP_DEFAULT_PRIORITY, includes it in the string. The > > caller > > * must free the string (with free()). */ > > char * > > -minimatch_to_string(const struct minimatch *match, unsigned int priority) > > +minimatch_to_string(const struct minimatch *match, int priority) > > { > > struct match megamatch; > > > > diff --git a/lib/match.h b/lib/match.h > > index af08fc0..7469eaa 100644 > > --- a/lib/match.h > > +++ b/lib/match.h > > @@ -141,8 +141,8 @@ uint32_t match_hash(const struct match *, uint32_t > > basis); > > void match_init_hidden_fields(struct match *); > > bool match_has_default_hidden_fields(const struct match *); > > > > -void match_format(const struct match *, struct ds *, unsigned int > > priority); > > -char *match_to_string(const struct match *, unsigned int priority); > > +void match_format(const struct match *, struct ds *, int priority); > > +char *match_to_string(const struct match *, int priority); > > void match_print(const struct match *); > > > > /* Compressed match. */ > > @@ -174,8 +174,7 @@ bool minimatch_equal(const struct minimatch *a, const > > struct minimatch *b); > > > > bool minimatch_matches_flow(const struct minimatch *, const struct flow *); > > > > -void minimatch_format(const struct minimatch *, struct ds *, > > - unsigned int priority); > > -char *minimatch_to_string(const struct minimatch *, unsigned int priority); > > +void minimatch_format(const struct minimatch *, struct ds *, int priority); > > +char *minimatch_to_string(const struct minimatch *, int priority); > > > > #endif /* match.h */ > > diff --git a/lib/ofp-util.h b/lib/ofp-util.h > > index af1a2a3..c9900d8 100644 > > --- a/lib/ofp-util.h > > +++ b/lib/ofp-util.h > > @@ -271,7 +271,7 @@ struct ofputil_flow_mod { > > struct list list_node; /* For queuing flow_mods. */ > > > > struct match match; > > - unsigned int priority; > > + int priority; > > > > /* Cookie matching. The flow_mod affects only flows that have cookies > > that > > * bitwise match 'cookie' bits in positions where 'cookie_mask has > > 1-bits. > > diff --git a/lib/pvector.c b/lib/pvector.c > > index e6cb664..3f2e9e8 100644 > > --- a/lib/pvector.c > > +++ b/lib/pvector.c > > @@ -69,8 +69,10 @@ pvector_destroy(struct pvector *pvec) > > static int > > pvector_entry_cmp(const void *a_, const void *b_) > > { > > - unsigned int a = ((const struct pvector_entry *)a_)->priority; > > - unsigned int b = ((const struct pvector_entry *)b_)->priority; > > + const struct pvector_entry *ap = a_; > > + const struct pvector_entry *bp = b_; > > + int a = ap->priority; > > + int b = bp->priority; > > > > return a > b ? -1 : a < b; > > } > > @@ -85,7 +87,7 @@ pvector_impl_sort(struct pvector_impl *impl) > > * which will be one past the vector if none exists. */ > > static int > > pvector_impl_find_priority(struct pvector_impl *impl, > > - unsigned int target_priority) > > + int target_priority) > > { > > const struct pvector_entry *entry; > > int index; > > @@ -114,7 +116,7 @@ pvector_impl_find(struct pvector_impl *impl, void > > *target) > > } > > > > void > > -pvector_insert(struct pvector *pvec, void *ptr, unsigned int priority) > > +pvector_insert(struct pvector *pvec, void *ptr, int priority) > > { > > struct pvector_impl *old, *new; > > int index; > > @@ -182,7 +184,7 @@ pvector_remove(struct pvector *pvec, void *ptr) > > > > /* Change entry's 'priority' and keep the vector ordered. */ > > void > > -pvector_change_priority(struct pvector *pvec, void *ptr, unsigned int > > priority) > > +pvector_change_priority(struct pvector *pvec, void *ptr, int priority) > > { > > struct pvector_impl *old = pvector_impl_get(pvec); > > int index = pvector_impl_find(old, ptr); > > diff --git a/lib/pvector.h b/lib/pvector.h > > index 61d71b9..40c8e93 100644 > > --- a/lib/pvector.h > > +++ b/lib/pvector.h > > @@ -46,10 +46,12 @@ > > * 'size', or update the 'priority' value of an entry, but only if that does > > * not change the ordering of the entries. Writers will never change the > > 'ptr' > > * values, or decrement the 'size' on a copy that readers have access to. > > + * > > + * Clients should not use priority INT_MIN. > > */ > > > > struct pvector_entry { > > - unsigned int priority; > > + int priority; > > void *ptr; > > }; > > > > @@ -77,8 +79,8 @@ static inline size_t pvector_count(const struct pvector > > *); > > static inline bool pvector_is_empty(const struct pvector *); > > > > /* Insertion and deletion. */ > > -void pvector_insert(struct pvector *, void *, unsigned int); > > -void pvector_change_priority(struct pvector *, void *, unsigned int); > > +void pvector_insert(struct pvector *, void *, int priority); > > +void pvector_change_priority(struct pvector *, void *, int priority); > > void pvector_remove(struct pvector *, void *); > > > > /* Iteration. > > @@ -135,14 +137,14 @@ static inline struct pvector_cursor > > pvector_cursor_init(const struct pvector *, > > size_t n_ahead, > > size_t obj_size); > > static inline void *pvector_cursor_next(struct pvector_cursor *, > > - int64_t stop_at_priority, > > + int stop_at_priority, > > size_t n_ahead, size_t obj_size); > > static inline void pvector_cursor_lookahead(const struct pvector_cursor *, > > int n, size_t size); > > > > #define PVECTOR_FOR_EACH(PTR, PVECTOR) \ > > for (struct pvector_cursor cursor__ = pvector_cursor_init(PVECTOR, 0, > > 0); \ > > - ((PTR) = pvector_cursor_next(&cursor__, -1, 0, 0)) != NULL; ) > > + ((PTR) = pvector_cursor_next(&cursor__, INT_MIN, 0, 0)) != NULL; ) > > > > /* Loop while priority is higher than 'PRIORITY' and prefetch objects > > * of size 'SZ' 'N' objects ahead from the current object. */ > > @@ -176,7 +178,7 @@ pvector_cursor_init(const struct pvector *pvec, > > } > > > > static inline void *pvector_cursor_next(struct pvector_cursor *cursor, > > - int64_t stop_at_priority, > > + int stop_at_priority, > > size_t n_ahead, size_t obj_size) > > { > > if (++cursor->entry_idx < cursor->size && > > diff --git a/ofproto/in-band.c b/ofproto/in-band.c > > index cbe0d1c..e25a27a 100644 > > --- a/ofproto/in-band.c > > +++ b/ofproto/in-band.c > > @@ -83,7 +83,7 @@ enum in_band_op { > > struct in_band_rule { > > struct hmap_node hmap_node; /* In struct in_band's "rules" hmap. */ > > struct match match; > > - unsigned int priority; > > + int priority; > > enum in_band_op op; > > }; > > > > @@ -236,7 +236,7 @@ in_band_must_output_to_local_port(const struct flow > > *flow) > > } > > > > static void > > -add_rule(struct in_band *ib, const struct match *match, unsigned int > > priority) > > +add_rule(struct in_band *ib, const struct match *match, int priority) > > { > > uint32_t hash = match_hash(match, 0); > > struct in_band_rule *rule; > > diff --git a/ofproto/ofproto-provider.h b/ofproto/ofproto-provider.h > > index 158f86e..14f1cba 100644 > > --- a/ofproto/ofproto-provider.h > > +++ b/ofproto/ofproto-provider.h > > @@ -1668,12 +1668,10 @@ int ofproto_class_unregister(const struct > > ofproto_class *); > > > > int ofproto_flow_mod(struct ofproto *, struct ofputil_flow_mod *) > > OVS_EXCLUDED(ofproto_mutex); > > -void ofproto_add_flow(struct ofproto *, const struct match *, > > - unsigned int priority, > > +void ofproto_add_flow(struct ofproto *, const struct match *, int priority, > > const struct ofpact *ofpacts, size_t ofpacts_len) > > OVS_EXCLUDED(ofproto_mutex); > > -void ofproto_delete_flow(struct ofproto *, > > - const struct match *, unsigned int priority) > > +void ofproto_delete_flow(struct ofproto *, const struct match *, int > > priority) > > OVS_EXCLUDED(ofproto_mutex); > > void ofproto_flush_flows(struct ofproto *); > > > > diff --git a/ofproto/ofproto.c b/ofproto/ofproto.c > > index b8f0e62..1233164 100644 > > --- a/ofproto/ofproto.c > > +++ b/ofproto/ofproto.c > > @@ -153,8 +153,7 @@ struct rule_criteria { > > }; > > > > static void rule_criteria_init(struct rule_criteria *, uint8_t table_id, > > - const struct match *match, > > - unsigned int priority, > > + const struct match *match, int priority, > > ovs_be64 cookie, ovs_be64 cookie_mask, > > ofp_port_t out_port, uint32_t out_group); > > static void rule_criteria_require_rw(struct rule_criteria *, > > @@ -1882,7 +1881,7 @@ ofproto_port_del(struct ofproto *ofproto, ofp_port_t > > ofp_port) > > > > static void > > flow_mod_init(struct ofputil_flow_mod *fm, > > - const struct match *match, unsigned int priority, > > + const struct match *match, int priority, > > const struct ofpact *ofpacts, size_t ofpacts_len, > > enum ofp_flow_mod_command command) > > { > > @@ -1907,7 +1906,7 @@ flow_mod_init(struct ofputil_flow_mod *fm, > > > > static int > > simple_flow_mod(struct ofproto *ofproto, > > - const struct match *match, unsigned int priority, > > + const struct match *match, int priority, > > const struct ofpact *ofpacts, size_t ofpacts_len, > > enum ofp_flow_mod_command command) > > { > > @@ -1931,7 +1930,7 @@ simple_flow_mod(struct ofproto *ofproto, > > * This is a helper function for in-band control and fail-open. */ > > void > > ofproto_add_flow(struct ofproto *ofproto, const struct match *match, > > - unsigned int priority, > > + int priority, > > const struct ofpact *ofpacts, size_t ofpacts_len) > > OVS_EXCLUDED(ofproto_mutex) > > { > > @@ -2018,7 +2017,7 @@ ofproto_flow_mod(struct ofproto *ofproto, struct > > ofputil_flow_mod *fm) > > * This is a helper function for in-band control and fail-open. */ > > void > > ofproto_delete_flow(struct ofproto *ofproto, > > - const struct match *target, unsigned int priority) > > + const struct match *target, int priority) > > OVS_EXCLUDED(ofproto_mutex) > > { > > struct classifier *cls = &ofproto->tables[0].cls; > > @@ -3510,7 +3509,7 @@ next_matching_table(const struct ofproto *ofproto, > > * supplied as 0. */ > > static void > > rule_criteria_init(struct rule_criteria *criteria, uint8_t table_id, > > - const struct match *match, unsigned int priority, > > + const struct match *match, int priority, > > ovs_be64 cookie, ovs_be64 cookie_mask, > > ofp_port_t out_port, uint32_t out_group) > > { > > diff --git a/tests/test-classifier.c b/tests/test-classifier.c > > index 85adb0d..9a58a18 100644 > > --- a/tests/test-classifier.c > > +++ b/tests/test-classifier.c > > @@ -107,8 +107,7 @@ test_rule_destroy(struct test_rule *rule) > > } > > } > > > > -static struct test_rule *make_rule(int wc_fields, unsigned int priority, > > - int value_pat); > > +static struct test_rule *make_rule(int wc_fields, int priority, int > > value_pat); > > static void free_rule(struct test_rule *); > > static struct test_rule *clone_rule(const struct test_rule *); > > > > @@ -466,10 +465,10 @@ static void > > pvector_verify(const struct pvector *pvec) > > { > > void *ptr OVS_UNUSED; > > - unsigned int priority, prev_priority = UINT_MAX; > > + int prev_priority = INT_MAX; > > > > PVECTOR_FOR_EACH (ptr, pvec) { > > - priority = cursor__.vector[cursor__.entry_idx].priority; > > + int priority = cursor__.vector[cursor__.entry_idx].priority; > > if (priority > prev_priority) { > > ovs_abort(0, "Priority vector is out of order (%u > %u)", > > priority, prev_priority); > > @@ -524,7 +523,7 @@ check_tables(const struct classifier *cls, int > > n_tables, int n_rules, > > pvector_verify(&cls->subtables); > > CMAP_FOR_EACH (table, cmap_node, &cls->subtables_map) { > > const struct cls_match *head; > > - unsigned int max_priority = 0; > > + int max_priority = INT_MIN; > > unsigned int max_count = 0; > > bool found = false; > > const struct cls_subtable *iter; > > @@ -552,7 +551,7 @@ check_tables(const struct classifier *cls, int > > n_tables, int n_rules, > > > > found_tables++; > > CMAP_FOR_EACH (head, cmap_node, &table->rules) { > > - unsigned int prev_priority = UINT_MAX; > > + int prev_priority = INT_MAX; > > const struct cls_match *rule; > > > > if (head->priority > max_priority) { > > @@ -597,7 +596,7 @@ check_tables(const struct classifier *cls, int > > n_tables, int n_rules, > > } > > > > static struct test_rule * > > -make_rule(int wc_fields, unsigned int priority, int value_pat) > > +make_rule(int wc_fields, int priority, int value_pat) > > { > > const struct cls_field *f; > > struct test_rule *rule; > > @@ -642,7 +641,7 @@ make_rule(int wc_fields, unsigned int priority, int > > value_pat) > > } > > > > rule = xzalloc(sizeof *rule); > > - cls_rule_init(&rule->cls_rule, &match, wc_fields ? priority : > > UINT_MAX); > > + cls_rule_init(&rule->cls_rule, &match, wc_fields ? priority : INT_MAX); > > return rule; > > } > > > > @@ -665,11 +664,11 @@ free_rule(struct test_rule *rule) > > } > > > > static void > > -shuffle(unsigned int *p, size_t n) > > +shuffle(int *p, size_t n) > > { > > for (; n > 1; n--, p++) { > > - unsigned int *q = &p[random_range(n)]; > > - unsigned int tmp = *p; > > + int *q = &p[random_range(n)]; > > + int tmp = *p; > > *p = *q; > > *q = tmp; > > } > > @@ -996,7 +995,7 @@ test_many_rules_in_one_table(int argc OVS_UNUSED, char > > *argv[] OVS_UNUSED) > > tcls_init(&tcls); > > > > for (i = 0; i < N_RULES; i++) { > > - unsigned int priority = random_uint32(); > > + int priority = random_range(INT_MAX); > > > > do { > > value_pats[i] = random_uint32() & value_mask; > > @@ -1043,13 +1042,13 @@ test_many_rules_in_n_tables(int n_tables) > > } > > > > for (iteration = 0; iteration < 30; iteration++) { > > - unsigned int priorities[MAX_RULES]; > > + int priorities[MAX_RULES]; > > struct classifier cls; > > struct tcls tcls; > > > > random_set_seed(iteration + 1); > > for (i = 0; i < MAX_RULES; i++) { > > - priorities[i] = i * 129; > > + priorities[i] = (i * 129) & INT_MAX; > > } > > shuffle(priorities, ARRAY_SIZE(priorities)); > > > > @@ -1059,7 +1058,7 @@ test_many_rules_in_n_tables(int n_tables) > > > > for (i = 0; i < MAX_RULES; i++) { > > struct test_rule *rule; > > - unsigned int priority = priorities[i]; > > + int priority = priorities[i]; > > int wcf = wcfs[random_range(n_tables)]; > > int value_pat = random_uint32() & ((1u << CLS_N_FIELDS) - 1); > > rule = make_rule(wcf, priority, value_pat); > > diff --git a/utilities/ovs-ofctl.c b/utilities/ovs-ofctl.c > > index b6b775f..f0ea15f 100644 > > --- a/utilities/ovs-ofctl.c > > +++ b/utilities/ovs-ofctl.c > > @@ -989,8 +989,8 @@ compare_flows(const void *afs_, const void *bfs_) > > int ret; > > > > if (!f) { > > - unsigned int a_pri = afs->priority; > > - unsigned int b_pri = bfs->priority; > > + int a_pri = afs->priority; > > + int b_pri = bfs->priority; > > ret = a_pri < b_pri ? -1 : a_pri > b_pri; > > } else { > > bool ina, inb; > > @@ -2355,7 +2355,7 @@ fte_free_all(struct classifier *cls) > > * Takes ownership of 'version'. */ > > static void > > fte_insert(struct classifier *cls, const struct match *match, > > - unsigned int priority, struct fte_version *version, int index) > > + int priority, struct fte_version *version, int index) > > { > > struct fte *old, *fte; > > > > -- > > 1.7.10.4 > > > > _______________________________________________ > > dev mailing list > > dev@openvswitch.org > > http://openvswitch.org/mailman/listinfo/dev > _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev