login
Header Space

 
 

Re: [PATCH 1/3, RFC] misc char dev BKL pushdown

Score:
Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]
To: Mike Frysinger <vapier.adi@...>
Cc: Arnd Bergmann <arnd@...>, Wu, Bryan <Bryan.Wu@...>, Linus Torvalds <torvalds@...>, Ingo Molnar <mingo@...>, Andrew Morton <akpm@...>, Peter Zijlstra <a.p.zijlstra@...>, Thomas Gleixner <tglx@...>, Alan Cox <alan@...>, Alexander Viro <viro@...>, <linux-kernel@...>
Date: Tuesday, May 20, 2008 - 7:25 pm

Mike Frysinger <vapier.adi@gmail.com> wrote:


At a minimum, I would hope such a request would say something like "I've
looked at the driver's locking and am convinced that the BKL is not
needed."  Have you done that?  There is a certain leap of faith involved
in removing that protection from a driver.

I decided to take a quick look...

- You use spin_lock_irq(&coreb_lock) in a number of places, but you do
  not take the lock in the interrupt handler.  You also do not take the
  lock in coreb_write() or coreb_read(), so those can race with the
  interrupt handler, with ioctl(), and with each other.

- coreb_write() and coreb_read() do interruptible waits, but do not
  check to see whether they were interrupted.  They will, in fact,
  continue in their I/O loops after a signal.

- In both functions you have:

	unsigned long p = *ppos;

	if (p + count > coreb_size)
		return -EFAULT;

  that calculation can overflow.

- You also do this:

  static ssize_t coreb_write(struct file *file, const char *buf, size_t count,
	 		     loff_t * ppos)
  /* ... */
  		set_dma_start_addr(CH_MEM_STREAM2_SRC, (unsigned long)buf);

  In other words, the DMA is done directly to/from a user-space
  address.  Maybe that's safe on Blackfin, I don't know...

- I have no idea why some of your functions are using d_inode->i_mutex.

- In coreb_ioctl():

		spin_lock_irq(&coreb_lock);
		if (coreb_status & COREB_IS_RUNNING) {
			retval = -EBUSY;
			break;
		}

  this will exit the function with the spinlock still held and
  interrupts disabled.

	case CMD_COREB_RESET:
		printk(KERN_INFO "Resetting Core B\n");
		bfin_write_SICB_SYSCR(bfin_read_SICB_SYSCR() | 0x0080);
		break;

  You do not acquire the lock here, so this can race against other
  ioctl() calls.  And ioctl() can race against read() and write().

Registration and such seem reasonable, so I can't come up with a
scenario where loss of BKL protection will create trouble.  Given the
other problems there, though, I'll confess to being a bit nervous about
it.

jon
--
Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]

