lkml.org 
[lkml]   [2009]   [Mar]   [25]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Date
From
SubjectRe: [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@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/

\
 
 \ /
  Last update: 2009-03-25 08:33    [W:1.052 / U:0.152 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site