Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 0f4b49ea authored by Konrad Rzeszutek Wilk's avatar Konrad Rzeszutek Wilk
Browse files

xen/p2m: Use SetPagePrivate and its friends for M2P overrides.



We use the page->private field and hence should use the proper
macros and set proper bits. Also WARN_ON in case somebody
tries to overwrite our data.

Signed-off-by: default avatarKonrad Rzeszutek Wilk <konrad.wilk@oracle.com>
parent a867db10
Loading
Loading
Loading
Loading
+6 −4
Original line number Original line Diff line number Diff line
@@ -692,8 +692,9 @@ int m2p_add_override(unsigned long mfn, struct page *page, bool clear_pte)
					"m2p_add_override: pfn %lx not mapped", pfn))
					"m2p_add_override: pfn %lx not mapped", pfn))
			return -EINVAL;
			return -EINVAL;
	}
	}

	WARN_ON(PagePrivate(page));
	page->private = mfn;
	SetPagePrivate(page);
	set_page_private(page, mfn);
	page->index = pfn_to_mfn(pfn);
	page->index = pfn_to_mfn(pfn);


	if (unlikely(!set_phys_to_machine(pfn, FOREIGN_FRAME(mfn))))
	if (unlikely(!set_phys_to_machine(pfn, FOREIGN_FRAME(mfn))))
@@ -736,7 +737,8 @@ int m2p_remove_override(struct page *page, bool clear_pte)
	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);

	WARN_ON(!PagePrivate(page));
	ClearPagePrivate(page);
	if (clear_pte && !PageHighMem(page))
	if (clear_pte && !PageHighMem(page))
		set_pte_at(&init_mm, address, ptep,
		set_pte_at(&init_mm, address, ptep,
				pfn_pte(pfn, PAGE_KERNEL));
				pfn_pte(pfn, PAGE_KERNEL));
@@ -758,7 +760,7 @@ struct page *m2p_find_override(unsigned long mfn)
	spin_lock_irqsave(&m2p_override_lock, flags);
	spin_lock_irqsave(&m2p_override_lock, flags);


	list_for_each_entry(p, bucket, lru) {
	list_for_each_entry(p, bucket, lru) {
		if (p->private == mfn) {
		if (page_private(p) == mfn) {
			ret = p;
			ret = p;
			break;
			break;
		}
		}