At 04/05/2011 06:53 AM, Eric Blake Write:
On 03/28/2011 01:01 AM, Wen Congyang wrote:
> We should bind pci device to original driver when pciBindDeviceToStub() failed.
> If the pci device is not bound to any driver before calling pciBindDeviceToStub(),
> we should only unbind it from pci-stub. If it is bound to pci-stub, we should not
> unbid it from pci-stub.
>
> ---
> src/util/pci.c | 90 +++++++++++++++++++++++++++++++++++++++++++++++++------
> 1 files changed, 80 insertions(+), 10 deletions(-)
>
> diff --git a/src/util/pci.c b/src/util/pci.c
> index 8d2dbb0..e30f5cf 100644
> --- a/src/util/pci.c
> +++ b/src/util/pci.c
> @@ -65,6 +65,11 @@ struct _pciDevice {
> unsigned has_flr : 1;
> unsigned has_pm_reset : 1;
> unsigned managed : 1;
> +
> + /* used by reattach function */
> + unsigned unbind_from_stub : 1;
> + unsigned remove_slot : 1;
> + unsigned reprobe : 1;
> };
>
> struct _pciDeviceList {
> @@ -834,11 +839,25 @@ recheck:
> }
>
>
> +static int pciUnBindDeviceFromStub(pciDevice *dev, const char *driver);
I would have used Unbind rather than UnBind, but that's cosmetic. Is it
possible to float that function up, instead of having to have a forward
declaration? I tend to topologically sort my static functions when
possible (again, cosmetic).
Yes, 'Unbind' is better than UnBind.
I will send a patch to rename it and float this function up.
> static int
> pciBindDeviceToStub(pciDevice *dev, const char *driver)
> {
> char drvdir[PATH_MAX];
> char path[PATH_MAX];
> + int reprobe = 0;
> + int ret = 0;
> +
> + /* check whether the device is already bound to a driver */
> + pciDriverDir(drvdir, sizeof(drvdir), driver);
> + pciDeviceFile(path, sizeof(path), dev->name, "driver");
Ouch - conflict with Matthias's patches to avoid PATH_MAX. If that goes
in first, your rebase might not be trivial, so it would be worth a v2.
Yes, this patch conflicts with Matthias's patches. And his patches have been
pushed. I will send v2.
But overall, I think the idea of this patch is sane, and nothing obvious
jumped out at me as needing fixing other than rebase issues.