lkml.org 
[lkml]   [2008]   [Jan]   [22]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [PATCH 1/6] driver-core : add class iteration api
    On Jan 22, 2008 2:24 PM, David Brownell <david-b@pacbell.net> wrote:
    > On Monday 21 January 2008, Dave Young wrote:
    > >
    > > +/**
    > > + * class_for_each_device - device iterator
    > > + * @class: the class we're iterating
    > > + * @data: data for the callback
    > > + * @fn: function to be called for each device
    > > + *
    > > + * Iterate over @class's list of devices, and call @fn for each,
    > > + * passing it @data.
    > > + *
    > > + * We check the return of @fn each time. If it returns anything
    > > + * other than 0, we break out and return that value.
    >
    > I have a suggestion for better documentation, which
    > applies to all these utilities:
    >
    >
    > > + */
    > > +int class_for_each_device(struct class *class, void *data,
    > > + int (*fn)(struct device *, void *))
    > > +{
    > > + struct device *dev;
    > > + int error = 0;
    > > +
    > > + if (!class)
    > > + return -EINVAL;
    > > + down(&class->sem);
    > > + list_for_each_entry(dev, &class->devices, node) {
    > > + dev = get_device(dev);
    > > + if (dev) {
    > > + error = fn(dev, data);
    >
    > This is called with class->sem held. So fn() has a
    > constraint to not re-acquire that ... else it'd be
    > self-deadlocking. I'd like to see docs at least
    > mention that; calls to add or remove class members
    > would be verboten, for example, which isn't an issue
    > with most other driver model iterators.

    Very good comment, thanks david. I will update after a while.

    >
    >
    >
    > > + put_device(dev);
    > > + } else
    > > + error = -ENODEV;
    > > + if (error)
    > > + break;
    > > + }
    > > + up(&class->sem);
    > > +
    > > + return error;
    > > +}
    > > +EXPORT_SYMBOL_GPL(class_for_each_device);
    >


    \
     
     \ /
      Last update: 2008-01-22 07:33    [W:0.026 / U:59.664 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site