[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v2] common/vm_event: Initialize vm_event lists on domain creation
>>> On 24.08.17 at 13:48, <aisaila@xxxxxxxxxxxxxxx> wrote: > The patch splits the vm_event into three structures:vm_event_share, > vm_event_paging, vm_event_monitor. The allocation for the > structure is moved to vm_event_enable so that it can be > allocated/init when needed and freed in vm_event_disable. > > Signed-off-by: Alexandru Isaila <aisaila@xxxxxxxxxxxxxxx> Missing brief description of changes from v1 here. > @@ -50,32 +50,37 @@ static int vm_event_enable( > int rc; > unsigned long ring_gfn = d->arch.hvm_domain.params[param]; > > + if ( !(*ved) ) > + (*ved) = xzalloc(struct vm_event_domain); > + if ( !(*ved) ) In none of the three cases you really need the parentheses around *ved. > @@ -187,39 +194,45 @@ void vm_event_wake(struct domain *d, struct > vm_event_domain *ved) > vm_event_wake_blocked(d, ved); > } > > -static int vm_event_disable(struct domain *d, struct vm_event_domain *ved) > +static int vm_event_disable(struct domain *d, struct vm_event_domain **ved) > { > - if ( ved->ring_page ) > + if ( !*ved ) > + return 0; > + > + if ( (*ved)->ring_page ) > { >[...] > + xfree(*ved); > + *ved = NULL; > } If both if()-s above are really useful, you are leaking *ved when it is non-NULL but ->ring_page is NULL. > @@ -500,6 +519,9 @@ bool_t vm_event_check_ring(struct vm_event_domain *ved) > int __vm_event_claim_slot(struct domain *d, struct vm_event_domain *ved, > bool_t allow_sleep) > { > + if ( !ved ) > + return -ENOSYS; I don't think ENOSYS is correct here. > @@ -510,24 +532,24 @@ int __vm_event_claim_slot(struct domain *d, struct > vm_event_domain *ved, > /* Registered with Xen-bound event channel for incoming notifications. */ > static void mem_paging_notification(struct vcpu *v, unsigned int port) > { > - if ( likely(v->domain->vm_event->paging.ring_page != NULL) ) > - vm_event_resume(v->domain, &v->domain->vm_event->paging); > + if ( likely(v->domain->vm_event_paging->ring_page != NULL) ) > + vm_event_resume(v->domain, v->domain->vm_event_paging); > } > #endif > > /* Registered with Xen-bound event channel for incoming notifications. */ > static void monitor_notification(struct vcpu *v, unsigned int port) > { > - if ( likely(v->domain->vm_event->monitor.ring_page != NULL) ) > - vm_event_resume(v->domain, &v->domain->vm_event->monitor); > + if ( likely(v->domain->vm_event_monitor->ring_page != NULL) ) > + vm_event_resume(v->domain, v->domain->vm_event_monitor); > } > > #ifdef CONFIG_HAS_MEM_SHARING > /* Registered with Xen-bound event channel for incoming notifications. */ > static void mem_sharing_notification(struct vcpu *v, unsigned int port) > { > - if ( likely(v->domain->vm_event->share.ring_page != NULL) ) > - vm_event_resume(v->domain, &v->domain->vm_event->share); > + if ( likely(v->domain->vm_event_share->ring_page != NULL) ) > + vm_event_resume(v->domain, v->domain->vm_event_share); > } > #endif For all three a local variable holding v->domain would certain help; eventually the functions should even be passed struct domain * instead of struct vcpu *, I think. > @@ -599,7 +621,6 @@ int vm_event_domctl(struct domain *d, > xen_domctl_vm_event_op_t *vec, > #ifdef CONFIG_HAS_MEM_PAGING > case XEN_DOMCTL_VM_EVENT_OP_PAGING: > { > - struct vm_event_domain *ved = &d->vm_event->paging; Dropping this local variable (and similar ones below) pointlessly increases the size of this patch. > --- a/xen/drivers/passthrough/pci.c > +++ b/xen/drivers/passthrough/pci.c > @@ -1363,9 +1363,11 @@ static int assign_device(struct domain *d, u16 seg, u8 > bus, u8 devfn, u32 flag) > > /* Prevent device assign if mem paging or mem sharing have been > * enabled for this domain */ > + if( !d->vm_event_paging ) > + return -EXDEV; Is this check the wrong way round? And why can't it be combined with ... > if ( unlikely(!need_iommu(d) && > (d->arch.hvm_domain.mem_sharing_enabled || > - d->vm_event->paging.ring_page || > + d->vm_event_paging->ring_page || > p2m_get_hostp2m(d)->global_logdirty)) ) > return -EXDEV; ... this set? Jan _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx https://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |