On 06/21/18 at 09:27pm, lijiang wrote: > 在 2018年06月21日 18:23, Baoquan He 写道: > > On 06/21/18 at 01:06pm, lijiang wrote: > >> 在 2018年06月21日 09:53, Baoquan He 写道: > >>> On 06/16/18 at 04:27pm, Lianbo Jiang wrote: > >>>> When SME is enabled in the first kernel, we will allocate pages > >>>> for kdump without encryption in order to be able to boot the > >>>> second kernel in the same manner as kexec, which helps to keep > >>>> the same code style. > >>>> > >>>> Signed-off-by: Lianbo Jiang <liji...@redhat.com> > >>>> --- > >>>> kernel/kexec_core.c | 12 ++++++++++++ > >>>> 1 file changed, 12 insertions(+) > >>>> > >>>> diff --git a/kernel/kexec_core.c b/kernel/kexec_core.c > >>>> index 20fef1a..3c22a9b 100644 > >>>> --- a/kernel/kexec_core.c > >>>> +++ b/kernel/kexec_core.c > >>>> @@ -471,6 +471,16 @@ static struct page > >>>> *kimage_alloc_crash_control_pages(struct kimage *image, > >>>> } > >>>> } > >>>> > >>>> + if (pages) { > >>>> + unsigned int count, i; > >>>> + > >>>> + pages->mapping = NULL; > >>>> + set_page_private(pages, order); > >>>> + count = 1 << order; > >>>> + for (i = 0; i < count; i++) > >>>> + SetPageReserved(pages + i); > >>> > >>> I guess you might imitate the kexec case, however kexec get pages from > >>> buddy. Crash pages are reserved in memblock, these codes might make no > >>> sense. > >>> > >> Thanks for your comments. > >> We have changed the attribute of pages, so the original attribute of pages > >> will be > >> restored when they free. > > > > Hmm, you can check what kimage_free() is doing, and where > > kimage->control_pages, dest_pages, unusable_pages is assigned. Do you > > know where these original attribute of pages comes from and they are > > used/needed in CRASH case, if you care about them? > > > Originally, we want to have an opportunity to restore the previous attribute > of pages, that > should be more better if the pages are remembered in 'image->control_pages'.
Again, please check who assigns value for 'image->control_pages'. > If we remove these codes, it is also harmless for kdump, but it will become > strange, maybe > someone could ask where to restore the previous attribute of pages. > > Thanks. > >> > >>>> + arch_kexec_post_alloc_pages(page_address(pages), 1 << > >>>> order, 0); > >>>> + } > >>>> return pages; > >>>> } > >>>> > >>>> @@ -865,6 +875,7 @@ static int kimage_load_crash_segment(struct kimage > >>>> *image, > >>>> result = -ENOMEM; > >>>> goto out; > >>>> } > >>>> + arch_kexec_post_alloc_pages(page_address(page), 1, 0); > >>>> ptr = kmap(page); > >>>> ptr += maddr & ~PAGE_MASK; > >>>> mchunk = min_t(size_t, mbytes, > >>>> @@ -882,6 +893,7 @@ static int kimage_load_crash_segment(struct kimage > >>>> *image, > >>>> result = copy_from_user(ptr, buf, uchunk); > >>>> kexec_flush_icache_page(page); > >>>> kunmap(page); > >>>> + arch_kexec_pre_free_pages(page_address(page), 1); > >>>> if (result) { > >>>> result = -EFAULT; > >>>> goto out; > >>>> -- > >>>> 2.9.5 > >>>> > >>>> > >>>> _______________________________________________ > >>>> kexec mailing list > >>>> kexec@lists.infradead.org > >>>> http://lists.infradead.org/mailman/listinfo/kexec > > _______________________________________________ > kexec mailing list > kexec@lists.infradead.org > http://lists.infradead.org/mailman/listinfo/kexec _______________________________________________ kexec mailing list kexec@lists.infradead.org http://lists.infradead.org/mailman/listinfo/kexec