diff options
Diffstat (limited to 'kernel/kexec_core.c')
-rw-r--r-- | kernel/kexec_core.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/kernel/kexec_core.c b/kernel/kexec_core.c index 23a83a4da38a..86ef06d3dbe3 100644 --- a/kernel/kexec_core.c +++ b/kernel/kexec_core.c | |||
@@ -471,6 +471,10 @@ static struct page *kimage_alloc_crash_control_pages(struct kimage *image, | |||
471 | } | 471 | } |
472 | } | 472 | } |
473 | 473 | ||
474 | /* Ensure that these pages are decrypted if SME is enabled. */ | ||
475 | if (pages) | ||
476 | arch_kexec_post_alloc_pages(page_address(pages), 1 << order, 0); | ||
477 | |||
474 | return pages; | 478 | return pages; |
475 | } | 479 | } |
476 | 480 | ||
@@ -867,6 +871,7 @@ static int kimage_load_crash_segment(struct kimage *image, | |||
867 | result = -ENOMEM; | 871 | result = -ENOMEM; |
868 | goto out; | 872 | goto out; |
869 | } | 873 | } |
874 | arch_kexec_post_alloc_pages(page_address(page), 1, 0); | ||
870 | ptr = kmap(page); | 875 | ptr = kmap(page); |
871 | ptr += maddr & ~PAGE_MASK; | 876 | ptr += maddr & ~PAGE_MASK; |
872 | mchunk = min_t(size_t, mbytes, | 877 | mchunk = min_t(size_t, mbytes, |
@@ -884,6 +889,7 @@ static int kimage_load_crash_segment(struct kimage *image, | |||
884 | result = copy_from_user(ptr, buf, uchunk); | 889 | result = copy_from_user(ptr, buf, uchunk); |
885 | kexec_flush_icache_page(page); | 890 | kexec_flush_icache_page(page); |
886 | kunmap(page); | 891 | kunmap(page); |
892 | arch_kexec_pre_free_pages(page_address(page), 1); | ||
887 | if (result) { | 893 | if (result) { |
888 | result = -EFAULT; | 894 | result = -EFAULT; |
889 | goto out; | 895 | goto out; |