[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v4 05/10] libxl: convert libxl_device_nic_add to an async operation
Roger Pau Monne writes ("[PATCH v4 05/10] 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. Thanks. I'm afraid this is still tripping my repetition detector. See below. > diff --git a/tools/libxl/libxl_device.c b/tools/libxl/libxl_device.c > index 6c9bbc2..9933cc2 100644 > --- a/tools/libxl/libxl_device.c > +++ b/tools/libxl/libxl_device.c > @@ -444,6 +444,24 @@ void libxl__add_disks(libxl__egc *egc, libxl__ao *ao, > uint32_t domid, > } > } > > +void libxl__add_nics(libxl__egc *egc, libxl__ao *ao, uint32_t domid, > + libxl_domain_config *d_config, > + libxl__ao_device **devices, > + libxl__device_callback callback) > +{ > + AO_GC; > + GCNEW_ARRAY(*devices, d_config->num_vifs); > + libxl__ao_device *aodev = *devices; > + int i; > + > + for (i = 0; i < d_config->num_vifs; i++) { > + libxl__prepare_ao_device(&aodev[i], ao, devices); > + aodev[i].callback = callback; > + libxl__device_nic_add(egc, domid, &d_config->vifs[i], > + &aodev[i]); > + } > +} The same comment applies as before about libxl__add_disks and the two loops. But, this is another copy of libxl__add_disks. Perhaps you want a macro to generate these functions ? In general this patch seems to contain an awful lot of very similar code to the previous one. Eg domcreate_nic_connected is practically identical to domcreate_disk_connected. And domcreate_attach_nick is practically identical to domcreate_attach_disk. Another option would be to make the types of libxl__device_FOO_add compatible (by replacing the actual config parameter with const void*) and then pass them as function pointers. Or you could even have a table { offsetof(disks, libxl_domain_config), sizeof(libxl_device_disk), libxl__device_disk_add }, { offsetof(vifs, libxl_domain_config), sizeof(libxl_device_vif), libxl__device_nic_add }, ... which your domain creation logic could iterate over. That way you would do away with domcreate_FOO_connected and you'd end up with static void domcreate_device_connected(libxl__egc *egc, libxl__ao_device *aodev) { tableentry = devicekindstable[dcs->currentdevicekind]; rc = libxl__ao_device_check_last(gc, aodev, dcs->devices, dcs->num_devices); if (rc > 0) return; if (rc) { LOGE(ERROR, "error connecting devices"); goto error_out; } dcs->currentdevicekind++; if (!devicekindstable[dcs->currentdevicekind].add_function) { domcreate_complete(egc, dcs, rc); } else { domcreate_attach_devices(egc, dcs); } or something like it. Or something. Anyway, can you try to find a way to avoid me having to review lots of nearly-identical code ? Thanks, Ian. _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |