On 04.04.2020 22:20, Jason R Thorpe wrote: > Module Name: src > Committed By: thorpej > Date: Sat Apr 4 20:20:12 UTC 2020 > > Modified Files: > src/sys/compat/netbsd32: syscalls.master > src/sys/kern: kern_exit.c kern_lwp.c sys_lwp.c syscalls.master > src/sys/sys: lwp.h > Added Files: > src/tests/lib/libc/sys: t_lwp_tid.c > > Log Message: > Add support for lazily generating a "global thread ID" for a LWP. This > identifier uniquely identifies an LWP across the entire system, and will > be used in future improvements in user-space synchronization primitives. > > (Test disabled and libc stub not included intentionally so as to avoid > multiple libc version bumps.) >
> --- src/sys/sys/lwp.h:1.204 Sat Apr 4 06:51:46 2020
> +++ src/sys/sys/lwp.h Sat Apr 4 20:20:12 2020
> @@ -1,4 +1,4 @@
> -/* $NetBSD: lwp.h,v 1.204 2020/04/04 06:51:46 maxv Exp $ */
> +/* $NetBSD: lwp.h,v 1.205 2020/04/04 20:20:12 thorpej Exp $ */
>
> /*
> * Copyright (c) 2001, 2006, 2007, 2008, 2009, 2010, 2019, 2020
> @@ -135,6 +135,24 @@ struct lwp {
> u_int l_slptime; /* l: time since last blocked */
> bool l_vforkwaiting; /* a: vfork() waiting */
>
> + /* User-space synchronization. */
> + uintptr_t l___reserved; /* reserved for future use */
> + /*
> + * The global thread ID has special locking and access
> + * considerations. Because many LWPs may never need one,
> + * global thread IDs are allocated lazily in lwp_gettid().
> + * l___tid is not bean to be accessed directly unless
> + * the accessor has specific knowledge that doing so
> + * is safe. l___tid is only assigned by the LWP itself.
> + * Once assigned, it is stable until the LWP exits.
> + * An LWP assigns its own thread ID unlocked before it
> + * reaches visibility to the rest of the system, and
> + * can access its own thread ID unlocked. But once
> + * published, it must hold the proc's lock to change
> + * the value.
> + */
> + lwpid_t l___tid; /* p: global thread id */
> +
Would it be possible to keep a global unique TID as 64-bit integer
(int64_t) equal to: pid << 32 | lwpid ?
That way we could have predicatable numbers in the system and possibly
simplify the involved code avoiding one extra unique 32-bit id.
Are there any (atomic?) shortcomings of this approach?
signature.asc
Description: OpenPGP digital signature
