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. Thanks, Johan -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html