[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


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.