setup is called once from within linux/init/main.c. It calls initialization functions for devices and file systems configured into the kernel and then mounts the root file system.
No user process may call setup. Any user process, even a process with super-user permission, will receive EPERM.
setup always returns -1 for a user process.