Skip to content

Commit

Permalink
Revert "lib/classifier: Minimize critical section."
Browse files Browse the repository at this point in the history
This reverts commit d206443, which
fails clang thread satefy analysis.

A more complete patch will be introduced later.

Signed-off-by: Jarno Rajahalme <[email protected]>
  • Loading branch information
Jarno Rajahalme committed Oct 15, 2014
1 parent d206443 commit 0722ee5
Showing 1 changed file with 12 additions and 8 deletions.
20 changes: 12 additions & 8 deletions lib/classifier.c
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,8 @@ cls_match_alloc(struct cls_rule *rule)
}

static struct cls_subtable *find_subtable(const struct classifier *cls,
const struct minimask *);
const struct minimask *)
OVS_REQUIRES(cls->mutex);
static struct cls_subtable *insert_subtable(struct classifier *cls,
const struct minimask *)
OVS_REQUIRES(cls->mutex);
Expand Down Expand Up @@ -1089,26 +1090,28 @@ classifier_find_rule_exactly(const struct classifier *cls,
struct cls_match *head, *rule;
struct cls_subtable *subtable;

ovs_mutex_lock(&cls->mutex);
subtable = find_subtable(cls, &target->match.mask);
if (!subtable || target->priority > subtable->max_priority) {
return NULL;
if (!subtable) {
goto out;
}

/* Skip if there is no hope. */
if (target->priority > subtable->max_priority) {
goto out;
}

head = find_equal(subtable, &target->match.flow,
miniflow_hash_in_minimask(&target->match.flow,
&target->match.mask, 0));


/* Use RCU list instead of locking when one is available. */
ovs_mutex_lock(&cls->mutex);
FOR_EACH_RULE_IN_LIST (rule, head) {
if (target->priority >= rule->priority) {
ovs_mutex_unlock(&cls->mutex);
return target->priority == rule->priority ? rule->cls_rule : NULL;
}
}
out:
ovs_mutex_unlock(&cls->mutex);

return NULL;
}

Expand Down Expand Up @@ -1336,6 +1339,7 @@ cls_cursor_advance(struct cls_cursor *cursor)

static struct cls_subtable *
find_subtable(const struct classifier *cls, const struct minimask *mask)
OVS_REQUIRES(cls->mutex)
{
struct cls_subtable *subtable;

Expand Down

0 comments on commit 0722ee5

Please sign in to comment.