提交 b254244d 编写于 作者: D Daniel De Graaf 提交者: Konrad Rzeszutek Wilk

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: NDaniel De Graaf <dgdegra@tycho.nsa.gov>
Signed-off-by: NKonrad Rzeszutek Wilk <konrad.wilk@oracle.com>
上级 a93e20a8
...@@ -671,7 +671,9 @@ int m2p_add_override(unsigned long mfn, struct page *page) ...@@ -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) ...@@ -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,
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册