Re: 2.6.38-rc1 and -rc2 problems with khugepaged

From: werner
Date: Sun Jan 23 2011 - 04:05:38 EST


I inform that with thepatch below, my computer starts and works normally, with khugepaged enabled.

http://www.sys-linux.yi.org/info.php

dmesg enclosed if important for something, configure the same as before with khugepage always enabled.

In my last mail, I sent enclosed the output of the kernel compilation, with several advise messages. Pls check that, and correct the subroutines where necessary.

wl

=============================================
On Sun, 23 Jan 2011 05:18:01 +0100
Andrea Arcangeli <aarcange@xxxxxxxxxx> wrote:
Hi Werner,

On Sat, Jan 22, 2011 at 10:56:16PM -0400, werner wrote:
-rc2 hang up itself, still
Again compiled with khugepaged enabled, so I suppose thats the reason, still.
First, the initialisation of KDE stops, if then switching with CTRL-ALT-F1 to the text system, one can log in, but soon after comes the kernel error message, and it sticks also on the text screen, going nothing else, only press the reboot button ...

You need to apply this below patch on top of rc2 to be stable on
x86_32 with PARAVIRT=y and HIGHMEM64G=n. It's in -mm already. Can you
confirm that this fixes your problem? Thanks.

====
Subject: thp: fix PARAVIRT x86 32bit noPAE

From: Andrea Arcangeli <aarcange@xxxxxxxxxx>

This fixes TRANSPARENT_HUGEPAGE=y with PARAVIRT=y and HIGHMEM64=n.

The #ifdef that this patch removes was erratically introduced to fix a build
error for noPAE (where pmd.pmd doesn't exist). So then the kernel built but it
failed at runtime because set_pmd_at was a noop. This will correct it by
enabling set_pmd_at for noPAE mode too.

Signed-off-by: Andrea Arcangeli <aarcange@xxxxxxxxxx>
---

diff --git a/arch/x86/include/asm/paravirt.h b/arch/x86/include/asm/paravirt.h
index 2071a8b..ebbc4d8 100644
--- a/arch/x86/include/asm/paravirt.h
+++ b/arch/x86/include/asm/paravirt.h
@@ -558,13 +558,12 @@ static inline void set_pte_at(struct mm_struct *mm, unsigned long addr,
static inline void set_pmd_at(struct mm_struct *mm, unsigned long addr,
pmd_t *pmdp, pmd_t pmd)
{
-#if PAGETABLE_LEVELS >= 3
if (sizeof(pmdval_t) > sizeof(long))
/* 5 arg words */
pv_mmu_ops.set_pmd_at(mm, addr, pmdp, pmd);
else
- PVOP_VCALL4(pv_mmu_ops.set_pmd_at, mm, addr, pmdp, pmd.pmd);
-#endif
+ PVOP_VCALL4(pv_mmu_ops.set_pmd_at, mm, addr, pmdp,
+ native_pmd_val(pmd));
}
#endif




"werner" <w.landgraf@xxxxx>
---
Professional hosting for everyone - http://www.host.ru

Attachment: dmesg.bz2
Description: Binary data