s390/mm: move kernel_page_present/kernel_map_pages to page_attr.c
Keep related functions together and move to appropriate file. Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com> Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
This commit is contained in:
parent
6b70a92080
commit
0a4ccc9929
|
@ -158,34 +158,6 @@ void __init mem_init(void)
|
||||||
PFN_ALIGN((unsigned long)&_eshared) - 1);
|
PFN_ALIGN((unsigned long)&_eshared) - 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_DEBUG_PAGEALLOC
|
|
||||||
void kernel_map_pages(struct page *page, int numpages, int enable)
|
|
||||||
{
|
|
||||||
pgd_t *pgd;
|
|
||||||
pud_t *pud;
|
|
||||||
pmd_t *pmd;
|
|
||||||
pte_t *pte;
|
|
||||||
unsigned long address;
|
|
||||||
int i;
|
|
||||||
|
|
||||||
for (i = 0; i < numpages; i++) {
|
|
||||||
address = page_to_phys(page + i);
|
|
||||||
pgd = pgd_offset_k(address);
|
|
||||||
pud = pud_offset(pgd, address);
|
|
||||||
pmd = pmd_offset(pud, address);
|
|
||||||
pte = pte_offset_kernel(pmd, address);
|
|
||||||
if (!enable) {
|
|
||||||
__ptep_ipte(address, pte);
|
|
||||||
pte_val(*pte) = _PAGE_TYPE_EMPTY;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
*pte = mk_pte_phys(address, __pgprot(_PAGE_TYPE_RW));
|
|
||||||
/* Flush cpu write queue. */
|
|
||||||
mb();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
void free_init_pages(char *what, unsigned long begin, unsigned long end)
|
void free_init_pages(char *what, unsigned long begin, unsigned long end)
|
||||||
{
|
{
|
||||||
unsigned long addr = begin;
|
unsigned long addr = begin;
|
||||||
|
|
|
@ -105,3 +105,46 @@ int set_memory_x(unsigned long addr, int numpages)
|
||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef CONFIG_DEBUG_PAGEALLOC
|
||||||
|
void kernel_map_pages(struct page *page, int numpages, int enable)
|
||||||
|
{
|
||||||
|
unsigned long address;
|
||||||
|
pgd_t *pgd;
|
||||||
|
pud_t *pud;
|
||||||
|
pmd_t *pmd;
|
||||||
|
pte_t *pte;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for (i = 0; i < numpages; i++) {
|
||||||
|
address = page_to_phys(page + i);
|
||||||
|
pgd = pgd_offset_k(address);
|
||||||
|
pud = pud_offset(pgd, address);
|
||||||
|
pmd = pmd_offset(pud, address);
|
||||||
|
pte = pte_offset_kernel(pmd, address);
|
||||||
|
if (!enable) {
|
||||||
|
__ptep_ipte(address, pte);
|
||||||
|
pte_val(*pte) = _PAGE_TYPE_EMPTY;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
*pte = mk_pte_phys(address, __pgprot(_PAGE_TYPE_RW));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef CONFIG_HIBERNATION
|
||||||
|
bool kernel_page_present(struct page *page)
|
||||||
|
{
|
||||||
|
unsigned long addr;
|
||||||
|
int cc;
|
||||||
|
|
||||||
|
addr = page_to_phys(page);
|
||||||
|
asm volatile(
|
||||||
|
" lra %1,0(%1)\n"
|
||||||
|
" ipm %0\n"
|
||||||
|
" srl %0,28"
|
||||||
|
: "=d" (cc), "+a" (addr) : : "cc");
|
||||||
|
return cc == 0;
|
||||||
|
}
|
||||||
|
#endif /* CONFIG_HIBERNATION */
|
||||||
|
|
||||||
|
#endif /* CONFIG_DEBUG_PAGEALLOC */
|
||||||
|
|
|
@ -881,22 +881,6 @@ int s390_enable_sie(void)
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(s390_enable_sie);
|
EXPORT_SYMBOL_GPL(s390_enable_sie);
|
||||||
|
|
||||||
#if defined(CONFIG_DEBUG_PAGEALLOC) && defined(CONFIG_HIBERNATION)
|
|
||||||
bool kernel_page_present(struct page *page)
|
|
||||||
{
|
|
||||||
unsigned long addr;
|
|
||||||
int cc;
|
|
||||||
|
|
||||||
addr = page_to_phys(page);
|
|
||||||
asm volatile(
|
|
||||||
" lra %1,0(%1)\n"
|
|
||||||
" ipm %0\n"
|
|
||||||
" srl %0,28"
|
|
||||||
: "=d" (cc), "+a" (addr) : : "cc");
|
|
||||||
return cc == 0;
|
|
||||||
}
|
|
||||||
#endif /* CONFIG_HIBERNATION && CONFIG_DEBUG_PAGEALLOC */
|
|
||||||
|
|
||||||
#ifdef CONFIG_TRANSPARENT_HUGEPAGE
|
#ifdef CONFIG_TRANSPARENT_HUGEPAGE
|
||||||
int pmdp_clear_flush_young(struct vm_area_struct *vma, unsigned long address,
|
int pmdp_clear_flush_young(struct vm_area_struct *vma, unsigned long address,
|
||||||
pmd_t *pmdp)
|
pmd_t *pmdp)
|
||||||
|
|
Loading…
Reference in New Issue