If it is acceptable for system calls to block interrupts, then we could just solve things by replacing all system calls by first blocking interrupts, then doing the system call, and then unblocking them. This would only turn single system calls into 3, but those extra system calls are almost certainly quite cheap.