- sd->ahu.user_ring_idx = 0;
- sd->ahu.completion_ring = sd->ring;
- sd->ahu.ring_size_bytes = ring_size;
- sd->ahu.head_stack = thread_stack_alloc();
- sd->ahu.head_eip = (unsigned long) cachemiss_thread_start;
- sd->ahu.new_thread_eip = (unsigned long) cachemiss_thread_start;
-
- return 0;
-}
-
-static void async_head_exit(struct syslet_data *sd)
-{
- free(sd->ring);
-}
-
-static int check_syslet_support(struct syslet_data *sd)
-{
- struct syslet_uatom atom;
- void *ret;
-
- init_atom(&atom, __NR_getpid, NULL, NULL, NULL, NULL, NULL, 0, NULL);
- ret = async_exec(sd->head, &sd->ahu);
- if (ret == (void *) -1)
- return 1;
+ pid = syscall(__NR_indirect, ®s, ¶ms, sizeof(params), 0);
+ if (pid == my_pid)
+ return 0;