Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 74966
b: refs/heads/master
c: 5867a78
h: refs/heads/master
v: v3
  • Loading branch information
Andrew Morton authored and Linus Torvalds committed Dec 18, 2007
1 parent a03e16b commit 74387cb
Show file tree
Hide file tree
Showing 2 changed files with 7 additions and 34 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 755271358cc401eb3db0db52b2c8fb8d71ae4d8f
refs/heads/master: 5867a78f41f84e5388448da62c183255dc22601f
39 changes: 6 additions & 33 deletions trunk/arch/x86/kernel/suspend_64.c
Original file line number Diff line number Diff line change
Expand Up @@ -192,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;
Expand All @@ -238,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)
Expand Down

0 comments on commit 74387cb

Please sign in to comment.