mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 02:01:24 +01:00
Revert 22186:7167d6dd5c7c "x86: Retry do_mmu_update() a few times"
It does not work reliably for a couple of reasons: (1) page_lock() fails if a page is !PGT_validated, and a page can remain in that state for unbounded time. (2) in the kernel-side race that motivated this patch, pgd_pin() can lose to vmalloc_sync_all() -- pgd_pin() can try to chaneg a pmd page's type to l2_pagetable while vmalloc_sync_all()->set_pmd()->do_mmu_update() has it temporarily pinned as writable. This is hard to fix on the Xen side. Hence I give up on this approach, revert the patch, and settle for kernel-side patching only. Signed-off-by: Keir Fraser <keir.fraser@citrix.com>
This commit is contained in:
1 parent
80da763076
commit
3bbed81e30
1 file changed
-7
@@ -3414,7 +3414,6 @@ int do_mmu_update(
|
||||
case MMU_NORMAL_PT_UPDATE:
|
||||
case MMU_PT_UPDATE_PRESERVE_AD:
|
||||
{
|
||||
unsigned int retries = 0;
|
||||
p2m_type_t p2mt;
|
||||
|
||||
rc = xsm_mmu_normal_update(d, pg_owner, req.val);
|
||||
@@ -3446,7 +3445,6 @@ int do_mmu_update(
|
||||
(unsigned long)(req.ptr & ~PAGE_MASK));
|
||||
page = mfn_to_page(mfn);
|
||||
|
||||
retry:
|
||||
if ( page_lock(page) )
|
||||
{
|
||||
switch ( page->u.inuse.type_info & PGT_type_mask )
|
||||
@@ -3603,11 +3601,6 @@ int do_mmu_update(
|
||||
v, va, req.val, _mfn(mfn));
|
||||
put_page_type(page);
|
||||
}
|
||||
else if ( retries++ < 5 )
|
||||
{
|
||||
/* Page type can be in flux, so we retry a few times. */
|
||||
goto retry;
|
||||
}
|
||||
|
||||
unmap_domain_page_with_cache(va, &mapcache);
|
||||
put_page(page);
|
||||
|
||||