Re: [RFC PATCH v4 2/3] rust: add minimal IIO subsystem abstractions

Muchamad Coirul Anwar <[email protected]> Mon, 3 Aug 2026 14:24:39 +0700
Newsgroups org.kernel.vger.linux-i2c,org.kernel.vger.linux-iio,org.kernel.vger.linux-kernel
Message-ID <CAO26r3QYVUP5VgtrgwhGeqbJsWZbL=qFVVHvuRNXPLaYB7txCg@mail.gmail.com>
On Mon, 3 Aug 2026 at 07:43, Jonathan Cameron <[email protected]> wrote:

> > From what I traced, yes. iio_device_unregister goes through
> > cdev_device_del, device_del, sysfs_remove_dir, and ends up in
> > kernfs_drain which waits for active sysfs readers to finish.
> > Please correct me if I'm missing something here.
> >
>
> That covers sysfs, but IIO has a bunch of chrdevs (though you aren't
> using them here).  I'd go for 'almost certainly' for whether synchronizes
> in all cases but we have found one or two races over the years.
>
> The way it is supposed to work is that the unregister takes the
> info_exist_lock and sets the iio_dev->info pointer to NULL.
> It also wakes up any one polling etc, and returns errors on all
> in flight actions.  Every ioctl takes that same lock and checks
> if info is null before carrying on.  The lock is held across
> the ioctl to stop any racing with the unregister path.
>
> I can't recall any recent paths being discovered where the
> lock + check was missed but we did have them in the past, though
> normally not about IOCTLs but about in kernel consumer drivers.
>
> There is an outstanding fix related to those, and read_avail
> + lifetimes if people allocate storage in that callback but
> I doubt this goes anywhere near that area of IIO yet.

Thanks, Jonathan.

The lock+check mechanism makes sense. AS5600 only implements read_raw
and doesn't use chrdevs or allocate storage in callbacks, so it should
be safe from the race you mentioned.

I will fix the SAFETY comment in iio.rs. The current wording is too
broad, so I'll narrow it down to describe the two separate sync paths
(kernfs_drain vs info_exist_lock).

Coirul