[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 5/6] libxl: support mapping static shared memory areas during domain creation
On Fri, Aug 25, 2017 at 08:02:55PM +0800, Zhongze Liu wrote: > Hi Wei, > > >> +/* The caller have to guarentee that sshm->begin < sshm->end */ > >> +static int libxl__sshm_do_map(libxl__gc *gc, uint32_t mid, uint32_t sid, > >> + libxl_static_shm *sshm, > >> + uint64_t mbegin, uint64_t mend) > >> +{ > >> + int rc; > >> + int i; > >> + unsigned int num_mpages, num_spages, offset; > >> + int *errs; > >> + xen_ulong_t *idxs; > >> + xen_pfn_t *gpfns; > >> + > >> + num_mpages = (mend - mbegin) >> 12; > >> + num_spages = (sshm->end - sshm->begin) >> 12; > >> + offset = sshm->offset >> 12; > >> + > >> + /* Check range. Test offset < mpages first to avoid overflow */ > >> + if ((offset >= num_mpages) || (num_mpages - offset < num_spages)) { > >> + SSHM_ERROR(sid, sshm->id, "exceeds master's address space."); > >> + rc = ERROR_INVAL; > >> + goto out; > >> + } > >> + > >> + /* fill out the pfn's and do the mapping */ > >> + errs = libxl__calloc(gc, num_spages, sizeof(int)); > >> + idxs = libxl__calloc(gc, num_spages, sizeof(xen_ulong_t)); > >> + gpfns = libxl__calloc(gc, num_spages, sizeof(xen_pfn_t)); > >> + for (i = 0; i < num_spages; i++) { > >> + idxs[i] = (mbegin >> 12) + offset + i; > >> + gpfns[i]= (sshm->begin >> 12) + i; > >> + } > >> + rc = xc_domain_add_to_physmap_batch(CTX->xch, > >> + sid, mid, > >> + XENMAPSPACE_gmfn_foreign, > >> + num_spages, > >> + idxs, gpfns, errs); > >> + > >> + for (i = 0; i< num_spages; i++) { > >> + if (errs[i]) { > >> + SSHM_ERROR(sid, sshm->id, > >> + "can't map at address 0x%"PRIx64".", > >> + sshm->begin + (offset << 12) ); > >> + rc = ERROR_FAIL; > >> + } > >> + } > >> + if (rc) goto out; > >> + > > > > How is partial failure handled? > > Em... > If one of the pages failed, the whole domain won't be constructed. But the > mapped pages are still occupying the refcount. > Do you think I should continue or just throw out a warning and let to user to > decide whether she is going to destroy it or not? You should be able to roll back by calling remove_from_physmap if necessary. _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx https://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |