[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH RFC 2/7] xen/vnuma: domctl subop for vnuma setup.
>>> On 27.08.13 at 09:54, Elena Ufimtseva <ufimtseva@xxxxxxxxx> wrote: > --- a/xen/common/domain.c > +++ b/xen/common/domain.c > @@ -227,6 +227,11 @@ struct domain *domain_create( > spin_lock_init(&d->node_affinity_lock); > d->node_affinity = NODE_MASK_ALL; > d->auto_node_affinity = 1; > + d->vnuma.vnuma_memblks = NULL; > + d->vnuma.vnode_to_pnode = NULL; > + d->vnuma.vcpu_to_vnode = NULL; > + d->vnuma.vdistance = NULL; > + d->vnuma.nr_vnodes = 0; Pretty pointless considering that struct domain starts out from a zeroed page. > @@ -532,6 +537,7 @@ int domain_kill(struct domain *d) > tmem_destroy(d->tmem); > domain_set_outstanding_pages(d, 0); > d->tmem = NULL; > + /* TODO: vnuma_destroy(d->vnuma); */ That's intended to go away by the time the RFC tag gets dropped? > @@ -862,7 +863,76 @@ long do_domctl(XEN_GUEST_HANDLE_PARAM(xen_domctl_t) > u_domctl) > ret = set_global_virq_handler(d, virq); > } > break; > - > + case XEN_DOMCTL_setvnumainfo: > + { > + int i, j; > + int dist_size; > + int dist, vmap, vntop; unsigned, unsigned, unsigned. > + vnuma_memblk_t vmemblk; > + > + ret = -EFAULT; > + dist = i = j = 0; > + if (op->u.vnuma.nr_vnodes <= 0 || op->u.vnuma.nr_vnodes > NR_CPUS) > + break; -EFAULT seems inappropriate here. > + d->vnuma.nr_vnodes = op->u.vnuma.nr_vnodes; > + dist_size = d->vnuma.nr_vnodes * d->vnuma.nr_vnodes; > + if ( (d->vnuma.vdistance = xmalloc_bytes(sizeof(*d->vnuma.vdistance) > * dist_size) ) == NULL) > + break; > + for ( i = 0; i < d->vnuma.nr_vnodes; i++ ) > + for ( j = 0; j < d->vnuma.nr_vnodes; j++ ) > + { > + if ( unlikely(__copy_from_guest_offset(&dist, > op->u.vnuma.vdistance, __vnode_distance_offset(d, i, j), 1)) ) Long line. > + { > + gdprintk(XENLOG_INFO, "vNUMA: Copy distance table > error\n"); > + goto err_dom; > + } > + __vnode_distance_set(d, i, j, dist); > + } > + if ( (d->vnuma.vnuma_memblks = > xmalloc_bytes(sizeof(*d->vnuma.vnuma_memblks) * d->vnuma.nr_vnodes)) == NULL ) Again. > + goto err_dom; > + for ( i = 0; i < d->vnuma.nr_vnodes; i++ ) > + { > + if ( unlikely(__copy_from_guest_offset(&vmemblk, > op->u.vnuma.vnuma_memblks, i, 1)) ) > + { > + gdprintk(XENLOG_INFO, "vNUMA: memory size error\n"); Just like for the earlier patch - the many formal problems make it quite hard to review the actual code. > @@ -852,6 +853,17 @@ struct xen_domctl_set_broken_page_p2m { > typedef struct xen_domctl_set_broken_page_p2m > xen_domctl_set_broken_page_p2m_t; > DEFINE_XEN_GUEST_HANDLE(xen_domctl_set_broken_page_p2m_t); > > +struct xen_domctl_vnuma { > + uint16_t nr_vnodes; > + XEN_GUEST_HANDLE_64(int) vdistance; > + XEN_GUEST_HANDLE_64(vnuma_memblk_t) vnuma_memblks; > + XEN_GUEST_HANDLE_64(int) vcpu_to_vnode; > + XEN_GUEST_HANDLE_64(int) vnode_to_pnode; uint, uint, uint. Jan _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |