Generalize `lttng_enabler_link_bytecode()` bytecode list
authorFrancis Deslauriers <francis.deslauriers@efficios.com>
Wed, 13 May 2020 16:56:03 +0000 (12:56 -0400)
committerMathieu Desnoyers <mathieu.desnoyers@efficios.com>
Wed, 25 Nov 2020 18:16:43 +0000 (13:16 -0500)
So it can be used for both filter and capture bytecode runtimes

Signed-off-by: Francis Deslauriers <francis.deslauriers@efficios.com>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Change-Id: I14dd5eb1eb018d358446d68ba14aa376d1647545

include/lttng/events.h
src/lttng-bytecode.c
src/lttng-events.c

index bb3f9363f3d346d45e41ef054269bb8512df4101..f4c9212c4384fe58462948f7af869f702adee919 100644 (file)
@@ -903,8 +903,8 @@ int lttng_event_notifier_enabler_attach_filter_bytecode(
 
 void lttng_enabler_link_bytecode(const struct lttng_event_desc *event_desc,
                struct lttng_ctx *ctx,
-               struct list_head *bytecode_runtime_head,
-               struct lttng_enabler *enabler);
+               struct list_head *instance_bytecode_runtime_head,
+               struct list_head *enabler_bytecode_runtime_head);
 
 int lttng_probes_init(void);
 
index 4e6e9528fd8d6ec92b1710fd94588fa13cf95290..5b6cb1171b43b9cea3266114c36853c80ae18131 100644 (file)
@@ -493,32 +493,43 @@ void lttng_bytecode_filter_sync_state(struct lttng_bytecode_runtime *runtime)
 }
 
 /*
- * Link bytecode for all enablers referenced by an event.
+ * Given the lists of bytecode programs of an instance (trigger or event) and
+ * of a matching enabler, try to link all the enabler's bytecode programs with
+ * the instance.
+ *
+ * This function is called after we confirmed that name enabler and the
+ * instance are matching names (or glob pattern matching).
  */
 void lttng_enabler_link_bytecode(const struct lttng_event_desc *event_desc,
                struct lttng_ctx *ctx,
-               struct list_head *bytecode_runtime_head,
-               struct lttng_enabler *enabler)
+               struct list_head *instance_bytecode_head,
+               struct list_head *enabler_bytecode_head)
 {
-       struct lttng_bytecode_node *bc;
+       struct lttng_bytecode_node *enabler_bc;
        struct lttng_bytecode_runtime *runtime;
 
-       /* Can only be called for events with desc attached */
        WARN_ON_ONCE(!event_desc);
 
-       /* Link each bytecode. */
-       list_for_each_entry(bc, &enabler->filter_bytecode_head, node) {
+       /* Go over all the bytecode programs of the enabler.  */
+       list_for_each_entry(enabler_bc, enabler_bytecode_head, node) {
                int found = 0, ret;
                struct list_head *insert_loc;
 
-               list_for_each_entry(runtime,
-                               bytecode_runtime_head, node) {
-                       if (runtime->bc == bc) {
+               /*
+                * Check if the current enabler bytecode program is already
+                * linked with the instance.
+                */
+               list_for_each_entry(runtime, instance_bytecode_head, node) {
+                       if (runtime->bc == enabler_bc) {
                                found = 1;
                                break;
                        }
                }
-               /* Skip bytecode already linked */
+
+               /*
+                * Skip bytecode already linked, go to the next enabler
+                * bytecode program.
+                */
                if (found)
                        continue;
 
@@ -528,18 +539,18 @@ void lttng_enabler_link_bytecode(const struct lttng_event_desc *event_desc,
                 * insert the new bytecode right after it.
                 */
                list_for_each_entry_reverse(runtime,
-                               bytecode_runtime_head, node) {
-                       if (runtime->bc->bc.seqnum <= bc->bc.seqnum) {
+                               instance_bytecode_head, node) {
+                       if (runtime->bc->bc.seqnum <= enabler_bc->bc.seqnum) {
                                /* insert here */
                                insert_loc = &runtime->node;
                                goto add_within;
                        }
                }
                /* Add to head to list */
-               insert_loc = bytecode_runtime_head;
+               insert_loc = instance_bytecode_head;
        add_within:
                dbg_printk("linking bytecode\n");
-               ret = link_bytecode(event_desc, ctx, bc, insert_loc);
+               ret = link_bytecode(event_desc, ctx, enabler_bc, insert_loc);
                if (ret) {
                        dbg_printk("[lttng filter] warning: cannot link event bytecode\n");
                }
index 54d7a0d0cd9132c5178fcde503bdbb761712c9ca..d1a0706e0b9793b525e5c66212ac23b9e85d0614 100644 (file)
@@ -2032,7 +2032,7 @@ int lttng_event_enabler_ref_events(struct lttng_event_enabler *event_enabler)
                lttng_enabler_link_bytecode(event->desc,
                        lttng_static_ctx,
                        &event->filter_bytecode_runtime_head,
-                       lttng_event_enabler_as_enabler(event_enabler));
+                       &lttng_event_enabler_as_enabler(event_enabler)->filter_bytecode_head);
 
                /* TODO: merge event context. */
        }
@@ -2119,7 +2119,7 @@ int lttng_event_notifier_enabler_ref_event_notifiers(
                 */
                lttng_enabler_link_bytecode(event_notifier->desc,
                        lttng_static_ctx, &event_notifier->filter_bytecode_runtime_head,
-                       lttng_event_notifier_enabler_as_enabler(event_notifier_enabler));
+                       &lttng_event_notifier_enabler_as_enabler(event_notifier_enabler)->filter_bytecode_head);
        }
        return 0;
 }
This page took 0.030836 seconds and 5 git commands to generate.