[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [xl] a fault happens on pv domain reboot
Stefano Stabellini writes ("Re: [Xen-devel] [xl] a fault happens on pv domain reboot"): > That means that xc_domain_getinfolist failed with EAGAIN, the reason > seems to be that mlock can actually failed with EAGAIN but we don't do > anything about it in libxc. > If mlock returns EAGAIN we should make sure that the pages are actually > available in RAM and try again. So, on that note, could you please try this patch ? Ian. diff -r 267ecb2ee5bf tools/libxc/xc_acm.c --- a/tools/libxc/xc_acm.c Tue Jun 01 14:25:59 2010 +0100 +++ b/tools/libxc/xc_acm.c Tue Jun 01 17:54:51 2010 +0100 @@ -83,7 +83,7 @@ hypercall.op = __HYPERVISOR_xsm_op; hypercall.arg[0] = (unsigned long)&acmctl; - if ( lock_pages(&acmctl, sizeof(acmctl)) != 0) + if ( xc_lock_pages(xch, &acmctl, sizeof(acmctl)) != 0) { PERROR("Could not lock memory for Xen hypercall"); return -EFAULT; diff -r 267ecb2ee5bf tools/libxc/xc_cpupool.c --- a/tools/libxc/xc_cpupool.c Tue Jun 01 14:25:59 2010 +0100 +++ b/tools/libxc/xc_cpupool.c Tue Jun 01 17:54:51 2010 +0100 @@ -71,7 +71,7 @@ set_xen_guest_handle(sysctl.u.cpupool_op.cpumap.bitmap, local); sysctl.u.cpupool_op.cpumap.nr_cpus = sizeof(info->cpumap) * 8; - if ( (err = lock_pages(local, sizeof(local))) != 0 ) + if ( (err = xc_lock_pages(xch, local, sizeof(local))) != 0 ) { PERROR("Could not lock memory for Xen hypercall"); break; @@ -147,7 +147,7 @@ set_xen_guest_handle(sysctl.u.cpupool_op.cpumap.bitmap, local); sysctl.u.cpupool_op.cpumap.nr_cpus = sizeof(*cpumap) * 8; - if ( (err = lock_pages(local, sizeof(local))) != 0 ) + if ( (err = xc_lock_pages(xch, local, sizeof(local))) != 0 ) { PERROR("Could not lock memory for Xen hypercall"); return err; diff -r 267ecb2ee5bf tools/libxc/xc_domain.c --- a/tools/libxc/xc_domain.c Tue Jun 01 14:25:59 2010 +0100 +++ b/tools/libxc/xc_domain.c Tue Jun 01 17:54:51 2010 +0100 @@ -80,7 +80,7 @@ arg.domain_id = domid; arg.reason = reason; - if ( lock_pages(&arg, sizeof(arg)) != 0 ) + if ( xc_lock_pages(xch, &arg, sizeof(arg)) != 0 ) { PERROR("Could not lock memory for Xen hypercall"); goto out1; @@ -119,7 +119,7 @@ domctl.u.vcpuaffinity.cpumap.nr_cpus = cpusize * 8; - if ( lock_pages(local, cpusize) != 0 ) + if ( xc_lock_pages(xch, local, cpusize) != 0 ) { PERROR("Could not lock memory for Xen hypercall"); goto out; @@ -158,7 +158,7 @@ set_xen_guest_handle(domctl.u.vcpuaffinity.cpumap.bitmap, local); domctl.u.vcpuaffinity.cpumap.nr_cpus = cpusize * 8; - if ( lock_pages(local, sizeof(local)) != 0 ) + if ( xc_lock_pages(xch, local, sizeof(local)) != 0 ) { PERROR("Could not lock memory for Xen hypercall"); goto out; @@ -243,7 +243,7 @@ int ret = 0; DECLARE_SYSCTL; - if ( lock_pages(info, max_domains*sizeof(xc_domaininfo_t)) != 0 ) + if ( xc_lock_pages(xch, info, max_domains*sizeof(xc_domaininfo_t)) != 0 ) return -1; sysctl.cmd = XEN_SYSCTL_getdomaininfolist; @@ -276,7 +276,7 @@ set_xen_guest_handle(domctl.u.hvmcontext.buffer, ctxt_buf); if ( ctxt_buf ) - if ( (ret = lock_pages(ctxt_buf, size)) != 0 ) + if ( (ret = xc_lock_pages(xch, ctxt_buf, size)) != 0 ) return ret; ret = do_domctl(xch, &domctl); @@ -308,7 +308,7 @@ domctl.u.hvmcontext_partial.instance = instance; set_xen_guest_handle(domctl.u.hvmcontext_partial.buffer, ctxt_buf); - if ( (ret = lock_pages(ctxt_buf, size)) != 0 ) + if ( (ret = xc_lock_pages(xch, ctxt_buf, size)) != 0 ) return ret; ret = do_domctl(xch, &domctl); @@ -333,7 +333,7 @@ domctl.u.hvmcontext.size = size; set_xen_guest_handle(domctl.u.hvmcontext.buffer, ctxt_buf); - if ( (ret = lock_pages(ctxt_buf, size)) != 0 ) + if ( (ret = xc_lock_pages(xch, ctxt_buf, size)) != 0 ) return ret; ret = do_domctl(xch, &domctl); @@ -358,7 +358,7 @@ set_xen_guest_handle(domctl.u.vcpucontext.ctxt, &ctxt->c); - if ( (rc = lock_pages(ctxt, sz)) != 0 ) + if ( (rc = xc_lock_pages(xch, ctxt, sz)) != 0 ) return rc; rc = do_domctl(xch, &domctl); unlock_pages(ctxt, sz); @@ -446,7 +446,8 @@ set_xen_guest_handle(fmap.map.buffer, &e820); - if ( lock_pages(&fmap, sizeof(fmap)) || lock_pages(&e820, sizeof(e820)) ) + if ( xc_lock_pages(xch, &fmap, sizeof(fmap)) || + xc_lock_pages(xch, &e820, sizeof(e820)) ) { PERROR("Could not lock memory for Xen hypercall"); rc = -1; @@ -522,7 +523,7 @@ domctl.cmd = XEN_DOMCTL_gettscinfo; domctl.domain = (domid_t)domid; set_xen_guest_handle(domctl.u.tsc_info.out_info, &info); - if ( (rc = lock_pages(&info, sizeof(info))) != 0 ) + if ( (rc = xc_lock_pages(xch, &info, sizeof(info))) != 0 ) return rc; rc = do_domctl(xch, &domctl); if ( rc == 0 ) @@ -807,7 +808,7 @@ domctl.u.vcpucontext.vcpu = vcpu; set_xen_guest_handle(domctl.u.vcpucontext.ctxt, &ctxt->c); - if ( (rc = lock_pages(ctxt, sz)) != 0 ) + if ( (rc = xc_lock_pages(xch, ctxt, sz)) != 0 ) return rc; rc = do_domctl(xch, &domctl); @@ -875,7 +876,7 @@ arg.domid = dom; arg.index = param; arg.value = value; - if ( lock_pages(&arg, sizeof(arg)) != 0 ) + if ( xc_lock_pages(handle, &arg, sizeof(arg)) != 0 ) return -1; rc = do_xen_hypercall(handle, &hypercall); unlock_pages(&arg, sizeof(arg)); @@ -893,7 +894,7 @@ hypercall.arg[1] = (unsigned long)&arg; arg.domid = dom; arg.index = param; - if ( lock_pages(&arg, sizeof(arg)) != 0 ) + if ( xc_lock_pages(handle, &arg, sizeof(arg)) != 0 ) return -1; rc = do_xen_hypercall(handle, &hypercall); unlock_pages(&arg, sizeof(arg)); @@ -946,7 +947,7 @@ set_xen_guest_handle(domctl.u.get_device_group.sdev_array, sdev_array); - if ( lock_pages(sdev_array, max_sdevs * sizeof(*sdev_array)) != 0 ) + if ( xc_lock_pages(xch, sdev_array, max_sdevs * sizeof(*sdev_array)) != 0 ) { PERROR("Could not lock memory for xc_get_device_group"); return -ENOMEM; diff -r 267ecb2ee5bf tools/libxc/xc_domain_restore.c --- a/tools/libxc/xc_domain_restore.c Tue Jun 01 14:25:59 2010 +0100 +++ b/tools/libxc/xc_domain_restore.c Tue Jun 01 17:54:51 2010 +0100 @@ -1451,7 +1451,7 @@ memset(region_mfn, 0, ROUNDUP(MAX_BATCH_SIZE * sizeof(xen_pfn_t), PAGE_SHIFT)); - if ( lock_pages(region_mfn, sizeof(xen_pfn_t) * MAX_BATCH_SIZE) ) + if ( xc_lock_pages(xch, region_mfn, sizeof(xen_pfn_t) * MAX_BATCH_SIZE) ) { PERROR("Could not lock region_mfn"); goto out; @@ -1801,7 +1801,7 @@ } } - if ( lock_pages(&ctxt, sizeof(ctxt)) ) + if ( xc_lock_pages(xch, &ctxt, sizeof(ctxt)) ) { PERROR("Unable to lock ctxt"); return 1; diff -r 267ecb2ee5bf tools/libxc/xc_domain_save.c --- a/tools/libxc/xc_domain_save.c Tue Jun 01 14:25:59 2010 +0100 +++ b/tools/libxc/xc_domain_save.c Tue Jun 01 17:54:51 2010 +0100 @@ -1032,14 +1032,14 @@ memset(to_send, 0xff, BITMAP_SIZE); - if ( lock_pages(to_send, BITMAP_SIZE) ) + if ( xc_lock_pages(xch, to_send, BITMAP_SIZE) ) { PERROR("Unable to lock to_send"); return 1; } /* (to fix is local only) */ - if ( lock_pages(to_skip, BITMAP_SIZE) ) + if ( xc_lock_pages(xch, to_skip, BITMAP_SIZE) ) { PERROR("Unable to lock to_skip"); return 1; @@ -1077,7 +1077,7 @@ memset(pfn_type, 0, ROUNDUP(MAX_BATCH_SIZE * sizeof(*pfn_type), PAGE_SHIFT)); - if ( lock_pages(pfn_type, MAX_BATCH_SIZE * sizeof(*pfn_type)) ) + if ( xc_lock_pages(xch, pfn_type, MAX_BATCH_SIZE * sizeof(*pfn_type)) ) { PERROR("Unable to lock pfn_type array"); goto out; diff -r 267ecb2ee5bf tools/libxc/xc_evtchn.c --- a/tools/libxc/xc_evtchn.c Tue Jun 01 14:25:59 2010 +0100 +++ b/tools/libxc/xc_evtchn.c Tue Jun 01 17:54:51 2010 +0100 @@ -19,7 +19,7 @@ hypercall.arg[0] = cmd; hypercall.arg[1] = (unsigned long)arg; - if ( lock_pages(arg, arg_size) != 0 ) + if ( xc_lock_pages(xch, arg, arg_size) != 0 ) { PERROR("do_evtchn_op: arg lock failed"); goto out; diff -r 267ecb2ee5bf tools/libxc/xc_linux.c --- a/tools/libxc/xc_linux.c Tue Jun 01 14:25:59 2010 +0100 +++ b/tools/libxc/xc_linux.c Tue Jun 01 17:54:51 2010 +0100 @@ -724,7 +724,7 @@ hypercall.arg[1] = (unsigned long)op; hypercall.arg[2] = count; - if ( lock_pages(op, count* op_size) != 0 ) + if ( xc_lock_pages(xch, op, count* op_size) != 0 ) { PERROR("Could not lock memory for Xen hypercall"); goto out1; @@ -776,7 +776,7 @@ *gnt_num = query.nr_frames * (PAGE_SIZE / sizeof(grant_entry_v1_t) ); frame_list = malloc(query.nr_frames * sizeof(unsigned long)); - if ( !frame_list || lock_pages(frame_list, + if ( !frame_list || xc_lock_pages(xch, frame_list, query.nr_frames * sizeof(unsigned long)) ) { ERROR("Alloc/lock frame_list in xc_gnttab_map_table\n"); diff -r 267ecb2ee5bf tools/libxc/xc_misc.c --- a/tools/libxc/xc_misc.c Tue Jun 01 14:25:59 2010 +0100 +++ b/tools/libxc/xc_misc.c Tue Jun 01 17:54:51 2010 +0100 @@ -28,7 +28,7 @@ sysctl.u.readconsole.incremental = incremental; } - if ( (ret = lock_pages(buffer, nr_chars)) != 0 ) + if ( (ret = xc_lock_pages(xch, buffer, nr_chars)) != 0 ) return ret; if ( (ret = do_sysctl(xch, &sysctl)) == 0 ) @@ -52,7 +52,7 @@ set_xen_guest_handle(sysctl.u.debug_keys.keys, keys); sysctl.u.debug_keys.nr_keys = len; - if ( (ret = lock_pages(keys, len)) != 0 ) + if ( (ret = xc_lock_pages(xch, keys, len)) != 0 ) return ret; ret = do_sysctl(xch, &sysctl); @@ -140,7 +140,7 @@ DECLARE_HYPERCALL; mc->interface_version = XEN_MCA_INTERFACE_VERSION; - if ( lock_pages(mc, sizeof(mc)) ) + if ( xc_lock_pages(xch, mc, sizeof(mc)) ) { PERROR("Could not lock xen_mc memory"); return -EINVAL; @@ -213,7 +213,7 @@ sysctl.u.getcpuinfo.max_cpus = max_cpus; set_xen_guest_handle(sysctl.u.getcpuinfo.info, info); - if ( (rc = lock_pages(info, max_cpus*sizeof(*info))) != 0 ) + if ( (rc = xc_lock_pages(xch, info, max_cpus*sizeof(*info))) != 0 ) return rc; rc = do_sysctl(xch, &sysctl); @@ -236,7 +236,7 @@ struct xen_hvm_set_pci_intx_level _arg, *arg = &_arg; int rc; - if ( (rc = hcall_buf_prep((void **)&arg, sizeof(*arg))) != 0 ) + if ( (rc = hcall_buf_prep(xch, (void **)&arg, sizeof(*arg))) != 0 ) { PERROR("Could not lock memory"); return rc; @@ -269,7 +269,7 @@ struct xen_hvm_set_isa_irq_level _arg, *arg = &_arg; int rc; - if ( (rc = hcall_buf_prep((void **)&arg, sizeof(*arg))) != 0 ) + if ( (rc = hcall_buf_prep(xch, (void **)&arg, sizeof(*arg))) != 0 ) { PERROR("Could not lock memory"); return rc; @@ -305,7 +305,7 @@ arg.link = link; arg.isa_irq = isa_irq; - if ( (rc = lock_pages(&arg, sizeof(arg))) != 0 ) + if ( (rc = xc_lock_pages(xch, &arg, sizeof(arg))) != 0 ) { PERROR("Could not lock memory"); return rc; @@ -336,7 +336,7 @@ arg.nr = nr; set_xen_guest_handle(arg.dirty_bitmap, (uint8_t *)dirty_bitmap); - if ( (rc = lock_pages(&arg, sizeof(arg))) != 0 ) + if ( (rc = xc_lock_pages(xch, &arg, sizeof(arg))) != 0 ) { PERROR("Could not lock memory"); return rc; @@ -364,7 +364,7 @@ arg.first_pfn = first_pfn; arg.nr = nr; - if ( (rc = lock_pages(&arg, sizeof(arg))) != 0 ) + if ( (rc = xc_lock_pages(xch, &arg, sizeof(arg))) != 0 ) { PERROR("Could not lock memory"); return rc; @@ -393,7 +393,7 @@ arg.first_pfn = first_pfn; arg.nr = nr; - if ( (rc = lock_pages(&arg, sizeof(arg))) != 0 ) + if ( (rc = xc_lock_pages(xch, &arg, sizeof(arg))) != 0 ) { PERROR("Could not lock memory"); return rc; diff -r 267ecb2ee5bf tools/libxc/xc_offline_page.c --- a/tools/libxc/xc_offline_page.c Tue Jun 01 14:25:59 2010 +0100 +++ b/tools/libxc/xc_offline_page.c Tue Jun 01 17:54:51 2010 +0100 @@ -57,7 +57,7 @@ if ( !status || (end < start) ) return -EINVAL; - if (lock_pages(status, sizeof(uint32_t)*(end - start + 1))) + if (xc_lock_pages(xch, status, sizeof(uint32_t)*(end - start + 1))) { ERROR("Could not lock memory for xc_mark_page_online\n"); return -EINVAL; @@ -84,7 +84,7 @@ if ( !status || (end < start) ) return -EINVAL; - if (lock_pages(status, sizeof(uint32_t)*(end - start + 1))) + if (xc_lock_pages(xch, status, sizeof(uint32_t)*(end - start + 1))) { ERROR("Could not lock memory for xc_mark_page_offline"); return -EINVAL; @@ -111,7 +111,7 @@ if ( !status || (end < start) ) return -EINVAL; - if (lock_pages(status, sizeof(uint32_t)*(end - start + 1))) + if (xc_lock_pages(xch, status, sizeof(uint32_t)*(end - start + 1))) { ERROR("Could not lock memory for xc_query_page_offline_status\n"); return -EINVAL; @@ -277,7 +277,7 @@ minfo->pfn_type[i] = pfn_to_mfn(i, minfo->p2m_table, minfo->guest_width); - if ( lock_pages(minfo->pfn_type, minfo->p2m_size * sizeof(*minfo->pfn_type)) ) + if ( xc_lock_pages(xch, minfo->pfn_type, minfo->p2m_size * sizeof(*minfo->pfn_type)) ) { ERROR("Unable to lock pfn_type array"); goto failed; diff -r 267ecb2ee5bf tools/libxc/xc_pm.c --- a/tools/libxc/xc_pm.c Tue Jun 01 14:25:59 2010 +0100 +++ b/tools/libxc/xc_pm.c Tue Jun 01 17:54:51 2010 +0100 @@ -57,11 +57,11 @@ if ( (ret = xc_pm_get_max_px(xch, cpuid, &max_px)) != 0) return ret; - if ( (ret = lock_pages(pxpt->trans_pt, + if ( (ret = xc_lock_pages(xch, pxpt->trans_pt, max_px * max_px * sizeof(uint64_t))) != 0 ) return ret; - if ( (ret = lock_pages(pxpt->pt, + if ( (ret = xc_lock_pages(xch, pxpt->pt, max_px * sizeof(struct xc_px_val))) != 0 ) { unlock_pages(pxpt->trans_pt, max_px * max_px * sizeof(uint64_t)); @@ -132,11 +132,11 @@ if ( (ret = xc_pm_get_max_cx(xch, cpuid, &max_cx)) ) goto unlock_0; - if ( (ret = lock_pages(cxpt, sizeof(struct xc_cx_stat))) ) + if ( (ret = xc_lock_pages(xch, cxpt, sizeof(struct xc_cx_stat))) ) goto unlock_0; - if ( (ret = lock_pages(cxpt->triggers, max_cx * sizeof(uint64_t))) ) + if ( (ret = xc_lock_pages(xch, cxpt->triggers, max_cx * sizeof(uint64_t))) ) goto unlock_1; - if ( (ret = lock_pages(cxpt->residencies, max_cx * sizeof(uint64_t))) ) + if ( (ret = xc_lock_pages(xch, cxpt->residencies, max_cx * sizeof(uint64_t))) ) goto unlock_2; sysctl.cmd = XEN_SYSCTL_get_pmstat; @@ -199,13 +199,13 @@ (!user_para->scaling_available_governors) ) return -EINVAL; - if ( (ret = lock_pages(user_para->affected_cpus, + if ( (ret = xc_lock_pages(xch, user_para->affected_cpus, user_para->cpu_num * sizeof(uint32_t))) ) goto unlock_1; - if ( (ret = lock_pages(user_para->scaling_available_frequencies, + if ( (ret = xc_lock_pages(xch, user_para->scaling_available_frequencies, user_para->freq_num * sizeof(uint32_t))) ) goto unlock_2; - if ( (ret = lock_pages(user_para->scaling_available_governors, + if ( (ret = xc_lock_pages(xch, user_para->scaling_available_governors, user_para->gov_num * CPUFREQ_NAME_LEN * sizeof(char))) ) goto unlock_3; diff -r 267ecb2ee5bf tools/libxc/xc_private.c --- a/tools/libxc/xc_private.c Tue Jun 01 14:25:59 2010 +0100 +++ b/tools/libxc/xc_private.c Tue Jun 01 17:54:51 2010 +0100 @@ -174,7 +174,7 @@ #ifdef __sun__ -int lock_pages(void *addr, size_t len) { return 0; } +int xc_lock_pages(xc_interface *xch, void *addr, size_t len) { return 0; } void unlock_pages(void *addr, size_t len) { } int hcall_buf_prep(void **addr, size_t len) { return 0; } @@ -182,13 +182,40 @@ #else /* !__sun__ */ -int lock_pages(void *addr, size_t len) +int xc_lock_pages(xc_interface *xch, void *addr, size_t len) { int e; void *laddr = (void *)((unsigned long)addr & PAGE_MASK); size_t llen = (len + ((unsigned long)addr - (unsigned long)laddr) + PAGE_SIZE - 1) & PAGE_MASK; - e = mlock(laddr, llen); + size_t offset; + int iterations = 0; + int dummy; + + for (;;) { + e = mlock(laddr, llen); + if (!e) { + if (iterations > 5) + DBGPRINTF("mlock (libxc_lock_pages) (len=%zu)" + " took %d iterations", len, iterations); + return 0; + } + if (errno != EAGAIN) { + PERROR("mlock (libxc_lock_pages) failed (len=%zu)", len); + return e; + } + if (++iterations > 100) { + ERROR("mlock (libxc_lock_pages) too much EAGAIN (len=%zu)", len); + return -1; + } + if (iterations > 10) { + /* max total time: 1/2 * 100 * 2000 us = 1 second */ + usleep(iterations * 2000); + } + for (offset = 0; offset < len; offset += PAGE_SIZE) { + dummy = ((volatile unsigned char*)addr)[offset]; + } + } return e; } @@ -230,7 +257,7 @@ pthread_key_create(&hcall_buf_pkey, _xc_clean_hcall_buf); } -int hcall_buf_prep(void **addr, size_t len) +int hcall_buf_prep(xc_interface *xch, void **addr, size_t len) { struct hcall_buf *hcall_buf; @@ -248,7 +275,7 @@ if ( !hcall_buf->buf ) { hcall_buf->buf = xc_memalign(PAGE_SIZE, PAGE_SIZE); - if ( !hcall_buf->buf || lock_pages(hcall_buf->buf, PAGE_SIZE) ) + if ( !hcall_buf->buf || xc_lock_pages(xch, hcall_buf->buf, PAGE_SIZE) ) { free(hcall_buf->buf); hcall_buf->buf = NULL; @@ -265,7 +292,7 @@ } out: - return lock_pages(*addr, len); + return xc_lock_pages(xch, *addr, len); } void hcall_buf_release(void **addr, size_t len) @@ -307,7 +334,7 @@ DECLARE_HYPERCALL; long ret = -EINVAL; - if ( hcall_buf_prep((void **)&op, nr_ops*sizeof(*op)) != 0 ) + if ( hcall_buf_prep(xch, (void **)&op, nr_ops*sizeof(*op)) != 0 ) { PERROR("Could not lock memory for Xen hypercall"); goto out1; @@ -341,7 +368,7 @@ hypercall.arg[2] = 0; hypercall.arg[3] = mmu->subject; - if ( lock_pages(mmu->updates, sizeof(mmu->updates)) != 0 ) + if ( xc_lock_pages(xch, mmu->updates, sizeof(mmu->updates)) != 0 ) { PERROR("flush_mmu_updates: mmu updates lock_pages failed"); err = 1; @@ -408,14 +435,14 @@ case XENMEM_increase_reservation: case XENMEM_decrease_reservation: case XENMEM_populate_physmap: - if ( lock_pages(reservation, sizeof(*reservation)) != 0 ) + if ( xc_lock_pages(xch, reservation, sizeof(*reservation)) != 0 ) { PERROR("Could not lock"); goto out1; } get_xen_guest_handle(extent_start, reservation->extent_start); if ( (extent_start != NULL) && - (lock_pages(extent_start, + (xc_lock_pages(xch, extent_start, reservation->nr_extents * sizeof(xen_pfn_t)) != 0) ) { PERROR("Could not lock"); @@ -424,13 +451,13 @@ } break; case XENMEM_machphys_mfn_list: - if ( lock_pages(xmml, sizeof(*xmml)) != 0 ) + if ( xc_lock_pages(xch, xmml, sizeof(*xmml)) != 0 ) { PERROR("Could not lock"); goto out1; } get_xen_guest_handle(extent_start, xmml->extent_start); - if ( lock_pages(extent_start, + if ( xc_lock_pages(xch, extent_start, xmml->max_extents * sizeof(xen_pfn_t)) != 0 ) { PERROR("Could not lock"); @@ -439,7 +466,7 @@ } break; case XENMEM_add_to_physmap: - if ( lock_pages(arg, sizeof(struct xen_add_to_physmap)) ) + if ( xc_lock_pages(xch, arg, sizeof(struct xen_add_to_physmap)) ) { PERROR("Could not lock"); goto out1; @@ -448,7 +475,7 @@ case XENMEM_current_reservation: case XENMEM_maximum_reservation: case XENMEM_maximum_gpfn: - if ( lock_pages(arg, sizeof(domid_t)) ) + if ( xc_lock_pages(xch, arg, sizeof(domid_t)) ) { PERROR("Could not lock"); goto out1; @@ -456,7 +483,7 @@ break; case XENMEM_set_pod_target: case XENMEM_get_pod_target: - if ( lock_pages(arg, sizeof(struct xen_pod_target)) ) + if ( xc_lock_pages(xch, arg, sizeof(struct xen_pod_target)) ) { PERROR("Could not lock"); goto out1; @@ -535,7 +562,7 @@ memset(pfn_buf, 0, max_pfns * sizeof(*pfn_buf)); #endif - if ( lock_pages(pfn_buf, max_pfns * sizeof(*pfn_buf)) != 0 ) + if ( xc_lock_pages(xch, pfn_buf, max_pfns * sizeof(*pfn_buf)) != 0 ) { PERROR("xc_get_pfn_list: pfn_buf lock failed"); return -1; @@ -618,7 +645,7 @@ break; } - if ( (argsize != 0) && (lock_pages(arg, argsize) != 0) ) + if ( (argsize != 0) && (xc_lock_pages(xch, arg, argsize) != 0) ) { PERROR("Could not lock memory for version hypercall"); return -ENOMEM; diff -r 267ecb2ee5bf tools/libxc/xc_private.h --- a/tools/libxc/xc_private.h Tue Jun 01 14:25:59 2010 +0100 +++ b/tools/libxc/xc_private.h Tue Jun 01 17:54:51 2010 +0100 @@ -85,10 +85,10 @@ void *xc_memalign(size_t alignment, size_t size); -int lock_pages(void *addr, size_t len); +int xc_lock_pages(xc_interface*, void *addr, size_t len); void unlock_pages(void *addr, size_t len); -int hcall_buf_prep(void **addr, size_t len); +int hcall_buf_prep(xc_interface*, void **addr, size_t len); void hcall_buf_release(void **addr, size_t len); static inline void safe_munlock(const void *addr, size_t len) @@ -117,7 +117,7 @@ DECLARE_HYPERCALL; - if ( hcall_buf_prep(&op, len) != 0 ) + if ( hcall_buf_prep(xch, &op, len) != 0 ) { PERROR("Could not lock memory for Xen hypercall"); goto out1; @@ -145,7 +145,7 @@ int ret = -1; DECLARE_HYPERCALL; - if ( hcall_buf_prep((void **)&domctl, sizeof(*domctl)) != 0 ) + if ( hcall_buf_prep(xch, (void **)&domctl, sizeof(*domctl)) != 0 ) { PERROR("Could not lock memory for Xen hypercall"); goto out1; @@ -174,7 +174,7 @@ int ret = -1; DECLARE_HYPERCALL; - if ( hcall_buf_prep((void **)&sysctl, sizeof(*sysctl)) != 0 ) + if ( hcall_buf_prep(xch, (void **)&sysctl, sizeof(*sysctl)) != 0 ) { PERROR("Could not lock memory for Xen hypercall"); goto out1; diff -r 267ecb2ee5bf tools/libxc/xc_resume.c --- a/tools/libxc/xc_resume.c Tue Jun 01 14:25:59 2010 +0100 +++ b/tools/libxc/xc_resume.c Tue Jun 01 17:54:51 2010 +0100 @@ -180,7 +180,7 @@ goto out; } - if ( lock_pages(&ctxt, sizeof(ctxt)) ) + if ( xc_lock_pages(xch, &ctxt, sizeof(ctxt)) ) { ERROR("Unable to lock ctxt"); goto out; diff -r 267ecb2ee5bf tools/libxc/xc_tbuf.c --- a/tools/libxc/xc_tbuf.c Tue Jun 01 14:25:59 2010 +0100 +++ b/tools/libxc/xc_tbuf.c Tue Jun 01 17:54:51 2010 +0100 @@ -120,7 +120,7 @@ set_xen_guest_handle(sysctl.u.tbuf_op.cpu_mask.bitmap, bytemap); sysctl.u.tbuf_op.cpu_mask.nr_cpus = sizeof(bytemap) * 8; - if ( lock_pages(&bytemap, sizeof(bytemap)) != 0 ) + if ( xc_lock_pages(xch, &bytemap, sizeof(bytemap)) != 0 ) { PERROR("Could not lock memory for Xen hypercall"); goto out; diff -r 267ecb2ee5bf tools/libxc/xc_tmem.c --- a/tools/libxc/xc_tmem.c Tue Jun 01 14:25:59 2010 +0100 +++ b/tools/libxc/xc_tmem.c Tue Jun 01 17:54:51 2010 +0100 @@ -14,7 +14,7 @@ hypercall.op = __HYPERVISOR_tmem_op; hypercall.arg[0] = (unsigned long)op; - if (lock_pages(op, sizeof(*op)) != 0) + if (xc_lock_pages(xch, op, sizeof(*op)) != 0) { PERROR("Could not lock memory for Xen hypercall"); return -EFAULT; @@ -52,7 +52,7 @@ op.u.ctrl.arg3 = arg3; if (subop == TMEMC_LIST) { - if ((arg1 != 0) && (lock_pages(buf, arg1) != 0)) + if ((arg1 != 0) && (xc_lock_pages(xch, buf, arg1) != 0)) { PERROR("Could not lock memory for Xen hypercall"); return -ENOMEM; _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |