tech-kern archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: updating COMPAT_LINUX for linux 2.6.x support.
Hello,
Chuck Silvers <chuq%chuq.com@localhost> wrote:
> hi folks,
>
> I've started looking at what it would take to update COMPAT_LINUX
> to allow changing the emulated linux kernel version to 2.6.x.
Great!
> (2) what linux kernel version do we want to claim to be in uname?
> it would be good for this to be at least as recent as the
> kernel matching what we choose in (1). but it would good to avoid
> going too wild with this, to keep the amount of new emul code
> that's needed to a minimum.
Well, we should probably update the list of emulated syscalls and see how
many of them we can properly support. Depending on that, figure out a
highest version to claim.
> I tried following the suggestion in PR 37437 (moving the ps_sigignore
> and ps_sigcatch fields from struct sigctx to struct sigacts, which is
> shared between linux threads), and I moved p_sigpend from struct proc
> to struct sigacts as well. this, together with other fixes allows
> all of the netbsd libpthread regression tests to pass (except the one
> that also fails natively on linux), and gives much improved results
> on the LTP/posixtest tests. I put my current diff (still larded with
> debug stuff and with linux stuff hardcoded instead of called through
> new emul callbacks) in:
> ftp://ftp.netbsd.org/pub/NetBSD/misc/chs/linux/diff.linux-nptl.4
This way adds locking overhead and extra complexity we do not really want
in the native signalling code. As Andrew suggested in the PR, perhaps a
better way would be re-using a proc_t::p_lock, with reference counting on
the lock, i.e. using mutex_obj_hold(9). But see below..
> before continuing down this path, I was wondering if it would be
> possible to move from the current way of supporting linux threads
> (each linux thread is a separate netbsd process, with extra sharing
> happening behind the scenes) to the native netbsd way (1 process with
> multiple LWPs)? the only problem I can think of is that something
> might assume that linux thread IDs are globally unique, or that the
> thread ID of the original thread is the same as the process ID.
> but that seems a bit unlikely, since I don't see any place that the
> linux thread ID is used (thought I could easily have missed that).
> does anyone know of any reason why this wouuldn't work?
Right, I think supporting Linux threads (of NPTL world) as native LWPs,
instead of processes is a major step we need to do. Apart from potential
performance advantages, that should avoid p_sigctx sharing complexity,
should not it?
AFAIK, Linux thread IDs (TIDs) are system-wide unique. If so, we need to
ensure that. Any reason why PID allocator cannot be re-used for that, or
perhaps even simpler way to fake it with e.g. lwp_t * pointer value?
Another thing - we need a native thread-local storage (TLS). I suppose
we will need some support for COMPAT_LINUX too.
> does anyone know of other work that needs to be done on COMPAT_LINUX
> before we can usefully report ourselves as 2.6.x?
I had unfinished patch somewhere to translate asynchronous I/O functionality.
Can also improve support in few more areas, like scheduling and affinity.
What is the target, 6.0 release? :)
--
Mindaugas
Home |
Main Index |
Thread Index |
Old Index