[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <Pine.LNX.4.64.0903250817090.5590@axis700.grange>
Date: Wed, 25 Mar 2009 08:29:54 +0100 (CET)
From: Guennadi Liakhovetski <g.liakhovetski@....de>
To: Ming Lei <tom.leiming@...il.com>
cc: kay.sievers@...y.org, Greg KH <greg@...ah.com>,
linux-kernel@...r.kernel.org, arjan@...ux.intel.com
Subject: Re: [PATCH] driver core: check bus->match without holding device
lock
On Wed, 25 Mar 2009, Ming Lei wrote:
> >> @@ -190,21 +184,22 @@ int driver_probe_device(struct device_driver *drv, struct device *dev)
> >>
> >> if (!device_is_registered(dev))
> >> return -ENODEV;
> >> - if (drv->bus->match && !drv->bus->match(dev, drv))
> >> - goto done;
> >
> > Previously, if no .match() was specified, the normal probing has been
> > called.
> >
> >>
> >> pr_debug("bus: '%s': %s: matched device %s with driver %s\n",
> >> drv->bus->name, __func__, dev_name(dev), drv->name);
> >>
> >> ret = really_probe(dev, drv);
> >>
> >> -done:
> >> return ret;
> >> }
> >>
> >> static int __device_attach(struct device_driver *drv, void *data)
> >> {
> >> struct device *dev = data;
> >> +
> >> + if (!driver_match_device(drv, dev))
> >> + return 0;
> >> +
> >
> > Now, without .match() no probing is done. Is this an intended change and
> > soc-camera has to be fixed or is this a bug?
>
> It is not a driver-core bug, and soc-camera should be fixed.
So, you're saying this used to be a bug and it has been fixed by this
patch? Then why isn't this mentioned in the commit message? The commit
text seems to suggest, that this patch shouldn't introduce any change in
behaviour, but it does. So, before .match == NULL lead to .probe() being
called, and now it doesn't anymore?
And in which way should soc-camera be fixed? Just provide a dummy match
with just "return 1;" in it?
> >> diff --git a/include/linux/device.h b/include/linux/device.h
> >> index 45e5b19..3c61315 100644
> >> --- a/include/linux/device.h
> >> +++ b/include/linux/device.h
> >> @@ -466,6 +466,12 @@ static inline int device_is_registered(struct device *dev)
> >> return dev->kobj.state_in_sysfs;
> >> }
> >>
> >> +static inline int driver_match_device(struct device_driver *drv,
> >> + struct device *dev)
> >> +{
> >> + return drv->bus->match && drv->bus->match(dev, drv);
> >> +}
> >> +
> >> void driver_init(void);
Thanks
Guennadi
---
Guennadi Liakhovetski, Ph.D.
Freelance Open-Source Software Developer
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists