From e4ac23a788cf28add9a10dd696d119f5b4a50d89 Mon Sep 17 00:00:00 2001 From: Keir Fraser Date: Mon, 13 Sep 2010 17:39:53 +0100 Subject: [PATCH] xen/x86: make __direct_remap_pfn_range()'s return value meaningful From: Olaf Hering This change fixes the xc_map_foreign_bulk interface, which would otherwise cause SIGBUS when pages are gone because -ENOENT is not returned as expected by the IOCTL_PRIVCMD_MMAPBATCH_V2 ioctl. Signed-off-by: Jan Beulich --- arch/i386/mm/ioremap-xen.c | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/arch/i386/mm/ioremap-xen.c b/arch/i386/mm/ioremap-xen.c index 356f2336..4df793cd 100644 --- a/arch/i386/mm/ioremap-xen.c +++ b/arch/i386/mm/ioremap-xen.c @@ -45,7 +45,7 @@ static int __direct_remap_pfn_range(struct mm_struct *mm, pgprot_t prot, domid_t domid) { - int rc; + int rc = 0; unsigned long i, start_address; mmu_update_t *u, *v, *w; @@ -65,8 +65,8 @@ static int __direct_remap_pfn_range(struct mm_struct *mm, direct_remap_area_pte_fn, &w); if (rc) goto out; - rc = -EFAULT; - if (HYPERVISOR_mmu_update(u, v - u, NULL, domid) < 0) + rc = HYPERVISOR_mmu_update(u, v - u, NULL, domid); + if (rc < 0) goto out; v = w = u; start_address = address; @@ -90,13 +90,9 @@ static int __direct_remap_pfn_range(struct mm_struct *mm, direct_remap_area_pte_fn, &w); if (rc) goto out; - rc = -EFAULT; - if (unlikely(HYPERVISOR_mmu_update(u, v - u, NULL, domid) < 0)) - goto out; + rc = HYPERVISOR_mmu_update(u, v - u, NULL, domid); } - rc = 0; - out: flush_tlb_all(); -- 2.39.5