return syscalls_metadata[nr];
 }
 
+int syscall_name_to_nr(char *name)
+{
+       int i;
+
+       if (!syscalls_metadata)
+               return -1;
+       for (i = 0; i < NR_syscalls; i++)
+               if (syscalls_metadata[i])
+                       if (!strcmp(syscalls_metadata[i]->name, name))
+                               return i;
+       return -1;
+}
+
+void set_syscall_enter_id(int num, int id)
+{
+       syscalls_metadata[num]->enter_id = id;
+}
+
+void set_syscall_exit_id(int num, int id)
+{
+       syscalls_metadata[num]->exit_id = id;
+}
+
 static struct syscall_metadata *find_syscall_meta(unsigned long syscall)
 {
        struct syscall_metadata *start;
        return NULL;
 }
 
-void arch_init_ftrace_syscalls(void)
+static int __init arch_init_ftrace_syscalls(void)
 {
        struct syscall_metadata *meta;
        int i;
-       static atomic_t refs;
-
-       if (atomic_inc_return(&refs) != 1)
-               goto out;
        syscalls_metadata = kzalloc(sizeof(*syscalls_metadata) * NR_syscalls,
                                    GFP_KERNEL);
        if (!syscalls_metadata)
-               goto out;
+               return -ENOMEM;
        for (i = 0; i < NR_syscalls; i++) {
                meta = find_syscall_meta((unsigned long)sys_call_table[i]);
                syscalls_metadata[i] = meta;
        }
-       return;
-out:
-       atomic_dec(&refs);
+       return 0;
 }
+arch_initcall(arch_init_ftrace_syscalls);
 #endif