All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Hans J. Koch" <hjk@linutronix.de>
To: Jonathan Corbet <corbet@lwn.net>
Cc: LKML <linux-kernel@vger.kernel.org>, Greg KH <greg@kroah.com>,
	hjk@linutronix.de
Subject: Re: [PATCH, RFC] uio BKL removal
Date: Wed, 27 Aug 2008 10:08:38 +0200	[thread overview]
Message-ID: <20080827080838.GA2283@local> (raw)
In-Reply-To: <20080826171532.2414c7a2@bike.lwn.net>

On Tue, Aug 26, 2008 at 05:15:32PM -0600, Jonathan Corbet wrote:
> I had a moment to dedicate to the BKL removal cause, so I went for the
> UIO driver, which seemed simple.  The main thing I found was that there
> was locking around some idr accesses, but not all, so I filled that
> in.  With that in place, removing the BKL from uio_open() seems safe,
> especially since none of the in-tree UIO drivers have open() or
> release() methods.  
> 
> (Incidentally, I don't see how uio_pdrv.c could ever work - who initializes
> uioinfo?)

That has to be done somewhere in your board specific file, e.g. for ARM
boards in arch/arm/mach-xxx/board-something.c - the same place where you
setup your struct platform_device.

> 
> If there's no complaints, I'll feed this into linux-next via the
> bkl-removal tree.

Seems right.

Acked-by: Hans J. Koch <hjk@linutronix.de>

> 
> Thanks,
> 
> jon
> 
> ---
> UIO: BKL removal
> 
> Remove the BKL from the UIO driver, and add complete locking where needed
> to serialize idr accesses.
> 
> Signed-off-by: Jonathan Corbet <corbet@lwn.net>
> 
> diff --git a/drivers/uio/uio.c b/drivers/uio/uio.c
> index 3a6934b..4f28f4b 100644
> --- a/drivers/uio/uio.c
> +++ b/drivers/uio/uio.c
> @@ -47,6 +47,9 @@ static struct uio_class {
>  	struct class *class;
>  } *uio_class;
>  
> +/* Protect idr accesses */
> +static DEFINE_MUTEX(minor_lock);
> +
>  /*
>   * attributes
>   */
> @@ -231,7 +234,6 @@ static void uio_dev_del_attributes(struct uio_device *idev)
>  
>  static int uio_get_minor(struct uio_device *idev)
>  {
> -	static DEFINE_MUTEX(minor_lock);
>  	int retval = -ENOMEM;
>  	int id;
>  
> @@ -253,7 +255,9 @@ exit:
>  
>  static void uio_free_minor(struct uio_device *idev)
>  {
> +	mutex_lock(&minor_lock);
>  	idr_remove(&uio_idr, idev->minor);
> +	mutex_unlock(&minor_lock);
>  }
>  
>  /**
> @@ -297,8 +301,9 @@ static int uio_open(struct inode *inode, struct file *filep)
>  	struct uio_listener *listener;
>  	int ret = 0;
>  
> -	lock_kernel();
> +	mutex_lock(&minor_lock);
>  	idev = idr_find(&uio_idr, iminor(inode));
> +	mutex_unlock(&minor_lock);
>  	if (!idev) {
>  		ret = -ENODEV;
>  		goto out;
> @@ -324,18 +329,15 @@ static int uio_open(struct inode *inode, struct file *filep)
>  		if (ret)
>  			goto err_infoopen;
>  	}
> -	unlock_kernel();
>  	return 0;
>  
>  err_infoopen:
> -
>  	kfree(listener);
> -err_alloc_listener:
>  
> +err_alloc_listener:
>  	module_put(idev->owner);
>  
>  out:
> -	unlock_kernel();
>  	return ret;
>  }
>  

  parent reply	other threads:[~2008-08-27  8:09 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-08-26 23:15 [PATCH, RFC] uio BKL removal Jonathan Corbet
2008-08-27  0:06 ` Greg KH
2008-08-27  8:08 ` Hans J. Koch [this message]
2008-08-27 20:45 ` Alexey Dobriyan

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20080827080838.GA2283@local \
    --to=hjk@linutronix.de \
    --cc=corbet@lwn.net \
    --cc=greg@kroah.com \
    --cc=linux-kernel@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.