From: David Gibson <david@gibson.dropbear.id.au>
Currently the flag indicating whether or not hugepages are allowed below
4GB is not correctly propagated across fork(), which can lead to oopses.
The patch below fixes this.
{
long head;
unsigned long flags;
+ /* This does the right thing across a fork (I hope) */
+ unsigned long low_hpages = mm->context & CONTEXT_LOW_HPAGES;
spin_lock_irqsave(&mmu_context_queue.lock, flags);
head = mmu_context_queue.head;
mm->context = mmu_context_queue.elements[head];
+ mm->context |= low_hpages;
head = (head < LAST_USER_CONTEXT-1) ? head+1 : 0;
mmu_context_queue.head = head;