xen/p2m: Allocate p2m tracking pages on override

It is possible to add a p2m override on pages that are currently mapped
to INVALID_P2M_ENTRY; in particular, this will happen when using
ballooned pages in gntdev. This means that set_phys_to_machine must be
used instead of __set_phys_to_machine.

Signed-off-by: Daniel De Graaf <dgdegra@tycho.nsa.gov>
Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>

authored by Daniel De Graaf and committed by Konrad Rzeszutek Wilk b254244d a93e20a8

+4 -2
+4 -2
arch/x86/xen/p2m.c
··· 671 page->private = mfn; 672 page->index = pfn_to_mfn(pfn); 673 674 - __set_phys_to_machine(pfn, FOREIGN_FRAME(mfn)); 675 if (!PageHighMem(page)) 676 /* Just zap old mapping for now */ 677 pte_clear(&init_mm, address, ptep); ··· 711 spin_lock_irqsave(&m2p_override_lock, flags); 712 list_del(&page->lru); 713 spin_unlock_irqrestore(&m2p_override_lock, flags); 714 - __set_phys_to_machine(pfn, page->index); 715 716 if (!PageHighMem(page)) 717 set_pte_at(&init_mm, address, ptep,
··· 671 page->private = mfn; 672 page->index = pfn_to_mfn(pfn); 673 674 + if (unlikely(!set_phys_to_machine(pfn, FOREIGN_FRAME(mfn)))) 675 + return -ENOMEM; 676 + 677 if (!PageHighMem(page)) 678 /* Just zap old mapping for now */ 679 pte_clear(&init_mm, address, ptep); ··· 709 spin_lock_irqsave(&m2p_override_lock, flags); 710 list_del(&page->lru); 711 spin_unlock_irqrestore(&m2p_override_lock, flags); 712 + set_phys_to_machine(pfn, page->index); 713 714 if (!PageHighMem(page)) 715 set_pte_at(&init_mm, address, ptep,