|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 09/13] libxl: convert libxl_device_nic_add to an async operation
Roger Pau Monne writes ("[PATCH 09/13] libxl: convert libxl_device_nic_add to
an async operation"):
> This patch converts libxl_device_nic_add to an ao operation that
> waits for device backend to reach state XenbusStateInitWait and then
> marks the operation as completed. This is not really useful now, but
> will be used by latter patches that will launch hotplug scripts after
> we reached the desired xenbus state.
Why do you serialise vif and vbd initialisation ? Would anything go
wrong if you did them both at once ?
> + /* Plug nic interfaces */
> + if (!ret && d_config->num_vifs > 0) {
> + /* Attach nics */
> + GCNEW_ARRAY(dcs->devices, d_config->num_vifs);
> + dcs->num_devices = d_config->num_vifs;
> + for (i = 0; i < d_config->num_vifs; i++) {
> + libxl__init_ao_device(&dcs->devices[i], ao, &dcs->devices);
> + dcs->devices[i].callback = domcreate_nics_connected;
> + libxl__device_nic_add(egc, domid, &d_config->vifs[i],
> + &dcs->devices[i]);
Ah this pattern again....
> -int libxl__device_nic_add(libxl__gc *gc, uint32_t domid, libxl_device_nic
> *nic)
> +void libxl__device_nic_add(libxl__egc *egc, uint32_t domid,
> + libxl_device_nic *nic, libxl__ao_device *aorm)
> {
> + STATE_AO_GC(aorm->ao);
> flexarray_t *front;
> flexarray_t *back;
> - libxl__device device;
> + libxl__device *device;
You might want to consider a pre-patch which changes this, and
libxl__device_disk_add's, as follows:
- libxl__device device;
+ libxl__device device[1];
That would get rid of the noise from this patch. Up to you, though;
because it's separated out textually doesn't make the diff unreadable
like it is.
> @@ -845,9 +851,11 @@ static void spawn_stub_disk_connected(libxl__egc *egc,
> libxl__ao_device *aorm)
> }
>
> for (i = 0; i < dm_config->num_vifs; i++) {
> - ret = libxl_device_nic_add(ctx, dm_domid, &dm_config->vifs[i]);
> - if (ret)
> - goto out;
> + /* We have to init the nic here, because we still haven't
> + * called libxl_device_nic_add at this point, but qemu needs
> + * the nic information to be complete.
> + */
> + libxl__device_nic_setdefault(gc, &dm_config->vifs[i]);
This is really too much repetition now. Can we not have a common "add
devices" function which is called once for the main domain and once
for the stubdom ?
In the future we'll need that if we have more service domains, too.
Thanks,
Ian.
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |