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

Commit c7da8c82 authored by Jeremy Fitzhardinge's avatar Jeremy Fitzhardinge
Browse files

xen: clean up xen_load_gdt



Makes the logic a bit clearer.

Signed-off-by: default avatarJeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com>
parent cdaead6b
Loading
Loading
Loading
Loading
+13 −2
Original line number Diff line number Diff line
@@ -301,10 +301,21 @@ static void xen_load_gdt(const struct desc_ptr *dtr)
	frames = mcs.args;

	for (f = 0; va < dtr->address + size; va += PAGE_SIZE, f++) {
		frames[f] = arbitrary_virt_to_mfn((void *)va);
		int level;
		pte_t *ptep = lookup_address(va, &level);
		unsigned long pfn, mfn;
		void *virt;

		BUG_ON(ptep == NULL);

		pfn = pte_pfn(*ptep);
		mfn = pfn_to_mfn(pfn);
		virt = __va(PFN_PHYS(pfn));

		frames[f] = mfn;

		make_lowmem_page_readonly((void *)va);
		make_lowmem_page_readonly(mfn_to_virt(frames[f]));
		make_lowmem_page_readonly(virt);
	}

	MULTI_set_gdt(mcs.mc, frames, size / sizeof(struct desc_struct));