|
@@ -40,7 +40,7 @@
|
|
|
#define pid_hashfn(nr, ns) \
|
|
|
hash_long((unsigned long)nr + (unsigned long)ns, pidhash_shift)
|
|
|
static struct hlist_head *pid_hash;
|
|
|
-static int pidhash_shift;
|
|
|
+static unsigned int pidhash_shift = 4;
|
|
|
struct pid init_struct_pid = INIT_STRUCT_PID;
|
|
|
|
|
|
int pid_max = PID_MAX_DEFAULT;
|
|
@@ -499,19 +499,12 @@ struct pid *find_ge_pid(int nr, struct pid_namespace *ns)
|
|
|
void __init pidhash_init(void)
|
|
|
{
|
|
|
int i, pidhash_size;
|
|
|
- unsigned long megabytes = nr_kernel_pages >> (20 - PAGE_SHIFT);
|
|
|
|
|
|
- pidhash_shift = max(4, fls(megabytes * 4));
|
|
|
- pidhash_shift = min(12, pidhash_shift);
|
|
|
+ pid_hash = alloc_large_system_hash("PID", sizeof(*pid_hash), 0, 18,
|
|
|
+ HASH_EARLY | HASH_SMALL,
|
|
|
+ &pidhash_shift, NULL, 4096);
|
|
|
pidhash_size = 1 << pidhash_shift;
|
|
|
|
|
|
- printk("PID hash table entries: %d (order: %d, %Zd bytes)\n",
|
|
|
- pidhash_size, pidhash_shift,
|
|
|
- pidhash_size * sizeof(struct hlist_head));
|
|
|
-
|
|
|
- pid_hash = alloc_bootmem(pidhash_size * sizeof(*(pid_hash)));
|
|
|
- if (!pid_hash)
|
|
|
- panic("Could not alloc pidhash!\n");
|
|
|
for (i = 0; i < pidhash_size; i++)
|
|
|
INIT_HLIST_HEAD(&pid_hash[i]);
|
|
|
}
|