ret = -ENOMEM;
goto alloc_error;
}
+ runtime->p.type = bytecode->type;
runtime->p.bc = bytecode;
runtime->p.ctx = ctx;
runtime->len = bytecode->bc.reloc_offset;
if (ret) {
goto link_error;
}
-
- switch (bytecode->type) {
- case LTTNG_BYTECODE_NODE_TYPE_FILTER:
- runtime->p.interpreter_funcs.filter = lttng_bytecode_filter_interpret;
- break;
- case LTTNG_BYTECODE_NODE_TYPE_CAPTURE:
- runtime->p.interpreter_funcs.capture = lttng_bytecode_capture_interpret_false;
- break;
- default:
- WARN_ON(1);
- }
-
+ runtime->p.interpreter_func = lttng_bytecode_interpret;
runtime->p.link_failed = 0;
list_add_rcu(&runtime->p.node, insert_loc);
dbg_printk("Linking successful.\n");
link_error:
- switch (bytecode->type) {
- case LTTNG_BYTECODE_NODE_TYPE_FILTER:
- runtime->p.interpreter_funcs.filter = lttng_bytecode_filter_interpret_false;
- break;
- case LTTNG_BYTECODE_NODE_TYPE_CAPTURE:
- runtime->p.interpreter_funcs.capture = lttng_bytecode_capture_interpret_false;
- break;
- default:
- WARN_ON(1);
- }
+ runtime->p.interpreter_func = lttng_bytecode_interpret_error;
runtime->p.link_failed = 1;
list_add_rcu(&runtime->p.node, insert_loc);
alloc_error:
return ret;
}
-void lttng_bytecode_filter_sync_state(struct lttng_bytecode_runtime *runtime)
-{
- struct lttng_bytecode_node *bc = runtime->bc;
-
- if (!bc->enabler->enabled || runtime->link_failed)
- runtime->interpreter_funcs.filter = lttng_bytecode_filter_interpret_false;
- else
- runtime->interpreter_funcs.filter = lttng_bytecode_filter_interpret;
-}
-
-void lttng_bytecode_capture_sync_state(struct lttng_bytecode_runtime *runtime)
+void lttng_bytecode_sync_state(struct lttng_bytecode_runtime *runtime)
{
struct lttng_bytecode_node *bc = runtime->bc;
if (!bc->enabler->enabled || runtime->link_failed)
- runtime->interpreter_funcs.capture = lttng_bytecode_capture_interpret_false;
+ runtime->interpreter_func = lttng_bytecode_interpret_error;
else
- runtime->interpreter_funcs.capture = lttng_bytecode_capture_interpret;
+ runtime->interpreter_func = lttng_bytecode_interpret;
}
/*
}
}
-void lttng_free_event_filter_runtime(struct lttng_kernel_event_recorder *event_recorder)
-{
- struct bytecode_runtime *runtime, *tmp;
-
- list_for_each_entry_safe(runtime, tmp,
- &event_recorder->priv->parent.filter_bytecode_runtime_head, p.node) {
- kfree(runtime->data);
- kfree(runtime);
- }
-}
-
-void lttng_free_event_notifier_filter_runtime(struct lttng_kernel_event_notifier *event_notifier)
+void lttng_free_event_filter_runtime(struct lttng_kernel_event_common *event)
{
struct bytecode_runtime *runtime, *tmp;
list_for_each_entry_safe(runtime, tmp,
- &event_notifier->priv->parent.filter_bytecode_runtime_head, p.node) {
+ &event->priv->filter_bytecode_runtime_head, p.node) {
kfree(runtime->data);
kfree(runtime);
}