Re: [PATCH] compatibility syscall layer (lets try again)
From: | Linus Torvalds <torvalds@transmeta.com> | |
To: | george anzinger <george@mvista.com> | |
Subject: | Re: [PATCH] compatibility syscall layer (lets try again) | |
Date: | Fri, 6 Dec 2002 09:57:08 -0800 (PST) | |
Cc: | Jim Houston <jim.houston@ccur.com>, Stephen Rothwell <sfr@canb.auug.org.au>, LKML <linux-kernel@vger.kernel.org>, <anton@samba.org>, "David S. Miller" <davem@redhat.com>, <ak@muc.de>, <davidm@hpl.hp.com>, <schwidefsky@de.ibm.com>, <ralf@gnu.org>, <willy@debian.org> |
I just pushed my version of the system call restart code to the BK trees. It's losely based on Georges code, but subtly different. Also, I didn't actually update any actual system calls to use it, I just did the infrastructure. Non-x86 architectures need to be updated to work with this: they need to update their thread structures, the additional do_signal() support in their signal.c, and add the actual system call itself somewhere. For x86, this was about 15 lines of changes. The basic premise is very simple: if you want to restart a system call, you can do restart = ¤t_thread()->restart_block; restart->fn = my_continuation_function; restart->arg0 = my_arg0_for_continuation; restart->arg1 = my_arg1_for_continuation; .. return -ERESTARTSYS_RESTARTBLOCK; which will cause the system call to either return -EINTR (if a signal handler was actually invoced) or for "benign" signals (SIGSTOP etc) it will end up restarting the system call at the continuation function (with the "restart" block as the argument). We could extend this to allow restarting even over signal handlers, but that would have some re-entrancy issues (ie what happens if a signal handler itself wants to use a system call that may want restarting), so at least for now restarting is only done when no handler is invoced (*). Linus (*) The nesting case is by no means impossible to handle gracefully (adding a "restart even if handler is called" error number and returning -EINTR if nesting, for example), but I don't know of any system calls that would really want to try to restart anyway, so.. - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/