Re: [PATCH v4 6/8] iio: add the IIO backend framework

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Tue, 2023-12-26 at 15:59 +0000, Jonathan Cameron wrote:
> 
> > > > +
> > > > +       ret = devm_add_action_or_reset(dev, iio_backend_release, back);
> > > > +       if (ret)
> > > > +               return ret;
> > > > +
> > > > +       link = device_link_add(dev, back->dev,
> > > > DL_FLAG_AUTOREMOVE_CONSUMER);
> > > > +       if (!link)
> > > > +               pr_warn("%s: Could not link to supplier(%s)\n",
> > > > dev_name(dev),
> > > > +                       dev_name(back->dev));  
> > > 
> > > Why is that not an error and we try to carry on?  
> > 
> > I guess having the links are not really mandatory for the whole thing to
> > work (more
> > like a nice to have). That's also how this is handled in another subsystems
> > so I
> > figured it would be fine.
> > 
> > But since you are speaking about this... After you pointing me to Bartosz's
> > talk and
> > sawing it (as stuff like this is mentioned), I started to question this. The
> > goal
> > with the above comment is that if you remove the backend, all the consumers
> > are
> > automatically removed (unbound). Just not sure if that's what we always want
> > (and we
> > are already handling the situation where a backend goes away with -ENODEV)
> > as some
> > frontends could still be useful without the backend (I guess that could be
> > plausible). I think for now we don't really have such usecases so the links
> > can make
> > sense (and we can figure something like optionally creating these links if
> > we ever
> > need too) but having your inputs on this will definitely be valuable.
> 
> I'm not keen on both trying to make everything tear down cleanly AND making
> sure
> it all works even if we don't. That just adds two code paths to test when
> either
> should be sufficient on its own.  I don't really mind which.  Bartosz's stuff

Agreed...

> is nice, but it may not be the right solution here. 

There's pros and cons on both options... 

For the device links the cons I see is that it depends on patch 3 for it to work
(or some other approach if the one in that patch is not good) - not really a
real con though :). The biggest concern is (possible) future uses where we end
up with cases where removing a backend is not really a "deal breaker". I could
think of frontends that have multiple backends (one per data path) and removing
one backend would not tear the whole thing down (we would just have one non
functional data paths/port where the others are still ok).

Olivier, for STM usecases, do we always need the backend? I mean, does it make
sense to always remove/unbind the frontend in case the backend is unbound?

Maybe some of your usecases already "forces" us with a decision. 

The biggest pro I see is code simplicity. If we can assume the frontend can
never exist in case one of the backends is gone, we can:

 * get rid of the sync mutex;
 * get rid of the kref and bind the backend object lifetime to the backend
device (using devm_kzalloc() instead of kzalloc + refcount.

Basically, we would not need to care about syncing the backend existence with
accessing it...
To sum up, the device_links approach tends to be similar (not identical) to the
previous approach using the component API.

The biggest pro I see in Bartosz's stuff is flexibility. So it should just work
in whatever future usecases we might have. I fear that going the device_links
road we might end up needing this stuff anyways.

Obviously, the biggest con is code complexity (not that bad though) as we always
need to properly sync any backend callback.

- Nuno Sá
> 





[Index of Archives]     [Device Tree Compilter]     [Device Tree Spec]     [Linux Driver Backports]     [Video for Linux]     [Linux USB Devel]     [Linux PCI Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [XFree86]     [Yosemite Backpacking]


  Powered by Linux