[ovs-dev] [PATCH 4/4] lib/classifier: Clarify subtable skipping.
Jarno Rajahalme
jrajahalme at nicira.com
Fri Jul 11 11:55:57 UTC 2014
Clarify comments for trie-based subtable skipping.
Perform the cheaper check first.
Signed-off-by: Jarno Rajahalme <jrajahalme at nicira.com>
---
lib/classifier.c | 26 ++++++++++++--------------
1 file changed, 12 insertions(+), 14 deletions(-)
diff --git a/lib/classifier.c b/lib/classifier.c
index cd4de54..9a7b9fd 100644
--- a/lib/classifier.c
+++ b/lib/classifier.c
@@ -1442,27 +1442,25 @@ check_tries(struct trie_ctx trie_ctx[CLS_MAX_TRIES], unsigned int n_tries,
/* Possible to skip the rest of the subtable if subtable's
* prefix on the field is not included in the lookup result. */
if (!be_get_bit_at(&ctx->match_plens.be32, field_plen[j] - 1)) {
- /* RFC: We want the trie lookup to never result in
- * unwildcarding any bits that would not be unwildcarded
- * otherwise. Since the trie is shared by the whole
- * classifier, it is possible that the 'maskbits' contain
- * bits that are irrelevant for the partition of the
- * classifier relevant for the current flow. */
+ /* We want the trie lookup to never result in unwildcarding
+ * any bits that would not be unwildcarded otherwise.
+ * Since the trie is shared by the whole classifier, it is
+ * possible that the 'maskbits' contain bits that are
+ * irrelevant for the partition relevant for the current
+ * packet. Hence the checks below. */
- /* Can skip if the field is already unwildcarded. */
- if (mask_prefix_bits_set(wc, be32ofs, ctx->maskbits)) {
- return true;
- }
/* Check that the trie result will not unwildcard more bits
- * than this stage will. */
+ * than this subtable would otherwise. */
if (ctx->maskbits <= field_plen[j]) {
/* Unwildcard the bits and skip the rest. */
mask_set_prefix_bits(wc, be32ofs, ctx->maskbits);
/* Note: Prerequisite already unwildcarded, as the only
* prerequisite of the supported trie lookup fields is
- * the ethertype, which is currently always
- * unwildcarded.
- */
+ * the ethertype, which is always unwildcarded. */
+ return true;
+ }
+ /* Can skip if the field is already unwildcarded. */
+ if (mask_prefix_bits_set(wc, be32ofs, ctx->maskbits)) {
return true;
}
}
--
1.7.10.4
More information about the dev
mailing list