Messages in current thread:
[announce] "kill the Big Kernel Lock (BKL)" tree, Ingo Molnar, (Wed May 14, 1:49 pm)
Re: [announce] "kill the Big Kernel Lock (BKL)" tree, Linus Torvalds, (Thu May 15, 1:41 pm)
Re: [announce] "kill the Big Kernel Lock (BKL)" tree, Arjan van de Ven, (Thu May 15, 4:27 pm)
Re: [announce] "kill the Big Kernel Lock (BKL)" tree, Peter Zijlstra, (Thu May 15, 4:45 pm)
Re: [announce] "kill the Big Kernel Lock (BKL)" tree, Arjan van de Ven, (Thu May 15, 5:22 pm)
Re: [announce] "kill the Big Kernel Lock (BKL)" tree, Linus Torvalds, (Wed May 14, 2:41 pm)
Re: [announce] "kill the Big Kernel Lock (BKL)" tree, Ingo Molnar, (Wed May 14, 3:41 pm)
Re: [announce] "kill the Big Kernel Lock (BKL)" tree, Frederik Deweerdt, (Wed May 14, 4:05 pm)
Re: [announce] "kill the Big Kernel Lock (BKL)" tree, Andi Kleen, (Wed May 14, 2:30 pm)
Re: [announce] "kill the Big Kernel Lock (BKL)" tree, Andi Kleen, (Wed May 14, 5:13 pm)
Re: [announce] "kill the Big Kernel Lock (BKL)" tree, H. Peter Anvin, (Wed May 14, 5:16 pm)
Re: [announce] "kill the Big Kernel Lock (BKL)" tree, Linus Torvalds, (Wed May 14, 5:45 pm)
Re: [announce] "kill the Big Kernel Lock (BKL)" tree, Andi Kleen, (Wed May 14, 6:03 pm)
Re: [announce] "kill the Big Kernel Lock (BKL)" tree, Andi Kleen, (Thu May 15, 10:27 am)
Re: [announce] "kill the Big Kernel Lock (BKL)" tree, Andi Kleen, (Fri May 16, 6:21 am)
Re: [announce] "kill the Big Kernel Lock (BKL)" tree, Ingo Molnar, (Thu May 15, 4:02 am)
Re: [announce] "kill the Big Kernel Lock (BKL)" tree , Jonathan Corbet, (Wed May 14, 5:45 pm)
Re: [announce] "kill the Big Kernel Lock (BKL)" tree , Jan Engelhardt, (Thu May 15, 4:44 am)
Re: [announce] "kill the Big Kernel Lock (BKL)" tree, Diego Calleja, (Thu May 15, 10:54 am)
Re: [announce] "kill the Big Kernel Lock (BKL)" tree , Linus Torvalds, (Wed May 14, 5:56 pm)
Re: [announce] "kill the Big Kernel Lock (BKL)" tree , Jonathan Corbet, (Wed May 14, 6:07 pm)
Re: [announce] "kill the Big Kernel Lock (BKL)" tree , Linus Torvalds, (Wed May 14, 6:14 pm)
[PATCH, RFC] char dev BKL pushdown , Jonathan Corbet, (Fri May 16, 11:44 am)
Re: [PATCH, RFC] char dev BKL pushdown , Linus Torvalds, (Sat May 17, 5:58 pm)
Re: [PATCH, RFC] char dev BKL pushdown , Jonathan Corbet, (Sun May 18, 4:07 pm)
Re: [PATCH, RFC] char dev BKL pushdown , Linus Torvalds, (Fri May 16, 12:30 pm)
Re: [PATCH, RFC] char dev BKL pushdown , Jonathan Corbet, (Fri May 16, 12:43 pm)
Re: [PATCH, RFC] char dev BKL pushdown, Arnd Bergmann, (Sat May 17, 5:15 pm)
Re: [PATCH, RFC] char dev BKL pushdown , Jonathan Corbet, (Sun May 18, 4:26 pm)
Re: [PATCH, RFC] char dev BKL pushdown, Arnd Bergmann, (Mon May 19, 7:07 pm)
Re: [PATCH, RFC] char dev BKL pushdown , Jonathan Corbet, (Tue May 20, 11:13 am)
Re: [PATCH, RFC] char dev BKL pushdown, Arnd Bergmann, (Tue May 20, 1:21 pm)
Re: [PATCH, RFC] char dev BKL pushdown, Alan Cox, (Tue May 20, 2:51 pm)
[PATCH 1/3, RFC] misc char dev BKL pushdown, Arnd Bergmann, (Mon May 19, 7:26 pm)
Re: [PATCH 1/3, RFC] misc char dev BKL pushdown, Mike Frysinger, (Tue May 20, 7:01 pm)
Re: [PATCH 1/3, RFC] misc char dev BKL pushdown , Jonathan Corbet, (Tue May 20, 7:25 pm)
Re: [PATCH 1/3, RFC] misc char dev BKL pushdown, Mike Frysinger, (Wed May 21, 12:22 pm)
Re: [PATCH 1/3, RFC] misc char dev BKL pushdown, Alan Cox, (Tue May 20, 4:46 am)
Re: [PATCH 1/3, RFC] misc char dev BKL pushdown, Mike Frysinger, (Mon May 19, 8:07 pm)
Re: [PATCH 1/3, RFC] misc char dev BKL pushdown , Jonathan Corbet, (Mon May 19, 8:21 pm)
Re: [PATCH 1/3, RFC] misc char dev BKL pushdown, Mike Frysinger, (Mon May 19, 8:46 pm)
[PATCH 3/3, RFC] remove BKL from misc_open(), Arnd Bergmann, (Mon May 19, 7:34 pm)
Re: [PATCH, RFC] char dev BKL pushdown, Alan Cox, (Fri May 16, 12:22 pm)
Re: [PATCH, RFC] char dev BKL pushdown, Christoph Hellwig, (Fri May 16, 11:49 am)
[PATCH] kill empty chardev open/release methods, Christoph Hellwig, (Fri May 16, 12:03 pm)
Re: [PATCH] kill empty chardev open/release methods , Jonathan Corbet, (Sun May 18, 3:46 pm)
Re: [PATCH] kill empty chardev open/release methods, Alan Cox, (Fri May 16, 12:24 pm)
Re: [announce] "kill the Big Kernel Lock (BKL)" tree, Andi Kleen, (Wed May 14, 6:11 pm)
Re: [announce] "kill the Big Kernel Lock (BKL)" tree, Linus Torvalds, (Wed May 14, 6:16 pm)
Re: [announce] "kill the Big Kernel Lock (BKL)" tree, Andi Kleen, (Wed May 14, 6:21 pm)
Re: [announce] "kill the Big Kernel Lock (BKL)" tree, John Stoffel, (Thu May 15, 11:05 am)
Re: [announce] "kill the Big Kernel Lock (BKL)" tree, Andi Kleen, (Thu May 15, 11:10 am)
Re: [announce] "kill the Big Kernel Lock (BKL)" tree, John Stoffel, (Thu May 15, 11:18 am)
Re: [announce] "kill the Big Kernel Lock (BKL)" tree, Andi Kleen, (Thu May 15, 11:45 am)
Re: [announce] "kill the Big Kernel Lock (BKL)" tree, Kevin Winchester, (Fri May 16, 8:14 pm)
Re: [announce] "kill the Big Kernel Lock (BKL)" tree, Kevin Winchester, (Fri May 16, 8:37 pm)
Re: [announce] "kill the Big Kernel Lock (BKL)" tree, Linus Torvalds, (Wed May 14, 6:11 pm)
Re: [announce] "kill the Big Kernel Lock (BKL)" tree, Andi Kleen, (Wed May 14, 6:15 pm)
speck-geostationary