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>
This commit is contained in:
parent
a93e20a830
commit
b254244d26
arch/x86/xen
|
@ -671,7 +671,9 @@ int m2p_add_override(unsigned long mfn, struct page *page)
|
||||||
page->private = mfn;
|
page->private = mfn;
|
||||||
page->index = pfn_to_mfn(pfn);
|
page->index = pfn_to_mfn(pfn);
|
||||||
|
|
||||||
__set_phys_to_machine(pfn, FOREIGN_FRAME(mfn));
|
if (unlikely(!set_phys_to_machine(pfn, FOREIGN_FRAME(mfn))))
|
||||||
|
return -ENOMEM;
|
||||||
|
|
||||||
if (!PageHighMem(page))
|
if (!PageHighMem(page))
|
||||||
/* Just zap old mapping for now */
|
/* Just zap old mapping for now */
|
||||||
pte_clear(&init_mm, address, ptep);
|
pte_clear(&init_mm, address, ptep);
|
||||||
|
@ -709,7 +711,7 @@ int m2p_remove_override(struct page *page)
|
||||||
spin_lock_irqsave(&m2p_override_lock, flags);
|
spin_lock_irqsave(&m2p_override_lock, flags);
|
||||||
list_del(&page->lru);
|
list_del(&page->lru);
|
||||||
spin_unlock_irqrestore(&m2p_override_lock, flags);
|
spin_unlock_irqrestore(&m2p_override_lock, flags);
|
||||||
__set_phys_to_machine(pfn, page->index);
|
set_phys_to_machine(pfn, page->index);
|
||||||
|
|
||||||
if (!PageHighMem(page))
|
if (!PageHighMem(page))
|
||||||
set_pte_at(&init_mm, address, ptep,
|
set_pte_at(&init_mm, address, ptep,
|
||||||
|
|
Loading…
Reference in New Issue