diff mbox

[ovs-dev,v2,02/12] flow: Add comments to mf_get_next_in_map().

Message ID 1476352715-110467-3-git-send-email-bhanuprakash.bodireddy@intel.com
State Superseded
Delegated to: Daniele Di Proietto
Headers show

Commit Message

Bodireddy, Bhanuprakash Oct. 13, 2016, 9:58 a.m. UTC
This patch adds comments to mf_get_next_in_map() to make it more
comprehensible.

Signed-off-by: Jarno Rajahalme <jarno@ovn.org>
Acked-by: Bhanuprakash Bodireddy <bhanuprakash.bodireddy@intel.com>
Acked-by: Antonio Fischetti <antonio.fischetti@intel.com>
---
 lib/flow.h | 32 +++++++++++++++++++++++++++-----
 1 file changed, 27 insertions(+), 5 deletions(-)
diff mbox

Patch

diff --git a/lib/flow.h b/lib/flow.h
index ea24e28..5a14941 100644
--- a/lib/flow.h
+++ b/lib/flow.h
@@ -564,12 +564,27 @@  flow_values_get_next_in_maps(struct flow_for_each_in_maps_aux *aux,
          flow_values_get_next_in_maps(&aux__, &(VALUE));)
 
 struct mf_for_each_in_map_aux {
-    size_t unit;
-    struct flowmap fmap;
-    struct flowmap map;
-    const uint64_t *values;
+    size_t unit;             /* Current 64-bit unit of the flowmaps
+				being processed. */
+    struct flowmap fmap;     /* Remaining 1-bits corresponding to the
+			        64-bit words in ‘values’ */
+    struct flowmap map;      /* Remaining 1-bits corresponding to the
+			        64-bit words of interest. */
+    const uint64_t *values;  /* 64-bit words corresponding to the
+				1-bits in ‘fmap’. */
 };
 
+/* Get the data from ‘aux->values’ corresponding to the next lowest 1-bit
+ * in ‘aux->map’, given that ‘aux->values’ points to an array of 64-bit
+ * words corresponding to the 1-bits in ‘aux->fmap’, starting from the
+ * rightmost 1-bit.
+ *
+ * Returns ’true’ if the traversal is incomplete, ‘false’ otherwise.
+ * ‘aux’ is prepared for the next iteration after each call.
+ *
+ * This is used to traverse through, for example, the values in a miniflow
+ * representation of a flow key selected by non-zero 64-bit words in a
+ * corresponding subtable mask. */
 static inline bool
 mf_get_next_in_map(struct mf_for_each_in_map_aux *aux,
                    uint64_t *value)
@@ -577,8 +592,10 @@  mf_get_next_in_map(struct mf_for_each_in_map_aux *aux,
     map_t *map, *fmap;
     map_t rm1bit;
 
+    /* Skip empty map units. */
     while (OVS_UNLIKELY(!*(map = &aux->map.bits[aux->unit]))) {
-        /* Skip remaining data in the previous unit. */
+        /* Skip remaining data in the current unit before advancing
+         * to the next. */
         aux->values += count_1bits(aux->fmap.bits[aux->unit]);
         if (++aux->unit == FLOWMAP_UNITS) {
             return false;
@@ -589,7 +606,12 @@  mf_get_next_in_map(struct mf_for_each_in_map_aux *aux,
     *map -= rm1bit;
     fmap = &aux->fmap.bits[aux->unit];
 
+    /* If the rightmost 1-bit found from the current unit in ‘aux->map’
+     * (‘rm1bit’) is also present in ‘aux->fmap’, store the corresponding
+     * value from ‘aux->values’ to ‘*value', otherwise store 0. */
     if (OVS_LIKELY(*fmap & rm1bit)) {
+        /* Skip all 64-bit words in ‘values’ preceding the one corresponding
+         * to ‘rm1bit’. */
         map_t trash = *fmap & (rm1bit - 1);
 
         *fmap -= trash;