]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - arch/x86/kernel/suspend_64.c
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/sparc-2.6
[linux-2.6-omap-h63xx.git] / arch / x86 / kernel / suspend_64.c
index 622bb02682844642c48a44d2267b3751307fd420..2e5efaaf8800ee2d402aca5b0b9bb1a00061458e 100644 (file)
@@ -19,12 +19,6 @@ extern const void __nosave_begin, __nosave_end;
 
 struct saved_context saved_context;
 
-unsigned long saved_context_eax, saved_context_ebx, saved_context_ecx, saved_context_edx;
-unsigned long saved_context_esp, saved_context_ebp, saved_context_esi, saved_context_edi;
-unsigned long saved_context_r08, saved_context_r09, saved_context_r10, saved_context_r11;
-unsigned long saved_context_r12, saved_context_r13, saved_context_r14, saved_context_r15;
-unsigned long saved_context_eflags;
-
 void __save_processor_state(struct saved_context *ctxt)
 {
        kernel_fpu_begin();
@@ -124,7 +118,7 @@ void fix_processor_context(void)
        int cpu = smp_processor_id();
        struct tss_struct *t = &per_cpu(init_tss, cpu);
 
-       set_tss_desc(cpu,t);    /* This just modifies memory; should not be neccessary. But... This is neccessary, because 386 hardware has concept of busy TSS or some similar stupidity. */
+       set_tss_desc(cpu,t);    /* This just modifies memory; should not be necessary. But... This is necessary, because 386 hardware has concept of busy TSS or some similar stupidity. */
 
        cpu_gdt(cpu)[GDT_ENTRY_TSS].type = 9;
 
@@ -198,42 +192,25 @@ static int res_phys_pud_init(pud_t *pud, unsigned long address, unsigned long en
        return 0;
 }
 
-static int res_kernel_text_pud_init(pud_t *pud, unsigned long start)
-{
-       pmd_t *pmd;
-       unsigned long paddr;
-
-       pmd = (pmd_t *)get_safe_page(GFP_ATOMIC);
-       if (!pmd)
-               return -ENOMEM;
-       set_pud(pud + pud_index(start), __pud(__pa(pmd) | _KERNPG_TABLE));
-       for (paddr = 0; paddr < KERNEL_TEXT_SIZE; pmd++, paddr += PMD_SIZE) {
-               unsigned long pe;
-
-               pe = __PAGE_KERNEL_LARGE_EXEC | _PAGE_GLOBAL | paddr;
-               pe &= __supported_pte_mask;
-               set_pmd(pmd, __pmd(pe));
-       }
-
-       return 0;
-}
-
 static int set_up_temporary_mappings(void)
 {
        unsigned long start, end, next;
-       pud_t *pud;
        int error;
 
        temp_level4_pgt = (pgd_t *)get_safe_page(GFP_ATOMIC);
        if (!temp_level4_pgt)
                return -ENOMEM;
 
+       /* It is safe to reuse the original kernel mapping */
+       set_pgd(temp_level4_pgt + pgd_index(__START_KERNEL_map),
+               init_level4_pgt[pgd_index(__START_KERNEL_map)]);
+
        /* Set up the direct mapping from scratch */
        start = (unsigned long)pfn_to_kaddr(0);
        end = (unsigned long)pfn_to_kaddr(end_pfn);
 
        for (; start < end; start = next) {
-               pud = (pud_t *)get_safe_page(GFP_ATOMIC);
+               pud_t *pud = (pud_t *)get_safe_page(GFP_ATOMIC);
                if (!pud)
                        return -ENOMEM;
                next = start + PGDIR_SIZE;
@@ -244,17 +221,7 @@ static int set_up_temporary_mappings(void)
                set_pgd(temp_level4_pgt + pgd_index(start),
                        mk_kernel_pgd(__pa(pud)));
        }
-
-       /* Set up the kernel text mapping from scratch */
-       pud = (pud_t *)get_safe_page(GFP_ATOMIC);
-       if (!pud)
-               return -ENOMEM;
-       error = res_kernel_text_pud_init(pud, __START_KERNEL_map);
-       if (!error)
-               set_pgd(temp_level4_pgt + pgd_index(__START_KERNEL_map),
-                       __pgd(__pa(pud) | _PAGE_TABLE));
-
-       return error;
+       return 0;
 }
 
 int swsusp_arch_resume(void)