x86: fix c_p_a() boot crash
authorAndi Kleen <ak@suse.de>
Wed, 30 Jan 2008 12:33:52 +0000 (13:33 +0100)
committerIngo Molnar <mingo@elte.hu>
Wed, 30 Jan 2008 12:33:52 +0000 (13:33 +0100)
fix:

> hm, i just found a failing 64-bit .config while testing your CPA
> patchset:
>
>  [    1.916541] CPA mapping 4k 0 large 2048 gb 0 x 0[0-0] miss 0
>  [    1.919874] Unable to handle kernel paging request at 000000000335aea8 RIP:
>  [    1.919874]  [<ffffffff8021d2d3>] change_page_attr+0x3/0x61
>  [    1.919874] PGD 0
>  [    1.919874] Oops: 0000 [1]
>  [    1.919874] CPU 0

This handles addresses which don't have a mem_map entry.

Signed-off-by: Andi Kleen <ak@suse.de>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
arch/x86/mm/pageattr-test.c

index c58fab0617629057b02c7b3ef0049bd14d5cdb0f..91e05a26004d16b967f06af732f7e6a4871d22f2 100644 (file)
@@ -177,7 +177,7 @@ static __init int exercise_pageattr(void)
                        continue;
                }
 
-               err = change_page_attr(virt_to_page(addr[i]), len[i],
+               err = change_page_attr_addr(addr[i], len[i],
                            pte_pgprot(pte_clrhuge(pte_clrglobal(pte0))));
                if (err < 0) {
                        printk(KERN_ERR "CPA %d failed %d\n", i, err);
@@ -212,7 +212,7 @@ static __init int exercise_pageattr(void)
                        failed++;
                        continue;
                }
-               err = change_page_attr(virt_to_page(addr[i]), len[i],
+               err = change_page_attr_addr(addr[i], len[i],
                                          pte_pgprot(pte_mkglobal(*pte)));
                if (err < 0) {
                        printk(KERN_ERR "CPA reverting failed: %d\n", err);