1. 21 6月, 2012 1 次提交
    • D
      pch_uart: Add eg20t_port lock field, avoid recursive spinlocks · fe89def7
      Darren Hart 提交于
      pch_uart_interrupt() takes priv->port.lock which leads to two recursive
      spinlock calls if low_latency==1 or CONFIG_PREEMPT_RT_FULL=y (one
      otherwise):
      
      pch_uart_interrupt
        spin_lock_irqsave(priv->port.lock, flags)
        case PCH_UART_IID_RDR_TO (data ready)
        handle_rx_to
          push_rx
            tty_port_tty_get
              spin_lock_irqsave(&port->lock, flags) <--- already hold this lock
              ...
            tty_flip_buffer_push
              ...
              flush_to_ldisc
                spin_lock_irqsave(&tty->buf.lock)
                  spin_lock_irqsave(&tty->buf.lock)
                  disc->ops->receive_buf(tty, char_buf)
                    n_tty_receive_buf
                      tty->ops->flush_chars()
                      uart_flush_chars
                        uart_start
                          spin_lock_irqsave(&port->lock) <--- already hold this lock
      
      Avoid this by using a dedicated lock to protect the eg20t_port structure
      and IO access to its membase. This is more consistent with the 8250
      driver.  Ensure priv->lock is always take prior to priv->port.lock when
      taken at the same time.
      
      V2: Remove inadvertent whitespace change.
      V3: Account for oops_in_progress for the private lock in
          pch_console_write().
      
      Note: Like the 8250 driver, if a printk is introduced anywhere inside
            the pch_console_write() critical section, the kernel will hang
            on a recursive spinlock on the private lock. The oops case is
            handled by using a trylock in the oops_in_progress case.
      Signed-off-by: NDarren Hart <dvhart@linux.intel.com>
      CC: Tomoya MORINAGA <tomoya.rohm@gmail.com>
      CC: Feng Tang <feng.tang@intel.com>
      CC: Alexander Stein <alexander.stein@systec-electronic.com>
      Acked-by: NAlan Cox <alan@linux.intel.com>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      fe89def7
  2. 19 4月, 2012 1 次提交
    • T
      pch_uart: Fix dma channel unallocated issue · af6d17cd
      Tomoya MORINAGA 提交于
      This driver anticipates pch_uart_verify_port() is not called
      during installation.
      However, actually pch_uart_verify_port() is called during
      installation.
      As a result, memory access violation occurs like below.
      
      0. initial value: use_dma=0
      1. starup()
          - dma channel is not allocated because use_dma=0
      2. pch_uart_verify_port()
          - Set use_dma=1
      3. UART processing acts DMA mode because use_dma=1
           - memory access violation occurs!
      
      This patch fixes the issue.
      
      Solution:
      Whenever pch_uart_verify_port() is called and then
      dma channel is not allocated, the channel should be allocated.
      Signed-off-by: NTomoya MORINAGA <tomoya.rohm@gmail.com>
      Cc: stable <stable@vger.kernel.org>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      af6d17cd
  3. 10 4月, 2012 9 次提交
  4. 06 4月, 2012 1 次提交
    • S
      simple_open: automatically convert to simple_open() · 234e3405
      Stephen Boyd 提交于
      Many users of debugfs copy the implementation of default_open() when
      they want to support a custom read/write function op.  This leads to a
      proliferation of the default_open() implementation across the entire
      tree.
      
      Now that the common implementation has been consolidated into libfs we
      can replace all the users of this function with simple_open().
      
      This replacement was done with the following semantic patch:
      
      <smpl>
      @ open @
      identifier open_f != simple_open;
      identifier i, f;
      @@
      -int open_f(struct inode *i, struct file *f)
      -{
      (
      -if (i->i_private)
      -f->private_data = i->i_private;
      |
      -f->private_data = i->i_private;
      )
      -return 0;
      -}
      
      @ has_open depends on open @
      identifier fops;
      identifier open.open_f;
      @@
      struct file_operations fops = {
      ...
      -.open = open_f,
      +.open = simple_open,
      ...
      };
      </smpl>
      
      [akpm@linux-foundation.org: checkpatch fixes]
      Signed-off-by: NStephen Boyd <sboyd@codeaurora.org>
      Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
      Cc: Al Viro <viro@zeniv.linux.org.uk>
      Cc: Julia Lawall <Julia.Lawall@lip6.fr>
      Acked-by: NIngo Molnar <mingo@elte.hu>
      Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      234e3405
  5. 21 3月, 2012 1 次提交
  6. 10 3月, 2012 5 次提交
  7. 10 2月, 2012 3 次提交
  8. 16 11月, 2011 5 次提交
  9. 31 10月, 2011 1 次提交
  10. 23 9月, 2011 1 次提交
    • J
      TTY: serial, fix includes in some drivers · ee160a38
      Jiri Slaby 提交于
      linux/tty_flip.h is included in linux/serial_core.h. But this may (and
      will) change in the future. Then we would get build errors such as:
      .../tty/serial/max3107.c: In function ‘put_data_to_circ_buf’:
      .../tty/serial/max3107.c:149:2: error: implicit declaration of function ‘tty_insert_flip_string’
      
      So fix all the drviers which call tty flip buffer helpers to really
      include linux/tty_flip.h. And also make sure that those include
      linux/tty.h when operating with struct tty_struct.
      Signed-off-by: NJiri Slaby <jslaby@suse.cz>
      Cc: Alan Cox <alan@linux.intel.com>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
      ee160a38
  11. 23 8月, 2011 1 次提交
  12. 09 7月, 2011 2 次提交
  13. 16 6月, 2011 1 次提交
  14. 08 6月, 2011 1 次提交
  15. 25 5月, 2011 1 次提交
    • A
      drivers/tty/serial/pch_uart.c needs slab.h · 023bc8e7
      Andrew Morton 提交于
      alpha allmodconfig:
      
        drivers/tty/serial/pch_uart.c: In function 'dma_handle_tx':
        drivers/tty/serial/pch_uart.c:873: error: implicit declaration of function 'kzalloc'
        drivers/tty/serial/pch_uart.c:873: warning: assignment makes pointer from integer without a cast
        drivers/tty/serial/pch_uart.c: In function 'pch_uart_init_port':
        drivers/tty/serial/pch_uart.c:1403: warning: assignment makes pointer from integer without a cast
      
      Cc: Alan Cox <alan@lxorguk.ukuu.org.uk>
      Cc: Greg KH <greg@kroah.com>
      Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      023bc8e7
  16. 11 5月, 2011 1 次提交
  17. 15 3月, 2011 1 次提交
  18. 23 2月, 2011 4 次提交