On 08.01.20 13:16, Wei Liu wrote:
On Wed, Jan 08, 2020 at 12:01:48PM +0100, Juergen Gross wrote:
cpu_smpboot_free() removes the stubs for the cpu going offline, but it
isn't clearing the related percpu variables. This will result in
crashes when a stub page is released due to all related cpus gone
offline and one of those cpus going online later.
Fix that by clearing stubs.addr and stubs.mfn in order to allocate a
new stub page when needed.
Signed-off-by: Juergen Gross <jgr...@suse.com>
---
xen/arch/x86/smpboot.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/xen/arch/x86/smpboot.c b/xen/arch/x86/smpboot.c
index 7e29704080..46c0729214 100644
--- a/xen/arch/x86/smpboot.c
+++ b/xen/arch/x86/smpboot.c
@@ -945,6 +945,8 @@ static void cpu_smpboot_free(unsigned int cpu, bool remove)
(per_cpu(stubs.addr, cpu) | ~PAGE_MASK) + 1);
if ( i == STUBS_PER_PAGE )
free_domheap_page(mfn_to_page(mfn));
+ per_cpu(stubs.addr, cpu) = 0;
+ per_cpu(stubs.mfn, cpu) = 0;
Shouldn't the mfn be set to INVALID_MFN instead?
This would require modifying alloc_stub_page():
if ( *mfn )
pg = mfn_to_page(_mfn(*mfn));
else
Juergen
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel