Jan Beulich
2008-Nov-25 11:04 UTC
[Xen-devel] Linux: removal of contiguous_bitmap broke kexec
Since kexec uses xen_destroy_contiguous_region() on memory it is about to free, but passed this through xen_limit_pages_to_max_mfn() only, the contiguous_bitmap check in the old code prevented any action to be taken on such regions. This could therefore be fixed in at least three different ways: 1) Since the call to xen_destroy_contiguous_region() really was pointless before, we could just eliminate that from kernel/kexec.c. 2) xen_destroy_contiguous_region() could check the region it is passed and bail out if it turns out not to be contiguous. 3) We could track which regions were actually acted upon by xen_limit_pages_to_max_mfn() (through PageForeign logic) and attempt to undo the limitation in the destructor (and at once again eliminate the [mismatched] call to xen_destroy_contiguous_region()). Since this case is not performance critical, there shouldn''t be an issue with not batching these. And a check of the kexec code indicates it doesn''t use the index member of struct page. Opinions appreciated. Thanks, Jan _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel
Keir Fraser
2008-Nov-25 11:14 UTC
Re: [Xen-devel] Linux: removal of contiguous_bitmap broke kexec
(1) is good for now, and I prefer it to (2). Of course it would be nice to have the ability to exchange the low-memory pages for ordinary pages once kexec is done with them, but it can be done as a separate patch. I''ll do (1) right now, since it is trivial. -- Keir On 25/11/08 11:04, "Jan Beulich" <jbeulich@novell.com> wrote:> Since kexec uses xen_destroy_contiguous_region() on memory it is about > to free, but passed this through xen_limit_pages_to_max_mfn() only, the > contiguous_bitmap check in the old code prevented any action to be taken > on such regions. This could therefore be fixed in at least three different > ways: > > 1) Since the call to xen_destroy_contiguous_region() really was pointless > before, we could just eliminate that from kernel/kexec.c. > > 2) xen_destroy_contiguous_region() could check the region it is passed > and bail out if it turns out not to be contiguous. > > 3) We could track which regions were actually acted upon by > xen_limit_pages_to_max_mfn() (through PageForeign logic) and attempt > to undo the limitation in the destructor (and at once again eliminate the > [mismatched] call to xen_destroy_contiguous_region()). Since this case > is not performance critical, there shouldn''t be an issue with not batching > these. And a check of the kexec code indicates it doesn''t use the index > member of struct page. > > Opinions appreciated. Thanks, > Jan > > > _______________________________________________ > Xen-devel mailing list > Xen-devel@lists.xensource.com > http://lists.xensource.com/xen-devel_______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel