syscalls: remove vmalloc sync mappings
[lttng-modules.git] / src / lttng-syscalls.c
index 3208cd4d600696af741eafd6483bd3411f3a5cfa..de4dbacefc5c23e7331081696585e4a278b82a7c 100644 (file)
@@ -537,7 +537,6 @@ int lttng_create_syscall_event_if_missing(const struct trace_syscall_entry *tabl
        enum sc_type type)
 {
        struct lttng_event_ht *events_ht = lttng_get_event_ht_from_enabler(&syscall_event_enabler->parent);
-       struct lttng_kernel_syscall_table *syscall_table = get_syscall_table_from_enabler(&syscall_event_enabler->parent);
        struct lttng_kernel_channel_buffer *chan = syscall_event_enabler->chan;
        unsigned int i;
 
@@ -555,16 +554,15 @@ int lttng_create_syscall_event_if_missing(const struct trace_syscall_entry *tabl
                        /* Unknown syscall */
                        continue;
                }
-               if (lttng_desc_match_enabler(desc,
-                               lttng_event_recorder_enabler_as_enabler(syscall_event_enabler)) <= 0)
+               if (!lttng_desc_match_enabler(desc,
+                               lttng_event_recorder_enabler_as_enabler(syscall_event_enabler)))
                        continue;
                /*
                 * Check if already created.
                 */
                head = utils_borrow_hash_table_bucket(events_ht->table, LTTNG_EVENT_HT_SIZE, desc->event_name);
                lttng_hlist_for_each_entry(event_priv, head, hlist_node) {
-                       if (event_priv->desc == desc
-                               && get_syscall_table_from_event(event_priv->pub) == syscall_table)
+                       if (lttng_event_enabler_desc_match_event(&syscall_event_enabler->parent, desc, event_priv->pub))
                                found = true;
                }
                if (found)
@@ -753,7 +751,7 @@ int lttng_syscalls_populate_events(struct lttng_event_enabler_common *syscall_ev
 /*
  * Should be called with sessions lock held.
  */
-int lttng_syscalls_register_event(struct lttng_event_enabler_common *syscall_event_enabler)
+int lttng_event_enabler_create_syscall_events_if_missing(struct lttng_event_enabler_common *syscall_event_enabler)
 {
        struct lttng_kernel_syscall_table *syscall_table = get_syscall_table_from_enabler(syscall_event_enabler);
        int ret;
@@ -798,8 +796,6 @@ int lttng_syscalls_register_event(struct lttng_event_enabler_common *syscall_eve
        if (ret)
                return ret;
 
-       wrapper_vmalloc_sync_mappings();
-
        if (!syscall_table->sys_enter_registered) {
                ret = lttng_wrapper_tracepoint_probe_register("sys_enter",
                                (void *) syscall_entry_event_probe, syscall_table);
@@ -882,8 +878,7 @@ int create_unknown_event_notifier(
         */
        head = utils_borrow_hash_table_bucket(events_ht->table, LTTNG_EVENT_HT_SIZE, desc->event_name);
        lttng_hlist_for_each_entry(event_priv, head, hlist_node) {
-               if (event_priv->desc == desc &&
-                               event_priv->user_token == base_enabler->user_token)
+               if (lttng_event_enabler_desc_match_event(base_enabler, desc, event_priv->pub))
                        found = true;
        }
        if (found)
@@ -956,8 +951,7 @@ static int create_matching_event_notifiers(
                 */
                head = utils_borrow_hash_table_bucket(events_ht->table, LTTNG_EVENT_HT_SIZE, desc->event_name);
                lttng_hlist_for_each_entry(event_priv, head, hlist_node) {
-                       if (event_priv->desc == desc
-                               && event_priv->user_token == syscall_event_notifier_enabler->parent.user_token)
+                       if (lttng_event_enabler_desc_match_event(&syscall_event_notifier_enabler->parent, desc, event_priv->pub))
                                found = 1;
                }
                if (found)
@@ -1401,6 +1395,29 @@ int lttng_syscall_filter_disable_event(struct lttng_kernel_event_common *event)
        return 0;
 }
 
+void lttng_syscall_table_set_wildcard_all(struct lttng_event_enabler_common *event_enabler)
+{
+       struct lttng_kernel_syscall_table *syscall_table = get_syscall_table_from_enabler(event_enabler);
+       enum lttng_kernel_abi_syscall_entryexit entryexit;
+       int enabled = event_enabler->enabled;
+
+       if (event_enabler->event_param.instrumentation != LTTNG_KERNEL_ABI_SYSCALL)
+               return;
+       if (event_enabler->event_param.u.syscall.abi != LTTNG_KERNEL_ABI_SYSCALL_ABI_ALL)
+               return;
+       if (event_enabler->event_param.u.syscall.match != LTTNG_KERNEL_ABI_SYSCALL_MATCH_NAME)
+               return;
+       if (strcmp(event_enabler->event_param.name, "*"))
+               return;
+
+       entryexit = event_enabler->event_param.u.syscall.entryexit;
+       if (entryexit == LTTNG_KERNEL_ABI_SYSCALL_ENTRY || entryexit == LTTNG_KERNEL_ABI_SYSCALL_ENTRYEXIT)
+               WRITE_ONCE(syscall_table->syscall_all_entry, enabled);
+
+       if (entryexit == LTTNG_KERNEL_ABI_SYSCALL_EXIT || entryexit == LTTNG_KERNEL_ABI_SYSCALL_ENTRYEXIT)
+               WRITE_ONCE(syscall_table->syscall_all_exit, enabled);
+}
+
 static
 const struct trace_syscall_entry *syscall_list_get_entry(loff_t *pos)
 {
This page took 0.024488 seconds and 4 git commands to generate.