Re: [PATCH 1/7] gnss: add GNSS receiver subsystem

From: Greg Kroah-Hartman
Date: Sun Apr 29 2018 - 15:40:55 EST


On Wed, Apr 25, 2018 at 02:23:15PM +0200, Johan Hovold wrote:
> On Wed, Apr 25, 2018 at 12:56:45PM +0200, Johan Hovold wrote:
> > On Wed, Apr 25, 2018 at 10:56:49AM +0200, Greg Kroah-Hartman wrote:
> > > On Tue, Apr 24, 2018 at 06:34:52PM +0200, Johan Hovold wrote:
>
> > > > +static int gnss_open(struct inode *inode, struct file *file)
> > > > +{
> > > > + struct gnss_device *gdev;
> > > > + int ret = 0;
> > > > +
> > > > + gdev = container_of(inode->i_cdev, struct gnss_device, cdev);
> > > > +
> > > > + get_device(&gdev->dev);
> > > > +
> > > > + nonseekable_open(inode, file);
> > > > + file->private_data = gdev;
> > > > +
> > > > + down_write(&gdev->rwsem);
> > >
> > > Just curious, why a rwsem? They can be slower than a normal semaphore,
> > > is this really a contentious lock?
> >
> > I use the rwsem to deal with hotplugging; the underlying device can go
> > away at any time and the core makes sure that no further calls into the
> > corresponding driver is made once all currently executing callbacks
> > return.
>
> I just did find one access to the gnss ops which was unsafe however; the
> existence check for a write_raw callback in write() needs to be replaced
> by a device flag.

Ok, in looking at this closer, it makes more sense to me, and my worries
are not true, you are handling this properly, sorry for the noise.

I'll wait for the next resend of this series to review it again and
consider merging it.

thanks,

greg k-h