[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] RE: [XEN][PATCH v5 12/17] common/device_tree: Add rwlock for dt_host
Hi Vikram, > -----Original Message----- > Subject: [XEN][PATCH v5 12/17] common/device_tree: Add rwlock for dt_host > > Dynamic programming ops will modify the dt_host and there might be other > function which are browsing the dt_host at the same time. To avoid the race > conditions, adding rwlock for browsing the dt_host during runtime. For clarity, could you please add a little bit more details to explain why you chose rwlock instead of normal spinlock? > > Signed-off-by: Vikram Garhwal <vikram.garhwal@xxxxxxx> > --- > xen/common/device_tree.c | 3 +++ > xen/drivers/passthrough/device_tree.c | 39 +++++++++++++++++++++++++++ > xen/include/xen/device_tree.h | 6 +++++ > 3 files changed, 48 insertions(+) > > if ( ret ) > + { > printk(XENLOG_G_ERR "XEN_DOMCTL_assign_dt_device: assign > \"%s\"" > " to dom%u failed (%d)\n", > dt_node_full_name(dev), d->domain_id, ret); > + } I am not sure if it is necessary to add "{" and "}" here. > + > + read_unlock(&dt_host->lock); > break; > > case XEN_DOMCTL_deassign_device: > @@ -322,25 +345,41 @@ int iommu_do_dt_domctl(struct xen_domctl > *domctl, struct domain *d, > if ( domctl->u.assign_device.flags ) > break; > > + read_lock(&dt_host->lock); > + > ret = dt_find_node_by_gpath(domctl->u.assign_device.u.dt.path, > domctl->u.assign_device.u.dt.size, > &dev); > if ( ret ) > + { > + read_unlock(&dt_host->lock); I think instead of adding "read_unlock" in every break and return path, you can... > break; > + } > > ret = xsm_deassign_dtdevice(XSM_HOOK, d, dt_node_full_name(dev)); > + > if ( ret ) > + { > + read_unlock(&dt_host->lock); > break; > + } > > if ( d == dom_io ) > + { > + read_unlock(&dt_host->lock); > return -EINVAL; ...do something like: ret = -EINVAL; break; here, and then add one single "read_unlock" before the "return ret;" in the bottom of the function? > + } > > ret = iommu_deassign_dt_device(d, dev); > > if ( ret ) > + { > printk(XENLOG_G_ERR "XEN_DOMCTL_assign_dt_device: assign > \"%s\"" > " to dom%u failed (%d)\n", > dt_node_full_name(dev), d->domain_id, ret); > + } Same here. I am not sure if it is necessary to add "{" and "}". Kind regards, Henry
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |