s390/vmcore: implement remap_oldmem_pfn_range for s390
Introduce the s390 specific way to map pages from oldmem. The memory area below OLDMEM_SIZE is mapped with offset OLDMEM_BASE. The other old memory is mapped directly. Signed-off-by: Jan Willeke <willeke@de.ibm.com> Signed-off-by: Michael Holzheu <holzheu@linux.vnet.ibm.com> Cc: HATAYAMA Daisuke <d.hatayama@jp.fujitsu.com> Cc: Vivek Goyal <vgoyal@redhat.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
Родитель
9cb218131d
Коммит
23df79da8e
|
@ -98,6 +98,32 @@ ssize_t copy_oldmem_page(unsigned long pfn, char *buf,
|
|||
return (rc == 0) ? csize : rc;
|
||||
}
|
||||
|
||||
/*
|
||||
* Remap "oldmem"
|
||||
*
|
||||
* For the kdump reserved memory this functions performs a swap operation:
|
||||
* [0 - OLDMEM_SIZE] is mapped to [OLDMEM_BASE - OLDMEM_BASE + OLDMEM_SIZE]
|
||||
*/
|
||||
int remap_oldmem_pfn_range(struct vm_area_struct *vma, unsigned long from,
|
||||
unsigned long pfn, unsigned long size, pgprot_t prot)
|
||||
{
|
||||
unsigned long size_old;
|
||||
int rc;
|
||||
|
||||
if (pfn < OLDMEM_SIZE >> PAGE_SHIFT) {
|
||||
size_old = min(size, OLDMEM_SIZE - (pfn << PAGE_SHIFT));
|
||||
rc = remap_pfn_range(vma, from,
|
||||
pfn + (OLDMEM_BASE >> PAGE_SHIFT),
|
||||
size_old, prot);
|
||||
if (rc || size == size_old)
|
||||
return rc;
|
||||
size -= size_old;
|
||||
from += size_old;
|
||||
pfn += size_old >> PAGE_SHIFT;
|
||||
}
|
||||
return remap_pfn_range(vma, from, pfn, size, prot);
|
||||
}
|
||||
|
||||
/*
|
||||
* Copy memory from old kernel
|
||||
*/
|
||||
|
|
Загрузка…
Ссылка в новой задаче