Re: [PATCH] Linux-2.5 fix/improve get_pid()

Linus Torvalds (torvalds@transmeta.com)
Thu, 8 Aug 2002 15:02:50 -0700 (PDT)


On Thu, 8 Aug 2002, Hubertus Franke wrote:
>
> That is true. All was done under the 16-bit assumption
> My hunch is that the current algorithm might actually work quite well
> for a sparsely populated pid-space (32-bits).

I agree.

So let's just try Andries approach, suggested patch as follows..

(yeah, silly mask and MAX_PID, but since even the kernel uses signed
integers for some of it, this way it never gets close to being an issue).

Linus

----
--- 1.2/include/linux/threads.h Tue Feb 5 07:23:04 2002
+++ edited/include/linux/threads.h Thu Aug 8 14:58:28 2002
@@ -19,6 +19,7 @@
/*
* This controls the maximum pid allocated to a process
*/
-#define PID_MAX 0x8000
+#define PID_MASK 0x3fffffff
+#define PID_MAX (PID_MASK+1)

#endif
===== kernel/fork.c 1.57 vs edited =====
--- 1.57/kernel/fork.c Tue Jul 30 15:49:20 2002
+++ edited/kernel/fork.c Thu Aug 8 15:00:16 2002
@@ -142,7 +142,7 @@
return 0;

spin_lock(&lastpid_lock);
- if((++last_pid) & 0xffff8000) {
+ if((++last_pid) & ~PID_MASK) {
last_pid = 300; /* Skip daemons etc. */
goto inside;
}
@@ -157,7 +157,7 @@
p->tgid == last_pid ||
p->session == last_pid) {
if(++last_pid >= next_safe) {
- if(last_pid & 0xffff8000)
+ if(last_pid & ~PID_MASK)
last_pid = 300;
next_safe = PID_MAX;
}

-
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/