1 // SPDX-License-Identifier: GPL-2.0
3 * Memory preserving reboot related code.
5 * Created by: Hariprasad Nellitheertha (hari@in.ibm.com)
6 * Copyright (C) IBM Corporation, 2004. All rights reserved
9 #include <linux/errno.h>
10 #include <linux/crash_dump.h>
11 #include <linux/uio.h>
13 #include <linux/cc_platform.h>
15 static ssize_t
__copy_oldmem_page(struct iov_iter
*iter
, unsigned long pfn
,
16 size_t csize
, unsigned long offset
,
25 vaddr
= (__force
void *)ioremap_encrypted(pfn
<< PAGE_SHIFT
, PAGE_SIZE
);
27 vaddr
= (__force
void *)ioremap_cache(pfn
<< PAGE_SHIFT
, PAGE_SIZE
);
32 csize
= copy_to_iter(vaddr
+ offset
, csize
, iter
);
34 iounmap((void __iomem
*)vaddr
);
38 ssize_t
copy_oldmem_page(struct iov_iter
*iter
, unsigned long pfn
, size_t csize
,
41 return __copy_oldmem_page(iter
, pfn
, csize
, offset
, false);
45 * copy_oldmem_page_encrypted - same as copy_oldmem_page() above but ioremap the
46 * memory with the encryption mask set to accommodate kdump on SME-enabled
49 ssize_t
copy_oldmem_page_encrypted(struct iov_iter
*iter
, unsigned long pfn
,
50 size_t csize
, unsigned long offset
)
52 return __copy_oldmem_page(iter
, pfn
, csize
, offset
, true);
55 ssize_t
elfcorehdr_read(char *buf
, size_t count
, u64
*ppos
)
57 struct kvec kvec
= { .iov_base
= buf
, .iov_len
= count
};
60 iov_iter_kvec(&iter
, ITER_DEST
, &kvec
, 1, count
);
62 return read_from_oldmem(&iter
, count
, ppos
,
63 cc_platform_has(CC_ATTR_GUEST_MEM_ENCRYPT
));