* [GIT PATCH] TTY patches for 2.6.33-git
@ 2010-03-02 23:09 Greg KH
2010-03-02 23:36 ` [PATCH 01/36] serial: fit blackfin uart over sport driver into common uart infrastructure Greg Kroah-Hartman
` (35 more replies)
0 siblings, 36 replies; 78+ messages in thread
From: Greg KH @ 2010-03-02 23:09 UTC (permalink / raw)
To: Linus Torvalds, Andrew Morton; +Cc: linux-kernel
Here is the big tty patchset for the .34 merge window.
Please pull from:
master.kernel.org:/pub/scm/linux/kernel/git/gregkh/tty-2.6.git/
These patches have been in the linux-next and -mm releases for a number of
weeks now.
Patches will be sent to the linux-kernel mailing list, if anyone wants
to see them.
thanks,
greg k-h
------------
drivers/char/cyclades.c | 16 +-
drivers/char/hvc_console.c | 2 +-
drivers/char/ip2/ip2main.c | 26 ++-
drivers/char/isicom.c | 54 ++--
drivers/char/moxa.c | 20 +-
drivers/char/mxser.c | 3 +-
drivers/char/nozomi.c | 157 +++++----
drivers/char/serial167.c | 3 +-
drivers/char/specialix.c | 2 -
drivers/char/synclink.c | 4 +-
drivers/char/synclink_gt.c | 186 ++++++-----
drivers/char/tty_buffer.c | 6 +-
drivers/char/tty_ldisc.c | 50 ++--
drivers/char/vt_ioctl.c | 39 ++-
drivers/mmc/card/sdio_uart.c | 93 ++----
drivers/parport/parport_pc.c | 6 +
drivers/serial/68328serial.c | 8 +-
drivers/serial/8250.c | 21 +-
drivers/serial/8250_pci.c | 31 ++-
drivers/serial/Kconfig | 53 ++--
drivers/serial/atmel_serial.c | 22 ++
drivers/serial/bcm63xx_uart.c | 7 +-
drivers/serial/bfin_5xx.c | 22 +-
drivers/serial/bfin_sport_uart.c | 701 +++++++++++++++++++++++++-------------
drivers/serial/bfin_sport_uart.h | 38 +--
drivers/serial/icom.c | 5 +-
drivers/serial/imx.c | 6 +-
drivers/serial/ioc3_serial.c | 3 +-
drivers/serial/jsm/jsm_driver.c | 1 +
drivers/serial/jsm/jsm_tty.c | 9 +-
drivers/serial/msm_serial.c | 6 +-
drivers/serial/timbuart.c | 7 +-
drivers/usb/serial/keyspan_pda.c | 7 +
include/linux/pci_ids.h | 3 +
include/linux/tty.h | 10 +
include/linux/vt.h | 3 +-
36 files changed, 978 insertions(+), 652 deletions(-)
---------------
Alan Cox (8):
sdio_uart: Use kfifo instead of the messy circ stuff
nozomi: Add tty_port usage
nozomi: Fix mutex handling
nozomi: Tidy up the PCI table
serial: timberdale: Remove dependancies
tty: Fix the ldisc hangup race
tty: Fix up char drivers request_room usage
tty: Keep the default buffering to sub-page units
Albin Tonnerre (1):
serial: atmel_serial: add poll_get_char and poll_put_char uart_ops
Ari Entlich (1):
tty: Add a new VT mode which is like VT_PROCESS but doesn't require a VT_RELDISP ioctl call
Bartlomiej Zolnierkiewicz (1):
serial: cyclades: allow overriding ISA defaults also when the driver is built-in
Baruch Siach (1):
serial: imx: fix NULL dereference Oops when pdata == NULL
Ben Hutchings (1):
tty: declare MODULE_FIRMWARE in various drivers
Breno Leitao (2):
jsm: removing the uart structure and filename on error
jsm: fixing error if the driver fails to load
Graf Yang (1):
serial: bfin_5xx: need to disable DMA TX interrupt too
Ira W. Snyder (1):
serial: 8250_pci: add support for MCS9865 / SYBA 6x Serial Port Card
Jiri Slaby (3):
serial: Char: cyclades, fix compiler warning
tty: char: mxser, remove unnecessary tty test
Char: synclink, remove unnecessary checks
Joe Perches (1):
serial: isicom.c: use pr_fmt and pr_<level>
Kiros Yeh (1):
serial: add support for Korenix JetCard
Maxime Bizon (2):
serial: bcm63xx_uart: don't use kfree() on non kmalloced area.
serial: bcm63xx_uart: allow more than one uart to be registered.
Mike Frysinger (1):
serial: bfin_5xx: pull in linux/io.h for ioremap prototypes
Paul Fulghum (1):
serial: synclink_gt: dropped transmit data bugfix
Rakib Mullick (3):
tty: moxa: remove #ifdef MODULE completely.
ip2: remove #ifdef MODULE from ip2main.c
ip2: Add module parameter.
Roel Kluin (2):
serial: fix test of unsigned
hvc_console: fix test on unsigned in hvc_console_print()
Shmulik Ladkani (1):
serial: copy UART properties of UPF_FIXED_TYPE ports provisioned using early_serial_setup
Sonic Zhang (2):
serial: bfin_5xx: remove useless gpio handling with hard flow control
serial: bfin_5xx: kgdboc should accept gdb break only when it is active
Thiago Farina (1):
serial: 68328serial.c: remove BAUD_TABLE_SIZE macro
sonic zhang (1):
serial: fit blackfin uart over sport driver into common uart infrastructure
^ permalink raw reply [flat|nested] 78+ messages in thread* [PATCH 01/36] serial: fit blackfin uart over sport driver into common uart infrastructure 2010-03-02 23:09 [GIT PATCH] TTY patches for 2.6.33-git Greg KH @ 2010-03-02 23:36 ` Greg Kroah-Hartman 2010-03-02 23:36 ` [PATCH 02/36] serial: copy UART properties of UPF_FIXED_TYPE ports provisioned using early_serial_setup Greg Kroah-Hartman ` (34 subsequent siblings) 35 siblings, 0 replies; 78+ messages in thread From: Greg Kroah-Hartman @ 2010-03-02 23:36 UTC (permalink / raw) To: linux-kernel Cc: sonic zhang, Sonic Zhang, Alan Cox, Mike Frysinger, Bryan Wu, Andrew Morton, Greg Kroah-Hartman From: sonic zhang <sonic.adi@gmail.com> Fit blackfin uart over sport driver into common uart inftrastructure. It is based on the early platform interfaces to get the platform data early when the console is initilized. 1. Enable sport uart driver to change uart baud, data bit, stop bit at runtime. Bind the index of uart device nodes to physical index of sports. 2. Move all platform data into arch specific board files. Register and probe platform device data in both early and normal stages. 3. Console is registered in sport uart driver as well. 4. Remove 500 us block waiting in sport tx stop code by putting a dummy data into tx fifo to make sure the sport tx stops when all bytes are shifted out except for the dummy data. 5. clean up a bit and fix up coding style. Signed-off-by: Sonic Zhang <sonic.zhang@analog.com> Cc: Alan Cox <alan@lxorguk.ukuu.org.uk> Cc: Mike Frysinger <vapier@gentoo.org> Cc: Bryan Wu <cooloney@kernel.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> --- drivers/serial/Kconfig | 52 ++-- drivers/serial/bfin_sport_uart.c | 701 +++++++++++++++++++++++++------------- drivers/serial/bfin_sport_uart.h | 38 +-- 3 files changed, 511 insertions(+), 280 deletions(-) diff --git a/drivers/serial/Kconfig b/drivers/serial/Kconfig index 888a0ce..cb935b1 100644 --- a/drivers/serial/Kconfig +++ b/drivers/serial/Kconfig @@ -1418,38 +1418,34 @@ config SERIAL_BFIN_SPORT To compile this driver as a module, choose M here: the module will be called bfin_sport_uart. -choice - prompt "Baud rate for Blackfin SPORT UART" - depends on SERIAL_BFIN_SPORT - default SERIAL_SPORT_BAUD_RATE_57600 - help - Choose a baud rate for the SPORT UART, other uart settings are - 8 bit, 1 stop bit, no parity, no flow control. - -config SERIAL_SPORT_BAUD_RATE_115200 - bool "115200" - -config SERIAL_SPORT_BAUD_RATE_57600 - bool "57600" +config SERIAL_BFIN_SPORT_CONSOLE + bool "Console on Blackfin sport emulated uart" + depends on SERIAL_BFIN_SPORT=y + select SERIAL_CORE_CONSOLE -config SERIAL_SPORT_BAUD_RATE_38400 - bool "38400" +config SERIAL_BFIN_SPORT0_UART + bool "Enable UART over SPORT0" + depends on SERIAL_BFIN_SPORT && !(BF542 || BF542M || BF544 || BF544M) + help + Enable UART over SPORT0 -config SERIAL_SPORT_BAUD_RATE_19200 - bool "19200" +config SERIAL_BFIN_SPORT1_UART + bool "Enable UART over SPORT1" + depends on SERIAL_BFIN_SPORT + help + Enable UART over SPORT1 -config SERIAL_SPORT_BAUD_RATE_9600 - bool "9600" -endchoice +config SERIAL_BFIN_SPORT2_UART + bool "Enable UART over SPORT2" + depends on SERIAL_BFIN_SPORT && (BF54x || BF538 || BF539) + help + Enable UART over SPORT2 -config SPORT_BAUD_RATE - int - depends on SERIAL_BFIN_SPORT - default 115200 if (SERIAL_SPORT_BAUD_RATE_115200) - default 57600 if (SERIAL_SPORT_BAUD_RATE_57600) - default 38400 if (SERIAL_SPORT_BAUD_RATE_38400) - default 19200 if (SERIAL_SPORT_BAUD_RATE_19200) - default 9600 if (SERIAL_SPORT_BAUD_RATE_9600) +config SERIAL_BFIN_SPORT3_UART + bool "Enable UART over SPORT3" + depends on SERIAL_BFIN_SPORT && (BF54x || BF538 || BF539) + help + Enable UART over SPORT3 config SERIAL_TIMBERDALE tristate "Support for timberdale UART" diff --git a/drivers/serial/bfin_sport_uart.c b/drivers/serial/bfin_sport_uart.c index 088bb35..7c72888 100644 --- a/drivers/serial/bfin_sport_uart.c +++ b/drivers/serial/bfin_sport_uart.c @@ -1,27 +1,11 @@ /* - * File: linux/drivers/serial/bfin_sport_uart.c + * Blackfin On-Chip Sport Emulated UART Driver * - * Based on: drivers/serial/bfin_5xx.c by Aubrey Li. - * Author: Roy Huang <roy.huang@analog.com> + * Copyright 2006-2009 Analog Devices Inc. * - * Created: Nov 22, 2006 - * Copyright: (c) 2006-2007 Analog Devices Inc. - * Description: this driver enable SPORTs on Blackfin emulate UART. + * Enter bugs at http://blackfin.uclinux.org/ * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, see the file COPYING, or write - * to the Free Software Foundation, Inc., - * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * Licensed under the GPL-2 or later. */ /* @@ -29,39 +13,18 @@ * http://www.analog.com/UploadedFiles/Application_Notes/399447663EE191.pdf * This application note describe how to implement a UART on a Sharc DSP, * but this driver is implemented on Blackfin Processor. + * Transmit Frame Sync is not used by this driver to transfer data out. */ -/* After reset, there is a prelude of low level pulse when transmit data first - * time. No addtional pulse in following transmit. - * According to document: - * The SPORTs are ready to start transmitting or receiving data no later than - * three serial clock cycles after they are enabled in the SPORTx_TCR1 or - * SPORTx_RCR1 register. No serial clock cycles are lost from this point on. - * The first internal frame sync will occur one frame sync delay after the - * SPORTs are ready. External frame syncs can occur as soon as the SPORT is - * ready. - */ +/* #define DEBUG */ -/* Thanks to Axel Alatalo <axel@rubico.se> for fixing sport rx bug. Sometimes - * sport receives data incorrectly. The following is Axel's words. - * As EE-191, sport rx samples 3 times of the UART baudrate and takes the - * middle smaple of every 3 samples as the data bit. For a 8-N-1 UART setting, - * 30 samples will be required for a byte. If transmitter sends a 1/3 bit short - * byte due to buadrate drift, then the 30th sample of a byte, this sample is - * also the third sample of the stop bit, will happens on the immediately - * following start bit which will be thrown away and missed. Thus since parts - * of the startbit will be missed and the receiver will begin to drift, the - * effect accumulates over time until synchronization is lost. - * If only require 2 samples of the stopbit (by sampling in total 29 samples), - * then a to short byte as in the case above will be tolerated. Then the 1/3 - * early startbit will trigger a framesync since the last read is complete - * after only 2/3 stopbit and framesync is active during the last 1/3 looking - * for a possible early startbit. */ - -//#define DEBUG +#define DRV_NAME "bfin-sport-uart" +#define DEVICE_NAME "ttySS" +#define pr_fmt(fmt) DRV_NAME ": " fmt #include <linux/module.h> #include <linux/ioport.h> +#include <linux/io.h> #include <linux/init.h> #include <linux/console.h> #include <linux/sysrq.h> @@ -75,23 +38,36 @@ #include "bfin_sport_uart.h" +#ifdef CONFIG_SERIAL_BFIN_SPORT0_UART unsigned short bfin_uart_pin_req_sport0[] = {P_SPORT0_TFS, P_SPORT0_DTPRI, P_SPORT0_TSCLK, P_SPORT0_RFS, \ P_SPORT0_DRPRI, P_SPORT0_RSCLK, P_SPORT0_DRSEC, P_SPORT0_DTSEC, 0}; - +#endif +#ifdef CONFIG_SERIAL_BFIN_SPORT1_UART unsigned short bfin_uart_pin_req_sport1[] = {P_SPORT1_TFS, P_SPORT1_DTPRI, P_SPORT1_TSCLK, P_SPORT1_RFS, \ P_SPORT1_DRPRI, P_SPORT1_RSCLK, P_SPORT1_DRSEC, P_SPORT1_DTSEC, 0}; - -#define DRV_NAME "bfin-sport-uart" +#endif +#ifdef CONFIG_SERIAL_BFIN_SPORT2_UART +unsigned short bfin_uart_pin_req_sport2[] = + {P_SPORT2_TFS, P_SPORT2_DTPRI, P_SPORT2_TSCLK, P_SPORT2_RFS, \ + P_SPORT2_DRPRI, P_SPORT2_RSCLK, P_SPORT2_DRSEC, P_SPORT2_DTSEC, 0}; +#endif +#ifdef CONFIG_SERIAL_BFIN_SPORT3_UART +unsigned short bfin_uart_pin_req_sport3[] = + {P_SPORT3_TFS, P_SPORT3_DTPRI, P_SPORT3_TSCLK, P_SPORT3_RFS, \ + P_SPORT3_DRPRI, P_SPORT3_RSCLK, P_SPORT3_DRSEC, P_SPORT3_DTSEC, 0}; +#endif struct sport_uart_port { struct uart_port port; - char *name; - - int tx_irq; - int rx_irq; int err_irq; + unsigned short csize; + unsigned short rxmask; + unsigned short txmask1; + unsigned short txmask2; + unsigned char stopb; +/* unsigned char parib; */ }; static void sport_uart_tx_chars(struct sport_uart_port *up); @@ -99,36 +75,42 @@ static void sport_stop_tx(struct uart_port *port); static inline void tx_one_byte(struct sport_uart_port *up, unsigned int value) { - pr_debug("%s value:%x\n", __func__, value); - /* Place a Start and Stop bit */ + pr_debug("%s value:%x, mask1=0x%x, mask2=0x%x\n", __func__, value, + up->txmask1, up->txmask2); + + /* Place Start and Stop bits */ __asm__ __volatile__ ( - "R2 = b#01111111100;" - "R3 = b#10000000001;" - "%0 <<= 2;" - "%0 = %0 & R2;" - "%0 = %0 | R3;" - : "=d"(value) - : "d"(value) - : "ASTAT", "R2", "R3" + "%[val] <<= 1;" + "%[val] = %[val] & %[mask1];" + "%[val] = %[val] | %[mask2];" + : [val]"+d"(value) + : [mask1]"d"(up->txmask1), [mask2]"d"(up->txmask2) + : "ASTAT" ); pr_debug("%s value:%x\n", __func__, value); SPORT_PUT_TX(up, value); } -static inline unsigned int rx_one_byte(struct sport_uart_port *up) +static inline unsigned char rx_one_byte(struct sport_uart_port *up) { - unsigned int value, extract; + unsigned int value; + unsigned char extract; u32 tmp_mask1, tmp_mask2, tmp_shift, tmp; - value = SPORT_GET_RX32(up); - pr_debug("%s value:%x\n", __func__, value); + if ((up->csize + up->stopb) > 7) + value = SPORT_GET_RX32(up); + else + value = SPORT_GET_RX(up); + + pr_debug("%s value:%x, cs=%d, mask=0x%x\n", __func__, value, + up->csize, up->rxmask); - /* Extract 8 bits data */ + /* Extract data */ __asm__ __volatile__ ( "%[extr] = 0;" - "%[mask1] = 0x1801(Z);" - "%[mask2] = 0x0300(Z);" + "%[mask1] = %[rxmask];" + "%[mask2] = 0x0200(Z);" "%[shift] = 0;" "LSETUP(.Lloop_s, .Lloop_e) LC0 = %[lc];" ".Lloop_s:" @@ -138,9 +120,9 @@ static inline unsigned int rx_one_byte(struct sport_uart_port *up) "%[mask1] = %[mask1] - %[mask2];" ".Lloop_e:" "%[shift] += 1;" - : [val]"=d"(value), [extr]"=d"(extract), [shift]"=d"(tmp_shift), [tmp]"=d"(tmp), - [mask1]"=d"(tmp_mask1), [mask2]"=d"(tmp_mask2) - : "d"(value), [lc]"a"(8) + : [extr]"=&d"(extract), [shift]"=&d"(tmp_shift), [tmp]"=&d"(tmp), + [mask1]"=&d"(tmp_mask1), [mask2]"=&d"(tmp_mask2) + : [val]"d"(value), [rxmask]"d"(up->rxmask), [lc]"a"(up->csize) : "ASTAT", "LB0", "LC0", "LT0" ); @@ -148,29 +130,28 @@ static inline unsigned int rx_one_byte(struct sport_uart_port *up) return extract; } -static int sport_uart_setup(struct sport_uart_port *up, int sclk, int baud_rate) +static int sport_uart_setup(struct sport_uart_port *up, int size, int baud_rate) { - int tclkdiv, tfsdiv, rclkdiv; + int tclkdiv, rclkdiv; + unsigned int sclk = get_sclk(); - /* Set TCR1 and TCR2 */ - SPORT_PUT_TCR1(up, (LATFS | ITFS | TFSR | TLSBIT | ITCLK)); - SPORT_PUT_TCR2(up, 10); + /* Set TCR1 and TCR2, TFSR is not enabled for uart */ + SPORT_PUT_TCR1(up, (ITFS | TLSBIT | ITCLK)); + SPORT_PUT_TCR2(up, size + 1); pr_debug("%s TCR1:%x, TCR2:%x\n", __func__, SPORT_GET_TCR1(up), SPORT_GET_TCR2(up)); /* Set RCR1 and RCR2 */ SPORT_PUT_RCR1(up, (RCKFE | LARFS | LRFS | RFSR | IRCLK)); - SPORT_PUT_RCR2(up, 28); + SPORT_PUT_RCR2(up, (size + 1) * 2 - 1); pr_debug("%s RCR1:%x, RCR2:%x\n", __func__, SPORT_GET_RCR1(up), SPORT_GET_RCR2(up)); - tclkdiv = sclk/(2 * baud_rate) - 1; - tfsdiv = 12; - rclkdiv = sclk/(2 * baud_rate * 3) - 1; + tclkdiv = sclk / (2 * baud_rate) - 1; + rclkdiv = sclk / (2 * baud_rate * 2) - 1; SPORT_PUT_TCLKDIV(up, tclkdiv); - SPORT_PUT_TFSDIV(up, tfsdiv); SPORT_PUT_RCLKDIV(up, rclkdiv); SSYNC(); - pr_debug("%s sclk:%d, baud_rate:%d, tclkdiv:%d, tfsdiv:%d, rclkdiv:%d\n", - __func__, sclk, baud_rate, tclkdiv, tfsdiv, rclkdiv); + pr_debug("%s sclk:%d, baud_rate:%d, tclkdiv:%d, rclkdiv:%d\n", + __func__, sclk, baud_rate, tclkdiv, rclkdiv); return 0; } @@ -181,23 +162,29 @@ static irqreturn_t sport_uart_rx_irq(int irq, void *dev_id) struct tty_struct *tty = up->port.state->port.tty; unsigned int ch; - do { + spin_lock(&up->port.lock); + + while (SPORT_GET_STAT(up) & RXNE) { ch = rx_one_byte(up); up->port.icount.rx++; - if (uart_handle_sysrq_char(&up->port, ch)) - ; - else + if (!uart_handle_sysrq_char(&up->port, ch)) tty_insert_flip_char(tty, ch, TTY_NORMAL); - } while (SPORT_GET_STAT(up) & RXNE); + } tty_flip_buffer_push(tty); + spin_unlock(&up->port.lock); + return IRQ_HANDLED; } static irqreturn_t sport_uart_tx_irq(int irq, void *dev_id) { - sport_uart_tx_chars(dev_id); + struct sport_uart_port *up = dev_id; + + spin_lock(&up->port.lock); + sport_uart_tx_chars(up); + spin_unlock(&up->port.lock); return IRQ_HANDLED; } @@ -208,6 +195,8 @@ static irqreturn_t sport_uart_err_irq(int irq, void *dev_id) struct tty_struct *tty = up->port.state->port.tty; unsigned int stat = SPORT_GET_STAT(up); + spin_lock(&up->port.lock); + /* Overflow in RX FIFO */ if (stat & ROVF) { up->port.icount.overrun++; @@ -216,15 +205,16 @@ static irqreturn_t sport_uart_err_irq(int irq, void *dev_id) } /* These should not happen */ if (stat & (TOVF | TUVF | RUVF)) { - printk(KERN_ERR "SPORT Error:%s %s %s\n", - (stat & TOVF)?"TX overflow":"", - (stat & TUVF)?"TX underflow":"", - (stat & RUVF)?"RX underflow":""); + pr_err("SPORT Error:%s %s %s\n", + (stat & TOVF) ? "TX overflow" : "", + (stat & TUVF) ? "TX underflow" : "", + (stat & RUVF) ? "RX underflow" : ""); SPORT_PUT_TCR1(up, SPORT_GET_TCR1(up) & ~TSPEN); SPORT_PUT_RCR1(up, SPORT_GET_RCR1(up) & ~RSPEN); } SSYNC(); + spin_unlock(&up->port.lock); return IRQ_HANDLED; } @@ -232,60 +222,37 @@ static irqreturn_t sport_uart_err_irq(int irq, void *dev_id) static int sport_startup(struct uart_port *port) { struct sport_uart_port *up = (struct sport_uart_port *)port; - char buffer[20]; - int retval; + int ret; pr_debug("%s enter\n", __func__); - snprintf(buffer, 20, "%s rx", up->name); - retval = request_irq(up->rx_irq, sport_uart_rx_irq, IRQF_SAMPLE_RANDOM, buffer, up); - if (retval) { - printk(KERN_ERR "Unable to request interrupt %s\n", buffer); - return retval; + ret = request_irq(up->port.irq, sport_uart_rx_irq, 0, + "SPORT_UART_RX", up); + if (ret) { + dev_err(port->dev, "unable to request SPORT RX interrupt\n"); + return ret; } - snprintf(buffer, 20, "%s tx", up->name); - retval = request_irq(up->tx_irq, sport_uart_tx_irq, IRQF_SAMPLE_RANDOM, buffer, up); - if (retval) { - printk(KERN_ERR "Unable to request interrupt %s\n", buffer); + ret = request_irq(up->port.irq+1, sport_uart_tx_irq, 0, + "SPORT_UART_TX", up); + if (ret) { + dev_err(port->dev, "unable to request SPORT TX interrupt\n"); goto fail1; } - snprintf(buffer, 20, "%s err", up->name); - retval = request_irq(up->err_irq, sport_uart_err_irq, IRQF_SAMPLE_RANDOM, buffer, up); - if (retval) { - printk(KERN_ERR "Unable to request interrupt %s\n", buffer); + ret = request_irq(up->err_irq, sport_uart_err_irq, 0, + "SPORT_UART_STATUS", up); + if (ret) { + dev_err(port->dev, "unable to request SPORT status interrupt\n"); goto fail2; } - if (port->line) { - if (peripheral_request_list(bfin_uart_pin_req_sport1, DRV_NAME)) - goto fail3; - } else { - if (peripheral_request_list(bfin_uart_pin_req_sport0, DRV_NAME)) - goto fail3; - } - - sport_uart_setup(up, get_sclk(), port->uartclk); - - /* Enable receive interrupt */ - SPORT_PUT_RCR1(up, (SPORT_GET_RCR1(up) | RSPEN)); - SSYNC(); - return 0; + fail2: + free_irq(up->port.irq+1, up); + fail1: + free_irq(up->port.irq, up); - -fail3: - printk(KERN_ERR DRV_NAME - ": Requesting Peripherals failed\n"); - - free_irq(up->err_irq, up); -fail2: - free_irq(up->tx_irq, up); -fail1: - free_irq(up->rx_irq, up); - - return retval; - + return ret; } static void sport_uart_tx_chars(struct sport_uart_port *up) @@ -344,20 +311,17 @@ static void sport_set_mctrl(struct uart_port *port, unsigned int mctrl) static void sport_stop_tx(struct uart_port *port) { struct sport_uart_port *up = (struct sport_uart_port *)port; - unsigned int stat; pr_debug("%s enter\n", __func__); - stat = SPORT_GET_STAT(up); - while(!(stat & TXHRE)) { - udelay(1); - stat = SPORT_GET_STAT(up); - } /* Although the hold register is empty, last byte is still in shift - * register and not sent out yet. If baud rate is lower than default, - * delay should be longer. For example, if the baud rate is 9600, - * the delay must be at least 2ms by experience */ - udelay(500); + * register and not sent out yet. So, put a dummy data into TX FIFO. + * Then, sport tx stops when last byte is shift out and the dummy + * data is moved into the shift register. + */ + SPORT_PUT_TX(up, 0xffff); + while (!(SPORT_GET_STAT(up) & TXHRE)) + cpu_relax(); SPORT_PUT_TCR1(up, (SPORT_GET_TCR1(up) & ~TSPEN)); SSYNC(); @@ -370,6 +334,7 @@ static void sport_start_tx(struct uart_port *port) struct sport_uart_port *up = (struct sport_uart_port *)port; pr_debug("%s enter\n", __func__); + /* Write data into SPORT FIFO before enable SPROT to transmit */ sport_uart_tx_chars(up); @@ -403,37 +368,24 @@ static void sport_shutdown(struct uart_port *port) { struct sport_uart_port *up = (struct sport_uart_port *)port; - pr_debug("%s enter\n", __func__); + dev_dbg(port->dev, "%s enter\n", __func__); /* Disable sport */ SPORT_PUT_TCR1(up, (SPORT_GET_TCR1(up) & ~TSPEN)); SPORT_PUT_RCR1(up, (SPORT_GET_RCR1(up) & ~RSPEN)); SSYNC(); - if (port->line) { - peripheral_free_list(bfin_uart_pin_req_sport1); - } else { - peripheral_free_list(bfin_uart_pin_req_sport0); - } - - free_irq(up->rx_irq, up); - free_irq(up->tx_irq, up); + free_irq(up->port.irq, up); + free_irq(up->port.irq+1, up); free_irq(up->err_irq, up); } -static void sport_set_termios(struct uart_port *port, - struct ktermios *termios, struct ktermios *old) -{ - pr_debug("%s enter, c_cflag:%08x\n", __func__, termios->c_cflag); - uart_update_timeout(port, CS8 ,port->uartclk); -} - static const char *sport_type(struct uart_port *port) { struct sport_uart_port *up = (struct sport_uart_port *)port; pr_debug("%s enter\n", __func__); - return up->name; + return up->port.type == PORT_BFIN_SPORT ? "BFIN-SPORT-UART" : NULL; } static void sport_release_port(struct uart_port *port) @@ -461,6 +413,110 @@ static int sport_verify_port(struct uart_port *port, struct serial_struct *ser) return 0; } +static void sport_set_termios(struct uart_port *port, + struct ktermios *termios, struct ktermios *old) +{ + struct sport_uart_port *up = (struct sport_uart_port *)port; + unsigned long flags; + int i; + + pr_debug("%s enter, c_cflag:%08x\n", __func__, termios->c_cflag); + + switch (termios->c_cflag & CSIZE) { + case CS8: + up->csize = 8; + break; + case CS7: + up->csize = 7; + break; + case CS6: + up->csize = 6; + break; + case CS5: + up->csize = 5; + break; + default: + pr_warning("requested word length not supported\n"); + } + + if (termios->c_cflag & CSTOPB) { + up->stopb = 1; + } + if (termios->c_cflag & PARENB) { + pr_warning("PAREN bits is not supported yet\n"); + /* up->parib = 1; */ + } + + port->read_status_mask = OE; + if (termios->c_iflag & INPCK) + port->read_status_mask |= (FE | PE); + if (termios->c_iflag & (BRKINT | PARMRK)) + port->read_status_mask |= BI; + + /* + * Characters to ignore + */ + port->ignore_status_mask = 0; + if (termios->c_iflag & IGNPAR) + port->ignore_status_mask |= FE | PE; + if (termios->c_iflag & IGNBRK) { + port->ignore_status_mask |= BI; + /* + * If we're ignoring parity and break indicators, + * ignore overruns too (for real raw support). + */ + if (termios->c_iflag & IGNPAR) + port->ignore_status_mask |= OE; + } + + /* RX extract mask */ + up->rxmask = 0x01 | (((up->csize + up->stopb) * 2 - 1) << 0x8); + /* TX masks, 8 bit data and 1 bit stop for example: + * mask1 = b#0111111110 + * mask2 = b#1000000000 + */ + for (i = 0, up->txmask1 = 0; i < up->csize; i++) + up->txmask1 |= (1<<i); + up->txmask2 = (1<<i); + if (up->stopb) { + ++i; + up->txmask2 |= (1<<i); + } + up->txmask1 <<= 1; + up->txmask2 <<= 1; + /* uart baud rate */ + port->uartclk = uart_get_baud_rate(port, termios, old, 0, get_sclk()/16); + + spin_lock_irqsave(&up->port.lock, flags); + + /* Disable UART */ + SPORT_PUT_TCR1(up, SPORT_GET_TCR1(up) & ~TSPEN); + SPORT_PUT_RCR1(up, SPORT_GET_RCR1(up) & ~RSPEN); + + sport_uart_setup(up, up->csize + up->stopb, port->uartclk); + + /* driver TX line high after config, one dummy data is + * necessary to stop sport after shift one byte + */ + SPORT_PUT_TX(up, 0xffff); + SPORT_PUT_TX(up, 0xffff); + SPORT_PUT_TCR1(up, (SPORT_GET_TCR1(up) | TSPEN)); + SSYNC(); + while (!(SPORT_GET_STAT(up) & TXHRE)) + cpu_relax(); + SPORT_PUT_TCR1(up, SPORT_GET_TCR1(up) & ~TSPEN); + SSYNC(); + + /* Port speed changed, update the per-port timeout. */ + uart_update_timeout(port, termios->c_cflag, port->uartclk); + + /* Enable sport rx */ + SPORT_PUT_RCR1(up, SPORT_GET_RCR1(up) | RSPEN); + SSYNC(); + + spin_unlock_irqrestore(&up->port.lock, flags); +} + struct uart_ops sport_uart_ops = { .tx_empty = sport_tx_empty, .set_mctrl = sport_set_mctrl, @@ -480,138 +536,319 @@ struct uart_ops sport_uart_ops = { .verify_port = sport_verify_port, }; -static struct sport_uart_port sport_uart_ports[] = { - { /* SPORT 0 */ - .name = "SPORT0", - .tx_irq = IRQ_SPORT0_TX, - .rx_irq = IRQ_SPORT0_RX, - .err_irq= IRQ_SPORT0_ERROR, - .port = { - .type = PORT_BFIN_SPORT, - .iotype = UPIO_MEM, - .membase = (void __iomem *)SPORT0_TCR1, - .mapbase = SPORT0_TCR1, - .irq = IRQ_SPORT0_RX, - .uartclk = CONFIG_SPORT_BAUD_RATE, - .fifosize = 8, - .ops = &sport_uart_ops, - .line = 0, - }, - }, { /* SPORT 1 */ - .name = "SPORT1", - .tx_irq = IRQ_SPORT1_TX, - .rx_irq = IRQ_SPORT1_RX, - .err_irq= IRQ_SPORT1_ERROR, - .port = { - .type = PORT_BFIN_SPORT, - .iotype = UPIO_MEM, - .membase = (void __iomem *)SPORT1_TCR1, - .mapbase = SPORT1_TCR1, - .irq = IRQ_SPORT1_RX, - .uartclk = CONFIG_SPORT_BAUD_RATE, - .fifosize = 8, - .ops = &sport_uart_ops, - .line = 1, - }, +#define BFIN_SPORT_UART_MAX_PORTS 4 + +static struct sport_uart_port *bfin_sport_uart_ports[BFIN_SPORT_UART_MAX_PORTS]; + +#ifdef CONFIG_SERIAL_BFIN_SPORT_CONSOLE +static int __init +sport_uart_console_setup(struct console *co, char *options) +{ + struct sport_uart_port *up; + int baud = 57600; + int bits = 8; + int parity = 'n'; + int flow = 'n'; + + /* Check whether an invalid uart number has been specified */ + if (co->index < 0 || co->index >= BFIN_SPORT_UART_MAX_PORTS) + return -ENODEV; + + up = bfin_sport_uart_ports[co->index]; + if (!up) + return -ENODEV; + + if (options) + uart_parse_options(options, &baud, &parity, &bits, &flow); + + return uart_set_options(&up->port, co, baud, parity, bits, flow); +} + +static void sport_uart_console_putchar(struct uart_port *port, int ch) +{ + struct sport_uart_port *up = (struct sport_uart_port *)port; + + while (SPORT_GET_STAT(up) & TXF) + barrier(); + + tx_one_byte(up, ch); +} + +/* + * Interrupts are disabled on entering + */ +static void +sport_uart_console_write(struct console *co, const char *s, unsigned int count) +{ + struct sport_uart_port *up = bfin_sport_uart_ports[co->index]; + unsigned long flags; + + spin_lock_irqsave(&up->port.lock, flags); + + if (SPORT_GET_TCR1(up) & TSPEN) + uart_console_write(&up->port, s, count, sport_uart_console_putchar); + else { + /* dummy data to start sport */ + while (SPORT_GET_STAT(up) & TXF) + barrier(); + SPORT_PUT_TX(up, 0xffff); + /* Enable transmit, then an interrupt will generated */ + SPORT_PUT_TCR1(up, (SPORT_GET_TCR1(up) | TSPEN)); + SSYNC(); + + uart_console_write(&up->port, s, count, sport_uart_console_putchar); + + /* Although the hold register is empty, last byte is still in shift + * register and not sent out yet. So, put a dummy data into TX FIFO. + * Then, sport tx stops when last byte is shift out and the dummy + * data is moved into the shift register. + */ + while (SPORT_GET_STAT(up) & TXF) + barrier(); + SPORT_PUT_TX(up, 0xffff); + while (!(SPORT_GET_STAT(up) & TXHRE)) + barrier(); + + /* Stop sport tx transfer */ + SPORT_PUT_TCR1(up, (SPORT_GET_TCR1(up) & ~TSPEN)); + SSYNC(); } + + spin_unlock_irqrestore(&up->port.lock, flags); +} + +static struct uart_driver sport_uart_reg; + +static struct console sport_uart_console = { + .name = DEVICE_NAME, + .write = sport_uart_console_write, + .device = uart_console_device, + .setup = sport_uart_console_setup, + .flags = CON_PRINTBUFFER, + .index = -1, + .data = &sport_uart_reg, }; +#define SPORT_UART_CONSOLE (&sport_uart_console) +#else +#define SPORT_UART_CONSOLE NULL +#endif /* CONFIG_SERIAL_BFIN_SPORT_CONSOLE */ + + static struct uart_driver sport_uart_reg = { .owner = THIS_MODULE, - .driver_name = "SPORT-UART", - .dev_name = "ttySS", + .driver_name = DRV_NAME, + .dev_name = DEVICE_NAME, .major = 204, .minor = 84, - .nr = ARRAY_SIZE(sport_uart_ports), - .cons = NULL, + .nr = BFIN_SPORT_UART_MAX_PORTS, + .cons = SPORT_UART_CONSOLE, }; -static int sport_uart_suspend(struct platform_device *dev, pm_message_t state) +#ifdef CONFIG_PM +static int sport_uart_suspend(struct device *dev) { - struct sport_uart_port *sport = platform_get_drvdata(dev); + struct sport_uart_port *sport = dev_get_drvdata(dev); - pr_debug("%s enter\n", __func__); + dev_dbg(dev, "%s enter\n", __func__); if (sport) uart_suspend_port(&sport_uart_reg, &sport->port); return 0; } -static int sport_uart_resume(struct platform_device *dev) +static int sport_uart_resume(struct device *dev) { - struct sport_uart_port *sport = platform_get_drvdata(dev); + struct sport_uart_port *sport = dev_get_drvdata(dev); - pr_debug("%s enter\n", __func__); + dev_dbg(dev, "%s enter\n", __func__); if (sport) uart_resume_port(&sport_uart_reg, &sport->port); return 0; } -static int sport_uart_probe(struct platform_device *dev) +static struct dev_pm_ops bfin_sport_uart_dev_pm_ops = { + .suspend = sport_uart_suspend, + .resume = sport_uart_resume, +}; +#endif + +static int __devinit sport_uart_probe(struct platform_device *pdev) { - pr_debug("%s enter\n", __func__); - sport_uart_ports[dev->id].port.dev = &dev->dev; - uart_add_one_port(&sport_uart_reg, &sport_uart_ports[dev->id].port); - platform_set_drvdata(dev, &sport_uart_ports[dev->id]); + struct resource *res; + struct sport_uart_port *sport; + int ret = 0; - return 0; + dev_dbg(&pdev->dev, "%s enter\n", __func__); + + if (pdev->id < 0 || pdev->id >= BFIN_SPORT_UART_MAX_PORTS) { + dev_err(&pdev->dev, "Wrong sport uart platform device id.\n"); + return -ENOENT; + } + + if (bfin_sport_uart_ports[pdev->id] == NULL) { + bfin_sport_uart_ports[pdev->id] = + kmalloc(sizeof(struct sport_uart_port), GFP_KERNEL); + sport = bfin_sport_uart_ports[pdev->id]; + if (!sport) { + dev_err(&pdev->dev, + "Fail to kmalloc sport_uart_port\n"); + return -ENOMEM; + } + + ret = peripheral_request_list( + (unsigned short *)pdev->dev.platform_data, DRV_NAME); + if (ret) { + dev_err(&pdev->dev, + "Fail to request SPORT peripherals\n"); + goto out_error_free_mem; + } + + spin_lock_init(&sport->port.lock); + sport->port.fifosize = SPORT_TX_FIFO_SIZE, + sport->port.ops = &sport_uart_ops; + sport->port.line = pdev->id; + sport->port.iotype = UPIO_MEM; + sport->port.flags = UPF_BOOT_AUTOCONF; + + res = platform_get_resource(pdev, IORESOURCE_MEM, 0); + if (res == NULL) { + dev_err(&pdev->dev, "Cannot get IORESOURCE_MEM\n"); + ret = -ENOENT; + goto out_error_free_peripherals; + } + + sport->port.membase = ioremap(res->start, + res->end - res->start); + if (!sport->port.membase) { + dev_err(&pdev->dev, "Cannot map sport IO\n"); + ret = -ENXIO; + goto out_error_free_peripherals; + } + + sport->port.irq = platform_get_irq(pdev, 0); + if (sport->port.irq < 0) { + dev_err(&pdev->dev, "No sport RX/TX IRQ specified\n"); + ret = -ENOENT; + goto out_error_unmap; + } + + sport->err_irq = platform_get_irq(pdev, 1); + if (sport->err_irq < 0) { + dev_err(&pdev->dev, "No sport status IRQ specified\n"); + ret = -ENOENT; + goto out_error_unmap; + } + } + +#ifdef CONFIG_SERIAL_BFIN_SPORT_CONSOLE + if (!is_early_platform_device(pdev)) { +#endif + sport = bfin_sport_uart_ports[pdev->id]; + sport->port.dev = &pdev->dev; + dev_set_drvdata(&pdev->dev, sport); + ret = uart_add_one_port(&sport_uart_reg, &sport->port); +#ifdef CONFIG_SERIAL_BFIN_SPORT_CONSOLE + } +#endif + if (!ret) + return 0; + + if (sport) { +out_error_unmap: + iounmap(sport->port.membase); +out_error_free_peripherals: + peripheral_free_list( + (unsigned short *)pdev->dev.platform_data); +out_error_free_mem: + kfree(sport); + bfin_sport_uart_ports[pdev->id] = NULL; + } + + return ret; } -static int sport_uart_remove(struct platform_device *dev) +static int __devexit sport_uart_remove(struct platform_device *pdev) { - struct sport_uart_port *sport = platform_get_drvdata(dev); + struct sport_uart_port *sport = platform_get_drvdata(pdev); - pr_debug("%s enter\n", __func__); - platform_set_drvdata(dev, NULL); + dev_dbg(&pdev->dev, "%s enter\n", __func__); + dev_set_drvdata(&pdev->dev, NULL); - if (sport) + if (sport) { uart_remove_one_port(&sport_uart_reg, &sport->port); + iounmap(sport->port.membase); + peripheral_free_list( + (unsigned short *)pdev->dev.platform_data); + kfree(sport); + bfin_sport_uart_ports[pdev->id] = NULL; + } return 0; } static struct platform_driver sport_uart_driver = { .probe = sport_uart_probe, - .remove = sport_uart_remove, - .suspend = sport_uart_suspend, - .resume = sport_uart_resume, + .remove = __devexit_p(sport_uart_remove), .driver = { .name = DRV_NAME, +#ifdef CONFIG_PM + .pm = &bfin_sport_uart_dev_pm_ops, +#endif }, }; +#ifdef CONFIG_SERIAL_BFIN_SPORT_CONSOLE +static __initdata struct early_platform_driver early_sport_uart_driver = { + .class_str = DRV_NAME, + .pdrv = &sport_uart_driver, + .requested_id = EARLY_PLATFORM_ID_UNSET, +}; + +static int __init sport_uart_rs_console_init(void) +{ + early_platform_driver_register(&early_sport_uart_driver, DRV_NAME); + + early_platform_driver_probe(DRV_NAME, BFIN_SPORT_UART_MAX_PORTS, 0); + + register_console(&sport_uart_console); + + return 0; +} +console_initcall(sport_uart_rs_console_init); +#endif + static int __init sport_uart_init(void) { int ret; - pr_debug("%s enter\n", __func__); + pr_info("Serial: Blackfin uart over sport driver\n"); + ret = uart_register_driver(&sport_uart_reg); - if (ret != 0) { - printk(KERN_ERR "Failed to register %s:%d\n", + if (ret) { + pr_err("failed to register %s:%d\n", sport_uart_reg.driver_name, ret); return ret; } ret = platform_driver_register(&sport_uart_driver); - if (ret != 0) { - printk(KERN_ERR "Failed to register sport uart driver:%d\n", ret); + if (ret) { + pr_err("failed to register sport uart driver:%d\n", ret); uart_unregister_driver(&sport_uart_reg); } - - pr_debug("%s exit\n", __func__); return ret; } +module_init(sport_uart_init); static void __exit sport_uart_exit(void) { - pr_debug("%s enter\n", __func__); platform_driver_unregister(&sport_uart_driver); uart_unregister_driver(&sport_uart_reg); } - -module_init(sport_uart_init); module_exit(sport_uart_exit); +MODULE_AUTHOR("Sonic Zhang, Roy Huang"); +MODULE_DESCRIPTION("Blackfin serial over SPORT driver"); MODULE_LICENSE("GPL"); diff --git a/drivers/serial/bfin_sport_uart.h b/drivers/serial/bfin_sport_uart.h index 671d41c..abe0361 100644 --- a/drivers/serial/bfin_sport_uart.h +++ b/drivers/serial/bfin_sport_uart.h @@ -1,29 +1,23 @@ /* - * File: linux/drivers/serial/bfin_sport_uart.h + * Blackfin On-Chip Sport Emulated UART Driver * - * Based on: include/asm-blackfin/mach-533/bfin_serial_5xx.h - * Author: Roy Huang <roy.huang>analog.com> + * Copyright 2006-2008 Analog Devices Inc. * - * Created: Nov 22, 2006 - * Copyright: (C) Analog Device Inc. - * Description: this driver enable SPORTs on Blackfin emulate UART. + * Enter bugs at http://blackfin.uclinux.org/ * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, see the file COPYING, or write - * to the Free Software Foundation, Inc., - * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * Licensed under the GPL-2 or later. */ +/* + * This driver and the hardware supported are in term of EE-191 of ADI. + * http://www.analog.com/UploadedFiles/Application_Notes/399447663EE191.pdf + * This application note describe how to implement a UART on a Sharc DSP, + * but this driver is implemented on Blackfin Processor. + * Transmit Frame Sync is not used by this driver to transfer data out. + */ + +#ifndef _BFIN_SPORT_UART_H +#define _BFIN_SPORT_UART_H #define OFFSET_TCR1 0x00 /* Transmit Configuration 1 Register */ #define OFFSET_TCR2 0x04 /* Transmit Configuration 2 Register */ @@ -61,3 +55,7 @@ #define SPORT_PUT_RCLKDIV(sport, v) bfin_write16(((sport)->port.membase + OFFSET_RCLKDIV), v) #define SPORT_PUT_RFSDIV(sport, v) bfin_write16(((sport)->port.membase + OFFSET_RFSDIV), v) #define SPORT_PUT_STAT(sport, v) bfin_write16(((sport)->port.membase + OFFSET_STAT), v) + +#define SPORT_TX_FIFO_SIZE 8 + +#endif /* _BFIN_SPORT_UART_H */ -- 1.7.0.1 ^ permalink raw reply related [flat|nested] 78+ messages in thread
* [PATCH 02/36] serial: copy UART properties of UPF_FIXED_TYPE ports provisioned using early_serial_setup 2010-03-02 23:09 [GIT PATCH] TTY patches for 2.6.33-git Greg KH 2010-03-02 23:36 ` [PATCH 01/36] serial: fit blackfin uart over sport driver into common uart infrastructure Greg Kroah-Hartman @ 2010-03-02 23:36 ` Greg Kroah-Hartman 2010-03-02 23:36 ` [PATCH 03/36] serial: 68328serial.c: remove BAUD_TABLE_SIZE macro Greg Kroah-Hartman ` (33 subsequent siblings) 35 siblings, 0 replies; 78+ messages in thread From: Greg Kroah-Hartman @ 2010-03-02 23:36 UTC (permalink / raw) To: linux-kernel; +Cc: Shmulik Ladkani, Alan Cox, Andrew Morton, Greg Kroah-Hartman From: Shmulik Ladkani <shmulik@jungo.com> Augment the UPF_FIXED_TYPE logic, which currently applies to UART ports provisioned using platform_device_register. The suggested patch applies same logic into 'serial8250_register_ports', making UART ports provisioned using early_serial_setup inherit their properties from the uart_config entry. Signed-off-by: Shmulik Ladkani <shmulik@jungo.com> Cc: Alan Cox <alan@lxorguk.ukuu.org.uk> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> --- drivers/serial/8250.c | 21 +++++++++++++++------ 1 files changed, 15 insertions(+), 6 deletions(-) diff --git a/drivers/serial/8250.c b/drivers/serial/8250.c index a81ff7b..7c4ebe6 100644 --- a/drivers/serial/8250.c +++ b/drivers/serial/8250.c @@ -2690,6 +2690,15 @@ static void __init serial8250_isa_init_ports(void) } } +static void +serial8250_init_fixed_type_port(struct uart_8250_port *up, unsigned int type) +{ + up->port.type = type; + up->port.fifosize = uart_config[type].fifo_size; + up->capabilities = uart_config[type].flags; + up->tx_loadsz = uart_config[type].tx_loadsz; +} + static void __init serial8250_register_ports(struct uart_driver *drv, struct device *dev) { @@ -2706,6 +2715,10 @@ serial8250_register_ports(struct uart_driver *drv, struct device *dev) struct uart_8250_port *up = &serial8250_ports[i]; up->port.dev = dev; + + if (up->port.flags & UPF_FIXED_TYPE) + serial8250_init_fixed_type_port(up, up->port.type); + uart_add_one_port(drv, &up->port); } } @@ -3118,12 +3131,8 @@ int serial8250_register_port(struct uart_port *port) if (port->dev) uart->port.dev = port->dev; - if (port->flags & UPF_FIXED_TYPE) { - uart->port.type = port->type; - uart->port.fifosize = uart_config[port->type].fifo_size; - uart->capabilities = uart_config[port->type].flags; - uart->tx_loadsz = uart_config[port->type].tx_loadsz; - } + if (port->flags & UPF_FIXED_TYPE) + serial8250_init_fixed_type_port(uart, port->type); set_io_from_upio(&uart->port); /* Possibly override default I/O functions. */ -- 1.7.0.1 ^ permalink raw reply related [flat|nested] 78+ messages in thread
* [PATCH 03/36] serial: 68328serial.c: remove BAUD_TABLE_SIZE macro 2010-03-02 23:09 [GIT PATCH] TTY patches for 2.6.33-git Greg KH 2010-03-02 23:36 ` [PATCH 01/36] serial: fit blackfin uart over sport driver into common uart infrastructure Greg Kroah-Hartman 2010-03-02 23:36 ` [PATCH 02/36] serial: copy UART properties of UPF_FIXED_TYPE ports provisioned using early_serial_setup Greg Kroah-Hartman @ 2010-03-02 23:36 ` Greg Kroah-Hartman 2010-03-02 23:36 ` [PATCH 04/36] serial: atmel_serial: add poll_get_char and poll_put_char uart_ops Greg Kroah-Hartman ` (32 subsequent siblings) 35 siblings, 0 replies; 78+ messages in thread From: Greg Kroah-Hartman @ 2010-03-02 23:36 UTC (permalink / raw) To: linux-kernel; +Cc: Thiago Farina, Alan Cox, Andrew Morton, Greg Kroah-Hartman From: Thiago Farina <tfransosi@gmail.com> This macro is a duplicate of ARRAY_SIZE defined in kernel api, so just use that instead. Signed-off-by: Thiago Farina <tfransosi@gmail.com> Cc: Alan Cox <alan@lxorguk.ukuu.org.uk> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> --- drivers/serial/68328serial.c | 8 +++----- 1 files changed, 3 insertions(+), 5 deletions(-) diff --git a/drivers/serial/68328serial.c b/drivers/serial/68328serial.c index d935b2d..ae0251e 100644 --- a/drivers/serial/68328serial.c +++ b/drivers/serial/68328serial.c @@ -153,8 +153,6 @@ static int baud_table[] = { 0, 50, 75, 110, 134, 150, 200, 300, 600, 1200, 1800, 2400, 4800, 9600, 19200, 38400, 57600, 115200, 0 }; -#define BAUD_TABLE_SIZE (sizeof(baud_table)/sizeof(baud_table[0])) - /* Sets or clears DTR/RTS on the requested line */ static inline void m68k_rtsdtr(struct m68k_serial *ss, int set) { @@ -1406,10 +1404,10 @@ static void m68328_set_baud(void) USTCNT = ustcnt & ~USTCNT_TXEN; again: - for (i = 0; i < sizeof(baud_table) / sizeof(baud_table[0]); i++) + for (i = 0; i < ARRAY_SIZE(baud_table); i++) if (baud_table[i] == m68328_console_baud) break; - if (i >= sizeof(baud_table) / sizeof(baud_table[0])) { + if (i >= ARRAY_SIZE(baud_table)) { m68328_console_baud = 9600; goto again; } @@ -1435,7 +1433,7 @@ int m68328_console_setup(struct console *cp, char *arg) if (arg) n = simple_strtoul(arg,NULL,0); - for (i = 0; i < BAUD_TABLE_SIZE; i++) + for (i = 0; i < ARRAY_SIZE(baud_table); i++) if (baud_table[i] == n) break; if (i < BAUD_TABLE_SIZE) { -- 1.7.0.1 ^ permalink raw reply related [flat|nested] 78+ messages in thread
* [PATCH 04/36] serial: atmel_serial: add poll_get_char and poll_put_char uart_ops 2010-03-02 23:09 [GIT PATCH] TTY patches for 2.6.33-git Greg KH ` (2 preceding siblings ...) 2010-03-02 23:36 ` [PATCH 03/36] serial: 68328serial.c: remove BAUD_TABLE_SIZE macro Greg Kroah-Hartman @ 2010-03-02 23:36 ` Greg Kroah-Hartman 2010-03-02 23:36 ` [PATCH 05/36] serial: synclink_gt: dropped transmit data bugfix Greg Kroah-Hartman ` (31 subsequent siblings) 35 siblings, 0 replies; 78+ messages in thread From: Greg Kroah-Hartman @ 2010-03-02 23:36 UTC (permalink / raw) To: linux-kernel; +Cc: Albin Tonnerre, Alan Cox, Andrew Morton, Greg Kroah-Hartman From: Albin Tonnerre <albin.tonnerre@free-electrons.com> Permits using KGDB over the console with the atmel_serial driver. [akpm@linux-foundation.org: s/barrier/cpu_relax/] Signed-off-by: Albin Tonnerre <albin.tonnerre@free-electrons.com> Acked-by: Andrew Victor <linux@maxim.org.za> Acked-by: Haavard Skinnemoen <haavard.skinnemoen@atmel.com> Cc: Alan Cox <alan@lxorguk.ukuu.org.uk> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> --- drivers/serial/atmel_serial.c | 22 ++++++++++++++++++++++ 1 files changed, 22 insertions(+), 0 deletions(-) diff --git a/drivers/serial/atmel_serial.c b/drivers/serial/atmel_serial.c index 9d948bc..2c9bf9b 100644 --- a/drivers/serial/atmel_serial.c +++ b/drivers/serial/atmel_serial.c @@ -1213,6 +1213,24 @@ static int atmel_verify_port(struct uart_port *port, struct serial_struct *ser) return ret; } +#ifdef CONFIG_CONSOLE_POLL +static int atmel_poll_get_char(struct uart_port *port) +{ + while (!(UART_GET_CSR(port) & ATMEL_US_RXRDY)) + cpu_relax(); + + return UART_GET_CHAR(port); +} + +static void atmel_poll_put_char(struct uart_port *port, unsigned char ch) +{ + while (!(UART_GET_CSR(port) & ATMEL_US_TXRDY)) + cpu_relax(); + + UART_PUT_CHAR(port, ch); +} +#endif + static struct uart_ops atmel_pops = { .tx_empty = atmel_tx_empty, .set_mctrl = atmel_set_mctrl, @@ -1232,6 +1250,10 @@ static struct uart_ops atmel_pops = { .config_port = atmel_config_port, .verify_port = atmel_verify_port, .pm = atmel_serial_pm, +#ifdef CONFIG_CONSOLE_POLL + .poll_get_char = atmel_poll_get_char, + .poll_put_char = atmel_poll_put_char, +#endif }; /* -- 1.7.0.1 ^ permalink raw reply related [flat|nested] 78+ messages in thread
* [PATCH 05/36] serial: synclink_gt: dropped transmit data bugfix 2010-03-02 23:09 [GIT PATCH] TTY patches for 2.6.33-git Greg KH ` (3 preceding siblings ...) 2010-03-02 23:36 ` [PATCH 04/36] serial: atmel_serial: add poll_get_char and poll_put_char uart_ops Greg Kroah-Hartman @ 2010-03-02 23:36 ` Greg Kroah-Hartman 2010-03-02 23:36 ` [PATCH 06/36] serial: 8250_pci: add support for MCS9865 / SYBA 6x Serial Port Card Greg Kroah-Hartman ` (30 subsequent siblings) 35 siblings, 0 replies; 78+ messages in thread From: Greg Kroah-Hartman @ 2010-03-02 23:36 UTC (permalink / raw) To: linux-kernel Cc: Paul Fulghum, Alan Cox, Greg KH, Andrew Morton, Greg Kroah-Hartman From: Paul Fulghum <paulkf@microgate.com> Fix transmit bug that could drop send data if write() called close to serial transmitter going idle after sending previous data. Bug is caused by incorrect use of device information member tx_count. Driver originally processed one data block (write call) at a time, waiting for transmit idle before sending more. tx_count recorded how much data was loaded in DMA buffers on write(), and was cleared on send completion. tx_count use was overloaded to record accumulated data from put_char() callback when transmitter was idle. A bug was introduced when transmit code was reworked to allow multiple blocks of data in the tx DMA buffers which keeps transmitter from going idle between blocks. tx_count was set to size of last block loaded, cleared when tx went idle, and monitored to know when to restart transmitter without proper synchronization. tx_count could be cleared when unsent data remained in DMA buffers and transmitter required restarting, effectively dropping unsent data. Solution: 1. tx_count now used only to track accumulated data from put_char 2. DMA buffer state tracked by direct inspection of descriptors with spinlock synchronization 3. consolidate these tasks in tx_load() : a. check for available buffer space b. load buffers c. restart DMA and or serial transmitter as needed These steps were previously duplicated in multiple places, sometimes incompletely. 4. fix use of tx_count as active transmit indicator, instead using tx_active which is meant for that purpose Signed-off-by: Paul Fulghum <paulkf@microgate.com> Cc: Alan Cox <alan@lxorguk.ukuu.org.uk> Cc: Greg KH <greg@kroah.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> --- drivers/char/synclink_gt.c | 186 +++++++++++++++++++++++++------------------- 1 files changed, 105 insertions(+), 81 deletions(-) diff --git a/drivers/char/synclink_gt.c b/drivers/char/synclink_gt.c index 8678f0c..4561ce2 100644 --- a/drivers/char/synclink_gt.c +++ b/drivers/char/synclink_gt.c @@ -468,7 +468,7 @@ static unsigned int free_tbuf_count(struct slgt_info *info); static unsigned int tbuf_bytes(struct slgt_info *info); static void reset_tbufs(struct slgt_info *info); static void tdma_reset(struct slgt_info *info); -static void tx_load(struct slgt_info *info, const char *buf, unsigned int count); +static bool tx_load(struct slgt_info *info, const char *buf, unsigned int count); static void get_signals(struct slgt_info *info); static void set_signals(struct slgt_info *info); @@ -813,59 +813,32 @@ static int write(struct tty_struct *tty, int ret = 0; struct slgt_info *info = tty->driver_data; unsigned long flags; - unsigned int bufs_needed; if (sanity_check(info, tty->name, "write")) - goto cleanup; + return -EIO; + DBGINFO(("%s write count=%d\n", info->device_name, count)); - if (!info->tx_buf) - goto cleanup; + if (!info->tx_buf || (count > info->max_frame_size)) + return -EIO; - if (count > info->max_frame_size) { - ret = -EIO; - goto cleanup; - } + if (!count || tty->stopped || tty->hw_stopped) + return 0; - if (!count) - goto cleanup; + spin_lock_irqsave(&info->lock, flags); - if (!info->tx_active && info->tx_count) { + if (info->tx_count) { /* send accumulated data from send_char() */ - tx_load(info, info->tx_buf, info->tx_count); - goto start; + if (!tx_load(info, info->tx_buf, info->tx_count)) + goto cleanup; + info->tx_count = 0; } - bufs_needed = (count/DMABUFSIZE); - if (count % DMABUFSIZE) - ++bufs_needed; - if (bufs_needed > free_tbuf_count(info)) - goto cleanup; - ret = info->tx_count = count; - tx_load(info, buf, count); - goto start; - -start: - if (info->tx_count && !tty->stopped && !tty->hw_stopped) { - spin_lock_irqsave(&info->lock,flags); - if (!info->tx_active) - tx_start(info); - else if (!(rd_reg32(info, TDCSR) & BIT0)) { - /* transmit still active but transmit DMA stopped */ - unsigned int i = info->tbuf_current; - if (!i) - i = info->tbuf_count; - i--; - /* if DMA buf unsent must try later after tx idle */ - if (desc_count(info->tbufs[i])) - ret = 0; - } - if (ret > 0) - update_tx_timer(info); - spin_unlock_irqrestore(&info->lock,flags); - } + if (tx_load(info, buf, count)) + ret = count; cleanup: + spin_unlock_irqrestore(&info->lock, flags); DBGINFO(("%s write rc=%d\n", info->device_name, ret)); return ret; } @@ -882,7 +855,7 @@ static int put_char(struct tty_struct *tty, unsigned char ch) if (!info->tx_buf) return 0; spin_lock_irqsave(&info->lock,flags); - if (!info->tx_active && (info->tx_count < info->max_frame_size)) { + if (info->tx_count < info->max_frame_size) { info->tx_buf[info->tx_count++] = ch; ret = 1; } @@ -981,10 +954,8 @@ static void flush_chars(struct tty_struct *tty) DBGINFO(("%s flush_chars start transmit\n", info->device_name)); spin_lock_irqsave(&info->lock,flags); - if (!info->tx_active && info->tx_count) { - tx_load(info, info->tx_buf,info->tx_count); - tx_start(info); - } + if (info->tx_count && tx_load(info, info->tx_buf, info->tx_count)) + info->tx_count = 0; spin_unlock_irqrestore(&info->lock,flags); } @@ -997,10 +968,9 @@ static void flush_buffer(struct tty_struct *tty) return; DBGINFO(("%s flush_buffer\n", info->device_name)); - spin_lock_irqsave(&info->lock,flags); - if (!info->tx_active) - info->tx_count = 0; - spin_unlock_irqrestore(&info->lock,flags); + spin_lock_irqsave(&info->lock, flags); + info->tx_count = 0; + spin_unlock_irqrestore(&info->lock, flags); tty_wakeup(tty); } @@ -1033,12 +1003,10 @@ static void tx_release(struct tty_struct *tty) if (sanity_check(info, tty->name, "tx_release")) return; DBGINFO(("%s tx_release\n", info->device_name)); - spin_lock_irqsave(&info->lock,flags); - if (!info->tx_active && info->tx_count) { - tx_load(info, info->tx_buf, info->tx_count); - tx_start(info); - } - spin_unlock_irqrestore(&info->lock,flags); + spin_lock_irqsave(&info->lock, flags); + if (info->tx_count && tx_load(info, info->tx_buf, info->tx_count)) + info->tx_count = 0; + spin_unlock_irqrestore(&info->lock, flags); } /* @@ -1506,27 +1474,25 @@ static netdev_tx_t hdlcdev_xmit(struct sk_buff *skb, DBGINFO(("%s hdlc_xmit\n", dev->name)); + if (!skb->len) + return NETDEV_TX_OK; + /* stop sending until this frame completes */ netif_stop_queue(dev); - /* copy data to device buffers */ - info->tx_count = skb->len; - tx_load(info, skb->data, skb->len); - /* update network statistics */ dev->stats.tx_packets++; dev->stats.tx_bytes += skb->len; - /* done with socket buffer, so free it */ - dev_kfree_skb(skb); - /* save start time for transmit timeout detection */ dev->trans_start = jiffies; - spin_lock_irqsave(&info->lock,flags); - tx_start(info); - update_tx_timer(info); - spin_unlock_irqrestore(&info->lock,flags); + spin_lock_irqsave(&info->lock, flags); + tx_load(info, skb->data, skb->len); + spin_unlock_irqrestore(&info->lock, flags); + + /* done with socket buffer, so free it */ + dev_kfree_skb(skb); return NETDEV_TX_OK; } @@ -2180,7 +2146,7 @@ static void isr_serial(struct slgt_info *info) if (info->params.mode == MGSL_MODE_ASYNC) { if (status & IRQ_TXIDLE) { - if (info->tx_count) + if (info->tx_active) isr_txeom(info, status); } if (info->rx_pio && (status & IRQ_RXDATA)) @@ -2276,13 +2242,42 @@ static void isr_tdma(struct slgt_info *info) } } +/* + * return true if there are unsent tx DMA buffers, otherwise false + * + * if there are unsent buffers then info->tbuf_start + * is set to index of first unsent buffer + */ +static bool unsent_tbufs(struct slgt_info *info) +{ + unsigned int i = info->tbuf_current; + bool rc = false; + + /* + * search backwards from last loaded buffer (precedes tbuf_current) + * for first unsent buffer (desc_count > 0) + */ + + do { + if (i) + i--; + else + i = info->tbuf_count - 1; + if (!desc_count(info->tbufs[i])) + break; + info->tbuf_start = i; + rc = true; + } while (i != info->tbuf_current); + + return rc; +} + static void isr_txeom(struct slgt_info *info, unsigned short status) { DBGISR(("%s txeom status=%04x\n", info->device_name, status)); slgt_irq_off(info, IRQ_TXDATA + IRQ_TXIDLE + IRQ_TXUNDER); tdma_reset(info); - reset_tbufs(info); if (status & IRQ_TXUNDER) { unsigned short val = rd_reg16(info, TCR); wr_reg16(info, TCR, (unsigned short)(val | BIT2)); /* set reset bit */ @@ -2297,8 +2292,12 @@ static void isr_txeom(struct slgt_info *info, unsigned short status) info->icount.txok++; } + if (unsent_tbufs(info)) { + tx_start(info); + update_tx_timer(info); + return; + } info->tx_active = false; - info->tx_count = 0; del_timer(&info->tx_timer); @@ -3949,7 +3948,7 @@ static void tx_start(struct slgt_info *info) info->tx_enabled = true; } - if (info->tx_count) { + if (desc_count(info->tbufs[info->tbuf_start])) { info->drop_rts_on_tx_done = false; if (info->params.mode != MGSL_MODE_ASYNC) { @@ -4772,25 +4771,36 @@ static unsigned int tbuf_bytes(struct slgt_info *info) } /* - * load transmit DMA buffer(s) with data + * load data into transmit DMA buffer ring and start transmitter if needed + * return true if data accepted, otherwise false (buffers full) */ -static void tx_load(struct slgt_info *info, const char *buf, unsigned int size) +static bool tx_load(struct slgt_info *info, const char *buf, unsigned int size) { unsigned short count; unsigned int i; struct slgt_desc *d; - if (size == 0) - return; + /* check required buffer space */ + if (DIV_ROUND_UP(size, DMABUFSIZE) > free_tbuf_count(info)) + return false; DBGDATA(info, buf, size, "tx"); + /* + * copy data to one or more DMA buffers in circular ring + * tbuf_start = first buffer for this data + * tbuf_current = next free buffer + * + * Copy all data before making data visible to DMA controller by + * setting descriptor count of the first buffer. + * This prevents an active DMA controller from reading the first DMA + * buffers of a frame and stopping before the final buffers are filled. + */ + info->tbuf_start = i = info->tbuf_current; while (size) { d = &info->tbufs[i]; - if (++i == info->tbuf_count) - i = 0; count = (unsigned short)((size > DMABUFSIZE) ? DMABUFSIZE : size); memcpy(d->buf, buf, count); @@ -4808,11 +4818,27 @@ static void tx_load(struct slgt_info *info, const char *buf, unsigned int size) else set_desc_eof(*d, 0); - set_desc_count(*d, count); + /* set descriptor count for all but first buffer */ + if (i != info->tbuf_start) + set_desc_count(*d, count); d->buf_count = count; + + if (++i == info->tbuf_count) + i = 0; } info->tbuf_current = i; + + /* set first buffer count to make new data visible to DMA controller */ + d = &info->tbufs[info->tbuf_start]; + set_desc_count(*d, d->buf_count); + + /* start transmitter if needed and update transmit timeout */ + if (!info->tx_active) + tx_start(info); + update_tx_timer(info); + + return true; } static int register_test(struct slgt_info *info) @@ -4934,9 +4960,7 @@ static int loopback_test(struct slgt_info *info) spin_lock_irqsave(&info->lock,flags); async_mode(info); rx_start(info); - info->tx_count = count; tx_load(info, buf, count); - tx_start(info); spin_unlock_irqrestore(&info->lock, flags); /* wait for receive complete */ -- 1.7.0.1 ^ permalink raw reply related [flat|nested] 78+ messages in thread
* [PATCH 06/36] serial: 8250_pci: add support for MCS9865 / SYBA 6x Serial Port Card 2010-03-02 23:09 [GIT PATCH] TTY patches for 2.6.33-git Greg KH ` (4 preceding siblings ...) 2010-03-02 23:36 ` [PATCH 05/36] serial: synclink_gt: dropped transmit data bugfix Greg Kroah-Hartman @ 2010-03-02 23:36 ` Greg Kroah-Hartman 2010-03-02 23:36 ` [PATCH 07/36] serial: imx: fix NULL dereference Oops when pdata == NULL Greg Kroah-Hartman ` (29 subsequent siblings) 35 siblings, 0 replies; 78+ messages in thread From: Greg Kroah-Hartman @ 2010-03-02 23:36 UTC (permalink / raw) To: linux-kernel Cc: Ira W. Snyder, Darius Augulis, Greg KH, Alan Cox, Andrew Morton, Greg Kroah-Hartman From: Ira W. Snyder <iws@ovro.caltech.edu> This patch is heavily based on an earlier patch found on the linux-serial mailing list [1], written by Darius Augulis. The previous incarnation of this patch only supported a 2x serial port card. I have added support for my SYBA 6x serial port card, and tested on x86. [1]: http://marc.info/?l=linux-serial&m=124975806304760 Signed-off-by: Ira W. Snyder <iws@ovro.caltech.edu> Cc: Darius Augulis <augulis.darius@gmail.com> Cc: Greg KH <greg@kroah.com> Cc: Alan Cox <alan@lxorguk.ukuu.org.uk> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> --- drivers/parport/parport_pc.c | 6 ++++++ drivers/serial/8250_pci.c | 22 +++++++++++++++++++++- include/linux/pci_ids.h | 1 + 3 files changed, 28 insertions(+), 1 deletions(-) diff --git a/drivers/parport/parport_pc.c b/drivers/parport/parport_pc.c index ad113b0..0950fa4 100644 --- a/drivers/parport/parport_pc.c +++ b/drivers/parport/parport_pc.c @@ -2908,6 +2908,7 @@ enum parport_pc_pci_cards { netmos_9805, netmos_9815, netmos_9901, + netmos_9865, quatech_sppxp100, }; @@ -2989,6 +2990,7 @@ static struct parport_pc_pci { /* netmos_9805 */ { 1, { { 0, -1 }, } }, /* netmos_9815 */ { 2, { { 0, -1 }, { 2, -1 }, } }, /* netmos_9901 */ { 1, { { 0, -1 }, } }, + /* netmos_9865 */ { 1, { { 0, -1 }, } }, /* quatech_sppxp100 */ { 1, { { 0, 1 }, } }, }; @@ -3092,6 +3094,10 @@ static const struct pci_device_id parport_pc_pci_tbl[] = { PCI_ANY_ID, PCI_ANY_ID, 0, 0, netmos_9815 }, { PCI_VENDOR_ID_NETMOS, PCI_DEVICE_ID_NETMOS_9901, 0xA000, 0x2000, 0, 0, netmos_9901 }, + { PCI_VENDOR_ID_NETMOS, PCI_DEVICE_ID_NETMOS_9865, + 0xA000, 0x1000, 0, 0, netmos_9865 }, + { PCI_VENDOR_ID_NETMOS, PCI_DEVICE_ID_NETMOS_9865, + 0xA000, 0x2000, 0, 0, netmos_9865 }, /* Quatech SPPXP-100 Parallel port PCI ExpressCard */ { PCI_VENDOR_ID_QUATECH, PCI_DEVICE_ID_QUATECH_SPPXP_100, PCI_ANY_ID, PCI_ANY_ID, 0, 0, quatech_sppxp100 }, diff --git a/drivers/serial/8250_pci.c b/drivers/serial/8250_pci.c index b28af13..8b18c3c 100644 --- a/drivers/serial/8250_pci.c +++ b/drivers/serial/8250_pci.c @@ -760,7 +760,8 @@ static int pci_netmos_init(struct pci_dev *dev) /* subdevice 0x00PS means <P> parallel, <S> serial */ unsigned int num_serial = dev->subsystem_device & 0xf; - if (dev->device == PCI_DEVICE_ID_NETMOS_9901) + if ((dev->device == PCI_DEVICE_ID_NETMOS_9901) || + (dev->device == PCI_DEVICE_ID_NETMOS_9865)) return 0; if (dev->subsystem_vendor == PCI_VENDOR_ID_IBM && dev->subsystem_device == 0x0299) @@ -1479,6 +1480,7 @@ enum pci_board_num_t { pbn_b0_bt_1_115200, pbn_b0_bt_2_115200, + pbn_b0_bt_4_115200, pbn_b0_bt_8_115200, pbn_b0_bt_1_460800, @@ -1703,6 +1705,12 @@ static struct pciserial_board pci_boards[] __devinitdata = { .base_baud = 115200, .uart_offset = 8, }, + [pbn_b0_bt_4_115200] = { + .flags = FL_BASE0|FL_BASE_BARS, + .num_ports = 4, + .base_baud = 115200, + .uart_offset = 8, + }, [pbn_b0_bt_8_115200] = { .flags = FL_BASE0|FL_BASE_BARS, .num_ports = 8, @@ -3649,6 +3657,18 @@ static struct pci_device_id serial_pci_tbl[] = { 0, 0, pbn_b0_1_115200 }, /* + * Best Connectivity PCI Multi I/O cards + */ + + { PCI_VENDOR_ID_NETMOS, PCI_DEVICE_ID_NETMOS_9865, + 0xA000, 0x1000, + 0, 0, pbn_b0_1_115200 }, + + { PCI_VENDOR_ID_NETMOS, PCI_DEVICE_ID_NETMOS_9865, + 0xA000, 0x3004, + 0, 0, pbn_b0_bt_4_115200 }, + + /* * These entries match devices with class COMMUNICATION_SERIAL, * COMMUNICATION_MODEM or COMMUNICATION_MULTISERIAL */ diff --git a/include/linux/pci_ids.h b/include/linux/pci_ids.h index 0be8243..3ec4003 100644 --- a/include/linux/pci_ids.h +++ b/include/linux/pci_ids.h @@ -2697,6 +2697,7 @@ #define PCI_DEVICE_ID_NETMOS_9835 0x9835 #define PCI_DEVICE_ID_NETMOS_9845 0x9845 #define PCI_DEVICE_ID_NETMOS_9855 0x9855 +#define PCI_DEVICE_ID_NETMOS_9865 0x9865 #define PCI_DEVICE_ID_NETMOS_9901 0x9901 #define PCI_VENDOR_ID_3COM_2 0xa727 -- 1.7.0.1 ^ permalink raw reply related [flat|nested] 78+ messages in thread
* [PATCH 07/36] serial: imx: fix NULL dereference Oops when pdata == NULL 2010-03-02 23:09 [GIT PATCH] TTY patches for 2.6.33-git Greg KH ` (5 preceding siblings ...) 2010-03-02 23:36 ` [PATCH 06/36] serial: 8250_pci: add support for MCS9865 / SYBA 6x Serial Port Card Greg Kroah-Hartman @ 2010-03-02 23:36 ` Greg Kroah-Hartman 2010-03-02 23:36 ` [PATCH 08/36] serial: add support for Korenix JetCard Greg Kroah-Hartman ` (28 subsequent siblings) 35 siblings, 0 replies; 78+ messages in thread From: Greg Kroah-Hartman @ 2010-03-02 23:36 UTC (permalink / raw) To: linux-kernel Cc: Baruch Siach, Alan Cox, Sascha Hauer, Oskar Schirmer, Fabian Godehardt, Daniel Glöckner, stable, Andrew Morton, Greg Kroah-Hartman From: Baruch Siach <baruch@tkos.co.il> The platform code doesn't have to provide platform data to get sensible default behaviour from the imx serial driver. This patch does not handle NULL dereference in the IrDA case, which still requires a valid platform data pointer (in imx_startup()/imx_shutdown()), since I don't know whether there is a sensible default behaviour, or should the operation just fail cleanly. Signed-off-by: Baruch Siach <baruch@tkos.co.il> Cc: Baruch Siach <baruch@tkos.co.il> Cc: Alan Cox <alan@linux.intel.com> Cc: Sascha Hauer <s.hauer@pengutronix.de> Cc: Oskar Schirmer <os@emlix.com> Cc: Fabian Godehardt <fg@emlix.com> Cc: Daniel Glöckner <dg@emlix.com> Cc: stable <stable@kernel.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> --- drivers/serial/imx.c | 6 +++--- 1 files changed, 3 insertions(+), 3 deletions(-) diff --git a/drivers/serial/imx.c b/drivers/serial/imx.c index 60d665a..d00fcf8 100644 --- a/drivers/serial/imx.c +++ b/drivers/serial/imx.c @@ -1279,7 +1279,7 @@ static int serial_imx_probe(struct platform_device *pdev) sport->use_irda = 1; #endif - if (pdata->init) { + if (pdata && pdata->init) { ret = pdata->init(pdev); if (ret) goto clkput; @@ -1292,7 +1292,7 @@ static int serial_imx_probe(struct platform_device *pdev) return 0; deinit: - if (pdata->exit) + if (pdata && pdata->exit) pdata->exit(pdev); clkput: clk_put(sport->clk); @@ -1321,7 +1321,7 @@ static int serial_imx_remove(struct platform_device *pdev) clk_disable(sport->clk); - if (pdata->exit) + if (pdata && pdata->exit) pdata->exit(pdev); iounmap(sport->port.membase); -- 1.7.0.1 ^ permalink raw reply related [flat|nested] 78+ messages in thread
* [PATCH 08/36] serial: add support for Korenix JetCard 2010-03-02 23:09 [GIT PATCH] TTY patches for 2.6.33-git Greg KH ` (6 preceding siblings ...) 2010-03-02 23:36 ` [PATCH 07/36] serial: imx: fix NULL dereference Oops when pdata == NULL Greg Kroah-Hartman @ 2010-03-02 23:36 ` Greg Kroah-Hartman 2010-03-02 23:36 ` [PATCH 09/36] serial: fix test of unsigned Greg Kroah-Hartman ` (27 subsequent siblings) 35 siblings, 0 replies; 78+ messages in thread From: Greg Kroah-Hartman @ 2010-03-02 23:36 UTC (permalink / raw) To: linux-kernel; +Cc: Kiros Yeh, Andrew Morton, Greg Kroah-Hartman From: Kiros Yeh <kiros@korenix.com> Add different model (with a different PCI ID) to support Korenix JetCard. Signed-off-by: Kiros Yeh <kiros@korenix.com> Acked-by: Alan Cox <alan@linux.intel.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> --- drivers/serial/8250_pci.c | 9 +++++++++ include/linux/pci_ids.h | 2 ++ 2 files changed, 11 insertions(+), 0 deletions(-) diff --git a/drivers/serial/8250_pci.c b/drivers/serial/8250_pci.c index 8b18c3c..01c012d 100644 --- a/drivers/serial/8250_pci.c +++ b/drivers/serial/8250_pci.c @@ -3199,6 +3199,15 @@ static struct pci_device_id serial_pci_tbl[] = { 0x1208, 0x0004, 0, 0, pbn_b0_4_921600 }, + { PCI_VENDOR_ID_KORENIX, PCI_DEVICE_ID_KORENIX_JETCARDF2, + 0x1204, 0x0004, 0, 0, + pbn_b0_4_921600 }, + { PCI_VENDOR_ID_KORENIX, PCI_DEVICE_ID_KORENIX_JETCARDF2, + 0x1208, 0x0004, 0, 0, + pbn_b0_4_921600 }, + { PCI_VENDOR_ID_KORENIX, PCI_DEVICE_ID_KORENIX_JETCARDF3, + 0x1208, 0x0004, 0, 0, + pbn_b0_4_921600 }, /* * Dell Remote Access Card 4 - Tim_T_Murphy@Dell.com */ diff --git a/include/linux/pci_ids.h b/include/linux/pci_ids.h index 3ec4003..e91b1fc 100644 --- a/include/linux/pci_ids.h +++ b/include/linux/pci_ids.h @@ -2333,6 +2333,8 @@ #define PCI_VENDOR_ID_KORENIX 0x1982 #define PCI_DEVICE_ID_KORENIX_JETCARDF0 0x1600 #define PCI_DEVICE_ID_KORENIX_JETCARDF1 0x16ff +#define PCI_DEVICE_ID_KORENIX_JETCARDF2 0x1700 +#define PCI_DEVICE_ID_KORENIX_JETCARDF3 0x17ff #define PCI_VENDOR_ID_QMI 0x1a32 -- 1.7.0.1 ^ permalink raw reply related [flat|nested] 78+ messages in thread
* [PATCH 09/36] serial: fix test of unsigned 2010-03-02 23:09 [GIT PATCH] TTY patches for 2.6.33-git Greg KH ` (7 preceding siblings ...) 2010-03-02 23:36 ` [PATCH 08/36] serial: add support for Korenix JetCard Greg Kroah-Hartman @ 2010-03-02 23:36 ` Greg Kroah-Hartman 2010-03-02 23:36 ` [PATCH 10/36] serial: Char: cyclades, fix compiler warning Greg Kroah-Hartman ` (26 subsequent siblings) 35 siblings, 0 replies; 78+ messages in thread From: Greg Kroah-Hartman @ 2010-03-02 23:36 UTC (permalink / raw) To: linux-kernel; +Cc: Roel Kluin, Alan Cox, Andrew Morton, Greg Kroah-Hartman From: Roel Kluin <roel.kluin@gmail.com> The variables were unsigned so the tests did not work. Signed-off-by: Roel Kluin <roel.kluin@gmail.com> Cc: Alan Cox <alan@lxorguk.ukuu.org.uk> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> --- drivers/serial/msm_serial.c | 6 ++++-- drivers/serial/timbuart.c | 7 ++++--- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/drivers/serial/msm_serial.c b/drivers/serial/msm_serial.c index b05c5aa..ecdc0fa 100644 --- a/drivers/serial/msm_serial.c +++ b/drivers/serial/msm_serial.c @@ -691,6 +691,7 @@ static int __init msm_serial_probe(struct platform_device *pdev) struct msm_port *msm_port; struct resource *resource; struct uart_port *port; + int irq; if (unlikely(pdev->id < 0 || pdev->id >= UART_NR)) return -ENXIO; @@ -711,9 +712,10 @@ static int __init msm_serial_probe(struct platform_device *pdev) return -ENXIO; port->mapbase = resource->start; - port->irq = platform_get_irq(pdev, 0); - if (unlikely(port->irq < 0)) + irq = platform_get_irq(pdev, 0); + if (unlikely(irq < 0)) return -ENXIO; + port->irq = irq; platform_set_drvdata(pdev, port); diff --git a/drivers/serial/timbuart.c b/drivers/serial/timbuart.c index 34b31da..7bf1026 100644 --- a/drivers/serial/timbuart.c +++ b/drivers/serial/timbuart.c @@ -421,7 +421,7 @@ static struct uart_driver timbuart_driver = { static int timbuart_probe(struct platform_device *dev) { - int err; + int err, irq; struct timbuart_port *uart; struct resource *iomem; @@ -453,11 +453,12 @@ static int timbuart_probe(struct platform_device *dev) uart->port.mapbase = iomem->start; uart->port.membase = NULL; - uart->port.irq = platform_get_irq(dev, 0); - if (uart->port.irq < 0) { + irq = platform_get_irq(dev, 0); + if (irq < 0) { err = -EINVAL; goto err_register; } + uart->port.irq = irq; tasklet_init(&uart->tasklet, timbuart_tasklet, (unsigned long)uart); -- 1.7.0.1 ^ permalink raw reply related [flat|nested] 78+ messages in thread
* [PATCH 10/36] serial: Char: cyclades, fix compiler warning 2010-03-02 23:09 [GIT PATCH] TTY patches for 2.6.33-git Greg KH ` (8 preceding siblings ...) 2010-03-02 23:36 ` [PATCH 09/36] serial: fix test of unsigned Greg Kroah-Hartman @ 2010-03-02 23:36 ` Greg Kroah-Hartman 2010-03-02 23:36 ` [PATCH 11/36] serial: cyclades: allow overriding ISA defaults also when the driver is built-in Greg Kroah-Hartman ` (25 subsequent siblings) 35 siblings, 0 replies; 78+ messages in thread From: Greg Kroah-Hartman @ 2010-03-02 23:36 UTC (permalink / raw) To: linux-kernel; +Cc: Jiri Slaby, Alan Cox, Andrew Morton, Greg Kroah-Hartman From: Jiri Slaby <jslaby@novell.com> With gcc 4.0.2: drivers/char/cyclades.c: In function 'cyy_interrupt': drivers/char/cyclades.c:581: warning: 'info' may be used uninitialized in this function introduced by : commit 3aeea5b92210083c7cffd4f08a0bb141d3f2d574 : Author: Jiri Slaby <jirislaby@gmail.com> : AuthorDate: Sat Sep 19 13:13:16 2009 -0700 : Commit: Live-CD User <linux@linux.site> : CommitDate: Sat Sep 19 13:13:16 2009 -0700 : : cyclades: introduce cyy_readb/writeb In fact the true branch which uses uninitialized 'info' can never happen because chip is always less than ->nchips and channel is always less than 4 which we alloc. So behave similar to rx handling and remove the test completely. I wonder why gcc 4.4.1 doesn't spit a word. Reported-by: Andrew Morton <akpm@linux-foundation.org> Cc: Alan Cox <alan@linux.intel.com> Signed-off-by: Jiri Slaby <jslaby@novell.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> --- drivers/char/cyclades.c | 6 ------ 1 files changed, 0 insertions(+), 6 deletions(-) diff --git a/drivers/char/cyclades.c b/drivers/char/cyclades.c index 4254457..274e965 100644 --- a/drivers/char/cyclades.c +++ b/drivers/char/cyclades.c @@ -598,12 +598,6 @@ static void cyy_chip_tx(struct cyclades_card *cinfo, unsigned int chip, save_car = readb(base_addr + (CyCAR << index)); cy_writeb(base_addr + (CyCAR << index), save_xir); - /* validate the port# (as configured and open) */ - if (channel + chip * 4 >= cinfo->nports) { - cy_writeb(base_addr + (CySRER << index), - readb(base_addr + (CySRER << index)) & ~CyTxRdy); - goto end; - } info = &cinfo->ports[channel + chip * 4]; tty = tty_port_tty_get(&info->port); if (tty == NULL) { -- 1.7.0.1 ^ permalink raw reply related [flat|nested] 78+ messages in thread
* [PATCH 11/36] serial: cyclades: allow overriding ISA defaults also when the driver is built-in 2010-03-02 23:09 [GIT PATCH] TTY patches for 2.6.33-git Greg KH ` (9 preceding siblings ...) 2010-03-02 23:36 ` [PATCH 10/36] serial: Char: cyclades, fix compiler warning Greg Kroah-Hartman @ 2010-03-02 23:36 ` Greg Kroah-Hartman 2010-03-02 23:36 ` [PATCH 12/36] tty: char: mxser, remove unnecessary tty test Greg Kroah-Hartman ` (24 subsequent siblings) 35 siblings, 0 replies; 78+ messages in thread From: Greg Kroah-Hartman @ 2010-03-02 23:36 UTC (permalink / raw) To: linux-kernel Cc: Bartlomiej Zolnierkiewicz, Jiri Slaby, Andrew Morton, Greg Kroah-Hartman From: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com> Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com> Signed-off-by: Jiri Slaby <jirislaby@gmail.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> --- drivers/char/cyclades.c | 9 +-------- 1 files changed, 1 insertions(+), 8 deletions(-) diff --git a/drivers/char/cyclades.c b/drivers/char/cyclades.c index 274e965..e026f24 100644 --- a/drivers/char/cyclades.c +++ b/drivers/char/cyclades.c @@ -158,13 +158,11 @@ static unsigned int cy_isa_addresses[] = { #define NR_ISA_ADDRS ARRAY_SIZE(cy_isa_addresses) -#ifdef MODULE static long maddr[NR_CARDS]; static int irq[NR_CARDS]; module_param_array(maddr, long, NULL, 0); module_param_array(irq, int, NULL, 0); -#endif #endif /* CONFIG_ISA */ @@ -3310,13 +3308,10 @@ static int __init cy_detect_isa(void) unsigned short cy_isa_irq, nboard; void __iomem *cy_isa_address; unsigned short i, j, cy_isa_nchan; -#ifdef MODULE int isparam = 0; -#endif nboard = 0; -#ifdef MODULE /* Check for module parameters */ for (i = 0; i < NR_CARDS; i++) { if (maddr[i] || i) { @@ -3326,7 +3321,6 @@ static int __init cy_detect_isa(void) if (!maddr[i]) break; } -#endif /* scan the address table probing for Cyclom-Y/ISA boards */ for (i = 0; i < NR_ISA_ADDRS; i++) { @@ -3347,11 +3341,10 @@ static int __init cy_detect_isa(void) iounmap(cy_isa_address); continue; } -#ifdef MODULE + if (isparam && i < NR_CARDS && irq[i]) cy_isa_irq = irq[i]; else -#endif /* find out the board's irq by probing */ cy_isa_irq = detect_isa_irq(cy_isa_address); if (cy_isa_irq == 0) { -- 1.7.0.1 ^ permalink raw reply related [flat|nested] 78+ messages in thread
* [PATCH 12/36] tty: char: mxser, remove unnecessary tty test 2010-03-02 23:09 [GIT PATCH] TTY patches for 2.6.33-git Greg KH ` (10 preceding siblings ...) 2010-03-02 23:36 ` [PATCH 11/36] serial: cyclades: allow overriding ISA defaults also when the driver is built-in Greg Kroah-Hartman @ 2010-03-02 23:36 ` Greg Kroah-Hartman 2010-03-02 23:36 ` [PATCH 13/36] serial: isicom.c: use pr_fmt and pr_<level> Greg Kroah-Hartman ` (23 subsequent siblings) 35 siblings, 0 replies; 78+ messages in thread From: Greg Kroah-Hartman @ 2010-03-02 23:36 UTC (permalink / raw) To: linux-kernel; +Cc: Jiri Slaby, Alan Cox, Andrew Morton, Greg Kroah-Hartman From: Jiri Slaby <jirislaby@gmail.com> Stanse found unnecessary test in mxser_startup. tty is dereferenced earlier, the test is superfluous. Remove it. Signed-off-by: Jiri Slaby <jirislaby@gmail.com> Cc: Alan Cox <alan@lxorguk.ukuu.org.uk> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> --- drivers/char/mxser.c | 3 +-- 1 files changed, 1 insertions(+), 2 deletions(-) diff --git a/drivers/char/mxser.c b/drivers/char/mxser.c index 3d92306..e0c5d2a 100644 --- a/drivers/char/mxser.c +++ b/drivers/char/mxser.c @@ -895,8 +895,7 @@ static int mxser_activate(struct tty_port *port, struct tty_struct *tty) if (inb(info->ioaddr + UART_LSR) == 0xff) { spin_unlock_irqrestore(&info->slock, flags); if (capable(CAP_SYS_ADMIN)) { - if (tty) - set_bit(TTY_IO_ERROR, &tty->flags); + set_bit(TTY_IO_ERROR, &tty->flags); return 0; } else return -ENODEV; -- 1.7.0.1 ^ permalink raw reply related [flat|nested] 78+ messages in thread
* [PATCH 13/36] serial: isicom.c: use pr_fmt and pr_<level> 2010-03-02 23:09 [GIT PATCH] TTY patches for 2.6.33-git Greg KH ` (11 preceding siblings ...) 2010-03-02 23:36 ` [PATCH 12/36] tty: char: mxser, remove unnecessary tty test Greg Kroah-Hartman @ 2010-03-02 23:36 ` Greg Kroah-Hartman 2010-03-02 23:36 ` [PATCH 14/36] hvc_console: fix test on unsigned in hvc_console_print() Greg Kroah-Hartman ` (22 subsequent siblings) 35 siblings, 0 replies; 78+ messages in thread From: Greg Kroah-Hartman @ 2010-03-02 23:36 UTC (permalink / raw) To: linux-kernel; +Cc: Joe Perches, Andrew Morton, Greg Kroah-Hartman From: Joe Perches <joe@perches.com> Add #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt Convert printks to pr_<level> Convert some embedded function names to %s...__func__ Remove a period after exclamation points. Remove #define pr_dbg which could be used by future kernel.h includes Signed-off-by: Joe Perches <joe@perches.com> Acked-by: Jiri Slaby <jirislaby@gmail.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> --- drivers/char/isicom.c | 49 ++++++++++++++++++++++++++----------------------- 1 files changed, 26 insertions(+), 23 deletions(-) diff --git a/drivers/char/isicom.c b/drivers/char/isicom.c index 300d5bd..77d5a29 100644 --- a/drivers/char/isicom.c +++ b/drivers/char/isicom.c @@ -113,6 +113,8 @@ * 64-bit verification */ +#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt + #include <linux/module.h> #include <linux/firmware.h> #include <linux/kernel.h> @@ -140,7 +142,6 @@ #define InterruptTheCard(base) outw(0, (base) + 0xc) #define ClearInterrupt(base) inw((base) + 0x0a) -#define pr_dbg(str...) pr_debug("ISICOM: " str) #ifdef DEBUG #define isicom_paranoia_check(a, b, c) __isicom_paranoia_check((a), (b), (c)) #else @@ -249,8 +250,7 @@ static int lock_card(struct isi_board *card) spin_unlock_irqrestore(&card->card_lock, card->flags); msleep(10); } - printk(KERN_WARNING "ISICOM: Failed to lock Card (0x%lx)\n", - card->base); + pr_warning("Failed to lock Card (0x%lx)\n", card->base); return 0; /* Failed to acquire the card! */ } @@ -379,13 +379,13 @@ static inline int __isicom_paranoia_check(struct isi_port const *port, char *name, const char *routine) { if (!port) { - printk(KERN_WARNING "ISICOM: Warning: bad isicom magic for " - "dev %s in %s.\n", name, routine); + pr_warning("Warning: bad isicom magic for dev %s in %s.\n", + name, routine); return 1; } if (port->magic != ISICOM_MAGIC) { - printk(KERN_WARNING "ISICOM: Warning: NULL isicom port for " - "dev %s in %s.\n", name, routine); + pr_warning("Warning: NULL isicom port for dev %s in %s.\n", + name, routine); return 1; } @@ -450,8 +450,8 @@ static void isicom_tx(unsigned long _data) if (!(inw(base + 0x02) & (1 << port->channel))) continue; - pr_dbg("txing %d bytes, port%d.\n", txcount, - port->channel + 1); + pr_debug("txing %d bytes, port%d.\n", + txcount, port->channel + 1); outw((port->channel << isi_card[card].shift_count) | txcount, base); residue = NO; @@ -547,8 +547,8 @@ static irqreturn_t isicom_interrupt(int irq, void *dev_id) byte_count = header & 0xff; if (channel + 1 > card->port_count) { - printk(KERN_WARNING "ISICOM: isicom_interrupt(0x%lx): " - "%d(channel) > port_count.\n", base, channel+1); + pr_warning("%s(0x%lx): %d(channel) > port_count.\n", + __func__, base, channel+1); outw(0x0000, base+0x04); /* enable interrupts */ spin_unlock(&card->card_lock); return IRQ_HANDLED; @@ -582,14 +582,15 @@ static irqreturn_t isicom_interrupt(int irq, void *dev_id) if (port->status & ISI_DCD) { if (!(header & ISI_DCD)) { /* Carrier has been lost */ - pr_dbg("interrupt: DCD->low.\n" - ); + pr_debug("%s: DCD->low.\n", + __func__); port->status &= ~ISI_DCD; tty_hangup(tty); } } else if (header & ISI_DCD) { /* Carrier has been detected */ - pr_dbg("interrupt: DCD->high.\n"); + pr_debug("%s: DCD->high.\n", + __func__); port->status |= ISI_DCD; wake_up_interruptible(&port->port.open_wait); } @@ -641,17 +642,19 @@ static irqreturn_t isicom_interrupt(int irq, void *dev_id) break; case 2: /* Statistics */ - pr_dbg("isicom_interrupt: stats!!!.\n"); + pr_debug("%s: stats!!!\n", __func__); break; default: - pr_dbg("Intr: Unknown code in status packet.\n"); + pr_debug("%s: Unknown code in status packet.\n", + __func__); break; } } else { /* Data Packet */ count = tty_prepare_flip_string(tty, &rp, byte_count & ~1); - pr_dbg("Intr: Can rx %d of %d bytes.\n", count, byte_count); + pr_debug("%s: Can rx %d of %d bytes.\n", + __func__, count, byte_count); word_count = count >> 1; insw(base, rp, word_count); byte_count -= (word_count << 1); @@ -661,8 +664,8 @@ static irqreturn_t isicom_interrupt(int irq, void *dev_id) byte_count -= 2; } if (byte_count > 0) { - pr_dbg("Intr(0x%lx:%d): Flip buffer overflow! dropping " - "bytes...\n", base, channel + 1); + pr_debug("%s(0x%lx:%d): Flip buffer overflow! dropping bytes...\n", + __func__, base, channel + 1); /* drain out unread xtra data */ while (byte_count > 0) { inw(base); @@ -888,8 +891,8 @@ static void isicom_shutdown_port(struct isi_port *port) struct isi_board *card = port->card; if (--card->count < 0) { - pr_dbg("isicom_shutdown_port: bad board(0x%lx) count %d.\n", - card->base, card->count); + pr_debug("%s: bad board(0x%lx) count %d.\n", + __func__, card->base, card->count); card->count = 0; } /* last port was closed, shutdown that board too */ @@ -1681,13 +1684,13 @@ static int __init isicom_init(void) retval = tty_register_driver(isicom_normal); if (retval) { - pr_dbg("Couldn't register the dialin driver\n"); + pr_debug("Couldn't register the dialin driver\n"); goto err_puttty; } retval = pci_register_driver(&isicom_driver); if (retval < 0) { - printk(KERN_ERR "ISICOM: Unable to register pci driver.\n"); + pr_err("Unable to register pci driver.\n"); goto err_unrtty; } -- 1.7.0.1 ^ permalink raw reply related [flat|nested] 78+ messages in thread
* [PATCH 14/36] hvc_console: fix test on unsigned in hvc_console_print() 2010-03-02 23:09 [GIT PATCH] TTY patches for 2.6.33-git Greg KH ` (12 preceding siblings ...) 2010-03-02 23:36 ` [PATCH 13/36] serial: isicom.c: use pr_fmt and pr_<level> Greg Kroah-Hartman @ 2010-03-02 23:36 ` Greg Kroah-Hartman 2010-03-02 23:36 ` [PATCH 15/36] tty: moxa: remove #ifdef MODULE completely Greg Kroah-Hartman ` (21 subsequent siblings) 35 siblings, 0 replies; 78+ messages in thread From: Greg Kroah-Hartman @ 2010-03-02 23:36 UTC (permalink / raw) To: linux-kernel Cc: Roel Kluin, Benjamin Herrenschmidt, Hendrik Brueckner, Christian Borntraeger, Andrew Morton, Greg Kroah-Hartman From: Roel Kluin <roel.kluin@gmail.com> vtermnos[] is unsigned, so this test was wrong. Signed-off-by: Roel Kluin <roel.kluin@gmail.com> Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org> Cc: Hendrik Brueckner <brueckner@linux.vnet.ibm.com> Cc: Christian Borntraeger <borntraeger@de.ibm.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> --- drivers/char/hvc_console.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/drivers/char/hvc_console.c b/drivers/char/hvc_console.c index 4c3b59b..465185f 100644 --- a/drivers/char/hvc_console.c +++ b/drivers/char/hvc_console.c @@ -146,7 +146,7 @@ static void hvc_console_print(struct console *co, const char *b, return; /* This console adapter was removed so it is not usable. */ - if (vtermnos[index] < 0) + if (vtermnos[index] == -1) return; while (count > 0 || i > 0) { -- 1.7.0.1 ^ permalink raw reply related [flat|nested] 78+ messages in thread
* [PATCH 15/36] tty: moxa: remove #ifdef MODULE completely. 2010-03-02 23:09 [GIT PATCH] TTY patches for 2.6.33-git Greg KH ` (13 preceding siblings ...) 2010-03-02 23:36 ` [PATCH 14/36] hvc_console: fix test on unsigned in hvc_console_print() Greg Kroah-Hartman @ 2010-03-02 23:36 ` Greg Kroah-Hartman 2010-03-02 23:36 ` [PATCH 16/36] ip2: remove #ifdef MODULE from ip2main.c Greg Kroah-Hartman ` (20 subsequent siblings) 35 siblings, 0 replies; 78+ messages in thread From: Greg Kroah-Hartman @ 2010-03-02 23:36 UTC (permalink / raw) To: linux-kernel; +Cc: Rakib Mullick, Andrew Morton, Greg Kroah-Hartman From: Rakib Mullick <rakib.mullick@gmail.com> We can pass "module parameters" on the kernel command line even when !MODULE. So, #ifdef MODULE becomes obsolete. Also move the declaration moxa_board_conf at the start of the function, since we were hit by the following warning. drivers/char/moxa.c: In function `moxa_init': drivers/char/moxa.c:1040: warning: ISO C90 forbids mixed declarations and code Signed-off-by: Rakib Mullick<rakib.mullick@gmail.com> Acked-by: Jiri Slaby <jirislaby@gmail.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> --- drivers/char/moxa.c | 17 ++++++----------- 1 files changed, 6 insertions(+), 11 deletions(-) diff --git a/drivers/char/moxa.c b/drivers/char/moxa.c index 63ee3bb..49a1fc2 100644 --- a/drivers/char/moxa.c +++ b/drivers/char/moxa.c @@ -164,24 +164,22 @@ static unsigned int moxaFuncTout = HZ / 2; static unsigned int moxaLowWaterChk; static DEFINE_MUTEX(moxa_openlock); static DEFINE_SPINLOCK(moxa_lock); -/* Variables for insmod */ -#ifdef MODULE + static unsigned long baseaddr[MAX_BOARDS]; static unsigned int type[MAX_BOARDS]; static unsigned int numports[MAX_BOARDS]; -#endif MODULE_AUTHOR("William Chen"); MODULE_DESCRIPTION("MOXA Intellio Family Multiport Board Device Driver"); MODULE_LICENSE("GPL"); -#ifdef MODULE + module_param_array(type, uint, NULL, 0); MODULE_PARM_DESC(type, "card type: C218=2, C320=4"); module_param_array(baseaddr, ulong, NULL, 0); MODULE_PARM_DESC(baseaddr, "base address"); module_param_array(numports, uint, NULL, 0); MODULE_PARM_DESC(numports, "numports (ignored for C218)"); -#endif + module_param(ttymajor, int, 0); /* @@ -1024,6 +1022,8 @@ static int __init moxa_init(void) { unsigned int isabrds = 0; int retval = 0; + struct moxa_board_conf *brd = moxa_boards; + unsigned int i; printk(KERN_INFO "MOXA Intellio family driver version %s\n", MOXA_VERSION); @@ -1051,10 +1051,7 @@ static int __init moxa_init(void) } /* Find the boards defined from module args. */ -#ifdef MODULE - { - struct moxa_board_conf *brd = moxa_boards; - unsigned int i; + for (i = 0; i < MAX_BOARDS; i++) { if (!baseaddr[i]) break; @@ -1087,8 +1084,6 @@ static int __init moxa_init(void) isabrds++; } } - } -#endif #ifdef CONFIG_PCI retval = pci_register_driver(&moxa_pci_driver); -- 1.7.0.1 ^ permalink raw reply related [flat|nested] 78+ messages in thread
* [PATCH 16/36] ip2: remove #ifdef MODULE from ip2main.c 2010-03-02 23:09 [GIT PATCH] TTY patches for 2.6.33-git Greg KH ` (14 preceding siblings ...) 2010-03-02 23:36 ` [PATCH 15/36] tty: moxa: remove #ifdef MODULE completely Greg Kroah-Hartman @ 2010-03-02 23:36 ` Greg Kroah-Hartman 2010-03-02 23:36 ` [PATCH 17/36] ip2: Add module parameter Greg Kroah-Hartman ` (19 subsequent siblings) 35 siblings, 0 replies; 78+ messages in thread From: Greg Kroah-Hartman @ 2010-03-02 23:36 UTC (permalink / raw) To: linux-kernel; +Cc: Rakib Mullick, Andrew Morton, Greg Kroah-Hartman From: Rakib Mullick <rakib.mullick@gmail.com> On the kernel command line we can pass "module parameters". So #ifdef MODULE is obsolute now. Remove it completely. When CONFIG_PCI=n and building ip2main.c then we are hit by the following warning. So move *pdev into #ifdef CONFIG_PCI. drivers/char/ip2/ip2main.c: In function `ip2_loadmain': drivers/char/ip2/ip2main.c:542: warning: unused variable `pdev' Signed-off-by: Rakib Mullick <rakib.mullick@gmail.com> Acked-by: Michael H. Warfield <mhw@WittsEnd.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> --- drivers/char/ip2/ip2main.c | 11 +++++------ 1 files changed, 5 insertions(+), 6 deletions(-) diff --git a/drivers/char/ip2/ip2main.c b/drivers/char/ip2/ip2main.c index 517271c..2913d05 100644 --- a/drivers/char/ip2/ip2main.c +++ b/drivers/char/ip2/ip2main.c @@ -263,7 +263,7 @@ static int tracewrap; /* Macros */ /**********/ -#if defined(MODULE) && defined(IP2DEBUG_OPEN) +#ifdef IP2DEBUG_OPEN #define DBG_CNT(s) printk(KERN_DEBUG "(%s): [%x] ttyc=%d, modc=%x -> %s\n", \ tty->name,(pCh->flags), \ tty->count,/*GET_USE_COUNT(module)*/0,s) @@ -487,7 +487,6 @@ static const struct firmware *ip2_request_firmware(void) return fw; } -#ifndef MODULE /****************************************************************************** * ip2_setup: * str: kernel command line string @@ -531,7 +530,6 @@ static int __init ip2_setup(char *str) return 1; } __setup("ip2=", ip2_setup); -#endif /* !MODULE */ static int __init ip2_loadmain(void) { @@ -539,7 +537,6 @@ static int __init ip2_loadmain(void) int err = 0; i2eBordStrPtr pB = NULL; int rc = -1; - struct pci_dev *pdev = NULL; const struct firmware *fw = NULL; if (poll_only) { @@ -612,6 +609,7 @@ static int __init ip2_loadmain(void) case PCI: #ifdef CONFIG_PCI { + struct pci_dev *pdev = NULL; u32 addr; int status; @@ -626,7 +624,7 @@ static int __init ip2_loadmain(void) if (pci_enable_device(pdev)) { dev_err(&pdev->dev, "can't enable device\n"); - break; + goto out; } ip2config.type[i] = PCI; ip2config.pci_dev[i] = pci_dev_get(pdev); @@ -638,6 +636,8 @@ static int __init ip2_loadmain(void) dev_err(&pdev->dev, "I/O address error\n"); ip2config.irq[i] = pdev->irq; +out: + pci_dev_put(pdev); } #else printk(KERN_ERR "IP2: PCI card specified but PCI " @@ -656,7 +656,6 @@ static int __init ip2_loadmain(void) break; } /* switch */ } /* for */ - pci_dev_put(pdev); for (i = 0; i < IP2_MAX_BOARDS; ++i) { if (ip2config.addr[i]) { -- 1.7.0.1 ^ permalink raw reply related [flat|nested] 78+ messages in thread
* [PATCH 17/36] ip2: Add module parameter. 2010-03-02 23:09 [GIT PATCH] TTY patches for 2.6.33-git Greg KH ` (15 preceding siblings ...) 2010-03-02 23:36 ` [PATCH 16/36] ip2: remove #ifdef MODULE from ip2main.c Greg Kroah-Hartman @ 2010-03-02 23:36 ` Greg Kroah-Hartman 2010-03-02 23:36 ` [PATCH 18/36] tty: declare MODULE_FIRMWARE in various drivers Greg Kroah-Hartman ` (18 subsequent siblings) 35 siblings, 0 replies; 78+ messages in thread From: Greg Kroah-Hartman @ 2010-03-02 23:36 UTC (permalink / raw) To: linux-kernel; +Cc: Rakib Mullick, Greg Kroah-Hartman From: Rakib Mullick <rakib.mullick@gmail.com> Stephen Rothwell found the following warning (x86_64 allmodconfig): drivers/char/ip2/ip2main.c:511: warning: 'ip2_setup' defined but not used This patch adds module parameter to fix the above warning. Signed-off-by: Rakib Mullick <rakib.mullick@gmail.com> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> --- drivers/char/ip2/ip2main.c | 13 +++++++++++++ 1 files changed, 13 insertions(+), 0 deletions(-) diff --git a/drivers/char/ip2/ip2main.c b/drivers/char/ip2/ip2main.c index 2913d05..c2c915a 100644 --- a/drivers/char/ip2/ip2main.c +++ b/drivers/char/ip2/ip2main.c @@ -208,6 +208,7 @@ static int DumpFifoBuffer( char __user *, int); static void ip2_init_board(int, const struct firmware *); static unsigned short find_eisa_board(int); +static int ip2_setup(char *str); /***************/ /* Static Data */ @@ -285,7 +286,10 @@ MODULE_AUTHOR("Doug McNash"); MODULE_DESCRIPTION("Computone IntelliPort Plus Driver"); MODULE_LICENSE("GPL"); +#define MAX_CMD_STR 50 + static int poll_only; +static char cmd[MAX_CMD_STR]; static int Eisa_irq; static int Eisa_slot; @@ -309,6 +313,8 @@ module_param_array(io, int, NULL, 0); MODULE_PARM_DESC(io, "I/O ports for IntelliPort Cards"); module_param(poll_only, bool, 0); MODULE_PARM_DESC(poll_only, "Do not use card interrupts"); +module_param_string(ip2, cmd, MAX_CMD_STR, 0); +MODULE_PARM_DESC(ip2, "Contains module parameter passed with 'ip2='"); /* for sysfs class support */ static struct class *ip2_class; @@ -538,12 +544,19 @@ static int __init ip2_loadmain(void) i2eBordStrPtr pB = NULL; int rc = -1; const struct firmware *fw = NULL; + char *str; + + str = cmd; if (poll_only) { /* Hard lock the interrupts to zero */ irq[0] = irq[1] = irq[2] = irq[3] = poll_only = 0; } + /* Check module parameter with 'ip2=' has been passed or not */ + if (!poll_only && (!strncmp(str, "ip2=", 4))) + ip2_setup(str); + ip2trace(ITRC_NO_PORT, ITRC_INIT, ITRC_ENTER, 0); /* process command line arguments to modprobe or -- 1.7.0.1 ^ permalink raw reply related [flat|nested] 78+ messages in thread
* [PATCH 18/36] tty: declare MODULE_FIRMWARE in various drivers 2010-03-02 23:09 [GIT PATCH] TTY patches for 2.6.33-git Greg KH ` (16 preceding siblings ...) 2010-03-02 23:36 ` [PATCH 17/36] ip2: Add module parameter Greg Kroah-Hartman @ 2010-03-02 23:36 ` Greg Kroah-Hartman 2010-03-02 23:36 ` [PATCH 19/36] Char: synclink, remove unnecessary checks Greg Kroah-Hartman ` (17 subsequent siblings) 35 siblings, 0 replies; 78+ messages in thread From: Greg Kroah-Hartman @ 2010-03-02 23:36 UTC (permalink / raw) To: linux-kernel; +Cc: Ben Hutchings, Greg Kroah-Hartman From: Ben Hutchings <ben@decadent.org.uk> Signed-off-by: Ben Hutchings <ben@decadent.org.uk> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> --- drivers/char/cyclades.c | 1 + drivers/char/ip2/ip2main.c | 2 ++ drivers/char/isicom.c | 5 +++++ drivers/char/moxa.c | 3 +++ drivers/serial/icom.c | 4 +++- drivers/usb/serial/keyspan_pda.c | 7 +++++++ 6 files changed, 21 insertions(+), 1 deletions(-) diff --git a/drivers/char/cyclades.c b/drivers/char/cyclades.c index e026f24..b861c08 100644 --- a/drivers/char/cyclades.c +++ b/drivers/char/cyclades.c @@ -4195,3 +4195,4 @@ module_exit(cy_cleanup_module); MODULE_LICENSE("GPL"); MODULE_VERSION(CY_VERSION); MODULE_ALIAS_CHARDEV_MAJOR(CYCLADES_MAJOR); +MODULE_FIRMWARE("cyzfirm.bin"); diff --git a/drivers/char/ip2/ip2main.c b/drivers/char/ip2/ip2main.c index c2c915a..911e1da 100644 --- a/drivers/char/ip2/ip2main.c +++ b/drivers/char/ip2/ip2main.c @@ -3209,3 +3209,5 @@ static struct pci_device_id ip2main_pci_tbl[] __devinitdata = { }; MODULE_DEVICE_TABLE(pci, ip2main_pci_tbl); + +MODULE_FIRMWARE("intelliport2.bin"); diff --git a/drivers/char/isicom.c b/drivers/char/isicom.c index 77d5a29..be2e8f9 100644 --- a/drivers/char/isicom.c +++ b/drivers/char/isicom.c @@ -1720,3 +1720,8 @@ module_exit(isicom_exit); MODULE_AUTHOR("MultiTech"); MODULE_DESCRIPTION("Driver for the ISI series of cards by MultiTech"); MODULE_LICENSE("GPL"); +MODULE_FIRMWARE("isi608.bin"); +MODULE_FIRMWARE("isi608em.bin"); +MODULE_FIRMWARE("isi616em.bin"); +MODULE_FIRMWARE("isi4608.bin"); +MODULE_FIRMWARE("isi4616.bin"); diff --git a/drivers/char/moxa.c b/drivers/char/moxa.c index 49a1fc2..166495d 100644 --- a/drivers/char/moxa.c +++ b/drivers/char/moxa.c @@ -172,6 +172,9 @@ static unsigned int numports[MAX_BOARDS]; MODULE_AUTHOR("William Chen"); MODULE_DESCRIPTION("MOXA Intellio Family Multiport Board Device Driver"); MODULE_LICENSE("GPL"); +MODULE_FIRMWARE("c218tunx.cod"); +MODULE_FIRMWARE("cp204unx.cod"); +MODULE_FIRMWARE("c320tunx.cod"); module_param_array(type, uint, NULL, 0); MODULE_PARM_DESC(type, "card type: C218=2, C320=4"); diff --git a/drivers/serial/icom.c b/drivers/serial/icom.c index 0028b6f..6e715b7 100644 --- a/drivers/serial/icom.c +++ b/drivers/serial/icom.c @@ -1654,4 +1654,6 @@ MODULE_DESCRIPTION("IBM iSeries Serial IOA driver"); MODULE_SUPPORTED_DEVICE ("IBM iSeries 2745, 2771, 2772, 2742, 2793 and 2805 Communications adapters"); MODULE_LICENSE("GPL"); - +MODULE_FIRMWARE("icom_call_setup.bin"); +MODULE_FIRMWARE("icom_res_dce.bin"); +MODULE_FIRMWARE("icom_asc.bin"); diff --git a/drivers/usb/serial/keyspan_pda.c b/drivers/usb/serial/keyspan_pda.c index 1296a09..84f08e9 100644 --- a/drivers/usb/serial/keyspan_pda.c +++ b/drivers/usb/serial/keyspan_pda.c @@ -789,6 +789,13 @@ static int keyspan_pda_fake_startup(struct usb_serial *serial) return 1; } +#ifdef KEYSPAN +MODULE_FIRMWARE("keyspan_pda/keyspan_pda.fw"); +#endif +#ifdef XIRCOM +MODULE_FIRMWARE("keyspan_pda/xircom_pgs.fw"); +#endif + static int keyspan_pda_startup(struct usb_serial *serial) { -- 1.7.0.1 ^ permalink raw reply related [flat|nested] 78+ messages in thread
* [PATCH 19/36] Char: synclink, remove unnecessary checks 2010-03-02 23:09 [GIT PATCH] TTY patches for 2.6.33-git Greg KH ` (17 preceding siblings ...) 2010-03-02 23:36 ` [PATCH 18/36] tty: declare MODULE_FIRMWARE in various drivers Greg Kroah-Hartman @ 2010-03-02 23:36 ` Greg Kroah-Hartman 2010-03-02 23:36 ` [PATCH 20/36] serial: bfin_5xx: remove useless gpio handling with hard flow control Greg Kroah-Hartman ` (16 subsequent siblings) 35 siblings, 0 replies; 78+ messages in thread From: Greg Kroah-Hartman @ 2010-03-02 23:36 UTC (permalink / raw) To: linux-kernel; +Cc: Jiri Slaby, Andrew Morton, Alan Cox, Greg Kroah-Hartman From: Jiri Slaby <jslaby@suse.cz> Stanse found a potential null dereference in mgsl_put_char and mgsl_write. There is a check for tty being NULL, but it is dereferenced earlier. Actually, tty cannot be NULL in .write and .put_char, so remove the tests. Signed-off-by: Jiri Slaby <jslaby@suse.cz> Cc: Andrew Morton <akpm@linux-foundation.org> Cc: Alan Cox <alan@linux.intel.com> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> --- drivers/char/synclink.c | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/char/synclink.c b/drivers/char/synclink.c index 4846b73..0658fc5 100644 --- a/drivers/char/synclink.c +++ b/drivers/char/synclink.c @@ -2031,7 +2031,7 @@ static int mgsl_put_char(struct tty_struct *tty, unsigned char ch) if (mgsl_paranoia_check(info, tty->name, "mgsl_put_char")) return 0; - if (!tty || !info->xmit_buf) + if (!info->xmit_buf) return 0; spin_lock_irqsave(&info->irq_spinlock, flags); @@ -2121,7 +2121,7 @@ static int mgsl_write(struct tty_struct * tty, if (mgsl_paranoia_check(info, tty->name, "mgsl_write")) goto cleanup; - if (!tty || !info->xmit_buf) + if (!info->xmit_buf) goto cleanup; if ( info->params.mode == MGSL_MODE_HDLC || -- 1.7.0.1 ^ permalink raw reply related [flat|nested] 78+ messages in thread
* [PATCH 20/36] serial: bfin_5xx: remove useless gpio handling with hard flow control 2010-03-02 23:09 [GIT PATCH] TTY patches for 2.6.33-git Greg KH ` (18 preceding siblings ...) 2010-03-02 23:36 ` [PATCH 19/36] Char: synclink, remove unnecessary checks Greg Kroah-Hartman @ 2010-03-02 23:36 ` Greg Kroah-Hartman 2010-03-02 23:36 ` [PATCH 21/36] serial: bfin_5xx: need to disable DMA TX interrupt too Greg Kroah-Hartman ` (15 subsequent siblings) 35 siblings, 0 replies; 78+ messages in thread From: Greg Kroah-Hartman @ 2010-03-02 23:36 UTC (permalink / raw) To: linux-kernel; +Cc: Sonic Zhang, Mike Frysinger, Greg Kroah-Hartman From: Sonic Zhang <sonic.zhang@analog.com> For UARTs that have dedicated hardware flow control support, there will be no gpios to request/free as they are part of the normal peripheral pins. Signed-off-by: Sonic Zhang <sonic.zhang@analog.com> Signed-off-by: Mike Frysinger <vapier@gentoo.org> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> --- drivers/serial/bfin_5xx.c | 16 +--------------- 1 files changed, 1 insertions(+), 15 deletions(-) diff --git a/drivers/serial/bfin_5xx.c b/drivers/serial/bfin_5xx.c index 50abb7e..15843cc 100644 --- a/drivers/serial/bfin_5xx.c +++ b/drivers/serial/bfin_5xx.c @@ -746,15 +746,6 @@ static int bfin_serial_startup(struct uart_port *port) Status interrupt.\n"); } - if (uart->cts_pin >= 0) { - gpio_request(uart->cts_pin, DRIVER_NAME); - gpio_direction_output(uart->cts_pin, 1); - } - if (uart->rts_pin >= 0) { - gpio_request(uart->rts_pin, DRIVER_NAME); - gpio_direction_output(uart->rts_pin, 0); - } - /* CTS RTS PINs are negative assertive. */ UART_PUT_MCR(uart, ACTS); UART_SET_IER(uart, EDSSI); @@ -801,10 +792,6 @@ static void bfin_serial_shutdown(struct uart_port *port) gpio_free(uart->rts_pin); #endif #ifdef CONFIG_SERIAL_BFIN_HARD_CTSRTS - if (uart->cts_pin >= 0) - gpio_free(uart->cts_pin); - if (uart->rts_pin >= 0) - gpio_free(uart->rts_pin); if (UART_GET_IER(uart) && EDSSI) free_irq(uart->status_irq, uart); #endif @@ -1409,8 +1396,7 @@ static int bfin_serial_remove(struct platform_device *dev) continue; uart_remove_one_port(&bfin_serial_reg, &bfin_serial_ports[i].port); bfin_serial_ports[i].port.dev = NULL; -#if defined(CONFIG_SERIAL_BFIN_CTSRTS) || \ - defined(CONFIG_SERIAL_BFIN_HARD_CTSRTS) +#if defined(CONFIG_SERIAL_BFIN_CTSRTS) gpio_free(bfin_serial_ports[i].cts_pin); gpio_free(bfin_serial_ports[i].rts_pin); #endif -- 1.7.0.1 ^ permalink raw reply related [flat|nested] 78+ messages in thread
* [PATCH 21/36] serial: bfin_5xx: need to disable DMA TX interrupt too 2010-03-02 23:09 [GIT PATCH] TTY patches for 2.6.33-git Greg KH ` (19 preceding siblings ...) 2010-03-02 23:36 ` [PATCH 20/36] serial: bfin_5xx: remove useless gpio handling with hard flow control Greg Kroah-Hartman @ 2010-03-02 23:36 ` Greg Kroah-Hartman 2010-03-02 23:36 ` [PATCH 22/36] serial: bfin_5xx: kgdboc should accept gdb break only when it is active Greg Kroah-Hartman ` (14 subsequent siblings) 35 siblings, 0 replies; 78+ messages in thread From: Greg Kroah-Hartman @ 2010-03-02 23:36 UTC (permalink / raw) To: linux-kernel; +Cc: Graf Yang, Mike Frysinger, Greg Kroah-Hartman From: Graf Yang <graf.yang@analog.com> If we don't disable the DMA TX channel, an inopportune timeout will trigger the interrupt handler and may cause a dead lock with the spin_lock. Signed-off-by: Graf Yang <graf.yang@analog.com> Signed-off-by: Mike Frysinger <vapier@gentoo.org> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> --- drivers/serial/bfin_5xx.c | 2 ++ 1 files changed, 2 insertions(+), 0 deletions(-) diff --git a/drivers/serial/bfin_5xx.c b/drivers/serial/bfin_5xx.c index 15843cc..b5a9b37 100644 --- a/drivers/serial/bfin_5xx.c +++ b/drivers/serial/bfin_5xx.c @@ -488,6 +488,7 @@ void bfin_serial_rx_dma_timeout(struct bfin_serial_port *uart) { int x_pos, pos; + dma_disable_irq(uart->tx_dma_channel); dma_disable_irq(uart->rx_dma_channel); spin_lock_bh(&uart->port.lock); @@ -521,6 +522,7 @@ void bfin_serial_rx_dma_timeout(struct bfin_serial_port *uart) } spin_unlock_bh(&uart->port.lock); + dma_enable_irq(uart->tx_dma_channel); dma_enable_irq(uart->rx_dma_channel); mod_timer(&(uart->rx_dma_timer), jiffies + DMA_RX_FLUSH_JIFFIES); -- 1.7.0.1 ^ permalink raw reply related [flat|nested] 78+ messages in thread
* [PATCH 22/36] serial: bfin_5xx: kgdboc should accept gdb break only when it is active 2010-03-02 23:09 [GIT PATCH] TTY patches for 2.6.33-git Greg KH ` (20 preceding siblings ...) 2010-03-02 23:36 ` [PATCH 21/36] serial: bfin_5xx: need to disable DMA TX interrupt too Greg Kroah-Hartman @ 2010-03-02 23:36 ` Greg Kroah-Hartman 2010-03-02 23:36 ` [PATCH 23/36] serial: bfin_5xx: pull in linux/io.h for ioremap prototypes Greg Kroah-Hartman ` (13 subsequent siblings) 35 siblings, 0 replies; 78+ messages in thread From: Greg Kroah-Hartman @ 2010-03-02 23:36 UTC (permalink / raw) To: linux-kernel; +Cc: Sonic Zhang, Mike Frysinger, Greg Kroah-Hartman From: Sonic Zhang <sonic.zhang@analog.com> If we always check for gdb breaks even when it isn't active, we get false positives on normal code and the system panics. URL: http://blackfin.uclinux.org/gf/tracker/5277 Signed-off-by: Sonic Zhang <sonic.zhang@analog.com> Signed-off-by: Mike Frysinger <vapier@gentoo.org> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> --- drivers/serial/bfin_5xx.c | 3 ++- 1 files changed, 2 insertions(+), 1 deletions(-) diff --git a/drivers/serial/bfin_5xx.c b/drivers/serial/bfin_5xx.c index b5a9b37..6b87955 100644 --- a/drivers/serial/bfin_5xx.c +++ b/drivers/serial/bfin_5xx.c @@ -237,7 +237,8 @@ static void bfin_serial_rx_chars(struct bfin_serial_port *uart) #if defined(CONFIG_KGDB_SERIAL_CONSOLE) || \ defined(CONFIG_KGDB_SERIAL_CONSOLE_MODULE) - if (kgdb_connected && kgdboc_port_line == uart->port.line) + if (kgdb_connected && kgdboc_port_line == uart->port.line + && kgdboc_break_enabled) if (ch == 0x3) {/* Ctrl + C */ kgdb_breakpoint(); return; -- 1.7.0.1 ^ permalink raw reply related [flat|nested] 78+ messages in thread
* [PATCH 23/36] serial: bfin_5xx: pull in linux/io.h for ioremap prototypes 2010-03-02 23:09 [GIT PATCH] TTY patches for 2.6.33-git Greg KH ` (21 preceding siblings ...) 2010-03-02 23:36 ` [PATCH 22/36] serial: bfin_5xx: kgdboc should accept gdb break only when it is active Greg Kroah-Hartman @ 2010-03-02 23:36 ` Greg Kroah-Hartman 2010-03-02 23:36 ` [PATCH 24/36] serial: bcm63xx_uart: don't use kfree() on non kmalloced area Greg Kroah-Hartman ` (12 subsequent siblings) 35 siblings, 0 replies; 78+ messages in thread From: Greg Kroah-Hartman @ 2010-03-02 23:36 UTC (permalink / raw) To: linux-kernel; +Cc: Mike Frysinger, Greg Kroah-Hartman From: Mike Frysinger <vapier@gentoo.org> Signed-off-by: Mike Frysinger <vapier@gentoo.org> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> --- drivers/serial/bfin_5xx.c | 1 + 1 files changed, 1 insertions(+), 0 deletions(-) diff --git a/drivers/serial/bfin_5xx.c b/drivers/serial/bfin_5xx.c index 6b87955..fcf273e 100644 --- a/drivers/serial/bfin_5xx.c +++ b/drivers/serial/bfin_5xx.c @@ -14,6 +14,7 @@ #include <linux/module.h> #include <linux/ioport.h> +#include <linux/io.h> #include <linux/init.h> #include <linux/console.h> #include <linux/sysrq.h> -- 1.7.0.1 ^ permalink raw reply related [flat|nested] 78+ messages in thread
* [PATCH 24/36] serial: bcm63xx_uart: don't use kfree() on non kmalloced area. 2010-03-02 23:09 [GIT PATCH] TTY patches for 2.6.33-git Greg KH ` (22 preceding siblings ...) 2010-03-02 23:36 ` [PATCH 23/36] serial: bfin_5xx: pull in linux/io.h for ioremap prototypes Greg Kroah-Hartman @ 2010-03-02 23:36 ` Greg Kroah-Hartman 2010-03-02 23:36 ` [PATCH 25/36] serial: bcm63xx_uart: allow more than one uart to be registered Greg Kroah-Hartman ` (11 subsequent siblings) 35 siblings, 0 replies; 78+ messages in thread From: Greg Kroah-Hartman @ 2010-03-02 23:36 UTC (permalink / raw) To: linux-kernel; +Cc: Maxime Bizon, Greg Kroah-Hartman From: Maxime Bizon <mbizon@freebox.fr> Signed-off-by: Maxime Bizon <mbizon@freebox.fr> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> --- drivers/serial/bcm63xx_uart.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/drivers/serial/bcm63xx_uart.c b/drivers/serial/bcm63xx_uart.c index 37ad0c4..f78ede8 100644 --- a/drivers/serial/bcm63xx_uart.c +++ b/drivers/serial/bcm63xx_uart.c @@ -830,7 +830,7 @@ static int __devinit bcm_uart_probe(struct platform_device *pdev) ret = uart_add_one_port(&bcm_uart_driver, port); if (ret) { - kfree(port); + ports[pdev->id].membase = 0; return ret; } platform_set_drvdata(pdev, port); -- 1.7.0.1 ^ permalink raw reply related [flat|nested] 78+ messages in thread
* [PATCH 25/36] serial: bcm63xx_uart: allow more than one uart to be registered. 2010-03-02 23:09 [GIT PATCH] TTY patches for 2.6.33-git Greg KH ` (23 preceding siblings ...) 2010-03-02 23:36 ` [PATCH 24/36] serial: bcm63xx_uart: don't use kfree() on non kmalloced area Greg Kroah-Hartman @ 2010-03-02 23:36 ` Greg Kroah-Hartman 2010-03-02 23:36 ` [PATCH 26/36] sdio_uart: Use kfifo instead of the messy circ stuff Greg Kroah-Hartman ` (10 subsequent siblings) 35 siblings, 0 replies; 78+ messages in thread From: Greg Kroah-Hartman @ 2010-03-02 23:36 UTC (permalink / raw) To: linux-kernel; +Cc: Maxime Bizon, Greg Kroah-Hartman From: Maxime Bizon <mbizon@freebox.fr> The bcm6358 CPU has two uarts, make it possible to use the second one. Signed-off-by: Maxime Bizon <mbizon@freebox.fr> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> --- drivers/serial/bcm63xx_uart.c | 5 +++-- 1 files changed, 3 insertions(+), 2 deletions(-) diff --git a/drivers/serial/bcm63xx_uart.c b/drivers/serial/bcm63xx_uart.c index f78ede8..a1a0e55 100644 --- a/drivers/serial/bcm63xx_uart.c +++ b/drivers/serial/bcm63xx_uart.c @@ -35,7 +35,7 @@ #include <bcm63xx_regs.h> #include <bcm63xx_io.h> -#define BCM63XX_NR_UARTS 1 +#define BCM63XX_NR_UARTS 2 static struct uart_port ports[BCM63XX_NR_UARTS]; @@ -784,7 +784,7 @@ static struct uart_driver bcm_uart_driver = { .dev_name = "ttyS", .major = TTY_MAJOR, .minor = 64, - .nr = 1, + .nr = BCM63XX_NR_UARTS, .cons = BCM63XX_CONSOLE, }; @@ -826,6 +826,7 @@ static int __devinit bcm_uart_probe(struct platform_device *pdev) port->dev = &pdev->dev; port->fifosize = 16; port->uartclk = clk_get_rate(clk) / 2; + port->line = pdev->id; clk_put(clk); ret = uart_add_one_port(&bcm_uart_driver, port); -- 1.7.0.1 ^ permalink raw reply related [flat|nested] 78+ messages in thread
* [PATCH 26/36] sdio_uart: Use kfifo instead of the messy circ stuff 2010-03-02 23:09 [GIT PATCH] TTY patches for 2.6.33-git Greg KH ` (24 preceding siblings ...) 2010-03-02 23:36 ` [PATCH 25/36] serial: bcm63xx_uart: allow more than one uart to be registered Greg Kroah-Hartman @ 2010-03-02 23:36 ` Greg Kroah-Hartman 2010-03-02 23:36 ` [PATCH 27/36] nozomi: Add tty_port usage Greg Kroah-Hartman ` (9 subsequent siblings) 35 siblings, 0 replies; 78+ messages in thread From: Greg Kroah-Hartman @ 2010-03-02 23:36 UTC (permalink / raw) To: linux-kernel; +Cc: Alan Cox, Greg Kroah-Hartman From: Alan Cox <alan@linux.intel.com> Revised patch to use the new kfifo API. This replaces the one that was dropped from -next due to collisions with the kfifo API changes. Signed-off-by: Alan Cox <alan@linux.intel.com> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> --- drivers/mmc/card/sdio_uart.c | 93 +++++++++++++---------------------------- 1 files changed, 30 insertions(+), 63 deletions(-) diff --git a/drivers/mmc/card/sdio_uart.c b/drivers/mmc/card/sdio_uart.c index f537555..3fab78b 100644 --- a/drivers/mmc/card/sdio_uart.c +++ b/drivers/mmc/card/sdio_uart.c @@ -37,6 +37,7 @@ #include <linux/gfp.h> #include <linux/tty.h> #include <linux/tty_flip.h> +#include <linux/kfifo.h> #include <linux/mmc/core.h> #include <linux/mmc/card.h> @@ -47,19 +48,9 @@ #define UART_NR 8 /* Number of UARTs this driver can handle */ -#define UART_XMIT_SIZE PAGE_SIZE +#define FIFO_SIZE PAGE_SIZE #define WAKEUP_CHARS 256 -#define circ_empty(circ) ((circ)->head == (circ)->tail) -#define circ_clear(circ) ((circ)->head = (circ)->tail = 0) - -#define circ_chars_pending(circ) \ - (CIRC_CNT((circ)->head, (circ)->tail, UART_XMIT_SIZE)) - -#define circ_chars_free(circ) \ - (CIRC_SPACE((circ)->head, (circ)->tail, UART_XMIT_SIZE)) - - struct uart_icount { __u32 cts; __u32 dsr; @@ -82,7 +73,7 @@ struct sdio_uart_port { struct mutex func_lock; struct task_struct *in_sdio_uart_irq; unsigned int regs_offset; - struct circ_buf xmit; + struct kfifo xmit_fifo; spinlock_t write_lock; struct uart_icount icount; unsigned int uartclk; @@ -105,6 +96,8 @@ static int sdio_uart_add_port(struct sdio_uart_port *port) kref_init(&port->kref); mutex_init(&port->func_lock); spin_lock_init(&port->write_lock); + if (kfifo_alloc(&port->xmit_fifo, FIFO_SIZE, GFP_KERNEL)) + return -ENOMEM; spin_lock(&sdio_uart_table_lock); for (index = 0; index < UART_NR; index++) { @@ -140,6 +133,7 @@ static void sdio_uart_port_destroy(struct kref *kref) { struct sdio_uart_port *port = container_of(kref, struct sdio_uart_port, kref); + kfifo_free(&port->xmit_fifo); kfree(port); } @@ -456,9 +450,11 @@ static void sdio_uart_receive_chars(struct sdio_uart_port *port, static void sdio_uart_transmit_chars(struct sdio_uart_port *port) { - struct circ_buf *xmit = &port->xmit; + struct kfifo *xmit = &port->xmit_fifo; int count; struct tty_struct *tty; + u8 iobuf[16]; + int len; if (port->x_char) { sdio_out(port, UART_TX, port->x_char); @@ -469,27 +465,25 @@ static void sdio_uart_transmit_chars(struct sdio_uart_port *port) tty = tty_port_tty_get(&port->port); - if (tty == NULL || circ_empty(xmit) || + if (tty == NULL || !kfifo_len(xmit) || tty->stopped || tty->hw_stopped) { sdio_uart_stop_tx(port); tty_kref_put(tty); return; } - count = 16; - do { - sdio_out(port, UART_TX, xmit->buf[xmit->tail]); - xmit->tail = (xmit->tail + 1) & (UART_XMIT_SIZE - 1); + len = kfifo_out_locked(xmit, iobuf, 16, &port->write_lock); + for (count = 0; count < len; count++) { + sdio_out(port, UART_TX, iobuf[count]); port->icount.tx++; - if (circ_empty(xmit)) - break; - } while (--count > 0); + } - if (circ_chars_pending(xmit) < WAKEUP_CHARS) + len = kfifo_len(xmit); + if (len < WAKEUP_CHARS) { tty_wakeup(tty); - - if (circ_empty(xmit)) - sdio_uart_stop_tx(port); + if (len == 0) + sdio_uart_stop_tx(port); + } tty_kref_put(tty); } @@ -632,7 +626,6 @@ static int sdio_uart_activate(struct tty_port *tport, struct tty_struct *tty) { struct sdio_uart_port *port = container_of(tport, struct sdio_uart_port, port); - unsigned long page; int ret; /* @@ -641,22 +634,17 @@ static int sdio_uart_activate(struct tty_port *tport, struct tty_struct *tty) */ set_bit(TTY_IO_ERROR, &tty->flags); - /* Initialise and allocate the transmit buffer. */ - page = __get_free_page(GFP_KERNEL); - if (!page) - return -ENOMEM; - port->xmit.buf = (unsigned char *)page; - circ_clear(&port->xmit); + kfifo_reset(&port->xmit_fifo); ret = sdio_uart_claim_func(port); if (ret) - goto err1; + return ret; ret = sdio_enable_func(port->func); if (ret) - goto err2; + goto err1; ret = sdio_claim_irq(port->func, sdio_uart_irq); if (ret) - goto err3; + goto err2; /* * Clear the FIFO buffers and disable them. @@ -700,12 +688,10 @@ static int sdio_uart_activate(struct tty_port *tport, struct tty_struct *tty) sdio_uart_release_func(port); return 0; -err3: - sdio_disable_func(port->func); err2: - sdio_uart_release_func(port); + sdio_disable_func(port->func); err1: - free_page((unsigned long)port->xmit.buf); + sdio_uart_release_func(port); return ret; } @@ -727,7 +713,7 @@ static void sdio_uart_shutdown(struct tty_port *tport) ret = sdio_uart_claim_func(port); if (ret) - goto skip; + return; sdio_uart_stop_rx(port); @@ -749,10 +735,6 @@ static void sdio_uart_shutdown(struct tty_port *tport) sdio_disable_func(port->func); sdio_uart_release_func(port); - -skip: - /* Free the transmit buffer page. */ - free_page((unsigned long)port->xmit.buf); } /** @@ -822,27 +804,12 @@ static int sdio_uart_write(struct tty_struct *tty, const unsigned char *buf, int count) { struct sdio_uart_port *port = tty->driver_data; - struct circ_buf *circ = &port->xmit; - int c, ret = 0; + int ret; if (!port->func) return -ENODEV; - spin_lock(&port->write_lock); - while (1) { - c = CIRC_SPACE_TO_END(circ->head, circ->tail, UART_XMIT_SIZE); - if (count < c) - c = count; - if (c <= 0) - break; - memcpy(circ->buf + circ->head, buf, c); - circ->head = (circ->head + c) & (UART_XMIT_SIZE - 1); - buf += c; - count -= c; - ret += c; - } - spin_unlock(&port->write_lock); - + ret = kfifo_in_locked(&port->xmit_fifo, buf, count, &port->write_lock); if (!(port->ier & UART_IER_THRI)) { int err = sdio_uart_claim_func(port); if (!err) { @@ -859,13 +826,13 @@ static int sdio_uart_write(struct tty_struct *tty, const unsigned char *buf, static int sdio_uart_write_room(struct tty_struct *tty) { struct sdio_uart_port *port = tty->driver_data; - return port ? circ_chars_free(&port->xmit) : 0; + return FIFO_SIZE - kfifo_len(&port->xmit_fifo); } static int sdio_uart_chars_in_buffer(struct tty_struct *tty) { struct sdio_uart_port *port = tty->driver_data; - return port ? circ_chars_pending(&port->xmit) : 0; + return kfifo_len(&port->xmit_fifo); } static void sdio_uart_send_xchar(struct tty_struct *tty, char ch) -- 1.7.0.1 ^ permalink raw reply related [flat|nested] 78+ messages in thread
* [PATCH 27/36] nozomi: Add tty_port usage 2010-03-02 23:09 [GIT PATCH] TTY patches for 2.6.33-git Greg KH ` (25 preceding siblings ...) 2010-03-02 23:36 ` [PATCH 26/36] sdio_uart: Use kfifo instead of the messy circ stuff Greg Kroah-Hartman @ 2010-03-02 23:36 ` Greg Kroah-Hartman 2010-03-02 23:36 ` [PATCH 28/36] nozomi: Fix mutex handling Greg Kroah-Hartman ` (8 subsequent siblings) 35 siblings, 0 replies; 78+ messages in thread From: Greg Kroah-Hartman @ 2010-03-02 23:36 UTC (permalink / raw) To: linux-kernel; +Cc: Alan Cox, Greg Kroah-Hartman From: Alan Cox <alan@linux.intel.com> The Nozomi tty handling is very broken on the open/close side (See http://bugzilla.kernel.org/show_bug.cgi?id=13024 for one example). In particular it marks the tty as closed on the first close() not on the last. Most of the logic is pretty solid except for the open/close path so switch to the tty_port helpers and let them do all the heavy lifting. This is also fixes all the POSIX behaviour violations in the open/close paths. Begin by adding the tty port usage Signed-off-by: Alan Cox <alan@linux.intel.com> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> --- drivers/char/nozomi.c | 115 +++++++++++++++++++++++++++++-------------------- 1 files changed, 68 insertions(+), 47 deletions(-) diff --git a/drivers/char/nozomi.c b/drivers/char/nozomi.c index 2ad7d37..cd405bc 100644 --- a/drivers/char/nozomi.c +++ b/drivers/char/nozomi.c @@ -371,6 +371,8 @@ struct port { struct mutex tty_sem; wait_queue_head_t tty_wait; struct async_icount tty_icount; + + struct nozomi *dc; }; /* Private data one for each card in the system */ @@ -414,6 +416,8 @@ MODULE_DEVICE_TABLE(pci, nozomi_pci_tbl); static struct nozomi *ndevs[NOZOMI_MAX_CARDS]; static struct tty_driver *ntty_driver; +static const struct tty_port_operations noz_tty_port_ops; + /* * find card by tty_index */ @@ -1473,9 +1477,11 @@ static int __devinit nozomi_card_init(struct pci_dev *pdev, for (i = 0; i < MAX_PORT; i++) { struct device *tty_dev; - - mutex_init(&dc->port[i].tty_sem); - tty_port_init(&dc->port[i].port); + struct port *port = &dc->port[i]; + port->dc = dc; + mutex_init(&port->tty_sem); + tty_port_init(&port->port); + port->port.ops = &noz_tty_port_ops; tty_dev = tty_register_device(ntty_driver, dc->index_start + i, &pdev->dev); @@ -1600,67 +1606,74 @@ static void set_dtr(const struct tty_struct *tty, int dtr) * ---------------------------------------------------------------------------- */ -/* Called when the userspace process opens the tty, /dev/noz*. */ -static int ntty_open(struct tty_struct *tty, struct file *file) +static int ntty_install(struct tty_driver *driver, struct tty_struct *tty) { struct port *port = get_port_by_tty(tty); struct nozomi *dc = get_dc_by_tty(tty); - unsigned long flags; - + int ret; if (!port || !dc || dc->state != NOZOMI_STATE_READY) return -ENODEV; - - if (mutex_lock_interruptible(&port->tty_sem)) - return -ERESTARTSYS; - - port->port.count++; - dc->open_ttys++; - - /* Enable interrupt downlink for channel */ - if (port->port.count == 1) { - tty->driver_data = port; - tty_port_tty_set(&port->port, tty); - DBG1("open: %d", port->token_dl); - spin_lock_irqsave(&dc->spin_mutex, flags); - dc->last_ier = dc->last_ier | port->token_dl; - writew(dc->last_ier, dc->reg_ier); - spin_unlock_irqrestore(&dc->spin_mutex, flags); + ret = tty_init_termios(tty); + if (ret == 0) { + tty_driver_kref_get(driver); + driver->ttys[tty->index] = tty; } - mutex_unlock(&port->tty_sem); - return 0; + return ret; } -/* Called when the userspace process close the tty, /dev/noz*. Also - called immediately if ntty_open fails in which case tty->driver_data - will be NULL an we exit by the first return */ +static void ntty_cleanup(struct tty_struct *tty) +{ + tty->driver_data = NULL; +} -static void ntty_close(struct tty_struct *tty, struct file *file) +static int ntty_activate(struct tty_port *tport, struct tty_struct *tty) { - struct nozomi *dc = get_dc_by_tty(tty); - struct port *nport = tty->driver_data; - struct tty_port *port = &nport->port; + struct port *port = container_of(tport, struct port, port); + struct nozomi *dc = port->dc; unsigned long flags; - if (!dc || !nport) - return; + DBG1("open: %d", port->token_dl); + spin_lock_irqsave(&dc->spin_mutex, flags); + dc->last_ier = dc->last_ier | port->token_dl; + writew(dc->last_ier, dc->reg_ier); + dc->open_ttys++; + spin_unlock_irqrestore(&dc->spin_mutex, flags); + printk("noz: activated %d: %p\n", tty->index, tport); + return 0; +} - /* Users cannot interrupt a close */ - mutex_lock(&nport->tty_sem); +static int ntty_open(struct tty_struct *tty, struct file *filp) +{ + struct port *port = get_port_by_tty(tty); + return tty_port_open(&port->port, tty, filp); +} - WARN_ON(!port->count); +static void ntty_shutdown(struct tty_port *tport) +{ + struct port *port = container_of(tport, struct port, port); + struct nozomi *dc = port->dc; + unsigned long flags; + DBG1("close: %d", port->token_dl); + spin_lock_irqsave(&dc->spin_mutex, flags); + dc->last_ier &= ~(port->token_dl); + writew(dc->last_ier, dc->reg_ier); dc->open_ttys--; - port->count--; + spin_unlock_irqrestore(&dc->spin_mutex, flags); + printk("noz: shutdown %p\n", tport); +} - if (port->count == 0) { - DBG1("close: %d", nport->token_dl); - tty_port_tty_set(port, NULL); - spin_lock_irqsave(&dc->spin_mutex, flags); - dc->last_ier &= ~(nport->token_dl); - writew(dc->last_ier, dc->reg_ier); - spin_unlock_irqrestore(&dc->spin_mutex, flags); - } - mutex_unlock(&nport->tty_sem); +static void ntty_close(struct tty_struct *tty, struct file *filp) +{ + struct port *port = tty->driver_data; + if (port) + tty_port_close(&port->port, tty, filp); +} + +static void ntty_hangup(struct tty_struct *tty) +{ + struct port *port = tty->driver_data; + tty_port_hangup(&port->port); } /* @@ -1906,10 +1919,16 @@ exit_in_buffer: return rval; } +static const struct tty_port_operations noz_tty_port_ops = { + .activate = ntty_activate, + .shutdown = ntty_shutdown, +}; + static const struct tty_operations tty_ops = { .ioctl = ntty_ioctl, .open = ntty_open, .close = ntty_close, + .hangup = ntty_hangup, .write = ntty_write, .write_room = ntty_write_room, .unthrottle = ntty_unthrottle, @@ -1917,6 +1936,8 @@ static const struct tty_operations tty_ops = { .chars_in_buffer = ntty_chars_in_buffer, .tiocmget = ntty_tiocmget, .tiocmset = ntty_tiocmset, + .install = ntty_install, + .cleanup = ntty_cleanup, }; /* Module initialization */ -- 1.7.0.1 ^ permalink raw reply related [flat|nested] 78+ messages in thread
* [PATCH 28/36] nozomi: Fix mutex handling 2010-03-02 23:09 [GIT PATCH] TTY patches for 2.6.33-git Greg KH ` (26 preceding siblings ...) 2010-03-02 23:36 ` [PATCH 27/36] nozomi: Add tty_port usage Greg Kroah-Hartman @ 2010-03-02 23:36 ` Greg Kroah-Hartman 2010-03-02 23:36 ` [PATCH 29/36] nozomi: Tidy up the PCI table Greg Kroah-Hartman ` (7 subsequent siblings) 35 siblings, 0 replies; 78+ messages in thread From: Greg Kroah-Hartman @ 2010-03-02 23:36 UTC (permalink / raw) To: linux-kernel; +Cc: Alan Cox, Greg Kroah-Hartman From: Alan Cox <alan@linux.intel.com> The original author didn't realise the kernel lock was a drop while sleep lock so did clever (and wrong) things to work around the non need to avoid deadlocks. Remove the cleverness and the comment (as we don't hold the BKL now anyway in those paths) Signed-off-by: Alan Cox <alan@linux.intel.com> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> --- drivers/char/nozomi.c | 34 ++++++++++++---------------------- 1 files changed, 12 insertions(+), 22 deletions(-) diff --git a/drivers/char/nozomi.c b/drivers/char/nozomi.c index cd405bc..fac9157 100644 --- a/drivers/char/nozomi.c +++ b/drivers/char/nozomi.c @@ -1693,15 +1693,7 @@ static int ntty_write(struct tty_struct *tty, const unsigned char *buffer, if (!dc || !port) return -ENODEV; - if (unlikely(!mutex_trylock(&port->tty_sem))) { - /* - * must test lock as tty layer wraps calls - * to this function with BKL - */ - dev_err(&dc->pdev->dev, "Would have deadlocked - " - "return EAGAIN\n"); - return -EAGAIN; - } + mutex_lock(&port->tty_sem); if (unlikely(!port->port.count)) { DBG1(" "); @@ -1741,25 +1733,23 @@ exit: * This method is called by the upper tty layer. * #according to sources N_TTY.c it expects a value >= 0 and * does not check for negative values. + * + * If the port is unplugged report lots of room and let the bits + * dribble away so we don't block anything. */ static int ntty_write_room(struct tty_struct *tty) { struct port *port = tty->driver_data; - int room = 0; + int room = 4096; const struct nozomi *dc = get_dc_by_tty(tty); - if (!dc || !port) - return 0; - if (!mutex_trylock(&port->tty_sem)) - return 0; - - if (!port->port.count) - goto exit; - - room = port->fifo_ul.size - kfifo_len(&port->fifo_ul); - -exit: - mutex_unlock(&port->tty_sem); + if (dc) { + mutex_lock(&port->tty_sem); + if (port->port.count) + room = port->fifo_ul.size - + kfifo_len(&port->fifo_ul); + mutex_unlock(&port->tty_sem); + } return room; } -- 1.7.0.1 ^ permalink raw reply related [flat|nested] 78+ messages in thread
* [PATCH 29/36] nozomi: Tidy up the PCI table 2010-03-02 23:09 [GIT PATCH] TTY patches for 2.6.33-git Greg KH ` (27 preceding siblings ...) 2010-03-02 23:36 ` [PATCH 28/36] nozomi: Fix mutex handling Greg Kroah-Hartman @ 2010-03-02 23:36 ` Greg Kroah-Hartman 2010-03-02 23:36 ` [PATCH 30/36] serial: timberdale: Remove dependancies Greg Kroah-Hartman ` (6 subsequent siblings) 35 siblings, 0 replies; 78+ messages in thread From: Greg Kroah-Hartman @ 2010-03-02 23:36 UTC (permalink / raw) To: linux-kernel; +Cc: Alan Cox, Greg Kroah-Hartman From: Alan Cox <alan@linux.intel.com> Signed-off-by: Alan Cox <alan@linux.intel.com> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> --- drivers/char/nozomi.c | 6 +----- 1 files changed, 1 insertions(+), 5 deletions(-) diff --git a/drivers/char/nozomi.c b/drivers/char/nozomi.c index fac9157..584910f 100644 --- a/drivers/char/nozomi.c +++ b/drivers/char/nozomi.c @@ -136,10 +136,6 @@ static int debug; #define RECEIVE_BUF_MAX 4 -/* Define all types of vendors and devices to support */ -#define VENDOR1 0x1931 /* Vendor Option */ -#define DEVICE1 0x000c /* HSDPA card */ - #define R_IIR 0x0000 /* Interrupt Identity Register */ #define R_FCR 0x0000 /* Flow Control Register */ #define R_IER 0x0004 /* Interrupt Enable Register */ @@ -407,7 +403,7 @@ struct buffer { /* Global variables */ static const struct pci_device_id nozomi_pci_tbl[] __devinitconst = { - {PCI_DEVICE(VENDOR1, DEVICE1)}, + {PCI_DEVICE(0x1931, 0x000c)}, /* Nozomi HSDPA */ {}, }; -- 1.7.0.1 ^ permalink raw reply related [flat|nested] 78+ messages in thread
* [PATCH 30/36] serial: timberdale: Remove dependancies 2010-03-02 23:09 [GIT PATCH] TTY patches for 2.6.33-git Greg KH ` (28 preceding siblings ...) 2010-03-02 23:36 ` [PATCH 29/36] nozomi: Tidy up the PCI table Greg Kroah-Hartman @ 2010-03-02 23:36 ` Greg Kroah-Hartman 2010-03-02 23:36 ` [PATCH 31/36] tty: Fix the ldisc hangup race Greg Kroah-Hartman ` (5 subsequent siblings) 35 siblings, 0 replies; 78+ messages in thread From: Greg Kroah-Hartman @ 2010-03-02 23:36 UTC (permalink / raw) To: linux-kernel; +Cc: Alan Cox, Greg Kroah-Hartman From: Alan Cox <alan@linux.intel.com> MFD_TIMBERDALE doesn't appear to be defined anywhere. However the code in question can build happily without platform specifics so remove the check Signed-off-by: Alan Cox <alan@linux.intel.com> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> --- drivers/serial/Kconfig | 1 - 1 files changed, 0 insertions(+), 1 deletions(-) diff --git a/drivers/serial/Kconfig b/drivers/serial/Kconfig index cb935b1..746e070 100644 --- a/drivers/serial/Kconfig +++ b/drivers/serial/Kconfig @@ -1449,7 +1449,6 @@ config SERIAL_BFIN_SPORT3_UART config SERIAL_TIMBERDALE tristate "Support for timberdale UART" - depends on MFD_TIMBERDALE select SERIAL_CORE ---help--- Add support for UART controller on timberdale. -- 1.7.0.1 ^ permalink raw reply related [flat|nested] 78+ messages in thread
* [PATCH 31/36] tty: Fix the ldisc hangup race 2010-03-02 23:09 [GIT PATCH] TTY patches for 2.6.33-git Greg KH ` (29 preceding siblings ...) 2010-03-02 23:36 ` [PATCH 30/36] serial: timberdale: Remove dependancies Greg Kroah-Hartman @ 2010-03-02 23:36 ` Greg Kroah-Hartman 2010-03-02 23:36 ` [PATCH 32/36] tty: Fix up char drivers request_room usage Greg Kroah-Hartman ` (4 subsequent siblings) 35 siblings, 0 replies; 78+ messages in thread From: Greg Kroah-Hartman @ 2010-03-02 23:36 UTC (permalink / raw) To: linux-kernel; +Cc: Alan Cox, stable, Greg Kroah-Hartman From: Alan Cox <alan@linux.intel.com> This was noticed by Matthias Urlichs and he proposed a fix. This patch does the fixing a different way to avoid introducing several new race conditions into the code. The problem case is TTY_DRIVER_RESET_TERMIOS = 0. In that case while we abort the ldisc change, the hangup processing has not cleaned up and restarted the ldisc either. We can't restart the ldisc stuff in the set_ldisc as we don't know what the hangup did and may touch stuff we shouldn't as we are no longer supposed to influence the tty at that point in case it has been re-opened before we get rescheduled. Instead do it the simple way. Always re-init the ldisc on the hangup, but use TTY_DRIVER_RESET_TERMIOS to indicate that we should force N_TTY. Signed-off-by: Alan Cox <alan@linux.intel.com> Cc: stable <stable@kernel.org> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> --- drivers/char/tty_ldisc.c | 50 +++++++++++++++++++++++++++------------------ 1 files changed, 30 insertions(+), 20 deletions(-) diff --git a/drivers/char/tty_ldisc.c b/drivers/char/tty_ldisc.c index 3f653f7..500e740 100644 --- a/drivers/char/tty_ldisc.c +++ b/drivers/char/tty_ldisc.c @@ -706,12 +706,13 @@ static void tty_reset_termios(struct tty_struct *tty) /** * tty_ldisc_reinit - reinitialise the tty ldisc * @tty: tty to reinit + * @ldisc: line discipline to reinitialize * - * Switch the tty back to N_TTY line discipline and leave the - * ldisc state closed + * Switch the tty to a line discipline and leave the ldisc + * state closed */ -static void tty_ldisc_reinit(struct tty_struct *tty) +static void tty_ldisc_reinit(struct tty_struct *tty, int ldisc) { struct tty_ldisc *ld; @@ -721,10 +722,10 @@ static void tty_ldisc_reinit(struct tty_struct *tty) /* * Switch the line discipline back */ - ld = tty_ldisc_get(N_TTY); + ld = tty_ldisc_get(ldisc); BUG_ON(IS_ERR(ld)); tty_ldisc_assign(tty, ld); - tty_set_termios_ldisc(tty, N_TTY); + tty_set_termios_ldisc(tty, ldisc); } /** @@ -745,6 +746,8 @@ static void tty_ldisc_reinit(struct tty_struct *tty) void tty_ldisc_hangup(struct tty_struct *tty) { struct tty_ldisc *ld; + int reset = tty->driver->flags & TTY_DRIVER_RESET_TERMIOS; + int err = 0; /* * FIXME! What are the locking issues here? This may me overdoing @@ -772,25 +775,32 @@ void tty_ldisc_hangup(struct tty_struct *tty) wake_up_interruptible_poll(&tty->read_wait, POLLIN); /* * Shutdown the current line discipline, and reset it to - * N_TTY. + * N_TTY if need be. + * + * Avoid racing set_ldisc or tty_ldisc_release */ - if (tty->driver->flags & TTY_DRIVER_RESET_TERMIOS) { - /* Avoid racing set_ldisc or tty_ldisc_release */ - mutex_lock(&tty->ldisc_mutex); - tty_ldisc_halt(tty); - if (tty->ldisc) { /* Not yet closed */ - /* Switch back to N_TTY */ - tty_ldisc_reinit(tty); - /* At this point we have a closed ldisc and we want to - reopen it. We could defer this to the next open but - it means auditing a lot of other paths so this is - a FIXME */ + mutex_lock(&tty->ldisc_mutex); + tty_ldisc_halt(tty); + /* At this point we have a closed ldisc and we want to + reopen it. We could defer this to the next open but + it means auditing a lot of other paths so this is + a FIXME */ + if (tty->ldisc) { /* Not yet closed */ + if (reset == 0) { + tty_ldisc_reinit(tty, tty->termios->c_line); + err = tty_ldisc_open(tty, tty->ldisc); + } + /* If the re-open fails or we reset then go to N_TTY. The + N_TTY open cannot fail */ + if (reset || err) { + tty_ldisc_reinit(tty, N_TTY); WARN_ON(tty_ldisc_open(tty, tty->ldisc)); - tty_ldisc_enable(tty); } - mutex_unlock(&tty->ldisc_mutex); - tty_reset_termios(tty); + tty_ldisc_enable(tty); } + mutex_unlock(&tty->ldisc_mutex); + if (reset) + tty_reset_termios(tty); } /** -- 1.7.0.1 ^ permalink raw reply related [flat|nested] 78+ messages in thread
* [PATCH 32/36] tty: Fix up char drivers request_room usage 2010-03-02 23:09 [GIT PATCH] TTY patches for 2.6.33-git Greg KH ` (30 preceding siblings ...) 2010-03-02 23:36 ` [PATCH 31/36] tty: Fix the ldisc hangup race Greg Kroah-Hartman @ 2010-03-02 23:36 ` Greg Kroah-Hartman 2010-03-02 23:36 ` [PATCH 33/36] tty: Keep the default buffering to sub-page units Greg Kroah-Hartman ` (3 subsequent siblings) 35 siblings, 0 replies; 78+ messages in thread From: Greg Kroah-Hartman @ 2010-03-02 23:36 UTC (permalink / raw) To: linux-kernel; +Cc: Alan Cox, Greg Kroah-Hartman From: Alan Cox <alan@linux.intel.com> We can't change them all but quite a few misuse it. Signed-off-by: Alan Cox <alan@linux.intel.com> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> --- drivers/char/nozomi.c | 2 -- drivers/char/serial167.c | 3 +-- drivers/char/specialix.c | 2 -- drivers/serial/icom.c | 1 - drivers/serial/ioc3_serial.c | 3 +-- 5 files changed, 2 insertions(+), 9 deletions(-) diff --git a/drivers/char/nozomi.c b/drivers/char/nozomi.c index 584910f..a3f32a1 100644 --- a/drivers/char/nozomi.c +++ b/drivers/char/nozomi.c @@ -853,8 +853,6 @@ static int receive_data(enum port_type index, struct nozomi *dc) goto put; } - tty_buffer_request_room(tty, size); - while (size > 0) { read_mem32((u32 *) buf, addr + offset, RECEIVE_BUF_MAX); diff --git a/drivers/char/serial167.c b/drivers/char/serial167.c index 452370a..986aa60 100644 --- a/drivers/char/serial167.c +++ b/drivers/char/serial167.c @@ -658,8 +658,7 @@ static irqreturn_t cd2401_rx_interrupt(int irq, void *dev_id) info->mon.char_max = char_count; info->mon.char_last = char_count; #endif - len = tty_buffer_request_room(tty, char_count); - while (len--) { + while (char_count--) { data = base_addr[CyRDR]; tty_insert_flip_char(tty, data, TTY_NORMAL); #ifdef CYCLOM_16Y_HACK diff --git a/drivers/char/specialix.c b/drivers/char/specialix.c index 268e17f..07ac14d 100644 --- a/drivers/char/specialix.c +++ b/drivers/char/specialix.c @@ -646,8 +646,6 @@ static void sx_receive(struct specialix_board *bp) dprintk(SX_DEBUG_RX, "port: %p: count: %d\n", port, count); port->hits[count > 8 ? 9 : count]++; - tty_buffer_request_room(tty, count); - while (count--) tty_insert_flip_char(tty, sx_in(bp, CD186x_RDR), TTY_NORMAL); tty_flip_buffer_push(tty); diff --git a/drivers/serial/icom.c b/drivers/serial/icom.c index 6e715b7..53a4682 100644 --- a/drivers/serial/icom.c +++ b/drivers/serial/icom.c @@ -751,7 +751,6 @@ static void recv_interrupt(u16 port_int_reg, struct icom_port *icom_port) trace(icom_port, "FID_STATUS", status); count = cpu_to_le16(icom_port->statStg->rcv[rcv_buff].leLength); - count = tty_buffer_request_room(tty, count); trace(icom_port, "RCV_COUNT", count); trace(icom_port, "REAL_COUNT", count); diff --git a/drivers/serial/ioc3_serial.c b/drivers/serial/ioc3_serial.c index 85dc041..23ba6b4 100644 --- a/drivers/serial/ioc3_serial.c +++ b/drivers/serial/ioc3_serial.c @@ -1411,8 +1411,7 @@ static int receive_chars(struct uart_port *the_port) read_count = do_read(the_port, ch, MAX_CHARS); if (read_count > 0) { flip = 1; - read_room = tty_buffer_request_room(tty, read_count); - tty_insert_flip_string(tty, ch, read_room); + read_room = tty_insert_flip_string(tty, ch, read_count); the_port->icount.rx += read_count; } spin_unlock_irqrestore(&the_port->lock, pflags); -- 1.7.0.1 ^ permalink raw reply related [flat|nested] 78+ messages in thread
* [PATCH 33/36] tty: Keep the default buffering to sub-page units 2010-03-02 23:09 [GIT PATCH] TTY patches for 2.6.33-git Greg KH ` (31 preceding siblings ...) 2010-03-02 23:36 ` [PATCH 32/36] tty: Fix up char drivers request_room usage Greg Kroah-Hartman @ 2010-03-02 23:36 ` Greg Kroah-Hartman 2010-03-02 23:36 ` [PATCH 34/36] tty: Add a new VT mode which is like VT_PROCESS but doesn't require a VT_RELDISP ioctl call Greg Kroah-Hartman ` (2 subsequent siblings) 35 siblings, 0 replies; 78+ messages in thread From: Greg Kroah-Hartman @ 2010-03-02 23:36 UTC (permalink / raw) To: linux-kernel; +Cc: Alan Cox, Greg Kroah-Hartman From: Alan Cox <alan@linux.intel.com> We allocate during interrupts so while our buffering is normally diced up small anyway on some hardware at speed we can pressure the VM excessively for page pairs. We don't really need big buffers to be linear so don't try so hard. In order to make this work well we will tidy up excess callers to request_room, which cannot itself enforce this break up. Signed-off-by: Alan Cox <alan@linux.intel.com> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> --- drivers/char/tty_buffer.c | 6 ++++-- include/linux/tty.h | 10 ++++++++++ 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/drivers/char/tty_buffer.c b/drivers/char/tty_buffer.c index 66fa4e1..f27c4d6 100644 --- a/drivers/char/tty_buffer.c +++ b/drivers/char/tty_buffer.c @@ -247,7 +247,8 @@ int tty_insert_flip_string(struct tty_struct *tty, const unsigned char *chars, { int copied = 0; do { - int space = tty_buffer_request_room(tty, size - copied); + int goal = min(size - copied, TTY_BUFFER_PAGE); + int space = tty_buffer_request_room(tty, goal); struct tty_buffer *tb = tty->buf.tail; /* If there is no space then tb may be NULL */ if (unlikely(space == 0)) @@ -283,7 +284,8 @@ int tty_insert_flip_string_flags(struct tty_struct *tty, { int copied = 0; do { - int space = tty_buffer_request_room(tty, size - copied); + int goal = min(size - copied, TTY_BUFFER_PAGE); + int space = tty_buffer_request_room(tty, goal); struct tty_buffer *tb = tty->buf.tail; /* If there is no space then tb may be NULL */ if (unlikely(space == 0)) diff --git a/include/linux/tty.h b/include/linux/tty.h index 6abfcf5..d96e588 100644 --- a/include/linux/tty.h +++ b/include/linux/tty.h @@ -68,6 +68,16 @@ struct tty_buffer { unsigned long data[0]; }; +/* + * We default to dicing tty buffer allocations to this many characters + * in order to avoid multiple page allocations. We assume tty_buffer itself + * is under 256 bytes. See tty_buffer_find for the allocation logic this + * must match + */ + +#define TTY_BUFFER_PAGE ((PAGE_SIZE - 256) / 2) + + struct tty_bufhead { struct delayed_work work; spinlock_t lock; -- 1.7.0.1 ^ permalink raw reply related [flat|nested] 78+ messages in thread
* [PATCH 34/36] tty: Add a new VT mode which is like VT_PROCESS but doesn't require a VT_RELDISP ioctl call 2010-03-02 23:09 [GIT PATCH] TTY patches for 2.6.33-git Greg KH ` (32 preceding siblings ...) 2010-03-02 23:36 ` [PATCH 33/36] tty: Keep the default buffering to sub-page units Greg Kroah-Hartman @ 2010-03-02 23:36 ` Greg Kroah-Hartman 2010-03-02 23:36 ` [PATCH 35/36] jsm: removing the uart structure and filename on error Greg Kroah-Hartman 2010-03-02 23:36 ` [PATCH 36/36] jsm: fixing error if the driver fails to load Greg Kroah-Hartman 35 siblings, 0 replies; 78+ messages in thread From: Greg Kroah-Hartman @ 2010-03-02 23:36 UTC (permalink / raw) To: linux-kernel; +Cc: Ari Entlich, Greg Kroah-Hartman From: Ari Entlich <atrigent@ccs.neu.edu> This new VT mode (VT_PROCESS_AUTO) does everything that VT_PROCESS does except that it doesn't wait for a VT_RELDISP ioctl before switching away from a VT with that mode. If the X server eventually uses this new mode, debugging and crash recovery should become easier. This is because even when currently in the VT of a frozen X server it would still be possible to switch out by doing SysRq-r and then CTRL-<number of a text vt>, sshing in and doing chvt <number of a text vt>, or any other method of VT switching. The general concensus on #xorg-devel seems to be that it should be safe to use this with X now that we have KMS. This also moves the VT_ACKACQ define to a more appropriate place, for clarity's sake. Signed-off-by: Ari Entlich <atrigent@ccs.neu.edu> Acked-by: Alan Cox <alan@linux.intel.com> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> --- drivers/char/vt_ioctl.c | 39 ++++++++++++++++++++------------------- include/linux/vt.h | 3 ++- 2 files changed, 22 insertions(+), 20 deletions(-) diff --git a/drivers/char/vt_ioctl.c b/drivers/char/vt_ioctl.c index 6aa1028..87778dc 100644 --- a/drivers/char/vt_ioctl.c +++ b/drivers/char/vt_ioctl.c @@ -888,7 +888,7 @@ int vt_ioctl(struct tty_struct *tty, struct file * file, ret = -EFAULT; goto out; } - if (tmp.mode != VT_AUTO && tmp.mode != VT_PROCESS) { + if (tmp.mode != VT_AUTO && tmp.mode != VT_PROCESS && tmp.mode != VT_PROCESS_AUTO) { ret = -EINVAL; goto out; } @@ -1622,7 +1622,7 @@ static void complete_change_console(struct vc_data *vc) * telling it that it has acquired. Also check if it has died and * clean up (similar to logic employed in change_console()) */ - if (vc->vt_mode.mode == VT_PROCESS) { + if (vc->vt_mode.mode == VT_PROCESS || vc->vt_mode.mode == VT_PROCESS_AUTO) { /* * Send the signal as privileged - kill_pid() will * tell us if the process has gone or something else @@ -1682,7 +1682,7 @@ void change_console(struct vc_data *new_vc) * vt to auto control. */ vc = vc_cons[fg_console].d; - if (vc->vt_mode.mode == VT_PROCESS) { + if (vc->vt_mode.mode == VT_PROCESS || vc->vt_mode.mode == VT_PROCESS_AUTO) { /* * Send the signal as privileged - kill_pid() will * tell us if the process has gone or something else @@ -1693,27 +1693,28 @@ void change_console(struct vc_data *new_vc) */ vc->vt_newvt = new_vc->vc_num; if (kill_pid(vc->vt_pid, vc->vt_mode.relsig, 1) == 0) { + if(vc->vt_mode.mode == VT_PROCESS) + /* + * It worked. Mark the vt to switch to and + * return. The process needs to send us a + * VT_RELDISP ioctl to complete the switch. + */ + return; + } else { /* - * It worked. Mark the vt to switch to and - * return. The process needs to send us a - * VT_RELDISP ioctl to complete the switch. + * The controlling process has died, so we revert back to + * normal operation. In this case, we'll also change back + * to KD_TEXT mode. I'm not sure if this is strictly correct + * but it saves the agony when the X server dies and the screen + * remains blanked due to KD_GRAPHICS! It would be nice to do + * this outside of VT_PROCESS but there is no single process + * to account for and tracking tty count may be undesirable. */ - return; + reset_vc(vc); } /* - * The controlling process has died, so we revert back to - * normal operation. In this case, we'll also change back - * to KD_TEXT mode. I'm not sure if this is strictly correct - * but it saves the agony when the X server dies and the screen - * remains blanked due to KD_GRAPHICS! It would be nice to do - * this outside of VT_PROCESS but there is no single process - * to account for and tracking tty count may be undesirable. - */ - reset_vc(vc); - - /* - * Fall through to normal (VT_AUTO) handling of the switch... + * Fall through to normal (VT_AUTO and VT_PROCESS_AUTO) handling of the switch... */ } diff --git a/include/linux/vt.h b/include/linux/vt.h index d5dd0bc..778b7b2 100644 --- a/include/linux/vt.h +++ b/include/linux/vt.h @@ -27,7 +27,7 @@ struct vt_mode { #define VT_SETMODE 0x5602 /* set mode of active vt */ #define VT_AUTO 0x00 /* auto vt switching */ #define VT_PROCESS 0x01 /* process controls switching */ -#define VT_ACKACQ 0x02 /* acknowledge switch */ +#define VT_PROCESS_AUTO 0x02 /* process is notified of switching */ struct vt_stat { unsigned short v_active; /* active vt */ @@ -38,6 +38,7 @@ struct vt_stat { #define VT_SENDSIG 0x5604 /* signal to send to bitmask of vts */ #define VT_RELDISP 0x5605 /* release display */ +#define VT_ACKACQ 0x02 /* acknowledge switch */ #define VT_ACTIVATE 0x5606 /* make vt active */ #define VT_WAITACTIVE 0x5607 /* wait for vt active */ -- 1.7.0.1 ^ permalink raw reply related [flat|nested] 78+ messages in thread
* [PATCH 35/36] jsm: removing the uart structure and filename on error 2010-03-02 23:09 [GIT PATCH] TTY patches for 2.6.33-git Greg KH ` (33 preceding siblings ...) 2010-03-02 23:36 ` [PATCH 34/36] tty: Add a new VT mode which is like VT_PROCESS but doesn't require a VT_RELDISP ioctl call Greg Kroah-Hartman @ 2010-03-02 23:36 ` Greg Kroah-Hartman 2010-03-02 23:36 ` [PATCH 36/36] jsm: fixing error if the driver fails to load Greg Kroah-Hartman 35 siblings, 0 replies; 78+ messages in thread From: Greg Kroah-Hartman @ 2010-03-02 23:36 UTC (permalink / raw) To: linux-kernel; +Cc: Breno Leitao, Greg Kroah-Hartman From: Breno Leitao <leitao@linux.vnet.ibm.com> If jsm fails to load, then remove the uart stuff, otherwise, the things (as files), will be there forever (even when the module is unloaded). If you try to reload the module, the following message appears: kobject_add_internal failed for ttyn1 with -EEXIST, don't try to register things with the same name in the same directory. This patch remove the uart things when the driver fails. Signed-off-by: Breno Leitao <leitao@linux.vnet.ibm.com> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> --- drivers/serial/jsm/jsm_driver.c | 1 + 1 files changed, 1 insertions(+), 0 deletions(-) diff --git a/drivers/serial/jsm/jsm_driver.c b/drivers/serial/jsm/jsm_driver.c index 108c3e0..12cb5e4 100644 --- a/drivers/serial/jsm/jsm_driver.c +++ b/drivers/serial/jsm/jsm_driver.c @@ -179,6 +179,7 @@ static int __devinit jsm_probe_one(struct pci_dev *pdev, const struct pci_device return 0; out_free_irq: + jsm_remove_uart_port(brd); free_irq(brd->irq, brd); out_iounmap: iounmap(brd->re_map_membase); -- 1.7.0.1 ^ permalink raw reply related [flat|nested] 78+ messages in thread
* [PATCH 36/36] jsm: fixing error if the driver fails to load 2010-03-02 23:09 [GIT PATCH] TTY patches for 2.6.33-git Greg KH ` (34 preceding siblings ...) 2010-03-02 23:36 ` [PATCH 35/36] jsm: removing the uart structure and filename on error Greg Kroah-Hartman @ 2010-03-02 23:36 ` Greg Kroah-Hartman 35 siblings, 0 replies; 78+ messages in thread From: Greg Kroah-Hartman @ 2010-03-02 23:36 UTC (permalink / raw) To: linux-kernel; +Cc: Breno Leitao, Greg Kroah-Hartman From: Breno Leitao <leitao@linux.vnet.ibm.com> Currently if the driver fails to register on port, the kernel crashes with the following stack: cpu 0x1: Vector: 300 (Data Access) at [c0000000e0303090] pc: c00000000039aa74: .__mutex_lock_slowpath+0x44/0x10c lr: c00000000039aa58: .__mutex_lock_slowpath+0x28/0x10c [c0000000e03033c0] c00000000026b074 .uart_remove_one_port+0xbc/0x16c [c0000000e0303460] d0000000000e0554 .jsm_remove_uart_port+0x8c/0x10c [jsm] [c0000000e03034f0] d0000000000dc034 .jsm_remove_one+0x34/0x108 [jsm] [c0000000e0303590] c0000000001f4aa0 .pci_device_remove+0x48/0x74 ... This patch just fixes the code flow to abort the load when an error is detected. Signed-off-by: Breno Leitao <leitao@linux.vnet.ibm.com> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> --- drivers/serial/jsm/jsm_tty.c | 9 ++++++--- 1 files changed, 6 insertions(+), 3 deletions(-) diff --git a/drivers/serial/jsm/jsm_tty.c b/drivers/serial/jsm/jsm_tty.c index cd95e21..5673ca9 100644 --- a/drivers/serial/jsm/jsm_tty.c +++ b/drivers/serial/jsm/jsm_tty.c @@ -432,7 +432,7 @@ int __devinit jsm_tty_init(struct jsm_board *brd) int jsm_uart_port_init(struct jsm_board *brd) { - int i; + int i, rc; unsigned int line; struct jsm_channel *ch; @@ -467,8 +467,11 @@ int jsm_uart_port_init(struct jsm_board *brd) } else set_bit(line, linemap); brd->channels[i]->uart_port.line = line; - if (uart_add_one_port (&jsm_uart_driver, &brd->channels[i]->uart_port)) - printk(KERN_INFO "jsm: add device failed\n"); + rc = uart_add_one_port (&jsm_uart_driver, &brd->channels[i]->uart_port); + if (rc){ + printk(KERN_INFO "jsm: Port %d failed. Aborting...\n", i); + return rc; + } else printk(KERN_INFO "jsm: Port %d added\n", i); } -- 1.7.0.1 ^ permalink raw reply related [flat|nested] 78+ messages in thread
* [GIT PATCH] TTY patches for 2.6.33-git
@ 2009-12-11 23:28 Greg KH
2009-12-12 8:46 ` Ingo Molnar
0 siblings, 1 reply; 78+ messages in thread
From: Greg KH @ 2009-12-11 23:28 UTC (permalink / raw)
To: Linus Torvalds, Andrew Morton; +Cc: linux-kernel
Here's the big TTY patchset for your .33-git tree.
Lots of tiny things, and one driver that had been broken for a long time
is removed.
Please pull from:
master.kernel.org:/pub/scm/linux/kernel/git/gregkh/tty-2.6.git/
Patches will be sent to the linux-kernel mailing list, if anyone wants
to see them.
thanks,
greg k-h
------------
Documentation/serial/hayes-esp.txt | 154 --
Documentation/serial/tty.txt | 9 +-
arch/xtensa/platforms/iss/console.c | 2 +-
drivers/char/Kconfig | 13 -
drivers/char/Makefile | 1 -
drivers/char/bfin_jtag_comm.c | 2 +-
drivers/char/epca.c | 2 +-
drivers/char/esp.c | 2533 ----------------------------------
drivers/char/isicom.c | 115 +--
drivers/char/istallion.c | 185 +--
drivers/char/moxa.c | 289 ++---
drivers/char/mxser.c | 248 ++--
drivers/char/pcmcia/ipwireless/tty.c | 2 +-
drivers/char/pty.c | 2 +-
drivers/char/riscom8.c | 89 +-
drivers/char/stallion.c | 129 +--
drivers/char/tty_io.c | 151 ++-
drivers/char/tty_ldisc.c | 23 +-
drivers/char/tty_port.c | 97 ++-
drivers/mmc/card/sdio_uart.c | 303 +++--
drivers/serial/8250.c | 24 +-
drivers/serial/jsm/jsm.h | 8 -
drivers/serial/jsm/jsm_driver.c | 48 +-
drivers/serial/jsm/jsm_neo.c | 8 -
drivers/serial/jsm/jsm_tty.c | 6 +-
drivers/serial/pxa.c | 13 +-
drivers/serial/serial_core.c | 33 +-
drivers/usb/serial/opticon.c | 7 +-
drivers/usb/serial/usb-serial.c | 83 +-
fs/devpts/inode.c | 16 +-
include/linux/Kbuild | 1 -
include/linux/hayesesp.h | 114 --
include/linux/isicom.h | 1 +
include/linux/tty.h | 25 +-
include/linux/usb/serial.h | 3 -
kernel/exit.c | 2 +-
36 files changed, 921 insertions(+), 3820 deletions(-)
delete mode 100644 Documentation/serial/hayes-esp.txt
delete mode 100644 drivers/char/esp.c
delete mode 100644 include/linux/hayesesp.h
---------------
Alan Cox (41):
tty: esp: remove broken driver
tty: istallion: Kill off the BKL ioctl
tty: stallion: kill BKL ioctl
tty_port: add "tty_port_open" helper
tty_port: coding style cleaning pass
usb_serial: Use the shutdown() operation
usb_serial: Kill port mutex
opticon: Fix resume logic
tty_port: Move hupcl handling
sdio_uart: use tty_port
sdio_uart: refcount the tty objects
sdio_uart: Move the open lock
tty: sdio_uart: Switch to the open/close helpers
tty: sdio_uart: Fix termios handling
tty: sdio_uart: Style fixes
tty: sdio_uart: add modem functionality
tty: sdio_uart: Fix the locking on "func" for new code
tty: tty_port: Change the buffer allocator locking
tty: riscom8: switch to the tty_port_open API
tty: tty_port: Add IO_ERROR bit handling
tty: tty_port: Move the IO_ERROR clear
tty: stallion: Convert to the tty_port_open/close methods
tty: istallion: tty port open/close methods
tty: tty_port: Add a kref object to the tty port
tty: isicom: switch to the new tty_port_open helper
tty: isicom: sort out the board init logic
tty: mxser: use the tty_port_open method
tty: mxser: Use the new locking rules to fix setserial properly
tty: isicom: fix deadlock on shutdown
tty: moxa: Use more tty_port ops
tty: moxa: rework the locking a bit
tty: moxa: Locking clean up
tty: moxa: Kill off the throttle method
tty: moxa: Fix modem op locking
tty: moxa: Kill the use of lock_kernel
tty: moxa: split open lock
tty: push the BKL down into the handlers a bit
tty: Push the lock down further into the ldisc code
tty: Push the bkl down a bit in the hangup code
tty: Move the leader test in disassociate
tty: split the lock up a bit further
Alexey Dobriyan (1):
tty: const: constify remaining tty_operations
André Goddard Rosa (3):
serial: fix NULL pointer dereference
serial: cascade needless conditionals
serial, 8250: calculate irqflags bitmask before loop
Breno Leitao (1):
jsm: adding EEH handlers
Breno Leitão (7):
jsm: IRQ handlers doesn't need to have IRQ_DISABLED enabled
jsm: Rewriting a bad log message
jsm: remove the ch_custom_speed field
jsm: removing ch_old_baud field
jsm: Remove ch_cpstime field
jsm: Removing unused jsm_channel->ch_wopen field
jsm: removing the field jsm_board->intr_count
Ian Jackson (1):
Serial: Do not read IIR in serial8250_start_tx when UART_BUG_TXEN
Nicolas Pitre (1):
sdio_uart: Fix oops caused by the previous changeset
Sukadev Bhattiprolu (1):
devpts_get_tty() should validate inode
Tilman Schmidt (1):
tty: docs: serial/tty, add to ldisc methods
Uwe Kleine-König (1):
Serial: pxa: work around Errata #75
^ permalink raw reply [flat|nested] 78+ messages in thread* Re: [GIT PATCH] TTY patches for 2.6.33-git 2009-12-11 23:28 [GIT PATCH] TTY patches for 2.6.33-git Greg KH @ 2009-12-12 8:46 ` Ingo Molnar 2009-12-12 9:39 ` Andrew Morton 2009-12-12 10:42 ` Alan Cox 0 siblings, 2 replies; 78+ messages in thread From: Ingo Molnar @ 2009-12-12 8:46 UTC (permalink / raw) To: Greg KH, Alan Cox, Thomas Gleixner, Peter Zijlstra Cc: Linus Torvalds, Andrew Morton, linux-kernel [-- Attachment #1: Type: text/plain, Size: 562 bytes --] * Greg KH <gregkh@suse.de> wrote: > Here's the big TTY patchset for your .33-git tree. FYI, one of the changes in this tree is causing lockups on x86. Config attached. Possible suspects would one of these: 36ba782: tty: split the lock up a bit further 5ec93d1: tty: Move the leader test in disassociate 38c70b2: tty: Push the bkl down a bit in the hangup code f18f949: tty: Push the lock down further into the ldisc code eeb89d9: tty: push the BKL down into the handlers a bit as they deal with locking details and are fresher than two weeks. Ingo [-- Attachment #2: config --] [-- Type: text/plain, Size: 65406 bytes --] # # Automatically generated make config: don't edit # Linux kernel version: 2.6.32 # Sat Dec 12 09:32:54 2009 # # CONFIG_64BIT is not set CONFIG_X86_32=y # CONFIG_X86_64 is not set CONFIG_X86=y CONFIG_OUTPUT_FORMAT="elf32-i386" CONFIG_ARCH_DEFCONFIG="arch/x86/configs/i386_defconfig" CONFIG_GENERIC_TIME=y CONFIG_GENERIC_CMOS_UPDATE=y CONFIG_CLOCKSOURCE_WATCHDOG=y CONFIG_GENERIC_CLOCKEVENTS=y CONFIG_GENERIC_CLOCKEVENTS_BROADCAST=y CONFIG_LOCKDEP_SUPPORT=y CONFIG_STACKTRACE_SUPPORT=y CONFIG_HAVE_LATENCYTOP_SUPPORT=y CONFIG_MMU=y CONFIG_ZONE_DMA=y CONFIG_GENERIC_ISA_DMA=y CONFIG_GENERIC_IOMAP=y CONFIG_GENERIC_BUG=y CONFIG_GENERIC_HWEIGHT=y CONFIG_ARCH_MAY_HAVE_PC_FDC=y # CONFIG_RWSEM_GENERIC_SPINLOCK is not set CONFIG_RWSEM_XCHGADD_ALGORITHM=y CONFIG_ARCH_HAS_CPU_IDLE_WAIT=y CONFIG_GENERIC_CALIBRATE_DELAY=y # CONFIG_GENERIC_TIME_VSYSCALL is not set CONFIG_ARCH_HAS_CPU_RELAX=y CONFIG_ARCH_HAS_DEFAULT_IDLE=y CONFIG_ARCH_HAS_CACHE_LINE_SIZE=y CONFIG_HAVE_SETUP_PER_CPU_AREA=y CONFIG_NEED_PER_CPU_EMBED_FIRST_CHUNK=y CONFIG_NEED_PER_CPU_PAGE_FIRST_CHUNK=y # CONFIG_HAVE_CPUMASK_OF_CPU_MAP is not set CONFIG_ARCH_HIBERNATION_POSSIBLE=y CONFIG_ARCH_SUSPEND_POSSIBLE=y # CONFIG_ZONE_DMA32 is not set CONFIG_ARCH_POPULATES_NODE_MAP=y # CONFIG_AUDIT_ARCH is not set CONFIG_ARCH_SUPPORTS_OPTIMIZED_INLINING=y CONFIG_ARCH_SUPPORTS_DEBUG_PAGEALLOC=y CONFIG_GENERIC_HARDIRQS=y CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y CONFIG_GENERIC_IRQ_PROBE=y CONFIG_GENERIC_PENDING_IRQ=y CONFIG_USE_GENERIC_SMP_HELPERS=y CONFIG_X86_32_SMP=y CONFIG_X86_HT=y CONFIG_X86_TRAMPOLINE=y CONFIG_KTIME_SCALAR=y # CONFIG_BOOTPARAM_SUPPORT is not set CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" CONFIG_CONSTRUCTORS=y # # General setup # CONFIG_EXPERIMENTAL=y # CONFIG_BROKEN_BOOT_ALLOWED3 is not set CONFIG_LOCK_KERNEL=y CONFIG_INIT_ENV_ARG_LIMIT=32 CONFIG_LOCALVERSION="" CONFIG_LOCALVERSION_AUTO=y CONFIG_HAVE_KERNEL_GZIP=y CONFIG_HAVE_KERNEL_BZIP2=y CONFIG_HAVE_KERNEL_LZMA=y # CONFIG_KERNEL_GZIP is not set CONFIG_KERNEL_BZIP2=y # CONFIG_KERNEL_LZMA is not set # CONFIG_SWAP is not set # CONFIG_SYSVIPC is not set CONFIG_POSIX_MQUEUE=y # CONFIG_BSD_PROCESS_ACCT is not set # CONFIG_TASKSTATS is not set # CONFIG_AUDIT is not set # # RCU Subsystem # CONFIG_TREE_RCU=y # CONFIG_TREE_PREEMPT_RCU is not set # CONFIG_TINY_RCU is not set CONFIG_RCU_TRACE=y CONFIG_RCU_FANOUT=32 CONFIG_RCU_FANOUT_EXACT=y CONFIG_TREE_RCU_TRACE=y CONFIG_IKCONFIG=y # CONFIG_IKCONFIG_PROC is not set CONFIG_LOG_BUF_SHIFT=20 CONFIG_HAVE_UNSTABLE_SCHED_CLOCK=y # CONFIG_GROUP_SCHED is not set CONFIG_CGROUPS=y CONFIG_CGROUP_DEBUG=y # CONFIG_CGROUP_NS is not set CONFIG_CGROUP_FREEZER=y # CONFIG_CGROUP_DEVICE is not set CONFIG_CPUSETS=y CONFIG_PROC_PID_CPUSET=y CONFIG_CGROUP_CPUACCT=y # CONFIG_RESOURCE_COUNTERS is not set CONFIG_SYSFS_DEPRECATED=y CONFIG_SYSFS_DEPRECATED_V2=y CONFIG_RELAY=y CONFIG_NAMESPACES=y CONFIG_UTS_NS=y CONFIG_IPC_NS=y # CONFIG_USER_NS is not set # CONFIG_PID_NS is not set CONFIG_NET_NS=y # CONFIG_BLK_DEV_INITRD is not set # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set CONFIG_ANON_INODES=y CONFIG_EMBEDDED=y # CONFIG_UID16 is not set CONFIG_KALLSYMS=y CONFIG_KALLSYMS_ALL=y CONFIG_KALLSYMS_EXTRA_PASS=y CONFIG_HOTPLUG=y CONFIG_PRINTK=y CONFIG_BUG=y CONFIG_ELF_CORE=y CONFIG_PCSPKR_PLATFORM=y CONFIG_BASE_FULL=y CONFIG_FUTEX=y # CONFIG_EPOLL is not set # CONFIG_SIGNALFD is not set # CONFIG_TIMERFD is not set # CONFIG_EVENTFD is not set CONFIG_SHMEM=y CONFIG_AIO=y CONFIG_HAVE_PERF_EVENTS=y CONFIG_PERF_USE_VMALLOC=y # # Kernel Performance Events And Counters # CONFIG_PERF_EVENTS=y CONFIG_EVENT_PROFILE=y CONFIG_PERF_COUNTERS=y CONFIG_DEBUG_PERF_USE_VMALLOC=y # CONFIG_VM_EVENT_COUNTERS is not set # CONFIG_PCI_QUIRKS is not set CONFIG_SLUB_DEBUG=y # CONFIG_COMPAT_BRK is not set # CONFIG_SLAB is not set CONFIG_SLUB=y # CONFIG_SLOB is not set CONFIG_PROFILING=y CONFIG_TRACEPOINTS=y CONFIG_OPROFILE=m CONFIG_OPROFILE_IBS=y # CONFIG_OPROFILE_EVENT_MULTIPLEX is not set CONFIG_HAVE_OPROFILE=y # CONFIG_KPROBES is not set CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=y CONFIG_HAVE_IOREMAP_PROT=y CONFIG_HAVE_KPROBES=y CONFIG_HAVE_KRETPROBES=y CONFIG_HAVE_ARCH_TRACEHOOK=y CONFIG_HAVE_DMA_ATTRS=y CONFIG_HAVE_DMA_API_DEBUG=y CONFIG_HAVE_USER_RETURN_NOTIFIER=y CONFIG_HAVE_HW_BREAKPOINT=y # # GCOV-based kernel profiling # CONFIG_SLOW_WORK=y CONFIG_SLOW_WORK_DEBUG=y CONFIG_HAVE_GENERIC_DMA_COHERENT=y CONFIG_SLABINFO=y CONFIG_RT_MUTEXES=y CONFIG_BASE_SMALL=0 CONFIG_MODULES=y # CONFIG_MODULE_FORCE_LOAD is not set CONFIG_MODULE_UNLOAD=y CONFIG_MODULE_FORCE_UNLOAD=y # CONFIG_MODVERSIONS is not set CONFIG_MODULE_SRCVERSION_ALL=y CONFIG_STOP_MACHINE=y CONFIG_BLOCK=y # CONFIG_LBDAF is not set # CONFIG_BLK_DEV_BSG is not set CONFIG_BLK_DEV_INTEGRITY=y # CONFIG_BLK_CGROUP is not set # # IO Schedulers # CONFIG_IOSCHED_NOOP=y CONFIG_IOSCHED_DEADLINE=m CONFIG_IOSCHED_CFQ=y # CONFIG_CFQ_GROUP_IOSCHED is not set # CONFIG_DEFAULT_DEADLINE is not set CONFIG_DEFAULT_CFQ=y # CONFIG_DEFAULT_NOOP is not set CONFIG_DEFAULT_IOSCHED="cfq" # CONFIG_INLINE_SPIN_TRYLOCK is not set # CONFIG_INLINE_SPIN_TRYLOCK_BH is not set # CONFIG_INLINE_SPIN_LOCK is not set # CONFIG_INLINE_SPIN_LOCK_BH is not set # CONFIG_INLINE_SPIN_LOCK_IRQ is not set # CONFIG_INLINE_SPIN_LOCK_IRQSAVE is not set # CONFIG_INLINE_SPIN_UNLOCK is not set # CONFIG_INLINE_SPIN_UNLOCK_BH is not set # CONFIG_INLINE_SPIN_UNLOCK_IRQ is not set # CONFIG_INLINE_SPIN_UNLOCK_IRQRESTORE is not set # CONFIG_INLINE_READ_TRYLOCK is not set # CONFIG_INLINE_READ_LOCK is not set # CONFIG_INLINE_READ_LOCK_BH is not set # CONFIG_INLINE_READ_LOCK_IRQ is not set # CONFIG_INLINE_READ_LOCK_IRQSAVE is not set # CONFIG_INLINE_READ_UNLOCK is not set # CONFIG_INLINE_READ_UNLOCK_BH is not set # CONFIG_INLINE_READ_UNLOCK_IRQ is not set # CONFIG_INLINE_READ_UNLOCK_IRQRESTORE is not set # CONFIG_INLINE_WRITE_TRYLOCK is not set # CONFIG_INLINE_WRITE_LOCK is not set # CONFIG_INLINE_WRITE_LOCK_BH is not set # CONFIG_INLINE_WRITE_LOCK_IRQ is not set # CONFIG_INLINE_WRITE_LOCK_IRQSAVE is not set # CONFIG_INLINE_WRITE_UNLOCK is not set # CONFIG_INLINE_WRITE_UNLOCK_BH is not set # CONFIG_INLINE_WRITE_UNLOCK_IRQ is not set # CONFIG_INLINE_WRITE_UNLOCK_IRQRESTORE is not set # CONFIG_MUTEX_SPIN_ON_OWNER is not set CONFIG_FREEZER=y # # Processor type and features # CONFIG_TICK_ONESHOT=y CONFIG_NO_HZ=y CONFIG_HIGH_RES_TIMERS=y CONFIG_GENERIC_CLOCKEVENTS_BUILD=y CONFIG_SMP=y CONFIG_X86_MPPARSE=y CONFIG_X86_BIGSMP=y # CONFIG_X86_EXTENDED_PLATFORM is not set CONFIG_X86_SUPPORTS_MEMORY_FAILURE=y # CONFIG_SCHED_OMIT_FRAME_POINTER is not set CONFIG_PARAVIRT_GUEST=y # CONFIG_VMI is not set CONFIG_KVM_CLOCK=y CONFIG_KVM_GUEST=y # CONFIG_LGUEST_GUEST is not set CONFIG_PARAVIRT=y # CONFIG_PARAVIRT_SPINLOCKS is not set CONFIG_PARAVIRT_CLOCK=y CONFIG_PARAVIRT_DEBUG=y CONFIG_MEMTEST=y # CONFIG_M386 is not set # CONFIG_M486 is not set # CONFIG_M586 is not set # CONFIG_M586TSC is not set # CONFIG_M586MMX is not set # CONFIG_M686 is not set CONFIG_MPENTIUMII=y # CONFIG_MPENTIUMIII is not set # CONFIG_MPENTIUMM is not set # CONFIG_MPENTIUM4 is not set # CONFIG_MK6 is not set # CONFIG_MK7 is not set # CONFIG_MK8 is not set # CONFIG_MCRUSOE is not set # CONFIG_MEFFICEON is not set # CONFIG_MWINCHIPC6 is not set # CONFIG_MWINCHIP3D is not set # CONFIG_MGEODEGX1 is not set # CONFIG_MGEODE_LX is not set # CONFIG_MCYRIXIII is not set # CONFIG_MVIAC3_2 is not set # CONFIG_MVIAC7 is not set # CONFIG_MPSC is not set # CONFIG_MCORE2 is not set # CONFIG_MATOM is not set # CONFIG_GENERIC_CPU is not set # CONFIG_X86_GENERIC is not set CONFIG_X86_CPU=y CONFIG_X86_INTERNODE_CACHE_SHIFT=5 CONFIG_X86_CMPXCHG=y CONFIG_X86_L1_CACHE_SHIFT=5 CONFIG_X86_XADD=y CONFIG_X86_WP_WORKS_OK=y CONFIG_X86_INVLPG=y CONFIG_X86_BSWAP=y CONFIG_X86_POPAD_OK=y CONFIG_X86_INTEL_USERCOPY=y CONFIG_X86_USE_PPRO_CHECKSUM=y CONFIG_X86_TSC=y CONFIG_X86_CMPXCHG64=y CONFIG_X86_CMOV=y CONFIG_X86_MINIMUM_CPU_FAMILY=5 CONFIG_X86_DEBUGCTLMSR=y # CONFIG_PROCESSOR_SELECT is not set CONFIG_CPU_SUP_INTEL=y CONFIG_CPU_SUP_CYRIX_32=y CONFIG_CPU_SUP_AMD=y CONFIG_CPU_SUP_CENTAUR=y CONFIG_CPU_SUP_TRANSMETA_32=y CONFIG_CPU_SUP_UMC_32=y # CONFIG_X86_DS is not set CONFIG_HPET_TIMER=y CONFIG_HPET_EMULATE_RTC=y CONFIG_DMI=y # CONFIG_IOMMU_HELPER is not set # CONFIG_IOMMU_API is not set CONFIG_NR_CPUS=32 # CONFIG_SCHED_SMT is not set # CONFIG_SCHED_MC is not set # CONFIG_PREEMPT_NONE is not set CONFIG_PREEMPT_VOLUNTARY=y # CONFIG_PREEMPT is not set CONFIG_X86_LOCAL_APIC=y CONFIG_X86_IO_APIC=y CONFIG_X86_REROUTE_FOR_BROKEN_BOOT_IRQS=y CONFIG_X86_MCE=y CONFIG_X86_MCE_INTEL=y # CONFIG_X86_MCE_AMD is not set CONFIG_X86_ANCIENT_MCE=y CONFIG_X86_MCE_THRESHOLD=y # CONFIG_X86_MCE_INJECT is not set CONFIG_X86_THERMAL_VECTOR=y # CONFIG_VM86 is not set CONFIG_I8K=y CONFIG_X86_REBOOTFIXUPS=y CONFIG_MICROCODE=m CONFIG_MICROCODE_INTEL=y CONFIG_MICROCODE_AMD=y CONFIG_MICROCODE_OLD_INTERFACE=y # CONFIG_X86_MSR is not set CONFIG_X86_CPUID=m CONFIG_X86_CPU_DEBUG=y # CONFIG_NOHIGHMEM is not set CONFIG_HIGHMEM4G=y # CONFIG_HIGHMEM64G is not set CONFIG_VMSPLIT_3G=y # CONFIG_VMSPLIT_3G_OPT is not set # CONFIG_VMSPLIT_2G is not set # CONFIG_VMSPLIT_2G_OPT is not set # CONFIG_VMSPLIT_1G is not set CONFIG_PAGE_OFFSET=0xC0000000 CONFIG_HIGHMEM=y # CONFIG_ARCH_PHYS_ADDR_T_64BIT is not set CONFIG_ARCH_FLATMEM_ENABLE=y CONFIG_ARCH_SPARSEMEM_ENABLE=y CONFIG_ARCH_SELECT_MEMORY_MODEL=y CONFIG_ILLEGAL_POINTER_VALUE=0 CONFIG_SELECT_MEMORY_MODEL=y CONFIG_FLATMEM_MANUAL=y # CONFIG_DISCONTIGMEM_MANUAL is not set # CONFIG_SPARSEMEM_MANUAL is not set CONFIG_FLATMEM=y CONFIG_FLAT_NODE_MEM_MAP=y CONFIG_SPARSEMEM_STATIC=y CONFIG_PAGEFLAGS_EXTENDED=y CONFIG_SPLIT_PTLOCK_CPUS=4 # CONFIG_PHYS_ADDR_T_64BIT is not set CONFIG_ZONE_DMA_FLAG=1 CONFIG_BOUNCE=y CONFIG_VIRT_TO_BUS=y CONFIG_HAVE_MLOCK=y CONFIG_HAVE_MLOCKED_PAGE_BIT=y # CONFIG_KSM is not set CONFIG_DEFAULT_MMAP_MIN_ADDR=4096 CONFIG_ARCH_SUPPORTS_MEMORY_FAILURE=y CONFIG_MEMORY_FAILURE=y CONFIG_HWPOISON_INJECT=y # CONFIG_HIGHPTE is not set CONFIG_X86_CHECK_BIOS_CORRUPTION=y CONFIG_X86_BOOTPARAM_MEMORY_CORRUPTION_CHECK=y CONFIG_X86_RESERVE_LOW_64K=y CONFIG_MATH_EMULATION=y # CONFIG_MTRR is not set CONFIG_SECCOMP=y CONFIG_CC_STACKPROTECTOR=y # CONFIG_HZ_100 is not set CONFIG_HZ_250=y # CONFIG_HZ_300 is not set # CONFIG_HZ_1000 is not set CONFIG_HZ=250 CONFIG_SCHED_HRTICK=y # CONFIG_KEXEC is not set # CONFIG_CRASH_DUMP is not set CONFIG_PHYSICAL_START=0x1000000 # CONFIG_RELOCATABLE is not set CONFIG_PHYSICAL_ALIGN=0x1000000 CONFIG_HOTPLUG_CPU=y CONFIG_COMPAT_VDSO=y CONFIG_CMDLINE_BOOL=y CONFIG_CMDLINE="" # CONFIG_CMDLINE_OVERRIDE is not set CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y # # Power management and ACPI options # CONFIG_PM=y # CONFIG_PM_DEBUG is not set CONFIG_PM_SLEEP_SMP=y CONFIG_PM_SLEEP=y CONFIG_SUSPEND=y CONFIG_SUSPEND_FREEZER=y CONFIG_PM_RUNTIME=y # CONFIG_ACPI is not set # CONFIG_SFI is not set # CONFIG_APM is not set # # CPU Frequency scaling # CONFIG_CPU_FREQ=y CONFIG_CPU_FREQ_TABLE=y CONFIG_CPU_FREQ_DEBUG=y CONFIG_CPU_FREQ_STAT=m # CONFIG_CPU_FREQ_STAT_DETAILS is not set # CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE is not set # CONFIG_CPU_FREQ_DEFAULT_GOV_POWERSAVE is not set # CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND=y # CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE is not set CONFIG_CPU_FREQ_GOV_PERFORMANCE=y # CONFIG_CPU_FREQ_GOV_POWERSAVE is not set CONFIG_CPU_FREQ_GOV_USERSPACE=m CONFIG_CPU_FREQ_GOV_ONDEMAND=y # CONFIG_CPU_FREQ_GOV_CONSERVATIVE is not set # # CPUFreq processor drivers # # CONFIG_X86_POWERNOW_K6 is not set CONFIG_X86_POWERNOW_K7=y # CONFIG_X86_GX_SUSPMOD is not set CONFIG_X86_SPEEDSTEP_CENTRINO=y CONFIG_X86_SPEEDSTEP_CENTRINO_TABLE=y CONFIG_X86_SPEEDSTEP_ICH=y # CONFIG_X86_SPEEDSTEP_SMI is not set CONFIG_X86_P4_CLOCKMOD=y CONFIG_X86_CPUFREQ_NFORCE2=y CONFIG_X86_LONGRUN=y # CONFIG_X86_E_POWERSAVER is not set # # shared options # CONFIG_X86_SPEEDSTEP_LIB=y CONFIG_X86_SPEEDSTEP_RELAXED_CAP_CHECK=y CONFIG_CPU_IDLE=y CONFIG_CPU_IDLE_GOV_LADDER=y CONFIG_CPU_IDLE_GOV_MENU=y # # Bus options (PCI etc.) # CONFIG_PCI=y # CONFIG_PCI_GOBIOS is not set # CONFIG_PCI_GOMMCONFIG is not set # CONFIG_PCI_GODIRECT is not set # CONFIG_PCI_GOOLPC is not set CONFIG_PCI_GOANY=y CONFIG_PCI_BIOS=y CONFIG_PCI_DIRECT=y CONFIG_PCI_OLPC=y CONFIG_PCI_DOMAINS=y CONFIG_PCIEPORTBUS=y CONFIG_HOTPLUG_PCI_PCIE=m # CONFIG_PCIEAER is not set # CONFIG_PCIEASPM is not set CONFIG_ARCH_SUPPORTS_MSI=y # CONFIG_PCI_MSI is not set CONFIG_PCI_LEGACY=y CONFIG_PCI_DEBUG=y CONFIG_PCI_STUB=y # CONFIG_HT_IRQ is not set CONFIG_PCI_IOV=y CONFIG_ISA_DMA_API=y CONFIG_ISA=y CONFIG_EISA=y # CONFIG_EISA_VLB_PRIMING is not set CONFIG_EISA_PCI_EISA=y CONFIG_EISA_VIRTUAL_ROOT=y CONFIG_EISA_NAMES=y CONFIG_MCA=y # CONFIG_MCA_LEGACY is not set CONFIG_SCx200=y # CONFIG_SCx200HR_TIMER is not set CONFIG_OLPC=y CONFIG_PCCARD=m CONFIG_PCMCIA=m CONFIG_PCMCIA_LOAD_CIS=y # CONFIG_PCMCIA_IOCTL is not set # CONFIG_CARDBUS is not set # # PC-card bridges # CONFIG_YENTA=m CONFIG_YENTA_O2=y CONFIG_YENTA_RICOH=y # CONFIG_YENTA_TI is not set CONFIG_YENTA_TOSHIBA=y CONFIG_PD6729=m CONFIG_I82092=m # CONFIG_I82365 is not set CONFIG_TCIC=m CONFIG_PCMCIA_PROBE=y CONFIG_PCCARD_NONSTATIC=m CONFIG_HOTPLUG_PCI=m CONFIG_HOTPLUG_PCI_FAKE=m CONFIG_HOTPLUG_PCI_COMPAQ=m CONFIG_HOTPLUG_PCI_COMPAQ_NVRAM=y # CONFIG_HOTPLUG_PCI_IBM is not set CONFIG_HOTPLUG_PCI_CPCI=y CONFIG_HOTPLUG_PCI_CPCI_ZT5550=m CONFIG_HOTPLUG_PCI_CPCI_GENERIC=m # CONFIG_HOTPLUG_PCI_SHPC is not set # # Executable file formats / Emulations # CONFIG_BINFMT_ELF=y # CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set CONFIG_HAVE_AOUT=y CONFIG_BINFMT_AOUT=y CONFIG_BINFMT_MISC=m CONFIG_HAVE_ATOMIC_IOMAP=y CONFIG_NET=y # # Networking options # CONFIG_PACKET=y # CONFIG_PACKET_MMAP is not set CONFIG_UNIX=y CONFIG_XFRM=y CONFIG_XFRM_USER=y CONFIG_XFRM_SUB_POLICY=y # CONFIG_XFRM_MIGRATE is not set CONFIG_XFRM_STATISTICS=y CONFIG_XFRM_IPCOMP=y CONFIG_NET_KEY=y # CONFIG_NET_KEY_MIGRATE is not set CONFIG_INET=y CONFIG_IP_MULTICAST=y # CONFIG_IP_ADVANCED_ROUTER is not set CONFIG_IP_FIB_HASH=y CONFIG_IP_PNP=y CONFIG_IP_PNP_DHCP=y CONFIG_IP_PNP_BOOTP=y # CONFIG_IP_PNP_RARP is not set CONFIG_NET_IPIP=m CONFIG_NET_IPGRE=m # CONFIG_NET_IPGRE_BROADCAST is not set # CONFIG_IP_MROUTE is not set CONFIG_ARPD=y CONFIG_SYN_COOKIES=y CONFIG_INET_AH=y CONFIG_INET_ESP=y CONFIG_INET_IPCOMP=y CONFIG_INET_XFRM_TUNNEL=y CONFIG_INET_TUNNEL=y CONFIG_INET_XFRM_MODE_TRANSPORT=m CONFIG_INET_XFRM_MODE_TUNNEL=y # CONFIG_INET_XFRM_MODE_BEET is not set CONFIG_INET_LRO=y CONFIG_INET_DIAG=m CONFIG_INET_TCP_DIAG=m CONFIG_TCP_CONG_ADVANCED=y CONFIG_TCP_CONG_BIC=m # CONFIG_TCP_CONG_CUBIC is not set # CONFIG_TCP_CONG_WESTWOOD is not set CONFIG_TCP_CONG_HTCP=m CONFIG_TCP_CONG_HSTCP=m CONFIG_TCP_CONG_HYBLA=y # CONFIG_TCP_CONG_VEGAS is not set CONFIG_TCP_CONG_SCALABLE=y CONFIG_TCP_CONG_LP=m CONFIG_TCP_CONG_VENO=m # CONFIG_TCP_CONG_YEAH is not set CONFIG_TCP_CONG_ILLINOIS=m # CONFIG_DEFAULT_BIC is not set # CONFIG_DEFAULT_CUBIC is not set # CONFIG_DEFAULT_HTCP is not set # CONFIG_DEFAULT_VEGAS is not set # CONFIG_DEFAULT_WESTWOOD is not set CONFIG_DEFAULT_RENO=y CONFIG_DEFAULT_TCP_CONG="reno" CONFIG_TCP_MD5SIG=y CONFIG_IPV6=y CONFIG_IPV6_PRIVACY=y # CONFIG_IPV6_ROUTER_PREF is not set CONFIG_IPV6_OPTIMISTIC_DAD=y CONFIG_INET6_AH=y CONFIG_INET6_ESP=m # CONFIG_INET6_IPCOMP is not set # CONFIG_IPV6_MIP6 is not set # CONFIG_INET6_XFRM_TUNNEL is not set CONFIG_INET6_TUNNEL=y # CONFIG_INET6_XFRM_MODE_TRANSPORT is not set CONFIG_INET6_XFRM_MODE_TUNNEL=y CONFIG_INET6_XFRM_MODE_BEET=m CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION=m CONFIG_IPV6_SIT=y CONFIG_IPV6_SIT_6RD=y CONFIG_IPV6_NDISC_NODETYPE=y CONFIG_IPV6_TUNNEL=y CONFIG_IPV6_MULTIPLE_TABLES=y CONFIG_IPV6_SUBTREES=y # CONFIG_IPV6_MROUTE is not set CONFIG_NETLABEL=y CONFIG_NETWORK_SECMARK=y CONFIG_NETFILTER=y CONFIG_NETFILTER_DEBUG=y # CONFIG_NETFILTER_ADVANCED is not set # # Core Netfilter Configuration # CONFIG_NETFILTER_NETLINK=y CONFIG_NETFILTER_NETLINK_LOG=y # CONFIG_NF_CONNTRACK is not set CONFIG_NETFILTER_XTABLES=y CONFIG_NETFILTER_XT_TARGET_MARK=m CONFIG_NETFILTER_XT_TARGET_NFLOG=y CONFIG_NETFILTER_XT_TARGET_SECMARK=y CONFIG_NETFILTER_XT_TARGET_TCPMSS=m # CONFIG_NETFILTER_XT_MATCH_MARK is not set # CONFIG_NETFILTER_XT_MATCH_POLICY is not set CONFIG_IP_VS=y # CONFIG_IP_VS_IPV6 is not set CONFIG_IP_VS_DEBUG=y CONFIG_IP_VS_TAB_BITS=12 # # IPVS transport protocol load balancing support # # CONFIG_IP_VS_PROTO_TCP is not set CONFIG_IP_VS_PROTO_UDP=y CONFIG_IP_VS_PROTO_AH_ESP=y CONFIG_IP_VS_PROTO_ESP=y CONFIG_IP_VS_PROTO_AH=y # # IPVS scheduler # # CONFIG_IP_VS_RR is not set CONFIG_IP_VS_WRR=m CONFIG_IP_VS_LC=y CONFIG_IP_VS_WLC=m # CONFIG_IP_VS_LBLC is not set CONFIG_IP_VS_LBLCR=y # CONFIG_IP_VS_DH is not set CONFIG_IP_VS_SH=y CONFIG_IP_VS_SED=m CONFIG_IP_VS_NQ=y # # IPVS application helper # # # IP: Netfilter Configuration # # CONFIG_NF_DEFRAG_IPV4 is not set CONFIG_IP_NF_IPTABLES=y # CONFIG_IP_NF_FILTER is not set CONFIG_IP_NF_TARGET_LOG=m CONFIG_IP_NF_TARGET_ULOG=y CONFIG_IP_NF_MANGLE=m # # IPv6: Netfilter Configuration # CONFIG_IP6_NF_IPTABLES=y CONFIG_IP6_NF_MATCH_IPV6HEADER=m CONFIG_IP6_NF_TARGET_LOG=m # CONFIG_IP6_NF_FILTER is not set # CONFIG_IP6_NF_MANGLE is not set CONFIG_IP_DCCP=m CONFIG_INET_DCCP_DIAG=m # # DCCP CCIDs Configuration (EXPERIMENTAL) # CONFIG_IP_DCCP_CCID2_DEBUG=y CONFIG_IP_DCCP_CCID3=y CONFIG_IP_DCCP_CCID3_DEBUG=y CONFIG_IP_DCCP_CCID3_RTO=100 CONFIG_IP_DCCP_TFRC_LIB=y CONFIG_IP_DCCP_TFRC_DEBUG=y # # DCCP Kernel Hacking # # CONFIG_IP_DCCP_DEBUG is not set CONFIG_IP_SCTP=y CONFIG_SCTP_DBG_MSG=y # CONFIG_SCTP_DBG_OBJCNT is not set # CONFIG_SCTP_HMAC_NONE is not set # CONFIG_SCTP_HMAC_SHA1 is not set CONFIG_SCTP_HMAC_MD5=y CONFIG_RDS=m # CONFIG_RDS_RDMA is not set # CONFIG_RDS_TCP is not set CONFIG_RDS_DEBUG=y CONFIG_TIPC=m CONFIG_TIPC_ADVANCED=y CONFIG_TIPC_ZONES=3 CONFIG_TIPC_CLUSTERS=1 CONFIG_TIPC_NODES=255 CONFIG_TIPC_SLAVE_NODES=0 CONFIG_TIPC_PORTS=8191 CONFIG_TIPC_LOG=0 CONFIG_TIPC_DEBUG=y # CONFIG_ATM is not set CONFIG_STP=y CONFIG_GARP=y CONFIG_BRIDGE=y # CONFIG_NET_DSA is not set CONFIG_VLAN_8021Q=y CONFIG_VLAN_8021Q_GVRP=y CONFIG_DECNET=y CONFIG_DECNET_ROUTER=y CONFIG_LLC=y CONFIG_LLC2=m CONFIG_IPX=y CONFIG_IPX_INTERN=y CONFIG_ATALK=y # CONFIG_DEV_APPLETALK is not set # CONFIG_X25 is not set CONFIG_LAPB=m CONFIG_ECONET=m CONFIG_ECONET_AUNUDP=y CONFIG_ECONET_NATIVE=y CONFIG_WAN_ROUTER=y CONFIG_PHONET=y CONFIG_IEEE802154=m CONFIG_NET_SCHED=y # # Queueing/Scheduling # # CONFIG_NET_SCH_CBQ is not set CONFIG_NET_SCH_HTB=m # CONFIG_NET_SCH_HFSC is not set CONFIG_NET_SCH_PRIO=m CONFIG_NET_SCH_MULTIQ=m CONFIG_NET_SCH_RED=m # CONFIG_NET_SCH_SFQ is not set CONFIG_NET_SCH_TEQL=y CONFIG_NET_SCH_TBF=y # CONFIG_NET_SCH_GRED is not set CONFIG_NET_SCH_DSMARK=y # CONFIG_NET_SCH_NETEM is not set CONFIG_NET_SCH_DRR=m CONFIG_NET_SCH_INGRESS=m # # Classification # CONFIG_NET_CLS=y # CONFIG_NET_CLS_BASIC is not set CONFIG_NET_CLS_TCINDEX=y CONFIG_NET_CLS_ROUTE4=m CONFIG_NET_CLS_ROUTE=y CONFIG_NET_CLS_FW=y # CONFIG_NET_CLS_U32 is not set CONFIG_NET_CLS_RSVP=y CONFIG_NET_CLS_RSVP6=y CONFIG_NET_CLS_FLOW=y # CONFIG_NET_CLS_CGROUP is not set CONFIG_NET_EMATCH=y CONFIG_NET_EMATCH_STACK=32 CONFIG_NET_EMATCH_CMP=y CONFIG_NET_EMATCH_NBYTE=y CONFIG_NET_EMATCH_U32=m CONFIG_NET_EMATCH_META=y # CONFIG_NET_EMATCH_TEXT is not set CONFIG_NET_CLS_ACT=y CONFIG_NET_ACT_POLICE=y # CONFIG_NET_ACT_GACT is not set CONFIG_NET_ACT_MIRRED=y CONFIG_NET_ACT_IPT=m CONFIG_NET_ACT_NAT=y CONFIG_NET_ACT_PEDIT=y CONFIG_NET_ACT_SIMP=m # CONFIG_NET_ACT_SKBEDIT is not set # CONFIG_NET_CLS_IND is not set CONFIG_NET_SCH_FIFO=y # CONFIG_DCB is not set # # Network testing # CONFIG_NET_PKTGEN=y # CONFIG_NET_DROP_MONITOR is not set CONFIG_HAMRADIO=y # # Packet Radio protocols # CONFIG_AX25=m # CONFIG_AX25_DAMA_SLAVE is not set CONFIG_NETROM=m CONFIG_ROSE=m # # AX.25 network device drivers # CONFIG_MKISS=m CONFIG_6PACK=m CONFIG_BPQETHER=m CONFIG_SCC=m # CONFIG_SCC_DELAY is not set CONFIG_SCC_TRXECHO=y CONFIG_BAYCOM_SER_FDX=m CONFIG_BAYCOM_SER_HDX=m CONFIG_YAM=m # CONFIG_CAN is not set # CONFIG_IRDA is not set # CONFIG_BT is not set # CONFIG_AF_RXRPC is not set CONFIG_FIB_RULES=y CONFIG_WIRELESS=y CONFIG_WIRELESS_EXT=y CONFIG_WEXT_CORE=y CONFIG_WEXT_PROC=y CONFIG_WEXT_SPY=y CONFIG_WEXT_PRIV=y # CONFIG_CFG80211 is not set # CONFIG_WIRELESS_EXT_SYSFS is not set CONFIG_LIB80211=y CONFIG_LIB80211_CRYPT_WEP=y CONFIG_LIB80211_CRYPT_CCMP=y CONFIG_LIB80211_CRYPT_TKIP=y # CONFIG_LIB80211_DEBUG is not set # # CFG80211 needs to be enabled for MAC80211 # CONFIG_WIMAX=m CONFIG_WIMAX_DEBUG_LEVEL=8 # CONFIG_RFKILL is not set # # Device Drivers # # # Generic Driver Options # CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" CONFIG_DEVTMPFS=y CONFIG_STANDALONE=y CONFIG_PREVENT_FIRMWARE_BUILD=y CONFIG_FW_LOADER=y CONFIG_FIRMWARE_IN_KERNEL=y CONFIG_EXTRA_FIRMWARE="" CONFIG_DEBUG_DRIVER=y CONFIG_DEBUG_DEVRES=y # CONFIG_SYS_HYPERVISOR is not set CONFIG_CONNECTOR=m # CONFIG_PARPORT is not set # CONFIG_PNP is not set CONFIG_BLK_DEV=y # CONFIG_BLK_DEV_FD is not set # CONFIG_BLK_DEV_XD is not set CONFIG_BLK_CPQ_DA=y CONFIG_BLK_CPQ_CISS_DA=y CONFIG_CISS_SCSI_TAPE=y CONFIG_BLK_DEV_DAC960=y # CONFIG_BLK_DEV_UMEM is not set # CONFIG_BLK_DEV_COW_COMMON is not set # CONFIG_BLK_DEV_LOOP is not set # # DRBD disabled because PROC_FS, INET or CONNECTOR not selected # # CONFIG_BLK_DEV_DRBD is not set CONFIG_BLK_DEV_NBD=m # CONFIG_BLK_DEV_OSD is not set CONFIG_BLK_DEV_SX8=y CONFIG_BLK_DEV_UB=m CONFIG_BLK_DEV_RAM=m CONFIG_BLK_DEV_RAM_COUNT=16 CONFIG_BLK_DEV_RAM_SIZE=4096 CONFIG_BLK_DEV_XIP=y CONFIG_CDROM_PKTCDVD=y CONFIG_CDROM_PKTCDVD_BUFFERS=8 # CONFIG_CDROM_PKTCDVD_WCACHE is not set # CONFIG_ATA_OVER_ETH is not set CONFIG_VIRTIO_BLK=m CONFIG_BLK_DEV_HD=y CONFIG_MISC_DEVICES=y CONFIG_IBM_ASM=y CONFIG_PHANTOM=m CONFIG_SGI_IOC4=m CONFIG_TIFM_CORE=m # CONFIG_TIFM_7XX1 is not set CONFIG_ICS932S401=m CONFIG_ENCLOSURE_SERVICES=m CONFIG_HP_ILO=y # CONFIG_DELL_LAPTOP is not set CONFIG_ISL29003=m # CONFIG_DS1682 is not set CONFIG_C2PORT=m CONFIG_C2PORT_DURAMAR_2150=m # # EEPROM support # CONFIG_EEPROM_AT24=m # CONFIG_EEPROM_AT25 is not set # CONFIG_EEPROM_LEGACY is not set CONFIG_EEPROM_MAX6875=m # CONFIG_EEPROM_93CX6 is not set CONFIG_CB710_CORE=m # CONFIG_CB710_DEBUG is not set CONFIG_CB710_DEBUG_ASSUMPTIONS=y CONFIG_IWMC3200TOP=m CONFIG_IWMC3200TOP_DEBUG=y CONFIG_IWMC3200TOP_DEBUGFS=y CONFIG_HAVE_IDE=y # # SCSI device support # CONFIG_RAID_ATTRS=y CONFIG_SCSI=y CONFIG_SCSI_DMA=y CONFIG_SCSI_TGT=y CONFIG_SCSI_NETLINK=y CONFIG_SCSI_PROC_FS=y # # SCSI support type (disk, tape, CD-ROM) # CONFIG_BLK_DEV_SD=y CONFIG_CHR_DEV_ST=m CONFIG_CHR_DEV_OSST=y CONFIG_BLK_DEV_SR=m # CONFIG_BLK_DEV_SR_VENDOR is not set CONFIG_CHR_DEV_SG=m CONFIG_CHR_DEV_SCH=m # CONFIG_SCSI_ENCLOSURE is not set CONFIG_SCSI_MULTI_LUN=y # CONFIG_SCSI_CONSTANTS is not set CONFIG_SCSI_LOGGING=y # CONFIG_SCSI_SCAN_ASYNC is not set CONFIG_SCSI_WAIT_SCAN=m # # SCSI Transports # CONFIG_SCSI_SPI_ATTRS=y CONFIG_SCSI_FC_ATTRS=y # CONFIG_SCSI_FC_TGT_ATTRS is not set CONFIG_SCSI_ISCSI_ATTRS=y CONFIG_SCSI_SAS_ATTRS=y CONFIG_SCSI_SAS_LIBSAS=y # CONFIG_SCSI_SAS_ATA is not set CONFIG_SCSI_SAS_HOST_SMP=y CONFIG_SCSI_SAS_LIBSAS_DEBUG=y CONFIG_SCSI_SRP_ATTRS=m # CONFIG_SCSI_SRP_TGT_ATTRS is not set CONFIG_SCSI_LOWLEVEL=y CONFIG_ISCSI_TCP=y CONFIG_SCSI_CXGB3_ISCSI=y CONFIG_SCSI_BNX2_ISCSI=y CONFIG_BE2ISCSI=m # CONFIG_BLK_DEV_3W_XXXX_RAID is not set CONFIG_SCSI_3W_9XXX=y CONFIG_SCSI_3W_SAS=y CONFIG_SCSI_7000FASST=y CONFIG_SCSI_ACARD=y CONFIG_SCSI_AHA152X=y # CONFIG_SCSI_AHA1542 is not set CONFIG_SCSI_AHA1740=y CONFIG_SCSI_AACRAID=y CONFIG_SCSI_AIC7XXX=y CONFIG_AIC7XXX_CMDS_PER_DEVICE=32 CONFIG_AIC7XXX_RESET_DELAY_MS=5000 # CONFIG_AIC7XXX_DEBUG_ENABLE is not set CONFIG_AIC7XXX_DEBUG_MASK=0 # CONFIG_AIC7XXX_REG_PRETTY_PRINT is not set CONFIG_SCSI_AIC7XXX_OLD=y CONFIG_SCSI_AIC79XX=y CONFIG_AIC79XX_CMDS_PER_DEVICE=32 CONFIG_AIC79XX_RESET_DELAY_MS=5000 CONFIG_AIC79XX_DEBUG_ENABLE=y CONFIG_AIC79XX_DEBUG_MASK=0 CONFIG_AIC79XX_REG_PRETTY_PRINT=y # CONFIG_SCSI_AIC94XX is not set # CONFIG_SCSI_MVSAS is not set CONFIG_SCSI_DPT_I2O=m CONFIG_SCSI_ADVANSYS=m CONFIG_SCSI_IN2000=y CONFIG_SCSI_ARCMSR=y CONFIG_MEGARAID_NEWGEN=y CONFIG_MEGARAID_MM=m CONFIG_MEGARAID_MAILBOX=m CONFIG_MEGARAID_LEGACY=y CONFIG_MEGARAID_SAS=y CONFIG_SCSI_MPT2SAS=m CONFIG_SCSI_MPT2SAS_MAX_SGE=128 CONFIG_SCSI_MPT2SAS_LOGGING=y # CONFIG_SCSI_HPTIOP is not set CONFIG_SCSI_BUSLOGIC=m # CONFIG_SCSI_FLASHPOINT is not set CONFIG_VMWARE_PVSCSI=y CONFIG_LIBFC=y CONFIG_LIBFCOE=y CONFIG_FCOE=y # CONFIG_FCOE_FNIC is not set CONFIG_SCSI_DMX3191D=y # CONFIG_SCSI_DTC3280 is not set CONFIG_SCSI_EATA=m CONFIG_SCSI_EATA_TAGGED_QUEUE=y CONFIG_SCSI_EATA_LINKED_COMMANDS=y CONFIG_SCSI_EATA_MAX_TAGS=16 CONFIG_SCSI_FUTURE_DOMAIN=m CONFIG_SCSI_GDTH=y CONFIG_SCSI_GENERIC_NCR5380=m CONFIG_SCSI_GENERIC_NCR5380_MMIO=y CONFIG_SCSI_GENERIC_NCR53C400=y CONFIG_SCSI_IBMMCA=m CONFIG_IBMMCA_SCSI_ORDER_STANDARD=y CONFIG_IBMMCA_SCSI_DEV_RESET=y CONFIG_SCSI_IPS=m CONFIG_SCSI_INITIO=y # CONFIG_SCSI_INIA100 is not set # CONFIG_SCSI_NCR53C406A is not set CONFIG_SCSI_NCR_D700=y CONFIG_SCSI_STEX=m # CONFIG_SCSI_SYM53C8XX_2 is not set CONFIG_SCSI_IPR=y CONFIG_SCSI_IPR_TRACE=y CONFIG_SCSI_IPR_DUMP=y CONFIG_SCSI_NCR_Q720=y CONFIG_SCSI_NCR53C8XX_DEFAULT_TAGS=8 CONFIG_SCSI_NCR53C8XX_MAX_TAGS=32 CONFIG_SCSI_NCR53C8XX_SYNC=20 # CONFIG_SCSI_PAS16 is not set CONFIG_SCSI_QLOGIC_FAS=y CONFIG_SCSI_QLOGIC_1280=y # CONFIG_SCSI_QLA_FC is not set CONFIG_SCSI_QLA_ISCSI=y CONFIG_SCSI_LPFC=y CONFIG_SCSI_LPFC_DEBUG_FS=y CONFIG_SCSI_SIM710=y CONFIG_SCSI_SYM53C416=y CONFIG_SCSI_DC395x=y # CONFIG_SCSI_DC390T is not set CONFIG_SCSI_T128=m CONFIG_SCSI_U14_34F=m CONFIG_SCSI_U14_34F_TAGGED_QUEUE=y CONFIG_SCSI_U14_34F_LINKED_COMMANDS=y CONFIG_SCSI_U14_34F_MAX_TAGS=8 # CONFIG_SCSI_ULTRASTOR is not set # CONFIG_SCSI_NSP32 is not set # CONFIG_SCSI_PMCRAID is not set CONFIG_SCSI_PM8001=y CONFIG_SCSI_SRP=y CONFIG_SCSI_BFA_FC=m CONFIG_SCSI_LOWLEVEL_PCMCIA=y CONFIG_PCMCIA_AHA152X=m # CONFIG_PCMCIA_FDOMAIN is not set # CONFIG_PCMCIA_NINJA_SCSI is not set CONFIG_PCMCIA_QLOGIC=m CONFIG_PCMCIA_SYM53C500=m # CONFIG_SCSI_DH is not set CONFIG_SCSI_OSD_INITIATOR=y CONFIG_SCSI_OSD_ULD=m CONFIG_SCSI_OSD_DPRINT_SENSE=1 CONFIG_SCSI_OSD_DEBUG=y CONFIG_ATA=y # CONFIG_ATA_NONSTANDARD is not set CONFIG_ATA_VERBOSE_ERROR=y # CONFIG_SATA_PMP is not set CONFIG_SATA_AHCI=y # CONFIG_SATA_SIL24 is not set CONFIG_ATA_SFF=y CONFIG_SATA_SVW=m CONFIG_ATA_PIIX=y # CONFIG_SATA_MV is not set CONFIG_SATA_NV=y CONFIG_PDC_ADMA=m CONFIG_SATA_QSTOR=m # CONFIG_SATA_PROMISE is not set CONFIG_SATA_SX4=m CONFIG_SATA_SIL=m # CONFIG_SATA_SIS is not set # CONFIG_SATA_ULI is not set CONFIG_SATA_VIA=y CONFIG_SATA_VITESSE=m CONFIG_SATA_INIC162X=y CONFIG_PATA_ALI=m CONFIG_PATA_AMD=y # CONFIG_PATA_ARTOP is not set # CONFIG_PATA_ATP867X is not set CONFIG_PATA_ATIIXP=m CONFIG_PATA_CMD640_PCI=y # CONFIG_PATA_CMD64X is not set CONFIG_PATA_CS5520=y CONFIG_PATA_CS5530=m # CONFIG_PATA_CS5535 is not set # CONFIG_PATA_CS5536 is not set CONFIG_PATA_CYPRESS=m # CONFIG_PATA_EFAR is not set # CONFIG_ATA_GENERIC is not set CONFIG_PATA_HPT366=m CONFIG_PATA_HPT37X=m CONFIG_PATA_HPT3X2N=y # CONFIG_PATA_HPT3X3 is not set CONFIG_PATA_IT821X=m CONFIG_PATA_IT8213=y # CONFIG_PATA_JMICRON is not set # CONFIG_PATA_LEGACY is not set CONFIG_PATA_TRIFLEX=y CONFIG_PATA_MARVELL=y # CONFIG_PATA_MPIIX is not set CONFIG_PATA_OLDPIIX=y # CONFIG_PATA_NETCELL is not set # CONFIG_PATA_NINJA32 is not set CONFIG_PATA_NS87410=m # CONFIG_PATA_NS87415 is not set # CONFIG_PATA_OPTI is not set # CONFIG_PATA_OPTIDMA is not set CONFIG_PATA_PCMCIA=m CONFIG_PATA_PDC2027X=y CONFIG_PATA_PDC_OLD=y CONFIG_PATA_QDI=y CONFIG_PATA_RADISYS=y CONFIG_PATA_RDC=m # CONFIG_PATA_RZ1000 is not set # CONFIG_PATA_SC1200 is not set # CONFIG_PATA_SERVERWORKS is not set CONFIG_PATA_SIL680=m CONFIG_PATA_SIS=m CONFIG_PATA_TOSHIBA=y # CONFIG_PATA_VIA is not set CONFIG_PATA_WINBOND=m # CONFIG_PATA_WINBOND_VLB is not set CONFIG_PATA_PLATFORM=m CONFIG_PATA_SCH=y # CONFIG_MD is not set CONFIG_FUSION=y CONFIG_FUSION_SPI=y # CONFIG_FUSION_FC is not set CONFIG_FUSION_SAS=y CONFIG_FUSION_MAX_SGE=128 CONFIG_FUSION_CTL=m CONFIG_FUSION_LOGGING=y # # IEEE 1394 (FireWire) support # # # You can enable one or both FireWire driver stacks. # # # See the help texts for more information. # CONFIG_FIREWIRE=m CONFIG_FIREWIRE_OHCI=m CONFIG_FIREWIRE_OHCI_DEBUG=y CONFIG_FIREWIRE_SBP2=m CONFIG_FIREWIRE_NET=m CONFIG_IEEE1394=m CONFIG_IEEE1394_OHCI1394=m CONFIG_IEEE1394_PCILYNX=m CONFIG_IEEE1394_SBP2=m CONFIG_IEEE1394_SBP2_PHYS_DMA=y CONFIG_IEEE1394_ETH1394_ROM_ENTRY=y CONFIG_IEEE1394_ETH1394=m CONFIG_IEEE1394_RAWIO=m CONFIG_IEEE1394_VIDEO1394=m CONFIG_IEEE1394_DV1394=m CONFIG_IEEE1394_VERBOSEDEBUG=y CONFIG_I2O=m # CONFIG_I2O_LCT_NOTIFY_ON_CHANGES is not set CONFIG_I2O_EXT_ADAPTEC=y CONFIG_I2O_CONFIG=m CONFIG_I2O_CONFIG_OLD_IOCTL=y # CONFIG_I2O_BUS is not set CONFIG_I2O_BLOCK=m # CONFIG_I2O_SCSI is not set CONFIG_I2O_PROC=m CONFIG_MACINTOSH_DRIVERS=y # CONFIG_MAC_EMUMOUSEBTN is not set CONFIG_NETDEVICES=y CONFIG_IFB=m CONFIG_DUMMY=m CONFIG_BONDING=m # CONFIG_MACVLAN is not set # CONFIG_EQUALIZER is not set CONFIG_TUN=m CONFIG_VETH=y # CONFIG_ARCNET is not set CONFIG_PHYLIB=y # # MII PHY device drivers # CONFIG_MARVELL_PHY=m CONFIG_DAVICOM_PHY=y CONFIG_QSEMI_PHY=m CONFIG_LXT_PHY=m # CONFIG_CICADA_PHY is not set CONFIG_VITESSE_PHY=y CONFIG_SMSC_PHY=y CONFIG_BROADCOM_PHY=y CONFIG_ICPLUS_PHY=m # CONFIG_REALTEK_PHY is not set CONFIG_NATIONAL_PHY=y # CONFIG_STE10XP is not set CONFIG_LSI_ET1011C_PHY=y CONFIG_FIXED_PHY=y CONFIG_MDIO_BITBANG=m CONFIG_NET_ETHERNET=y CONFIG_MII=y CONFIG_HAPPYMEAL=m CONFIG_SUNGEM=y CONFIG_CASSINI=m CONFIG_NET_VENDOR_3COM=y CONFIG_EL1=m # CONFIG_EL2 is not set CONFIG_ELPLUS=m CONFIG_EL16=y CONFIG_EL3=y CONFIG_3C515=y CONFIG_VORTEX=y # CONFIG_TYPHOON is not set # CONFIG_LANCE is not set CONFIG_NET_VENDOR_SMC=y CONFIG_ULTRAMCA=y # CONFIG_ULTRA is not set CONFIG_ULTRA32=y CONFIG_SMC9194=m CONFIG_ENC28J60=m CONFIG_ENC28J60_WRITEVERIFY=y # CONFIG_ETHOC is not set # CONFIG_NET_VENDOR_RACAL is not set CONFIG_DNET=y # CONFIG_NET_TULIP is not set CONFIG_AT1700=y CONFIG_DEPCA=y # CONFIG_HP100 is not set CONFIG_NET_ISA=y # CONFIG_E2100 is not set # CONFIG_EWRK3 is not set # CONFIG_EEXPRESS is not set CONFIG_EEXPRESS_PRO=y # CONFIG_HPLAN is not set # CONFIG_LP486E is not set CONFIG_ETH16I=y CONFIG_NE2000=y # CONFIG_ZNET is not set # CONFIG_SEEQ8005 is not set # CONFIG_IBMLANA is not set # CONFIG_IBM_NEW_EMAC_ZMII is not set # CONFIG_IBM_NEW_EMAC_RGMII is not set # CONFIG_IBM_NEW_EMAC_TAH is not set # CONFIG_IBM_NEW_EMAC_EMAC4 is not set # CONFIG_IBM_NEW_EMAC_NO_FLOW_CTRL is not set # CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set # CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set CONFIG_NET_PCI=y CONFIG_PCNET32=m # CONFIG_AMD8111_ETH is not set CONFIG_ADAPTEC_STARFIRE=y CONFIG_AC3200=m CONFIG_APRICOT=y CONFIG_B44=y CONFIG_B44_PCI_AUTOSELECT=y CONFIG_B44_PCICORE_AUTOSELECT=y CONFIG_B44_PCI=y CONFIG_FORCEDETH=y # CONFIG_FORCEDETH_NAPI is not set CONFIG_CS89x0=m CONFIG_E100=y CONFIG_LNE390=m CONFIG_FEALNX=m # CONFIG_NATSEMI is not set CONFIG_NE2K_PCI=y # CONFIG_NE3210 is not set CONFIG_ES3210=m CONFIG_8139CP=y CONFIG_8139TOO=y CONFIG_8139TOO_PIO=y CONFIG_8139TOO_TUNE_TWISTER=y CONFIG_8139TOO_8129=y CONFIG_8139_OLD_RX_RESET=y CONFIG_R6040=m # CONFIG_SIS900 is not set CONFIG_EPIC100=y CONFIG_SMSC9420=y # CONFIG_SUNDANCE is not set CONFIG_TLAN=y CONFIG_KS8842=m CONFIG_KS8851=m CONFIG_KS8851_MLL=y # CONFIG_VIA_RHINE is not set CONFIG_SC92031=y CONFIG_ATL2=y CONFIG_NETDEV_1000=y CONFIG_ACENIC=m # CONFIG_ACENIC_OMIT_TIGON_I is not set CONFIG_DL2K=y CONFIG_E1000=y CONFIG_E1000E=y # CONFIG_IP1000 is not set # CONFIG_IGB is not set CONFIG_IGBVF=m CONFIG_NS83820=y CONFIG_HAMACHI=y CONFIG_YELLOWFIN=m CONFIG_R8169=m # CONFIG_R8169_VLAN is not set CONFIG_SIS190=m # CONFIG_SKGE is not set # CONFIG_SKY2 is not set # CONFIG_VIA_VELOCITY is not set CONFIG_TIGON3=y CONFIG_BNX2=y CONFIG_CNIC=y CONFIG_QLA3XXX=y CONFIG_ATL1=m CONFIG_ATL1E=y CONFIG_ATL1C=y # CONFIG_JME is not set CONFIG_NETDEV_10000=y CONFIG_MDIO=y # CONFIG_CHELSIO_T1 is not set CONFIG_CHELSIO_T3_DEPENDS=y CONFIG_CHELSIO_T3=y # CONFIG_ENIC is not set CONFIG_IXGBE=m # CONFIG_IXGBE_DCA is not set # CONFIG_IXGB is not set # CONFIG_S2IO is not set # CONFIG_MYRI10GE is not set CONFIG_NIU=m # CONFIG_MLX4_EN is not set CONFIG_MLX4_CORE=m CONFIG_MLX4_DEBUG=y # CONFIG_TEHUTI is not set # CONFIG_BNX2X is not set CONFIG_QLGE=m CONFIG_SFC=m # CONFIG_BE2NET is not set # CONFIG_TR is not set CONFIG_WLAN=y # CONFIG_PCMCIA_RAYCS is not set # CONFIG_AIRO is not set # CONFIG_ATMEL is not set # CONFIG_AIRO_CS is not set CONFIG_PCMCIA_WL3501=m # CONFIG_PRISM54 is not set CONFIG_USB_ZD1201=y CONFIG_HOSTAP=y CONFIG_HOSTAP_FIRMWARE=y # CONFIG_HOSTAP_FIRMWARE_NVRAM is not set CONFIG_HOSTAP_PLX=y # CONFIG_HOSTAP_PCI is not set CONFIG_HOSTAP_CS=m # # WiMAX Wireless Broadband devices # CONFIG_WIMAX_I2400M=m CONFIG_WIMAX_I2400M_SDIO=m CONFIG_WIMAX_IWMC3200_SDIO=y CONFIG_WIMAX_I2400M_DEBUG_LEVEL=8 # # USB Network Adapters # # CONFIG_USB_CATC is not set # CONFIG_USB_KAWETH is not set CONFIG_USB_PEGASUS=y CONFIG_USB_RTL8150=m # CONFIG_USB_USBNET is not set # CONFIG_USB_CDC_PHONET is not set CONFIG_NET_PCMCIA=y CONFIG_PCMCIA_3C589=m CONFIG_PCMCIA_3C574=m CONFIG_PCMCIA_FMVJ18X=m # CONFIG_PCMCIA_PCNET is not set CONFIG_PCMCIA_NMCLAN=m # CONFIG_PCMCIA_SMC91C92 is not set CONFIG_PCMCIA_XIRC2PS=m CONFIG_PCMCIA_AXNET=m CONFIG_WAN=y # CONFIG_HOSTESS_SV11 is not set CONFIG_COSA=m # CONFIG_LANMEDIA is not set # CONFIG_SEALEVEL_4021 is not set CONFIG_HDLC=m CONFIG_HDLC_RAW=m CONFIG_HDLC_RAW_ETH=m # CONFIG_HDLC_CISCO is not set CONFIG_HDLC_FR=m CONFIG_HDLC_PPP=m CONFIG_HDLC_X25=m CONFIG_PCI200SYN=m # CONFIG_WANXL is not set # CONFIG_PC300TOO is not set CONFIG_N2=m # CONFIG_C101 is not set # CONFIG_FARSYNC is not set CONFIG_DSCC4=m CONFIG_DSCC4_PCISYNC=y CONFIG_DSCC4_PCI_RST=y CONFIG_DLCI=y CONFIG_DLCI_MAX=8 # CONFIG_SDLA is not set # CONFIG_WAN_ROUTER_DRIVERS is not set CONFIG_SBNI=m CONFIG_SBNI_MULTILINE=y CONFIG_IEEE802154_DRIVERS=m # CONFIG_IEEE802154_FAKEHARD is not set CONFIG_FDDI=m # CONFIG_DEFXX is not set CONFIG_SKFP=m # CONFIG_HIPPI is not set CONFIG_PPP=m CONFIG_PPP_MULTILINK=y # CONFIG_PPP_FILTER is not set CONFIG_PPP_ASYNC=m CONFIG_PPP_SYNC_TTY=m # CONFIG_PPP_DEFLATE is not set CONFIG_PPP_BSDCOMP=m CONFIG_PPP_MPPE=m # CONFIG_PPPOE is not set CONFIG_PPPOL2TP=m # CONFIG_SLIP is not set CONFIG_SLHC=m CONFIG_NET_FC=y CONFIG_NETCONSOLE=y CONFIG_NETCONSOLE_DYNAMIC=y CONFIG_NETPOLL=y CONFIG_NETPOLL_TRAP=y CONFIG_NET_POLL_CONTROLLER=y CONFIG_VIRTIO_NET=m CONFIG_VMXNET3=m CONFIG_ISDN=y # CONFIG_ISDN_I4L is not set CONFIG_ISDN_CAPI=m # CONFIG_ISDN_DRV_AVMB1_VERBOSE_REASON is not set CONFIG_CAPI_TRACE=y CONFIG_ISDN_CAPI_MIDDLEWARE=y CONFIG_ISDN_CAPI_CAPI20=m CONFIG_ISDN_CAPI_CAPIFS_BOOL=y CONFIG_ISDN_CAPI_CAPIFS=m # # CAPI hardware drivers # CONFIG_CAPI_AVM=y # CONFIG_ISDN_DRV_AVMB1_B1ISA is not set CONFIG_ISDN_DRV_AVMB1_B1PCI=m CONFIG_ISDN_DRV_AVMB1_B1PCIV4=y CONFIG_ISDN_DRV_AVMB1_T1ISA=m CONFIG_ISDN_DRV_AVMB1_B1PCMCIA=m CONFIG_ISDN_DRV_AVMB1_AVM_CS=m # CONFIG_ISDN_DRV_AVMB1_T1PCI is not set CONFIG_ISDN_DRV_AVMB1_C4=m CONFIG_CAPI_EICON=y # CONFIG_ISDN_DIVAS is not set # CONFIG_ISDN_DRV_GIGASET is not set CONFIG_PHONE=y # CONFIG_PHONE_IXJ is not set # # Input device support # CONFIG_INPUT=y # CONFIG_INPUT_FF_MEMLESS is not set CONFIG_INPUT_POLLDEV=y CONFIG_INPUT_SPARSEKMAP=m # # Userland interfaces # CONFIG_INPUT_MOUSEDEV=y CONFIG_INPUT_MOUSEDEV_PSAUX=y CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024 CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768 # CONFIG_INPUT_JOYDEV is not set # CONFIG_INPUT_EVDEV is not set CONFIG_INPUT_EVBUG=y # # Input Device Drivers # CONFIG_INPUT_KEYBOARD=y CONFIG_KEYBOARD_ADP5588=m CONFIG_KEYBOARD_ATKBD=y # CONFIG_QT2160 is not set # CONFIG_KEYBOARD_LKKBD is not set # CONFIG_KEYBOARD_MAX7359 is not set CONFIG_KEYBOARD_NEWTON=y # CONFIG_KEYBOARD_OPENCORES is not set CONFIG_KEYBOARD_STOWAWAY=y CONFIG_KEYBOARD_SUNKBD=y CONFIG_KEYBOARD_XTKBD=m CONFIG_INPUT_MOUSE=y # CONFIG_MOUSE_PS2 is not set CONFIG_MOUSE_SERIAL=m # CONFIG_MOUSE_APPLETOUCH is not set CONFIG_MOUSE_BCM5974=m CONFIG_MOUSE_INPORT=y CONFIG_MOUSE_ATIXL=y CONFIG_MOUSE_LOGIBM=y CONFIG_MOUSE_PC110PAD=y # CONFIG_MOUSE_VSXXXAA is not set CONFIG_MOUSE_SYNAPTICS_I2C=m CONFIG_INPUT_JOYSTICK=y CONFIG_JOYSTICK_ANALOG=m CONFIG_JOYSTICK_A3D=m CONFIG_JOYSTICK_ADI=m # CONFIG_JOYSTICK_COBRA is not set CONFIG_JOYSTICK_GF2K=m CONFIG_JOYSTICK_GRIP=y CONFIG_JOYSTICK_GRIP_MP=m CONFIG_JOYSTICK_GUILLEMOT=m CONFIG_JOYSTICK_INTERACT=y CONFIG_JOYSTICK_SIDEWINDER=y CONFIG_JOYSTICK_TMDC=y # CONFIG_JOYSTICK_IFORCE is not set CONFIG_JOYSTICK_WARRIOR=y # CONFIG_JOYSTICK_MAGELLAN is not set # CONFIG_JOYSTICK_SPACEORB is not set CONFIG_JOYSTICK_SPACEBALL=y CONFIG_JOYSTICK_STINGER=m # CONFIG_JOYSTICK_TWIDJOY is not set CONFIG_JOYSTICK_ZHENHUA=y CONFIG_JOYSTICK_JOYDUMP=m CONFIG_JOYSTICK_XPAD=y # CONFIG_JOYSTICK_XPAD_FF is not set CONFIG_INPUT_TABLET=y CONFIG_TABLET_USB_ACECAD=y CONFIG_TABLET_USB_AIPTEK=y CONFIG_TABLET_USB_GTCO=y CONFIG_TABLET_USB_KBTAB=m CONFIG_TABLET_USB_WACOM=m CONFIG_INPUT_TOUCHSCREEN=y CONFIG_TOUCHSCREEN_ADS7846=y # CONFIG_TOUCHSCREEN_AD7877 is not set CONFIG_TOUCHSCREEN_AD7879_I2C=m CONFIG_TOUCHSCREEN_AD7879=m # CONFIG_TOUCHSCREEN_DYNAPRO is not set # CONFIG_TOUCHSCREEN_EETI is not set CONFIG_TOUCHSCREEN_FUJITSU=m # CONFIG_TOUCHSCREEN_GUNZE is not set CONFIG_TOUCHSCREEN_ELO=m CONFIG_TOUCHSCREEN_WACOM_W8001=y CONFIG_TOUCHSCREEN_MCS5000=m CONFIG_TOUCHSCREEN_MTOUCH=y CONFIG_TOUCHSCREEN_INEXIO=m CONFIG_TOUCHSCREEN_MK712=m # CONFIG_TOUCHSCREEN_HTCPEN is not set CONFIG_TOUCHSCREEN_PENMOUNT=m # CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set CONFIG_TOUCHSCREEN_TOUCHWIN=m CONFIG_TOUCHSCREEN_USB_COMPOSITE=m CONFIG_TOUCHSCREEN_USB_EGALAX=y CONFIG_TOUCHSCREEN_USB_PANJIT=y CONFIG_TOUCHSCREEN_USB_3M=y CONFIG_TOUCHSCREEN_USB_ITM=y CONFIG_TOUCHSCREEN_USB_ETURBO=y CONFIG_TOUCHSCREEN_USB_GUNZE=y CONFIG_TOUCHSCREEN_USB_DMC_TSC10=y CONFIG_TOUCHSCREEN_USB_IRTOUCH=y CONFIG_TOUCHSCREEN_USB_IDEALTEK=y # CONFIG_TOUCHSCREEN_USB_GENERAL_TOUCH is not set CONFIG_TOUCHSCREEN_USB_GOTOP=y CONFIG_TOUCHSCREEN_USB_JASTEC=y CONFIG_TOUCHSCREEN_USB_E2I=y # CONFIG_TOUCHSCREEN_USB_ZYTRONIC is not set CONFIG_TOUCHSCREEN_USB_ETT_TC5UH=y CONFIG_TOUCHSCREEN_TOUCHIT213=m # CONFIG_TOUCHSCREEN_TSC2007 is not set CONFIG_TOUCHSCREEN_PCAP=y # CONFIG_INPUT_MISC is not set # # Hardware I/O ports # CONFIG_SERIO=y CONFIG_SERIO_I8042=y # CONFIG_SERIO_SERPORT is not set CONFIG_SERIO_CT82C710=m # CONFIG_SERIO_PCIPS2 is not set CONFIG_SERIO_LIBPS2=y CONFIG_SERIO_RAW=m # CONFIG_SERIO_ALTERA_PS2 is not set CONFIG_GAMEPORT=y # CONFIG_GAMEPORT_NS558 is not set CONFIG_GAMEPORT_L4=y # CONFIG_GAMEPORT_EMU10K1 is not set # CONFIG_GAMEPORT_FM801 is not set # # Character devices # CONFIG_VT=y # CONFIG_CONSOLE_TRANSLATIONS is not set CONFIG_VT_CONSOLE=y CONFIG_HW_CONSOLE=y CONFIG_VT_HW_CONSOLE_BINDING=y CONFIG_DEVKMEM=y CONFIG_SERIAL_NONSTANDARD=y # CONFIG_COMPUTONE is not set # CONFIG_ROCKETPORT is not set CONFIG_CYCLADES=y CONFIG_CYZ_INTR=y # CONFIG_DIGIEPCA is not set CONFIG_MOXA_INTELLIO=y # CONFIG_MOXA_SMARTIO is not set CONFIG_ISI=m # CONFIG_SYNCLINK is not set CONFIG_SYNCLINKMP=m CONFIG_SYNCLINK_GT=m CONFIG_N_HDLC=y CONFIG_RISCOM8=y CONFIG_SPECIALIX=m # CONFIG_STALDRV is not set # CONFIG_NOZOMI is not set # # Serial drivers # CONFIG_SERIAL_8250=y CONFIG_SERIAL_8250_CONSOLE=y CONFIG_FIX_EARLYCON_MEM=y CONFIG_SERIAL_8250_PCI=y CONFIG_SERIAL_8250_CS=m CONFIG_SERIAL_8250_NR_UARTS=4 CONFIG_SERIAL_8250_RUNTIME_UARTS=4 CONFIG_SERIAL_8250_EXTENDED=y # CONFIG_SERIAL_8250_MANY_PORTS is not set CONFIG_SERIAL_8250_SHARE_IRQ=y # CONFIG_SERIAL_8250_DETECT_IRQ is not set # CONFIG_SERIAL_8250_RSA is not set CONFIG_SERIAL_8250_MCA=m # # Non-8250 serial port support # CONFIG_SERIAL_MAX3100=y CONFIG_SERIAL_CORE=y CONFIG_SERIAL_CORE_CONSOLE=y CONFIG_CONSOLE_POLL=y CONFIG_SERIAL_JSM=m CONFIG_UNIX98_PTYS=y CONFIG_DEVPTS_MULTIPLE_INSTANCES=y CONFIG_LEGACY_PTYS=y CONFIG_LEGACY_PTY_COUNT=256 CONFIG_HVC_DRIVER=y CONFIG_VIRTIO_CONSOLE=y CONFIG_IPMI_HANDLER=m CONFIG_IPMI_PANIC_EVENT=y # CONFIG_IPMI_PANIC_STRING is not set CONFIG_IPMI_DEVICE_INTERFACE=m # CONFIG_IPMI_SI is not set CONFIG_IPMI_WATCHDOG=m CONFIG_IPMI_POWEROFF=m CONFIG_HW_RANDOM=y CONFIG_HW_RANDOM_TIMERIOMEM=m CONFIG_HW_RANDOM_INTEL=y CONFIG_HW_RANDOM_AMD=m CONFIG_HW_RANDOM_GEODE=m # CONFIG_HW_RANDOM_VIA is not set # CONFIG_HW_RANDOM_VIRTIO is not set CONFIG_NVRAM=y CONFIG_DTLK=m CONFIG_R3964=y # CONFIG_APPLICOM is not set CONFIG_SONYPI=y # # PCMCIA character devices # CONFIG_SYNCLINK_CS=m # CONFIG_CARDMAN_4000 is not set CONFIG_CARDMAN_4040=m CONFIG_IPWIRELESS=m # CONFIG_MWAVE is not set # CONFIG_SCx200_GPIO is not set # CONFIG_PC8736x_GPIO is not set # CONFIG_NSC_GPIO is not set # CONFIG_CS5535_GPIO is not set CONFIG_RAW_DRIVER=m CONFIG_MAX_RAW_DEVS=256 CONFIG_HANGCHECK_TIMER=y CONFIG_TCG_TPM=m CONFIG_TCG_NSC=m CONFIG_TCG_ATMEL=m # CONFIG_TELCLOCK is not set CONFIG_DEVPORT=y CONFIG_I2C=m CONFIG_I2C_BOARDINFO=y CONFIG_I2C_COMPAT=y CONFIG_I2C_CHARDEV=m CONFIG_I2C_HELPER_AUTO=y CONFIG_I2C_ALGOBIT=m CONFIG_I2C_ALGOPCA=m # # I2C Hardware Bus support # # # PC SMBus host controller drivers # CONFIG_I2C_ALI1535=m # CONFIG_I2C_ALI1563 is not set CONFIG_I2C_ALI15X3=m CONFIG_I2C_AMD756=m CONFIG_I2C_AMD8111=m # CONFIG_I2C_I801 is not set CONFIG_I2C_ISCH=m # CONFIG_I2C_PIIX4 is not set CONFIG_I2C_NFORCE2=m CONFIG_I2C_SIS5595=m CONFIG_I2C_SIS630=m # CONFIG_I2C_SIS96X is not set # CONFIG_I2C_VIA is not set CONFIG_I2C_VIAPRO=m # # I2C system bus drivers (mostly embedded / system-on-chip) # CONFIG_I2C_OCORES=m CONFIG_I2C_SIMTEC=m # # External I2C/SMBus adapter drivers # # CONFIG_I2C_PARPORT_LIGHT is not set # CONFIG_I2C_TAOS_EVM is not set # CONFIG_I2C_TINY_USB is not set # # Other I2C/SMBus bus drivers # CONFIG_I2C_PCA_PLATFORM=m CONFIG_I2C_STUB=m # CONFIG_SCx200_ACB is not set # # Miscellaneous I2C Chip support # CONFIG_SENSORS_TSL2550=m CONFIG_I2C_DEBUG_CORE=y CONFIG_I2C_DEBUG_ALGO=y # CONFIG_I2C_DEBUG_BUS is not set CONFIG_I2C_DEBUG_CHIP=y CONFIG_SPI=y # CONFIG_SPI_DEBUG is not set CONFIG_SPI_MASTER=y # # SPI Master Controller Drivers # CONFIG_SPI_BITBANG=y # # SPI Protocol Masters # CONFIG_SPI_SPIDEV=y CONFIG_SPI_TLE62X0=y # # PPS support # # CONFIG_PPS is not set CONFIG_ARCH_WANT_OPTIONAL_GPIOLIB=y # CONFIG_GPIOLIB is not set CONFIG_W1=y CONFIG_W1_CON=y # # 1-wire Bus Masters # CONFIG_W1_MASTER_MATROX=y CONFIG_W1_MASTER_DS2490=m CONFIG_W1_MASTER_DS2482=m # # 1-wire Slaves # # CONFIG_W1_SLAVE_THERM is not set # CONFIG_W1_SLAVE_SMEM is not set CONFIG_W1_SLAVE_DS2431=y CONFIG_W1_SLAVE_DS2433=y CONFIG_W1_SLAVE_DS2433_CRC=y CONFIG_W1_SLAVE_DS2760=y # CONFIG_W1_SLAVE_BQ27000 is not set CONFIG_POWER_SUPPLY=y CONFIG_POWER_SUPPLY_DEBUG=y # CONFIG_PDA_POWER is not set CONFIG_BATTERY_DS2760=y CONFIG_BATTERY_DS2782=m # CONFIG_BATTERY_OLPC is not set CONFIG_BATTERY_BQ27x00=m # CONFIG_BATTERY_MAX17040 is not set # CONFIG_CHARGER_PCF50633 is not set # CONFIG_HWMON is not set # CONFIG_THERMAL is not set # CONFIG_WATCHDOG is not set CONFIG_SSB_POSSIBLE=y # # Sonics Silicon Backplane # CONFIG_SSB=y CONFIG_SSB_SPROM=y CONFIG_SSB_PCIHOST_POSSIBLE=y CONFIG_SSB_PCIHOST=y # CONFIG_SSB_B43_PCI_BRIDGE is not set # CONFIG_SSB_SILENT is not set CONFIG_SSB_DEBUG=y CONFIG_SSB_DRIVER_PCICORE_POSSIBLE=y CONFIG_SSB_DRIVER_PCICORE=y # # Multifunction device drivers # CONFIG_MFD_CORE=y # CONFIG_MFD_SM501 is not set CONFIG_HTC_PASIC3=y # CONFIG_MFD_TMIO is not set CONFIG_MFD_WM8400=m # CONFIG_MFD_WM831X is not set CONFIG_MFD_PCF50633=m # CONFIG_MFD_MC13783 is not set # CONFIG_PCF50633_ADC is not set CONFIG_PCF50633_GPIO=m CONFIG_AB3100_CORE=m CONFIG_AB3100_OTP=m CONFIG_EZX_PCAP=y CONFIG_REGULATOR=y CONFIG_REGULATOR_DEBUG=y CONFIG_REGULATOR_FIXED_VOLTAGE=m # CONFIG_REGULATOR_VIRTUAL_CONSUMER is not set # CONFIG_REGULATOR_USERSPACE_CONSUMER is not set CONFIG_REGULATOR_BQ24022=m # CONFIG_REGULATOR_MAX1586 is not set CONFIG_REGULATOR_WM8400=m # CONFIG_REGULATOR_PCF50633 is not set CONFIG_REGULATOR_LP3971=m CONFIG_REGULATOR_PCAP=m CONFIG_REGULATOR_AB3100=m CONFIG_REGULATOR_TPS65023=m # CONFIG_REGULATOR_TPS6507X is not set CONFIG_MEDIA_SUPPORT=m # # Multimedia core support # CONFIG_VIDEO_DEV=m CONFIG_VIDEO_V4L2_COMMON=m CONFIG_VIDEO_ALLOW_V4L1=y CONFIG_VIDEO_V4L1_COMPAT=y CONFIG_DVB_CORE=m CONFIG_VIDEO_MEDIA=m # # Multimedia drivers # CONFIG_VIDEO_SAA7146=m CONFIG_VIDEO_SAA7146_VV=m CONFIG_MEDIA_ATTACH=y CONFIG_MEDIA_TUNER=m CONFIG_MEDIA_TUNER_CUSTOMISE=y CONFIG_MEDIA_TUNER_SIMPLE=m # CONFIG_MEDIA_TUNER_TDA8290 is not set # CONFIG_MEDIA_TUNER_TDA827X is not set CONFIG_MEDIA_TUNER_TDA18271=m CONFIG_MEDIA_TUNER_TDA9887=m CONFIG_MEDIA_TUNER_TEA5761=m CONFIG_MEDIA_TUNER_TEA5767=m CONFIG_MEDIA_TUNER_MT20XX=m CONFIG_MEDIA_TUNER_MT2060=m # CONFIG_MEDIA_TUNER_MT2266 is not set # CONFIG_MEDIA_TUNER_MT2131 is not set CONFIG_MEDIA_TUNER_QT1010=m CONFIG_MEDIA_TUNER_XC2028=m # CONFIG_MEDIA_TUNER_XC5000 is not set # CONFIG_MEDIA_TUNER_MXL5005S is not set CONFIG_MEDIA_TUNER_MXL5007T=m # CONFIG_MEDIA_TUNER_MC44S803 is not set CONFIG_VIDEO_V4L2=m CONFIG_VIDEO_V4L1=m CONFIG_VIDEOBUF_GEN=m CONFIG_VIDEOBUF_DMA_SG=m CONFIG_VIDEO_IR=m # CONFIG_VIDEO_CAPTURE_DRIVERS is not set CONFIG_RADIO_ADAPTERS=y CONFIG_RADIO_CADET=m CONFIG_RADIO_RTRACK2=m # CONFIG_RADIO_AZTECH is not set # CONFIG_RADIO_GEMTEK is not set CONFIG_RADIO_GEMTEK_PCI=m CONFIG_RADIO_MAXIRADIO=m CONFIG_RADIO_MAESTRO=m CONFIG_RADIO_SF16FMI=m CONFIG_RADIO_SF16FMR2=m CONFIG_RADIO_TERRATEC=m CONFIG_RADIO_TRUST=m CONFIG_RADIO_TYPHOON=m # CONFIG_RADIO_ZOLTRIX is not set CONFIG_I2C_SI4713=m CONFIG_RADIO_SI4713=m CONFIG_USB_DSBR=m # CONFIG_RADIO_SI470X is not set CONFIG_USB_MR800=m CONFIG_RADIO_TEA5764=m # CONFIG_RADIO_TEF6862 is not set CONFIG_DVB_MAX_ADAPTERS=8 CONFIG_DVB_DYNAMIC_MINORS=y CONFIG_DVB_CAPTURE_DRIVERS=y # # Supported SAA7146 based PCI Adapters # CONFIG_TTPCI_EEPROM=m # CONFIG_DVB_AV7110 is not set CONFIG_DVB_BUDGET_CORE=m # CONFIG_DVB_BUDGET is not set CONFIG_DVB_BUDGET_CI=m CONFIG_DVB_BUDGET_AV=m # # Supported USB Adapters # # CONFIG_DVB_TTUSB_BUDGET is not set CONFIG_DVB_TTUSB_DEC=m CONFIG_SMS_SIANO_MDTV=m # # Siano module components # # CONFIG_SMS_USB_DRV is not set CONFIG_SMS_SDIO_DRV=m # # Supported FlexCopII (B2C2) Adapters # CONFIG_DVB_B2C2_FLEXCOP=m CONFIG_DVB_B2C2_FLEXCOP_PCI=m CONFIG_DVB_B2C2_FLEXCOP_USB=m CONFIG_DVB_B2C2_FLEXCOP_DEBUG=y # # Supported BT878 Adapters # # # Supported Pluto2 Adapters # # CONFIG_DVB_PLUTO2 is not set # # Supported SDMC DM1105 Adapters # # CONFIG_DVB_DM1105 is not set # # Supported FireWire (IEEE 1394) Adapters # CONFIG_DVB_FIREDTV=m CONFIG_DVB_FIREDTV_FIREWIRE=y CONFIG_DVB_FIREDTV_IEEE1394=y CONFIG_DVB_FIREDTV_INPUT=y # # Supported Earthsoft PT1 Adapters # CONFIG_DVB_PT1=m # # Supported DVB Frontends # # CONFIG_DVB_FE_CUSTOMISE is not set CONFIG_DVB_STB0899=m CONFIG_DVB_STB6100=m CONFIG_DVB_CX24123=m CONFIG_DVB_MT312=m CONFIG_DVB_S5H1420=m CONFIG_DVB_STV0299=m CONFIG_DVB_TDA8261=m CONFIG_DVB_TUNER_ITD1000=m CONFIG_DVB_TUNER_CX24113=m CONFIG_DVB_TUA6100=m CONFIG_DVB_TDA1004X=m CONFIG_DVB_MT352=m CONFIG_DVB_TDA10021=m CONFIG_DVB_TDA10023=m CONFIG_DVB_STV0297=m CONFIG_DVB_NXT200X=m CONFIG_DVB_BCM3510=m CONFIG_DVB_LGDT330X=m CONFIG_DVB_PLL=m CONFIG_DVB_LNBP21=m CONFIG_DVB_ISL6421=m CONFIG_DAB=y CONFIG_USB_DABUSB=m # # Graphics support # # CONFIG_AGP is not set # CONFIG_VGA_ARB is not set # CONFIG_DRM is not set # CONFIG_VGASTATE is not set CONFIG_VIDEO_OUTPUT_CONTROL=y # CONFIG_FB is not set CONFIG_BACKLIGHT_LCD_SUPPORT=y # CONFIG_LCD_CLASS_DEVICE is not set CONFIG_BACKLIGHT_CLASS_DEVICE=y CONFIG_BACKLIGHT_GENERIC=m CONFIG_BACKLIGHT_PROGEAR=y # CONFIG_BACKLIGHT_MBP_NVIDIA is not set CONFIG_BACKLIGHT_SAHARA=m # # Display device support # CONFIG_DISPLAY_SUPPORT=m # # Display hardware drivers # # # Console display driver support # CONFIG_VGA_CONSOLE=y CONFIG_VGACON_SOFT_SCROLLBACK=y CONFIG_VGACON_SOFT_SCROLLBACK_SIZE=64 CONFIG_DUMMY_CONSOLE=y CONFIG_FONT_8x16=y # CONFIG_SOUND is not set # CONFIG_HID_SUPPORT is not set CONFIG_USB_MOUSE=y CONFIG_USB_SUPPORT=y CONFIG_USB_ARCH_HAS_HCD=y CONFIG_USB_ARCH_HAS_OHCI=y CONFIG_USB_ARCH_HAS_EHCI=y CONFIG_USB=y # CONFIG_USB_DEBUG is not set CONFIG_USB_ANNOUNCE_NEW_DEVICES=y # # Miscellaneous USB options # CONFIG_USB_DEVICEFS=y CONFIG_USB_DEVICE_CLASS=y CONFIG_USB_DYNAMIC_MINORS=y CONFIG_USB_SUSPEND=y # CONFIG_USB_OTG is not set # CONFIG_USB_OTG_WHITELIST is not set # CONFIG_USB_OTG_BLACKLIST_HUB is not set CONFIG_USB_MON=y CONFIG_USB_WUSB=m CONFIG_USB_WUSB_CBAF=m CONFIG_USB_WUSB_CBAF_DEBUG=y # # USB Host Controller Drivers # # CONFIG_USB_C67X00_HCD is not set # CONFIG_USB_XHCI_HCD is not set CONFIG_USB_EHCI_HCD=y CONFIG_USB_EHCI_ROOT_HUB_TT=y CONFIG_USB_EHCI_TT_NEWSCHED=y # CONFIG_USB_OXU210HP_HCD is not set CONFIG_USB_ISP116X_HCD=y CONFIG_USB_ISP1760_HCD=m CONFIG_USB_ISP1362_HCD=m CONFIG_USB_OHCI_HCD=y # CONFIG_USB_OHCI_HCD_SSB is not set # CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set # CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set CONFIG_USB_OHCI_LITTLE_ENDIAN=y CONFIG_USB_UHCI_HCD=y CONFIG_USB_SL811_HCD=m CONFIG_USB_SL811_CS=m CONFIG_USB_R8A66597_HCD=y CONFIG_USB_HWA_HCD=m # # USB Device Class drivers # CONFIG_USB_ACM=m # CONFIG_USB_PRINTER is not set CONFIG_USB_WDM=m CONFIG_USB_TMC=m # # NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may # # # also be needed; see USB_STORAGE Help for more info # # CONFIG_USB_STORAGE is not set CONFIG_USB_LIBUSUAL=y # # USB Imaging devices # # CONFIG_USB_MDC800 is not set CONFIG_USB_MICROTEK=m # # USB port drivers # # CONFIG_USB_SERIAL is not set # # USB Miscellaneous drivers # # CONFIG_USB_EMI62 is not set # CONFIG_USB_EMI26 is not set # CONFIG_USB_ADUTUX is not set CONFIG_USB_SEVSEG=y CONFIG_USB_RIO500=m # CONFIG_USB_LEGOTOWER is not set CONFIG_USB_LCD=m CONFIG_USB_BERRY_CHARGE=y # CONFIG_USB_LED is not set CONFIG_USB_CYPRESS_CY7C63=m CONFIG_USB_CYTHERM=m CONFIG_USB_IDMOUSE=y # CONFIG_USB_FTDI_ELAN is not set # CONFIG_USB_APPLEDISPLAY is not set CONFIG_USB_SISUSBVGA=y CONFIG_USB_SISUSBVGA_CON=y CONFIG_USB_LD=m # CONFIG_USB_TRANCEVIBRATOR is not set CONFIG_USB_IOWARRIOR=m # CONFIG_USB_TEST is not set CONFIG_USB_ISIGHTFW=m # CONFIG_USB_VST is not set # # OTG and related infrastructure # # CONFIG_NOP_USB_XCEIV is not set CONFIG_UWB=m CONFIG_UWB_HWA=m # CONFIG_UWB_WHCI is not set # CONFIG_UWB_WLP is not set # CONFIG_UWB_I1480U is not set CONFIG_MMC=m CONFIG_MMC_DEBUG=y # CONFIG_MMC_UNSAFE_RESUME is not set # # MMC/SD/SDIO Card Drivers # CONFIG_MMC_BLOCK=m # CONFIG_MMC_BLOCK_BOUNCE is not set # CONFIG_SDIO_UART is not set CONFIG_MMC_TEST=m # # MMC/SD/SDIO Host Controller Drivers # CONFIG_MMC_SDHCI=m # CONFIG_MMC_SDHCI_PCI is not set CONFIG_MMC_SDHCI_PLTFM=m # CONFIG_MMC_WBSD is not set # CONFIG_MMC_AT91 is not set # CONFIG_MMC_ATMELMCI is not set CONFIG_MMC_TIFM_SD=m CONFIG_MMC_SDRICOH_CS=m # CONFIG_MMC_CB710 is not set # CONFIG_MMC_VIA_SDMMC is not set CONFIG_MEMSTICK=y # CONFIG_MEMSTICK_DEBUG is not set # # MemoryStick drivers # # CONFIG_MEMSTICK_UNSAFE_RESUME is not set CONFIG_MSPRO_BLOCK=m # # MemoryStick Host Controller Drivers # # CONFIG_MEMSTICK_TIFM_MS is not set CONFIG_MEMSTICK_JMICRON_38X=m # CONFIG_NEW_LEDS is not set # CONFIG_ACCESSIBILITY is not set CONFIG_INFINIBAND=y CONFIG_INFINIBAND_USER_MAD=y CONFIG_INFINIBAND_USER_ACCESS=m CONFIG_INFINIBAND_USER_MEM=y CONFIG_INFINIBAND_ADDR_TRANS=y # CONFIG_INFINIBAND_MTHCA is not set # CONFIG_INFINIBAND_AMSO1100 is not set # CONFIG_INFINIBAND_CXGB3 is not set CONFIG_MLX4_INFINIBAND=m CONFIG_INFINIBAND_NES=m # CONFIG_INFINIBAND_NES_DEBUG is not set CONFIG_INFINIBAND_IPOIB=y CONFIG_INFINIBAND_IPOIB_CM=y # CONFIG_INFINIBAND_IPOIB_DEBUG is not set CONFIG_INFINIBAND_SRP=m CONFIG_INFINIBAND_ISER=m # CONFIG_EDAC is not set CONFIG_RTC_LIB=y CONFIG_RTC_CLASS=y CONFIG_RTC_HCTOSYS=y CONFIG_RTC_HCTOSYS_DEVICE="rtc0" CONFIG_RTC_DEBUG=y # # RTC interfaces # CONFIG_RTC_INTF_SYSFS=y CONFIG_RTC_INTF_PROC=y CONFIG_RTC_INTF_DEV=y CONFIG_RTC_INTF_DEV_UIE_EMUL=y CONFIG_RTC_DRV_TEST=m # # I2C RTC drivers # # CONFIG_RTC_DRV_DS1307 is not set CONFIG_RTC_DRV_DS1374=m CONFIG_RTC_DRV_DS1672=m # CONFIG_RTC_DRV_MAX6900 is not set CONFIG_RTC_DRV_RS5C372=m # CONFIG_RTC_DRV_ISL1208 is not set CONFIG_RTC_DRV_X1205=m CONFIG_RTC_DRV_PCF8563=m CONFIG_RTC_DRV_PCF8583=m # CONFIG_RTC_DRV_M41T80 is not set CONFIG_RTC_DRV_S35390A=m # CONFIG_RTC_DRV_FM3130 is not set CONFIG_RTC_DRV_RX8581=m CONFIG_RTC_DRV_RX8025=m # # SPI RTC drivers # CONFIG_RTC_DRV_M41T94=y # CONFIG_RTC_DRV_DS1305 is not set CONFIG_RTC_DRV_DS1390=y CONFIG_RTC_DRV_MAX6902=m CONFIG_RTC_DRV_R9701=m CONFIG_RTC_DRV_RS5C348=y CONFIG_RTC_DRV_DS3234=m CONFIG_RTC_DRV_PCF2123=y # # Platform RTC drivers # CONFIG_RTC_DRV_CMOS=y CONFIG_RTC_DRV_DS1286=m CONFIG_RTC_DRV_DS1511=m # CONFIG_RTC_DRV_DS1553 is not set CONFIG_RTC_DRV_DS1742=m CONFIG_RTC_DRV_STK17TA8=y CONFIG_RTC_DRV_M48T86=y CONFIG_RTC_DRV_M48T35=m CONFIG_RTC_DRV_M48T59=m CONFIG_RTC_DRV_MSM6242=m CONFIG_RTC_DRV_BQ4802=m # CONFIG_RTC_DRV_RP5C01 is not set CONFIG_RTC_DRV_V3020=y CONFIG_RTC_DRV_PCF50633=m CONFIG_RTC_DRV_AB3100=m # # on-CPU RTC drivers # CONFIG_RTC_DRV_PCAP=m CONFIG_DMADEVICES=y # # DMA Devices # CONFIG_ASYNC_TX_DISABLE_CHANNEL_SWITCH=y CONFIG_INTEL_IOATDMA=m CONFIG_DMA_ENGINE=y # # DMA Clients # CONFIG_NET_DMA=y CONFIG_ASYNC_TX_DMA=y CONFIG_DMATEST=y CONFIG_DCA=m CONFIG_AUXDISPLAY=y CONFIG_UIO=y # CONFIG_UIO_CIF is not set CONFIG_UIO_PDRV=y # CONFIG_UIO_PDRV_GENIRQ is not set CONFIG_UIO_SMX=m CONFIG_UIO_AEC=m CONFIG_UIO_SERCOS3=m CONFIG_UIO_PCI_GENERIC=m # # TI VLYNQ # # CONFIG_STAGING is not set CONFIG_X86_PLATFORM_DEVICES=y # # Firmware Drivers # CONFIG_EDD=m CONFIG_EDD_OFF=y CONFIG_FIRMWARE_MEMMAP=y CONFIG_DELL_RBU=y CONFIG_DCDBAS=m CONFIG_DMIID=y CONFIG_ISCSI_IBFT_FIND=y CONFIG_ISCSI_IBFT=y # # File systems # CONFIG_EXT2_FS=y # CONFIG_EXT2_FS_XATTR is not set # CONFIG_EXT2_FS_XIP is not set CONFIG_EXT3_FS=y CONFIG_EXT3_DEFAULTS_TO_ORDERED=y CONFIG_EXT3_FS_XATTR=y CONFIG_EXT3_FS_POSIX_ACL=y CONFIG_EXT3_FS_SECURITY=y CONFIG_EXT4_FS=y CONFIG_EXT4_FS_XATTR=y # CONFIG_EXT4_FS_POSIX_ACL is not set # CONFIG_EXT4_FS_SECURITY is not set CONFIG_EXT4_DEBUG=y CONFIG_JBD=y # CONFIG_JBD_DEBUG is not set CONFIG_JBD2=y # CONFIG_JBD2_DEBUG is not set CONFIG_FS_MBCACHE=y CONFIG_REISERFS_FS=y # CONFIG_REISERFS_CHECK is not set CONFIG_REISERFS_PROC_INFO=y CONFIG_REISERFS_FS_XATTR=y CONFIG_REISERFS_FS_POSIX_ACL=y CONFIG_REISERFS_FS_SECURITY=y # CONFIG_JFS_FS is not set CONFIG_FS_POSIX_ACL=y CONFIG_XFS_FS=m # CONFIG_XFS_QUOTA is not set CONFIG_XFS_POSIX_ACL=y CONFIG_XFS_RT=y CONFIG_XFS_DEBUG=y # CONFIG_OCFS2_FS is not set CONFIG_BTRFS_FS=m # CONFIG_BTRFS_FS_POSIX_ACL is not set CONFIG_NILFS2_FS=y CONFIG_FILE_LOCKING=y CONFIG_FSNOTIFY=y # CONFIG_DNOTIFY is not set CONFIG_INOTIFY=y CONFIG_INOTIFY_USER=y CONFIG_QUOTA=y CONFIG_QUOTA_NETLINK_INTERFACE=y CONFIG_PRINT_QUOTA_WARNING=y CONFIG_QUOTA_TREE=m CONFIG_QFMT_V1=m CONFIG_QFMT_V2=m CONFIG_QUOTACTL=y # CONFIG_AUTOFS_FS is not set CONFIG_AUTOFS4_FS=y # CONFIG_FUSE_FS is not set CONFIG_GENERIC_ACL=y # # Caches # CONFIG_FSCACHE=m CONFIG_FSCACHE_STATS=y # CONFIG_FSCACHE_HISTOGRAM is not set CONFIG_FSCACHE_DEBUG=y CONFIG_FSCACHE_OBJECT_LIST=y CONFIG_CACHEFILES=m # CONFIG_CACHEFILES_DEBUG is not set CONFIG_CACHEFILES_HISTOGRAM=y # # CD-ROM/DVD Filesystems # CONFIG_ISO9660_FS=m CONFIG_JOLIET=y CONFIG_ZISOFS=y # CONFIG_UDF_FS is not set # # DOS/FAT/NT Filesystems # CONFIG_FAT_FS=y CONFIG_MSDOS_FS=y CONFIG_VFAT_FS=m CONFIG_FAT_DEFAULT_CODEPAGE=437 CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" # CONFIG_NTFS_FS is not set # # Pseudo filesystems # CONFIG_PROC_FS=y CONFIG_PROC_KCORE=y # CONFIG_PROC_SYSCTL is not set CONFIG_PROC_PAGE_MONITOR=y CONFIG_SYSFS=y CONFIG_TMPFS=y CONFIG_TMPFS_POSIX_ACL=y # CONFIG_HUGETLBFS is not set # CONFIG_HUGETLB_PAGE is not set CONFIG_CONFIGFS_FS=y # CONFIG_MISC_FILESYSTEMS is not set # CONFIG_NETWORK_FILESYSTEMS is not set CONFIG_EXPORTFS=m # # Partition Types # CONFIG_PARTITION_ADVANCED=y # CONFIG_ACORN_PARTITION is not set CONFIG_OSF_PARTITION=y CONFIG_AMIGA_PARTITION=y CONFIG_ATARI_PARTITION=y # CONFIG_MAC_PARTITION is not set CONFIG_MSDOS_PARTITION=y CONFIG_BSD_DISKLABEL=y CONFIG_MINIX_SUBPARTITION=y CONFIG_SOLARIS_X86_PARTITION=y # CONFIG_UNIXWARE_DISKLABEL is not set CONFIG_LDM_PARTITION=y CONFIG_LDM_DEBUG=y CONFIG_SGI_PARTITION=y # CONFIG_ULTRIX_PARTITION is not set # CONFIG_SUN_PARTITION is not set CONFIG_KARMA_PARTITION=y CONFIG_EFI_PARTITION=y # CONFIG_SYSV68_PARTITION is not set CONFIG_NLS=y CONFIG_NLS_DEFAULT="iso8859-1" CONFIG_NLS_CODEPAGE_437=y CONFIG_NLS_CODEPAGE_737=m CONFIG_NLS_CODEPAGE_775=y # CONFIG_NLS_CODEPAGE_850 is not set CONFIG_NLS_CODEPAGE_852=m # CONFIG_NLS_CODEPAGE_855 is not set CONFIG_NLS_CODEPAGE_857=y CONFIG_NLS_CODEPAGE_860=y CONFIG_NLS_CODEPAGE_861=m CONFIG_NLS_CODEPAGE_862=m CONFIG_NLS_CODEPAGE_863=m CONFIG_NLS_CODEPAGE_864=y # CONFIG_NLS_CODEPAGE_865 is not set # CONFIG_NLS_CODEPAGE_866 is not set # CONFIG_NLS_CODEPAGE_869 is not set CONFIG_NLS_CODEPAGE_936=y CONFIG_NLS_CODEPAGE_950=m # CONFIG_NLS_CODEPAGE_932 is not set CONFIG_NLS_CODEPAGE_949=m CONFIG_NLS_CODEPAGE_874=y CONFIG_NLS_ISO8859_8=y CONFIG_NLS_CODEPAGE_1250=y # CONFIG_NLS_CODEPAGE_1251 is not set CONFIG_NLS_ASCII=y CONFIG_NLS_ISO8859_1=m CONFIG_NLS_ISO8859_2=y # CONFIG_NLS_ISO8859_3 is not set CONFIG_NLS_ISO8859_4=m CONFIG_NLS_ISO8859_5=y # CONFIG_NLS_ISO8859_6 is not set CONFIG_NLS_ISO8859_7=m # CONFIG_NLS_ISO8859_9 is not set CONFIG_NLS_ISO8859_13=m # CONFIG_NLS_ISO8859_14 is not set CONFIG_NLS_ISO8859_15=m CONFIG_NLS_KOI8_R=y # CONFIG_NLS_KOI8_U is not set # CONFIG_NLS_UTF8 is not set CONFIG_DLM=m # CONFIG_DLM_DEBUG is not set # # Kernel hacking # CONFIG_TRACE_IRQFLAGS_SUPPORT=y # CONFIG_PRINTK_TIME is not set CONFIG_ALLOW_WARNINGS=y CONFIG_ENABLE_WARN_DEPRECATED=y CONFIG_ENABLE_MUST_CHECK=y CONFIG_FRAME_WARN=1024 CONFIG_MAGIC_SYSRQ=y CONFIG_STRIP_ASM_SYMS=y # CONFIG_UNUSED_SYMBOLS is not set CONFIG_DEBUG_FS=y CONFIG_HEADERS_CHECK=y # CONFIG_DEBUG_SECTION_MISMATCH is not set CONFIG_DEBUG_KERNEL=y # CONFIG_DEBUG_SHIRQ is not set # CONFIG_DETECT_SOFTLOCKUP is not set CONFIG_DETECT_HUNG_TASK=y CONFIG_BOOTPARAM_HUNG_TASK_PANIC=y CONFIG_BOOTPARAM_HUNG_TASK_PANIC_VALUE=1 CONFIG_SCHED_DEBUG=y CONFIG_SCHEDSTATS=y CONFIG_TIMER_STATS=y CONFIG_DEBUG_OBJECTS=y # CONFIG_DEBUG_OBJECTS_SELFTEST is not set CONFIG_DEBUG_OBJECTS_FREE=y CONFIG_DEBUG_OBJECTS_TIMERS=y # CONFIG_DEBUG_OBJECTS_WORK is not set CONFIG_DEBUG_OBJECTS_ENABLE_DEFAULT=1 CONFIG_SLUB_DEBUG_ON=y CONFIG_SLUB_STATS=y # CONFIG_DEBUG_RT_MUTEXES is not set CONFIG_RT_MUTEX_TESTER=y CONFIG_DEBUG_SPINLOCK=y CONFIG_DEBUG_MUTEXES=y CONFIG_DEBUG_LOCK_ALLOC=y CONFIG_PROVE_LOCKING=y CONFIG_LOCKDEP=y CONFIG_LOCK_STAT=y CONFIG_DEBUG_LOCKDEP=y CONFIG_TRACE_IRQFLAGS=y # CONFIG_DEBUG_SPINLOCK_SLEEP is not set # CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set CONFIG_STACKTRACE=y # CONFIG_DEBUG_HIGHMEM is not set CONFIG_DEBUG_BUGVERBOSE=y CONFIG_DEBUG_VM=y CONFIG_DEBUG_VIRTUAL=y CONFIG_DEBUG_WRITECOUNT=y CONFIG_DEBUG_MEMORY_INIT=y CONFIG_DEBUG_LIST=y # CONFIG_DEBUG_SG is not set CONFIG_DEBUG_NOTIFIERS=y CONFIG_DEBUG_CREDENTIALS=y CONFIG_ARCH_WANT_FRAME_POINTERS=y CONFIG_FRAME_POINTER=y CONFIG_BOOT_PRINTK_DELAY=y CONFIG_RCU_TORTURE_TEST=y # CONFIG_RCU_TORTURE_TEST_RUNNABLE is not set CONFIG_RCU_CPU_STALL_DETECTOR=y # CONFIG_BACKTRACE_SELF_TEST is not set # CONFIG_DEBUG_BLOCK_EXT_DEVT is not set # CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set CONFIG_FAULT_INJECTION=y # CONFIG_FAILSLAB is not set CONFIG_FAIL_PAGE_ALLOC=y CONFIG_FAIL_MAKE_REQUEST=y CONFIG_FAIL_IO_TIMEOUT=y CONFIG_FAULT_INJECTION_DEBUG_FS=y CONFIG_FAULT_INJECTION_STACKTRACE_FILTER=y # CONFIG_LATENCYTOP is not set CONFIG_DEBUG_PAGEALLOC=y CONFIG_USER_STACKTRACE_SUPPORT=y CONFIG_NOP_TRACER=y CONFIG_HAVE_FTRACE_NMI_ENTER=y CONFIG_HAVE_FUNCTION_TRACER=y CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y CONFIG_HAVE_FUNCTION_GRAPH_FP_TEST=y CONFIG_HAVE_FUNCTION_TRACE_MCOUNT_TEST=y CONFIG_HAVE_DYNAMIC_FTRACE=y CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y CONFIG_HAVE_SYSCALL_TRACEPOINTS=y CONFIG_TRACER_MAX_TRACE=y CONFIG_RING_BUFFER=y CONFIG_FTRACE_NMI_ENTER=y CONFIG_EVENT_TRACING=y CONFIG_CONTEXT_SWITCH_TRACER=y CONFIG_RING_BUFFER_ALLOW_SWAP=y CONFIG_TRACING=y CONFIG_GENERIC_TRACER=y CONFIG_TRACING_SUPPORT=y CONFIG_FTRACE=y CONFIG_FUNCTION_TRACER=y # CONFIG_FUNCTION_GRAPH_TRACER is not set # CONFIG_IRQSOFF_TRACER is not set CONFIG_SYSPROF_TRACER=y CONFIG_SCHED_TRACER=y # CONFIG_FTRACE_SYSCALLS is not set # CONFIG_BOOT_TRACER is not set CONFIG_BRANCH_PROFILE_NONE=y # CONFIG_PROFILE_ANNOTATED_BRANCHES is not set # CONFIG_PROFILE_ALL_BRANCHES is not set CONFIG_POWER_TRACER=y CONFIG_KSYM_TRACER=y # CONFIG_PROFILE_KSYM_TRACER is not set # CONFIG_STACK_TRACER is not set CONFIG_KMEMTRACE=y # CONFIG_WORKQUEUE_TRACER is not set CONFIG_BLK_DEV_IO_TRACE=y CONFIG_DYNAMIC_FTRACE=y CONFIG_FUNCTION_PROFILER=y CONFIG_FTRACE_MCOUNT_RECORD=y # CONFIG_FTRACE_STARTUP_TEST is not set CONFIG_MMIOTRACE=y CONFIG_MMIOTRACE_TEST=m # CONFIG_RING_BUFFER_BENCHMARK is not set CONFIG_PROVIDE_OHCI1394_DMA_INIT=y # CONFIG_FIREWIRE_OHCI_REMOTE_DMA is not set # CONFIG_BUILD_DOCSRC is not set CONFIG_DYNAMIC_DEBUG=y # CONFIG_DMA_API_DEBUG is not set CONFIG_SAMPLES=y # CONFIG_SAMPLE_TRACEPOINTS is not set CONFIG_SAMPLE_TRACE_EVENTS=m CONFIG_SAMPLE_KOBJECT=m CONFIG_SAMPLE_HW_BREAKPOINT=m CONFIG_HAVE_ARCH_KGDB=y CONFIG_KGDB=y CONFIG_KGDB_SERIAL_CONSOLE=m # CONFIG_KGDB_TESTS is not set CONFIG_HAVE_ARCH_KMEMCHECK=y CONFIG_STRICT_DEVMEM=y CONFIG_X86_VERBOSE_BOOTUP=y CONFIG_EARLY_PRINTK=y # CONFIG_EARLY_PRINTK_DBGP is not set CONFIG_DEBUG_STACKOVERFLOW=y # CONFIG_DEBUG_STACK_USAGE is not set CONFIG_DEBUG_PER_CPU_MAPS=y # CONFIG_X86_PTDUMP is not set CONFIG_DEBUG_RODATA=y CONFIG_DEBUG_RODATA_TEST=y # CONFIG_DEBUG_NX_TEST is not set CONFIG_4KSTACKS=y CONFIG_DOUBLEFAULT=y CONFIG_IOMMU_STRESS=y CONFIG_HAVE_MMIOTRACE_SUPPORT=y CONFIG_IO_DELAY_TYPE_0X80=0 CONFIG_IO_DELAY_TYPE_0XED=1 CONFIG_IO_DELAY_TYPE_UDELAY=2 CONFIG_IO_DELAY_TYPE_NONE=3 # CONFIG_IO_DELAY_0X80 is not set # CONFIG_IO_DELAY_0XED is not set CONFIG_IO_DELAY_UDELAY=y # CONFIG_IO_DELAY_NONE is not set CONFIG_DEFAULT_IO_DELAY_TYPE=2 # CONFIG_DEBUG_BOOT_PARAMS is not set # CONFIG_CPA_DEBUG is not set CONFIG_OPTIMIZE_INLINING=y # # Security options # CONFIG_KEYS=y CONFIG_KEYS_DEBUG_PROC_KEYS=y CONFIG_SECURITY=y CONFIG_SECURITYFS=y CONFIG_SECURITY_NETWORK=y CONFIG_SECURITY_NETWORK_XFRM=y CONFIG_SECURITY_PATH=y # CONFIG_SECURITY_SMACK is not set CONFIG_SECURITY_TOMOYO=y # CONFIG_DEFAULT_SECURITY_SELINUX is not set # CONFIG_DEFAULT_SECURITY_SMACK is not set CONFIG_DEFAULT_SECURITY_TOMOYO=y # CONFIG_DEFAULT_SECURITY_DAC is not set CONFIG_DEFAULT_SECURITY="tomoyo" CONFIG_ASYNC_TX_DISABLE_PQ_VAL_DMA=y CONFIG_ASYNC_TX_DISABLE_XOR_VAL_DMA=y CONFIG_CRYPTO=y # # Crypto core or helper # CONFIG_CRYPTO_FIPS=y CONFIG_CRYPTO_ALGAPI=y CONFIG_CRYPTO_ALGAPI2=y CONFIG_CRYPTO_AEAD=y CONFIG_CRYPTO_AEAD2=y CONFIG_CRYPTO_BLKCIPHER=y CONFIG_CRYPTO_BLKCIPHER2=y CONFIG_CRYPTO_HASH=y CONFIG_CRYPTO_HASH2=y CONFIG_CRYPTO_RNG=y CONFIG_CRYPTO_RNG2=y CONFIG_CRYPTO_PCOMP=y CONFIG_CRYPTO_MANAGER=y CONFIG_CRYPTO_MANAGER2=y CONFIG_CRYPTO_GF128MUL=y CONFIG_CRYPTO_NULL=y CONFIG_CRYPTO_WORKQUEUE=y CONFIG_CRYPTO_CRYPTD=y CONFIG_CRYPTO_AUTHENC=y CONFIG_CRYPTO_TEST=m # # Authenticated Encryption with Associated Data # CONFIG_CRYPTO_CCM=y # CONFIG_CRYPTO_GCM is not set CONFIG_CRYPTO_SEQIV=y # # Block modes # CONFIG_CRYPTO_CBC=y CONFIG_CRYPTO_CTR=y CONFIG_CRYPTO_CTS=y CONFIG_CRYPTO_ECB=y CONFIG_CRYPTO_LRW=y CONFIG_CRYPTO_PCBC=m # CONFIG_CRYPTO_XTS is not set # # Hash modes # CONFIG_CRYPTO_HMAC=y CONFIG_CRYPTO_XCBC=m # CONFIG_CRYPTO_VMAC is not set # # Digest # CONFIG_CRYPTO_CRC32C=y CONFIG_CRYPTO_CRC32C_INTEL=m CONFIG_CRYPTO_GHASH=m # CONFIG_CRYPTO_MD4 is not set CONFIG_CRYPTO_MD5=y CONFIG_CRYPTO_MICHAEL_MIC=y CONFIG_CRYPTO_RMD128=y # CONFIG_CRYPTO_RMD160 is not set # CONFIG_CRYPTO_RMD256 is not set CONFIG_CRYPTO_RMD320=m CONFIG_CRYPTO_SHA1=y CONFIG_CRYPTO_SHA256=m # CONFIG_CRYPTO_SHA512 is not set # CONFIG_CRYPTO_TGR192 is not set CONFIG_CRYPTO_WP512=y # # Ciphers # CONFIG_CRYPTO_AES=y # CONFIG_CRYPTO_AES_586 is not set CONFIG_CRYPTO_ANUBIS=m CONFIG_CRYPTO_ARC4=y CONFIG_CRYPTO_BLOWFISH=y CONFIG_CRYPTO_CAMELLIA=m # CONFIG_CRYPTO_CAST5 is not set # CONFIG_CRYPTO_CAST6 is not set CONFIG_CRYPTO_DES=y # CONFIG_CRYPTO_FCRYPT is not set # CONFIG_CRYPTO_KHAZAD is not set CONFIG_CRYPTO_SALSA20=m # CONFIG_CRYPTO_SALSA20_586 is not set CONFIG_CRYPTO_SEED=m # CONFIG_CRYPTO_SERPENT is not set CONFIG_CRYPTO_TEA=m # CONFIG_CRYPTO_TWOFISH is not set CONFIG_CRYPTO_TWOFISH_COMMON=y CONFIG_CRYPTO_TWOFISH_586=y # # Compression # CONFIG_CRYPTO_DEFLATE=y # CONFIG_CRYPTO_ZLIB is not set CONFIG_CRYPTO_LZO=y # # Random Number Generation # CONFIG_CRYPTO_ANSI_CPRNG=y # CONFIG_CRYPTO_HW is not set CONFIG_HAVE_KVM=y CONFIG_VIRTUALIZATION=y # CONFIG_KVM is not set CONFIG_VIRTIO=y CONFIG_VIRTIO_RING=y # CONFIG_VIRTIO_PCI is not set CONFIG_VIRTIO_BALLOON=y CONFIG_BINARY_PRINTF=y # # Library routines # CONFIG_BITREVERSE=y CONFIG_GENERIC_FIND_FIRST_BIT=y CONFIG_GENERIC_FIND_NEXT_BIT=y CONFIG_GENERIC_FIND_LAST_BIT=y CONFIG_CRC_CCITT=y CONFIG_CRC16=y CONFIG_CRC_T10DIF=y CONFIG_CRC_ITU_T=m CONFIG_CRC32=y CONFIG_CRC7=m CONFIG_LIBCRC32C=y CONFIG_ZLIB_INFLATE=y CONFIG_ZLIB_DEFLATE=y CONFIG_LZO_COMPRESS=y CONFIG_LZO_DECOMPRESS=y CONFIG_HAS_IOMEM=y CONFIG_HAS_IOPORT=y CONFIG_HAS_DMA=y CONFIG_CHECK_SIGNATURE=y CONFIG_CPUMASK_OFFSTACK=y CONFIG_NLATTR=y CONFIG_FORCE_SUCCESSFUL_BUILD=y CONFIG_FORCE_MINIMAL_CONFIG=y CONFIG_FORCE_MINIMAL_CONFIG_PHYS=y CONFIG_X86_32_ALWAYS_ON=y ^ permalink raw reply [flat|nested] 78+ messages in thread
* Re: [GIT PATCH] TTY patches for 2.6.33-git 2009-12-12 8:46 ` Ingo Molnar @ 2009-12-12 9:39 ` Andrew Morton 2009-12-12 10:06 ` Ingo Molnar ` (2 more replies) 2009-12-12 10:42 ` Alan Cox 1 sibling, 3 replies; 78+ messages in thread From: Andrew Morton @ 2009-12-12 9:39 UTC (permalink / raw) To: Ingo Molnar Cc: Greg KH, Alan Cox, Thomas Gleixner, Peter Zijlstra, Linus Torvalds, linux-kernel On Sat, 12 Dec 2009 09:46:11 +0100 Ingo Molnar <mingo@elte.hu> wrote: > * Greg KH <gregkh@suse.de> wrote: > > > Here's the big TTY patchset for your .33-git tree. > > FYI, one of the changes in this tree is causing lockups on x86. > > Config attached. > > Possible suspects would one of these: > > 36ba782: tty: split the lock up a bit further > 5ec93d1: tty: Move the leader test in disassociate > 38c70b2: tty: Push the bkl down a bit in the hangup code > f18f949: tty: Push the lock down further into the ldisc code > eeb89d9: tty: push the BKL down into the handlers a bit > > as they deal with locking details and are fresher than two weeks. yes, I started getting lockups yesterday when all this hit linux-next. Seems to be quite .config-dependent. I get all-cpu backtraces which show all eight CPUs stuck on either lock_kernel() or files_lock(). It appears that both locks are held. The do_tty_hangup()->tty_fasync() path takes the locks in the file_list_lock()->lock_kernel() direction whereas most other code takes them in the other direction, which cannot be good. But I'm not sure that this recent merge significantly changed anything in that area. Enabling lockdep makes the hang go away. Have a trace. I'm actually wondering if perhaps there's a missing unlock_kernel() somewhere else, and the tty code is just the victim of that. (hm, this trace only showed 6 CPUs. It's a bit of a mess) [ 72.525902] INFO: RCU detected CPU 0 stall (t=2500 jiffies) [ 72.525969] NMI backtrace for cpu 4 [ 72.526024] CPU 4 [ 72.526154] Process irqbalance (pid: 3152, threadinfo ffff88025d86e000, task ffff880256fac040) [ 72.526209] Stack: [ 72.526255] 0000000000000000 ffff88025d86fd08 ffffffff811a12f5 ffff88025d86fd38 [ 72.526434] <0> ffffffff811a572f ffff88025f0a2910 ffff88024a85c4c0 0000000000000000 [ 72.526698] <0> ffff88024a63f698 ffff88025d86fd48 ffffffff81383af9 ffff88025d86fd68 [ 72.527005] Call Trace: [ 72.527057] [<ffffffff811a12f5>] __delay+0xa/0xc [ 72.527112] [<ffffffff811a572f>] _raw_spin_lock+0xbc/0x125 [ 72.527165] [<ffffffff81383af9>] _spin_lock+0x9/0xb [ 72.527220] [<ffffffff810ce929>] file_move+0x1e/0x4d [ 72.527247] [<ffffffff810cd033>] __dentry_open+0x17e/0x2ef [ 72.527247] [<ffffffff810cd26e>] nameidata_to_filp+0x3e/0x4f [ 72.527247] [<ffffffff810d8bd5>] do_filp_open+0x529/0x972 [ 72.527247] [<ffffffff8105935b>] ? hrtimer_cancel+0x11/0x1d [ 72.527247] [<ffffffff811a1fa3>] ? __strncpy_from_user+0x2b/0x55 [ 72.527247] [<ffffffff81383b04>] ? _spin_unlock+0x9/0xb [ 72.527247] [<ffffffff810e2520>] ? alloc_fd+0x111/0x121 [ 72.527247] [<ffffffff810cc77d>] do_sys_open+0x5c/0x123 [ 72.527247] [<ffffffff810cc86d>] sys_open+0x1b/0x1d [ 72.527247] [<ffffffff81002aab>] system_call_fastpath+0x16/0x1b [ 72.527247] Code: 02 98 00 00 00 3e 48 89 c8 f7 e2 48 8d 7a 01 e8 b8 ff ff ff c9 c3 55 48 89 e5 50 65 8b 34 25 b0 cd 00 00 66 66 90 0f ae e8 0f 31 <41> 89 c0 66 66 90 0f ae e8 0f 31 89 c0 4c 29 c0 48 39 f8 73 20 [ 72.527247] Call Trace: [ 72.527247] <#DB[1]> <<EOE>> Pid: 3152, comm: irqbalance Not tainted 2.6.32-mm1 #8 [ 72.527247] Call Trace: [ 72.527247] <NMI> [<ffffffff81001098>] ? show_regs+0x23/0x27 [ 72.527247] [<ffffffff81385175>] nmi_watchdog_tick+0xc9/0x1ad [ 72.527247] [<ffffffff813846b0>] do_nmi+0xa7/0x256 [ 72.527247] [<ffffffff8138433a>] nmi+0x1a/0x20 [ 72.527247] [<ffffffff811a134a>] ? delay_tsc+0x15/0x4c [ 72.527247] <<EOE>> [<ffffffff811a12f5>] __delay+0xa/0xc [ 72.527247] [<ffffffff811a572f>] _raw_spin_lock+0xbc/0x125 [ 72.527247] [<ffffffff81383af9>] _spin_lock+0x9/0xb [ 72.527247] [<ffffffff810ce929>] file_move+0x1e/0x4d [ 72.527247] [<ffffffff810cd033>] __dentry_open+0x17e/0x2ef [ 72.527247] [<ffffffff810cd26e>] nameidata_to_filp+0x3e/0x4f [ 72.527247] [<ffffffff810d8bd5>] do_filp_open+0x529/0x972 [ 72.527247] [<ffffffff8105935b>] ? hrtimer_cancel+0x11/0x1d [ 72.527247] [<ffffffff811a1fa3>] ? __strncpy_from_user+0x2b/0x55 [ 72.527247] [<ffffffff81383b04>] ? _spin_unlock+0x9/0xb [ 72.527247] [<ffffffff810e2520>] ? alloc_fd+0x111/0x121 [ 72.527247] [<ffffffff810cc77d>] do_sys_open+0x5c/0x123 [ 72.527247] [<ffffffff810cc86d>] sys_open+0x1b/0x1d [ 72.527247] [<ffffffff81002aab>] system_call_fastpath+0x16/0x1b [ 72.527230] NMI backtrace for cpu 6 [ 72.527230] CPU 6 [ 72.527230] Process mingetty (pid: 4105, threadinfo ffff88024aac4000, task ffff880256e2f810) [ 72.527230] Stack: [ 72.527230] ffffffff811a12f5 ffff88024aac5dc8 ffffffff811a572f 00007ffffbf94690 [ 72.527230] <0> 0000000000000000 000000000000033a ffffffff814ef5d0 ffff88024aac5e08 [ 72.527230] <0> ffffffff81383e0a ffff88025d5a3bc0 00007ffffbf94690 ffff88025d5a3bc0 [ 72.527230] Call Trace: [ 72.527230] [<ffffffff811a12f5>] ? __delay+0xa/0xc [ 72.527230] [<ffffffff811a572f>] _raw_spin_lock+0xbc/0x125 [ 72.527230] [<ffffffff81383e0a>] _lock_kernel+0x63/0x7c [ 72.527230] [<ffffffff81101396>] __posix_lock_file+0x79/0x40e [ 72.527230] [<ffffffff811018bf>] posix_lock_file+0x11/0x13 [ 72.527230] [<ffffffff811018ec>] vfs_lock_file+0x2b/0x2d [ 72.527230] [<ffffffff81101ad4>] fcntl_setlk+0x139/0x278 [ 72.527230] [<ffffffff810da34c>] sys_fcntl+0x2ef/0x4a7 [ 72.527230] [<ffffffff81002aab>] system_call_fastpath+0x16/0x1b [ 72.527230] Code: 48 8b 04 c5 60 85 86 81 48 c7 c2 c0 31 01 00 48 89 e5 48 6b 94 02 98 00 00 00 3e 48 89 c8 f7 e2 48 8d 7a 01 e8 b8 ff ff ff c9 c3 <55> 48 89 e5 50 65 8b 34 25 b0 cd 00 00 66 66 90 0f ae e8 0f 31 [ 72.527230] Call Trace: [ 72.527230] <#DB[1]> <<EOE>> Pid: 4105, comm: mingetty Not tainted 2.6.32-mm1 #8 [ 72.527230] Call Trace: [ 72.527230] <NMI> [<ffffffff81001098>] ? show_regs+0x23/0x27 [ 72.527230] [<ffffffff81385175>] nmi_watchdog_tick+0xc9/0x1ad [ 72.527230] [<ffffffff813846b0>] do_nmi+0xa7/0x256 [ 72.527230] [<ffffffff8138433a>] nmi+0x1a/0x20 [ 72.527230] [<ffffffff811a1335>] ? delay_tsc+0x0/0x4c [ 72.527230] <<EOE>> [<ffffffff811a12f5>] ? __delay+0xa/0xc [ 72.527230] [<ffffffff811a572f>] _raw_spin_lock+0xbc/0x125 [ 72.527230] [<ffffffff81383e0a>] _lock_kernel+0x63/0x7c [ 72.527230] [<ffffffff81101396>] __posix_lock_file+0x79/0x40e [ 72.527230] [<ffffffff811018bf>] posix_lock_file+0x11/0x13 [ 72.527230] [<ffffffff811018ec>] vfs_lock_file+0x2b/0x2d [ 72.527230] [<ffffffff81101ad4>] fcntl_setlk+0x139/0x278 [ 72.527230] [<ffffffff810da34c>] sys_fcntl+0x2ef/0x4a7 [ 72.527230] [<ffffffff81002aab>] system_call_fastpath+0x16/0x1b [ 72.527211] NMI backtrace for cpu 1 [ 72.527230] INFO: RCU detected CPU 6 stall (t=2500 jiffies) [ 72.527211] CPU 1 [ 72.527211] Process hald-addon-stor (pid: 3999, threadinfo ffff88025235c000, task ffff880256e2a080) [ 72.527211] Stack: [ 72.527211] 0000000000000000 ffff88025235dd08 ffffffff811a12f5 ffff88025235dd38 [ 72.527211] <0> ffffffff811a572f ffff88025d47ad10 ffff88025d4fd7c0 0000000000000000 [ 72.527211] <0> ffff8802583c78d0 ffff88025235dd48 ffffffff81383af9 ffff88025235dd68 [ 72.527211] Call Trace: [ 72.527211] [<ffffffff811a12f5>] __delay+0xa/0xc [ 72.527211] [<ffffffff811a572f>] _raw_spin_lock+0xbc/0x125 [ 72.527211] [<ffffffff81383af9>] _spin_lock+0x9/0xb [ 72.527211] [<ffffffff810ce929>] file_move+0x1e/0x4d [ 72.527211] [<ffffffff810cd033>] __dentry_open+0x17e/0x2ef [ 72.527211] [<ffffffff810cd26e>] nameidata_to_filp+0x3e/0x4f [ 72.527211] [<ffffffff810d8bd5>] do_filp_open+0x529/0x972 [ 72.527211] [<ffffffff81383b04>] ? _spin_unlock+0x9/0xb [ 72.527211] [<ffffffff811a1fa3>] ? __strncpy_from_user+0x2b/0x55 [ 72.527211] [<ffffffff81383b04>] ? _spin_unlock+0x9/0xb [ 72.527211] [<ffffffff810e2520>] ? alloc_fd+0x111/0x121 [ 72.527211] [<ffffffff810cc77d>] do_sys_open+0x5c/0x123 [ 72.527211] [<ffffffff810cc86d>] sys_open+0x1b/0x1d [ 72.527211] [<ffffffff81002aab>] system_call_fastpath+0x16/0x1b [ 72.527211] Code: 7a 01 e8 b8 ff ff ff c9 c3 55 48 89 e5 50 65 8b 34 25 b0 cd 00 00 66 66 90 0f ae e8 0f 31 41 89 c0 66 66 90 0f ae e8 0f 31 89 c0 <4c> 29 c0 48 39 f8 73 20 f3 90 65 8b 0c 25 b0 cd 00 00 39 ce 74 [ 72.527211] Call Trace: [ 72.527211] <#DB[1]> <<EOE>> Pid: 3999, comm: hald-addon-stor Not tainted 2.6.32-mm1 #8 [ 72.527211] Call Trace: [ 72.527211] <NMI> [<ffffffff81001098>] ? show_regs+0x23/0x27 [ 72.527211] [<ffffffff81385175>] nmi_watchdog_tick+0xc9/0x1ad [ 72.527211] [<ffffffff813846b0>] do_nmi+0xa7/0x256 [ 72.527211] [<ffffffff8138433a>] nmi+0x1a/0x20 [ 72.527211] [<ffffffff811a1357>] ? delay_tsc+0x22/0x4c [ 72.527211] <<EOE>> [<ffffffff811a12f5>] __delay+0xa/0xc [ 72.527211] [<ffffffff811a572f>] _raw_spin_lock+0xbc/0x125 [ 72.527211] [<ffffffff81383af9>] _spin_lock+0x9/0xb [ 72.527211] [<ffffffff810ce929>] file_move+0x1e/0x4d [ 72.527211] [<ffffffff810cd033>] __dentry_open+0x17e/0x2ef [ 72.527211] [<ffffffff810cd26e>] nameidata_to_filp+0x3e/0x4f [ 72.527211] [<ffffffff810d8bd5>] do_filp_open+0x529/0x972 [ 72.527211] [<ffffffff81383b04>] ? _spin_unlock+0x9/0xb [ 72.527211] [<ffffffff811a1fa3>] ? __strncpy_from_user+0x2b/0x55 [ 72.527211] [<ffffffff81383b04>] ? _spin_unlock+0x9/0xb [ 72.527211] [<ffffffff810e2520>] ? alloc_fd+0x111/0x121 [ 72.527211] [<ffffffff810cc77d>] do_sys_open+0x5c/0x123 [ 72.527211] [<ffffffff810cc86d>] sys_open+0x1b/0x1d [ 72.527211] [<ffffffff81002aab>] system_call_fastpath+0x16/0x1b ^ permalink raw reply [flat|nested] 78+ messages in thread
* Re: [GIT PATCH] TTY patches for 2.6.33-git 2009-12-12 9:39 ` Andrew Morton @ 2009-12-12 10:06 ` Ingo Molnar 2009-12-12 10:15 ` Ingo Molnar 2009-12-12 10:10 ` Ingo Molnar 2009-12-12 11:02 ` Alan Cox 2 siblings, 1 reply; 78+ messages in thread From: Ingo Molnar @ 2009-12-12 10:06 UTC (permalink / raw) To: Andrew Morton Cc: Greg KH, Alan Cox, Thomas Gleixner, Peter Zijlstra, Linus Torvalds, linux-kernel * Andrew Morton <akpm@linux-foundation.org> wrote: > Have a trace. I'm actually wondering if perhaps there's a missing > unlock_kernel() somewhere else, and the tty code is just the victim of > that. Unlikely i'd say. I have 1000+ successful overnight tests on the latest tree Linus pushed out: 3ef884b: Merge branch 'drm-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/airlied/d So that's a guaranteed 'good' kernel. The moment i merged 053fe57 into -tip the lockups started, so that's a guaranteed 'bad' kernel. There's only the TTY changes between those two points that look remotely related. It's spurious though so quite hard to bisect. I tried one bisection today already and it got on the wrong track. I'll do a brute-force revert of the commits i quoted, lets see what happens. Ingo ^ permalink raw reply [flat|nested] 78+ messages in thread
* Re: [GIT PATCH] TTY patches for 2.6.33-git 2009-12-12 10:06 ` Ingo Molnar @ 2009-12-12 10:15 ` Ingo Molnar 2009-12-12 10:41 ` Andrew Morton 0 siblings, 1 reply; 78+ messages in thread From: Ingo Molnar @ 2009-12-12 10:15 UTC (permalink / raw) To: Andrew Morton Cc: Greg KH, Alan Cox, Thomas Gleixner, Peter Zijlstra, Linus Torvalds, linux-kernel * Ingo Molnar <mingo@elte.hu> wrote: > > * Andrew Morton <akpm@linux-foundation.org> wrote: > > > Have a trace. I'm actually wondering if perhaps there's a missing > > unlock_kernel() somewhere else, and the tty code is just the victim of > > that. > > Unlikely i'd say. I have 1000+ successful overnight tests on the latest > tree Linus pushed out: > > 3ef884b: Merge branch 'drm-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/airlied/d > > So that's a guaranteed 'good' kernel. > > The moment i merged 053fe57 into -tip the lockups started, so that's a > guaranteed 'bad' kernel. There's only the TTY changes between those two > points that look remotely related. > > It's spurious though so quite hard to bisect. I tried one bisection > today already and it got on the wrong track. I'll do a brute-force > revert of the commits i quoted, lets see what happens. i'm testing the series of 5 reverts below. It's looking good so far. You might want to try them - how quickly can you reproduce the hangs? Ingo ---------------> >From 95b532d4e2f9a82c1dedf7ea4a6c2702402237e6 Mon Sep 17 00:00:00 2001 From: Ingo Molnar <mingo@elte.hu> Date: Sat, 12 Dec 2009 11:08:04 +0100 Subject: [PATCH] Revert "tty: push the BKL down into the handlers a bit" This reverts commit eeb89d918c2fa2b809e464136bbafdaec2aacb30. diff --git a/drivers/char/pty.c b/drivers/char/pty.c index 385c44b..d86c0bc 100644 --- a/drivers/char/pty.c +++ b/drivers/char/pty.c @@ -659,7 +659,7 @@ static int __ptmx_open(struct inode *inode, struct file *filp) if (!retval) return 0; out1: - tty_release(inode, filp); + tty_release_dev(filp); return retval; out: devpts_kill_index(inode, index); diff --git a/drivers/char/tty_io.c b/drivers/char/tty_io.c index 1e24130..59499ee 100644 --- a/drivers/char/tty_io.c +++ b/drivers/char/tty_io.c @@ -142,6 +142,7 @@ ssize_t redirected_tty_write(struct file *, const char __user *, size_t, loff_t *); static unsigned int tty_poll(struct file *, poll_table *); static int tty_open(struct inode *, struct file *); +static int tty_release(struct inode *, struct file *); long tty_ioctl(struct file *file, unsigned int cmd, unsigned long arg); #ifdef CONFIG_COMPAT static long tty_compat_ioctl(struct file *file, unsigned int cmd, @@ -1016,16 +1017,14 @@ out: void tty_write_message(struct tty_struct *tty, char *msg) { + lock_kernel(); if (tty) { mutex_lock(&tty->atomic_write_lock); - lock_kernel(); - if (tty->ops->write && !test_bit(TTY_CLOSING, &tty->flags)) { - unlock_kernel(); + if (tty->ops->write && !test_bit(TTY_CLOSING, &tty->flags)) tty->ops->write(tty, msg, strlen(msg)); - } else - unlock_kernel(); tty_write_unlock(tty); } + unlock_kernel(); return; } @@ -1203,21 +1202,14 @@ static int tty_driver_install_tty(struct tty_driver *driver, struct tty_struct *tty) { int idx = tty->index; - int ret; - if (driver->ops->install) { - lock_kernel(); - ret = driver->ops->install(driver, tty); - unlock_kernel(); - return ret; - } + if (driver->ops->install) + return driver->ops->install(driver, tty); if (tty_init_termios(tty) == 0) { - lock_kernel(); tty_driver_kref_get(driver); tty->count++; driver->ttys[idx] = tty; - unlock_kernel(); return 0; } return -ENOMEM; @@ -1310,14 +1302,10 @@ struct tty_struct *tty_init_dev(struct tty_driver *driver, int idx, struct tty_struct *tty; int retval; - lock_kernel(); /* Check if pty master is being opened multiple times */ if (driver->subtype == PTY_TYPE_MASTER && - (driver->flags & TTY_DRIVER_DEVPTS_MEM) && !first_ok) { - unlock_kernel(); + (driver->flags & TTY_DRIVER_DEVPTS_MEM) && !first_ok) return ERR_PTR(-EIO); - } - unlock_kernel(); /* * First time open is complex, especially for PTY devices. @@ -1347,9 +1335,8 @@ struct tty_struct *tty_init_dev(struct tty_driver *driver, int idx, * If we fail here just call release_tty to clean up. No need * to decrement the use counts, as release_tty doesn't care. */ - lock_kernel(); + retval = tty_ldisc_setup(tty, tty->link); - unlock_kernel(); if (retval) goto release_mem_out; return tty; @@ -1363,9 +1350,7 @@ release_mem_out: if (printk_ratelimit()) printk(KERN_INFO "tty_init_dev: ldisc open failed, " "clearing slot %d\n", idx); - lock_kernel(); release_tty(tty, idx); - unlock_kernel(); return ERR_PTR(retval); } @@ -1479,17 +1464,7 @@ static void release_tty(struct tty_struct *tty, int idx) tty_kref_put(tty); } -/** - * tty_release - vfs callback for close - * @inode: inode of tty - * @filp: file pointer for handle to tty - * - * Called the last time each file handle is closed that references - * this tty. There may however be several such references. - * - * Locking: - * Takes bkl. See tty_release_dev - * +/* * Even releasing the tty structures is a tricky business.. We have * to be very careful that the structures are all released at the * same time, as interrupts might otherwise get the wrong pointers. @@ -1497,20 +1472,20 @@ static void release_tty(struct tty_struct *tty, int idx) * WSH 09/09/97: rewritten to avoid some nasty race conditions that could * lead to double frees or releasing memory still in use. */ - -int tty_release(struct inode *inode, struct file *filp) +void tty_release_dev(struct file *filp) { struct tty_struct *tty, *o_tty; int pty_master, tty_closing, o_tty_closing, do_sleep; int devpts; int idx; char buf[64]; + struct inode *inode; + inode = filp->f_path.dentry->d_inode; tty = (struct tty_struct *)filp->private_data; if (tty_paranoia_check(tty, inode, "tty_release_dev")) - return 0; + return; - lock_kernel(); check_tty_count(tty, "tty_release_dev"); tty_fasync(-1, filp, 0); @@ -1525,22 +1500,19 @@ int tty_release(struct inode *inode, struct file *filp) if (idx < 0 || idx >= tty->driver->num) { printk(KERN_DEBUG "tty_release_dev: bad idx when trying to " "free (%s)\n", tty->name); - unlock_kernel(); - return 0; + return; } if (!devpts) { if (tty != tty->driver->ttys[idx]) { - unlock_kernel(); printk(KERN_DEBUG "tty_release_dev: driver.table[%d] not tty " "for (%s)\n", idx, tty->name); - return 0; + return; } if (tty->termios != tty->driver->termios[idx]) { - unlock_kernel(); printk(KERN_DEBUG "tty_release_dev: driver.termios[%d] not termios " "for (%s)\n", idx, tty->name); - return 0; + return; } } #endif @@ -1554,30 +1526,26 @@ int tty_release(struct inode *inode, struct file *filp) if (tty->driver->other && !(tty->driver->flags & TTY_DRIVER_DEVPTS_MEM)) { if (o_tty != tty->driver->other->ttys[idx]) { - unlock_kernel(); printk(KERN_DEBUG "tty_release_dev: other->table[%d] " "not o_tty for (%s)\n", idx, tty->name); - return 0 ; + return; } if (o_tty->termios != tty->driver->other->termios[idx]) { - unlock_kernel(); printk(KERN_DEBUG "tty_release_dev: other->termios[%d] " "not o_termios for (%s)\n", idx, tty->name); - return 0; + return; } if (o_tty->link != tty) { - unlock_kernel(); printk(KERN_DEBUG "tty_release_dev: bad pty pointers\n"); - return 0; + return; } } #endif if (tty->ops->close) tty->ops->close(tty, filp); - unlock_kernel(); /* * Sanity check: if tty->count is going to zero, there shouldn't be * any waiters on tty->read_wait or tty->write_wait. We test the @@ -1600,7 +1568,6 @@ int tty_release(struct inode *inode, struct file *filp) opens on /dev/tty */ mutex_lock(&tty_mutex); - lock_kernel(); tty_closing = tty->count <= 1; o_tty_closing = o_tty && (o_tty->count <= (pty_master ? 1 : 0)); @@ -1631,7 +1598,6 @@ int tty_release(struct inode *inode, struct file *filp) printk(KERN_WARNING "tty_release_dev: %s: read/write wait queue " "active!\n", tty_name(tty, buf)); - unlock_kernel(); mutex_unlock(&tty_mutex); schedule(); } @@ -1695,10 +1661,8 @@ int tty_release(struct inode *inode, struct file *filp) mutex_unlock(&tty_mutex); /* check whether both sides are closing ... */ - if (!tty_closing || (o_tty && !o_tty_closing)) { - unlock_kernel(); - return 0; - } + if (!tty_closing || (o_tty && !o_tty_closing)) + return; #ifdef TTY_DEBUG_HANGUP printk(KERN_DEBUG "freeing tty structure..."); @@ -1716,12 +1680,10 @@ int tty_release(struct inode *inode, struct file *filp) /* Make this pty number available for reallocation */ if (devpts) devpts_kill_index(inode, idx); - unlock_kernel(); - return 0; } /** - * tty_open - open a tty device + * __tty_open - open a tty device * @inode: inode of device file * @filp: file pointer to tty * @@ -1741,7 +1703,7 @@ int tty_release(struct inode *inode, struct file *filp) * ->siglock protects ->signal/->sighand */ -static int tty_open(struct inode *inode, struct file *filp) +static int __tty_open(struct inode *inode, struct file *filp) { struct tty_struct *tty = NULL; int noctty, retval; @@ -1758,12 +1720,10 @@ retry_open: retval = 0; mutex_lock(&tty_mutex); - lock_kernel(); if (device == MKDEV(TTYAUX_MAJOR, 0)) { tty = get_current_tty(); if (!tty) { - unlock_kernel(); mutex_unlock(&tty_mutex); return -ENXIO; } @@ -1795,14 +1755,12 @@ retry_open: goto got_driver; } } - unlock_kernel(); mutex_unlock(&tty_mutex); return -ENODEV; } driver = get_tty_driver(device, &index); if (!driver) { - unlock_kernel(); mutex_unlock(&tty_mutex); return -ENODEV; } @@ -1812,7 +1770,6 @@ got_driver: tty = tty_driver_lookup_tty(driver, inode, index); if (IS_ERR(tty)) { - unlock_kernel(); mutex_unlock(&tty_mutex); return PTR_ERR(tty); } @@ -1827,10 +1784,8 @@ got_driver: mutex_unlock(&tty_mutex); tty_driver_kref_put(driver); - if (IS_ERR(tty)) { - unlock_kernel(); + if (IS_ERR(tty)) return PTR_ERR(tty); - } filp->private_data = tty; file_move(filp, &tty->tty_files); @@ -1858,15 +1813,11 @@ got_driver: printk(KERN_DEBUG "error %d in opening %s...", retval, tty->name); #endif - tty_release(inode, filp); - if (retval != -ERESTARTSYS) { - unlock_kernel(); + tty_release_dev(filp); + if (retval != -ERESTARTSYS) return retval; - } - if (signal_pending(current)) { - unlock_kernel(); + if (signal_pending(current)) return retval; - } schedule(); /* * Need to reset f_op in case a hangup happened. @@ -1875,11 +1826,8 @@ got_driver: filp->f_op = &tty_fops; goto retry_open; } - unlock_kernel(); - mutex_lock(&tty_mutex); - lock_kernel(); spin_lock_irq(¤t->sighand->siglock); if (!noctty && current->signal->leader && @@ -1887,13 +1835,44 @@ got_driver: tty->session == NULL) __proc_set_tty(current, tty); spin_unlock_irq(¤t->sighand->siglock); - unlock_kernel(); mutex_unlock(&tty_mutex); return 0; } +/* BKL pushdown: scary code avoidance wrapper */ +static int tty_open(struct inode *inode, struct file *filp) +{ + int ret; + + lock_kernel(); + ret = __tty_open(inode, filp); + unlock_kernel(); + return ret; +} + + +/** + * tty_release - vfs callback for close + * @inode: inode of tty + * @filp: file pointer for handle to tty + * + * Called the last time each file handle is closed that references + * this tty. There may however be several such references. + * + * Locking: + * Takes bkl. See tty_release_dev + */ + +static int tty_release(struct inode *inode, struct file *filp) +{ + lock_kernel(); + tty_release_dev(filp); + unlock_kernel(); + return 0; +} + /** * tty_poll - check tty status * @filp: file being polled @@ -2338,7 +2317,9 @@ static int tiocsetd(struct tty_struct *tty, int __user *p) if (get_user(ldisc, p)) return -EFAULT; + lock_kernel(); ret = tty_set_ldisc(tty, ldisc); + unlock_kernel(); return ret; } diff --git a/drivers/char/tty_ldisc.c b/drivers/char/tty_ldisc.c index d914e77..feb5507 100644 --- a/drivers/char/tty_ldisc.c +++ b/drivers/char/tty_ldisc.c @@ -34,8 +34,6 @@ #include <linux/vt_kern.h> #include <linux/selection.h> -#include <linux/smp_lock.h> /* For the moment */ - #include <linux/kmod.h> #include <linux/nsproxy.h> @@ -547,7 +545,6 @@ int tty_set_ldisc(struct tty_struct *tty, int ldisc) if (IS_ERR(new_ldisc)) return PTR_ERR(new_ldisc); - lock_kernel(); /* * We need to look at the tty locking here for pty/tty pairs * when both sides try to change in parallel. @@ -561,7 +558,6 @@ int tty_set_ldisc(struct tty_struct *tty, int ldisc) */ if (tty->ldisc->ops->num == ldisc) { - unlock_kernel(); tty_ldisc_put(new_ldisc); return 0; } @@ -573,7 +569,6 @@ int tty_set_ldisc(struct tty_struct *tty, int ldisc) tty_wait_until_sent(tty, 0); - unlock_kernel(); mutex_lock(&tty->ldisc_mutex); /* @@ -587,9 +582,6 @@ int tty_set_ldisc(struct tty_struct *tty, int ldisc) test_bit(TTY_LDISC_CHANGING, &tty->flags) == 0); mutex_lock(&tty->ldisc_mutex); } - - lock_kernel(); - set_bit(TTY_LDISC_CHANGING, &tty->flags); /* @@ -600,8 +592,6 @@ int tty_set_ldisc(struct tty_struct *tty, int ldisc) tty->receive_room = 0; o_ldisc = tty->ldisc; - - unlock_kernel(); /* * Make sure we don't change while someone holds a * reference to the line discipline. The TTY_LDISC bit @@ -627,14 +617,12 @@ int tty_set_ldisc(struct tty_struct *tty, int ldisc) flush_scheduled_work(); mutex_lock(&tty->ldisc_mutex); - lock_kernel(); if (test_bit(TTY_HUPPED, &tty->flags)) { /* We were raced by the hangup method. It will have stomped the ldisc data and closed the ldisc down */ clear_bit(TTY_LDISC_CHANGING, &tty->flags); mutex_unlock(&tty->ldisc_mutex); tty_ldisc_put(new_ldisc); - unlock_kernel(); return -EIO; } @@ -676,7 +664,6 @@ int tty_set_ldisc(struct tty_struct *tty, int ldisc) if (o_work) schedule_delayed_work(&o_tty->buf.work, 1); mutex_unlock(&tty->ldisc_mutex); - unlock_kernel(); return retval; } diff --git a/include/linux/tty.h b/include/linux/tty.h index 405a903..e6da667 100644 --- a/include/linux/tty.h +++ b/include/linux/tty.h @@ -449,7 +449,7 @@ extern void initialize_tty_struct(struct tty_struct *tty, struct tty_driver *driver, int idx); extern struct tty_struct *tty_init_dev(struct tty_driver *driver, int idx, int first_ok); -extern int tty_release(struct inode *inode, struct file *filp); +extern void tty_release_dev(struct file *filp); extern int tty_init_termios(struct tty_struct *tty); extern struct tty_struct *tty_pair_get_tty(struct tty_struct *tty); >From bd9a619494c123470a081e5e30602c307de2bba3 Mon Sep 17 00:00:00 2001 From: Ingo Molnar <mingo@elte.hu> Date: Sat, 12 Dec 2009 11:07:55 +0100 Subject: [PATCH] Revert "tty: Push the lock down further into the ldisc code" This reverts commit f18f9498e90327b9b0e245e191029e6e1996d203. diff --git a/drivers/char/tty_io.c b/drivers/char/tty_io.c index c408c81..1e24130 100644 --- a/drivers/char/tty_io.c +++ b/drivers/char/tty_io.c @@ -1347,7 +1347,9 @@ struct tty_struct *tty_init_dev(struct tty_driver *driver, int idx, * If we fail here just call release_tty to clean up. No need * to decrement the use counts, as release_tty doesn't care. */ + lock_kernel(); retval = tty_ldisc_setup(tty, tty->link); + unlock_kernel(); if (retval) goto release_mem_out; return tty; diff --git a/drivers/char/tty_ldisc.c b/drivers/char/tty_ldisc.c index 3f653f7..d914e77 100644 --- a/drivers/char/tty_ldisc.c +++ b/drivers/char/tty_ldisc.c @@ -445,14 +445,8 @@ static void tty_set_termios_ldisc(struct tty_struct *tty, int num) static int tty_ldisc_open(struct tty_struct *tty, struct tty_ldisc *ld) { WARN_ON(test_and_set_bit(TTY_LDISC_OPEN, &tty->flags)); - if (ld->ops->open) { - int ret; - /* BKL here locks verus a hangup event */ - lock_kernel(); - ret = ld->ops->open(tty); - unlock_kernel(); - return ret; - } + if (ld->ops->open) + return ld->ops->open(tty); return 0; } @@ -572,7 +566,6 @@ int tty_set_ldisc(struct tty_struct *tty, int ldisc) return 0; } - unlock_kernel(); /* * Problem: What do we do if this blocks ? * We could deadlock here @@ -580,6 +573,7 @@ int tty_set_ldisc(struct tty_struct *tty, int ldisc) tty_wait_until_sent(tty, 0); + unlock_kernel(); mutex_lock(&tty->ldisc_mutex); /* >From 8e991a5112643a63820a1088860f0c7c869d6f25 Mon Sep 17 00:00:00 2001 From: Ingo Molnar <mingo@elte.hu> Date: Sat, 12 Dec 2009 11:07:46 +0100 Subject: [PATCH] Revert "tty: Push the bkl down a bit in the hangup code" This reverts commit 38c70b27f9502c31c1d0c29676275f7362cdb0d9. diff --git a/drivers/char/tty_io.c b/drivers/char/tty_io.c index cc941a3..c408c81 100644 --- a/drivers/char/tty_io.c +++ b/drivers/char/tty_io.c @@ -505,6 +505,8 @@ static void do_tty_hangup(struct work_struct *work) if (!tty) return; + /* inuse_filps is protected by the single kernel lock */ + lock_kernel(); spin_lock(&redirect_lock); if (redirect && redirect->private_data == tty) { @@ -513,8 +515,6 @@ static void do_tty_hangup(struct work_struct *work) } spin_unlock(&redirect_lock); - /* inuse_filps is protected by the single kernel lock */ - lock_kernel(); check_tty_count(tty, "do_tty_hangup"); file_list_lock(); /* This breaks for file handles being sent over AF_UNIX sockets ? */ >From 9d6d77b3c56e6c169e50b6bb9033e4a2e7d4ec71 Mon Sep 17 00:00:00 2001 From: Ingo Molnar <mingo@elte.hu> Date: Sat, 12 Dec 2009 11:07:38 +0100 Subject: [PATCH] Revert "tty: Move the leader test in disassociate" This reverts commit 5ec93d1154fd1e269162398f8e70efc7e004485d. diff --git a/drivers/char/tty_io.c b/drivers/char/tty_io.c index a19fef2..cc941a3 100644 --- a/drivers/char/tty_io.c +++ b/drivers/char/tty_io.c @@ -707,8 +707,6 @@ void disassociate_ctty(int on_exit) struct tty_struct *tty; struct pid *tty_pgrp = NULL; - if (!current->signal->leader) - return; tty = get_current_tty(); if (tty) { @@ -774,7 +772,8 @@ void no_tty(void) { struct task_struct *tsk = current; lock_kernel(); - disassociate_ctty(0); + if (tsk->signal->leader) + disassociate_ctty(0); unlock_kernel(); proc_clear_tty(tsk); } diff --git a/kernel/exit.c b/kernel/exit.c index 6f50ef5..1143012 100644 --- a/kernel/exit.c +++ b/kernel/exit.c @@ -971,7 +971,7 @@ NORET_TYPE void do_exit(long code) exit_thread(); cgroup_exit(tsk, 1); - if (group_dead) + if (group_dead && tsk->signal->leader) disassociate_ctty(1); module_put(task_thread_info(tsk)->exec_domain->module); >From 153d2afe47cc994d35adc7e61be13bf840fd0b47 Mon Sep 17 00:00:00 2001 From: Ingo Molnar <mingo@elte.hu> Date: Sat, 12 Dec 2009 11:07:28 +0100 Subject: [PATCH] Revert "tty: split the lock up a bit further" This reverts commit 36ba782e9674cdc29ec7003757df0b375e99fa96. diff --git a/drivers/char/tty_io.c b/drivers/char/tty_io.c index 684f0e0..a19fef2 100644 --- a/drivers/char/tty_io.c +++ b/drivers/char/tty_io.c @@ -516,8 +516,6 @@ static void do_tty_hangup(struct work_struct *work) /* inuse_filps is protected by the single kernel lock */ lock_kernel(); check_tty_count(tty, "do_tty_hangup"); - unlock_kernel(); - file_list_lock(); /* This breaks for file handles being sent over AF_UNIX sockets ? */ list_for_each_entry(filp, &tty->tty_files, f_u.fu_list) { @@ -531,7 +529,6 @@ static void do_tty_hangup(struct work_struct *work) } file_list_unlock(); - lock_kernel(); tty_ldisc_hangup(tty); read_lock(&tasklist_lock); ^ permalink raw reply related [flat|nested] 78+ messages in thread
* Re: [GIT PATCH] TTY patches for 2.6.33-git 2009-12-12 10:15 ` Ingo Molnar @ 2009-12-12 10:41 ` Andrew Morton 2009-12-12 10:52 ` Ingo Molnar 0 siblings, 1 reply; 78+ messages in thread From: Andrew Morton @ 2009-12-12 10:41 UTC (permalink / raw) To: Ingo Molnar Cc: Greg KH, Alan Cox, Thomas Gleixner, Peter Zijlstra, Linus Torvalds, linux-kernel On Sat, 12 Dec 2009 11:15:51 +0100 Ingo Molnar <mingo@elte.hu> wrote: > i'm testing the series of 5 reverts below. It's looking good so far. You > might want to try them - how quickly can you reproduce the hangs? Immediately, with http://userweb.kernel.org/~akpm/config-akpm2.txt ^ permalink raw reply [flat|nested] 78+ messages in thread
* Re: [GIT PATCH] TTY patches for 2.6.33-git 2009-12-12 10:41 ` Andrew Morton @ 2009-12-12 10:52 ` Ingo Molnar 0 siblings, 0 replies; 78+ messages in thread From: Ingo Molnar @ 2009-12-12 10:52 UTC (permalink / raw) To: Andrew Morton Cc: Greg KH, Alan Cox, Thomas Gleixner, Peter Zijlstra, Linus Torvalds, linux-kernel * Andrew Morton <akpm@linux-foundation.org> wrote: > On Sat, 12 Dec 2009 11:15:51 +0100 Ingo Molnar <mingo@elte.hu> wrote: > > > i'm testing the series of 5 reverts below. It's looking good so far. You > > might want to try them - how quickly can you reproduce the hangs? > > Immediately, with http://userweb.kernel.org/~akpm/config-akpm2.txt Ok. The lockups i saw went away with the 5 reverts i posted. I'll keep testing that over the weekend - that should narrow down the range very precisely. Ingo ^ permalink raw reply [flat|nested] 78+ messages in thread
* Re: [GIT PATCH] TTY patches for 2.6.33-git 2009-12-12 9:39 ` Andrew Morton 2009-12-12 10:06 ` Ingo Molnar @ 2009-12-12 10:10 ` Ingo Molnar 2009-12-12 10:36 ` Andrew Morton 2009-12-12 11:02 ` Alan Cox 2 siblings, 1 reply; 78+ messages in thread From: Ingo Molnar @ 2009-12-12 10:10 UTC (permalink / raw) To: Andrew Morton Cc: Greg KH, Alan Cox, Thomas Gleixner, Peter Zijlstra, Linus Torvalds, linux-kernel * Andrew Morton <akpm@linux-foundation.org> wrote: > Seems to be quite .config-dependent. My theory is that it's a race and that it's thus timing dependent. TTY SMP details get stressed most during a particular point during bootup, when all the mingetty's are starting up all at once and race with each other. If you are lucky to not hit the bug then, then the likelyhood is much lower later on. It would be nice if Alan posted his TTY stress-testing code. It could potentially make this bug bisectable. Ingo ^ permalink raw reply [flat|nested] 78+ messages in thread
* Re: [GIT PATCH] TTY patches for 2.6.33-git 2009-12-12 10:10 ` Ingo Molnar @ 2009-12-12 10:36 ` Andrew Morton 2009-12-12 17:16 ` Linus Torvalds 0 siblings, 1 reply; 78+ messages in thread From: Andrew Morton @ 2009-12-12 10:36 UTC (permalink / raw) To: Ingo Molnar Cc: Greg KH, Alan Cox, Thomas Gleixner, Peter Zijlstra, Linus Torvalds, linux-kernel On Sat, 12 Dec 2009 11:10:32 +0100 Ingo Molnar <mingo@elte.hu> wrote: > > * Andrew Morton <akpm@linux-foundation.org> wrote: > > > Seems to be quite .config-dependent. > > My theory is that it's a race and that it's thus timing dependent. TTY > SMP details get stressed most during a particular point during bootup, > when all the mingetty's are starting up all at once and race with each > other. > > If you are lucky to not hit the bug then, then the likelyhood is much > lower later on. > > It would be nice if Alan posted his TTY stress-testing code. It could > potentially make this bug bisectable. > I'm surprised that lockdep didn't notice that ab/ba I thought I saw. Maybe the do_tty_hangup()->tty_fasync() never happens. The machine I can reproduce this on is at work and I'm not, until Monday. I'd try removing the files_lock() calls from tty_io.c, see if that helps. I had [ 71.553228] Warning: dev (tty1) tty->count(7) != #fd's(6) in tty_release_dev come out once, then it went away. ^ permalink raw reply [flat|nested] 78+ messages in thread
* Re: [GIT PATCH] TTY patches for 2.6.33-git 2009-12-12 10:36 ` Andrew Morton @ 2009-12-12 17:16 ` Linus Torvalds 2009-12-12 17:26 ` Linus Torvalds 0 siblings, 1 reply; 78+ messages in thread From: Linus Torvalds @ 2009-12-12 17:16 UTC (permalink / raw) To: Andrew Morton Cc: Ingo Molnar, Greg KH, Alan Cox, Thomas Gleixner, Peter Zijlstra, linux-kernel On Sat, 12 Dec 2009, Andrew Morton wrote: > On Sat, 12 Dec 2009 11:10:32 +0100 Ingo Molnar <mingo@elte.hu> wrote: > > > > > * Andrew Morton <akpm@linux-foundation.org> wrote: > > > > > Seems to be quite .config-dependent. > > > > My theory is that it's a race and that it's thus timing dependent. TTY > > SMP details get stressed most during a particular point during bootup, > > when all the mingetty's are starting up all at once and race with each > > other. > > > > If you are lucky to not hit the bug then, then the likelyhood is much > > lower later on. > > > > It would be nice if Alan posted his TTY stress-testing code. It could > > potentially make this bug bisectable. > > > > I'm surprised that lockdep didn't notice that ab/ba I thought I saw. > Maybe the do_tty_hangup()->tty_fasync() never happens. The kernel lock cannot have any ABBA deadlocks. If somebody blocks on another lock (after getting the kernel lock), the kernel lock will be dropped. So no ABBA. Linus ^ permalink raw reply [flat|nested] 78+ messages in thread
* Re: [GIT PATCH] TTY patches for 2.6.33-git 2009-12-12 17:16 ` Linus Torvalds @ 2009-12-12 17:26 ` Linus Torvalds 2009-12-12 21:42 ` Alan Cox 0 siblings, 1 reply; 78+ messages in thread From: Linus Torvalds @ 2009-12-12 17:26 UTC (permalink / raw) To: Andrew Morton Cc: Ingo Molnar, Greg KH, Alan Cox, Thomas Gleixner, Peter Zijlstra, linux-kernel On Sat, 12 Dec 2009, Linus Torvalds wrote: > > > > I'm surprised that lockdep didn't notice that ab/ba I thought I saw. > > Maybe the do_tty_hangup()->tty_fasync() never happens. > > The kernel lock cannot have any ABBA deadlocks. > > If somebody blocks on another lock (after getting the kernel lock), the > kernel lock will be dropped. So no ABBA. Oh, but it turns out that while there cannot be any ABBA deadlocks with sleeping locks, what the tty code does is invalid for _another_ reason: file_list_lock() is a spinlock. And that's a no-no. You cannot take the kernel lock inside a spinlock. Ordering doesn't matter, there's no ABBA issues - it's simply invalid _regardless_ of any other use of that lock. I think we could possibly add a "__might_sleep()" to _lock_kernel(). It doesn't really sleep, but it's invalid to take the kernel lock in an atomic region, so __might_sleep() might be the right thing anyway. Linus ^ permalink raw reply [flat|nested] 78+ messages in thread
* Re: [GIT PATCH] TTY patches for 2.6.33-git 2009-12-12 17:26 ` Linus Torvalds @ 2009-12-12 21:42 ` Alan Cox 2009-12-12 21:48 ` Thomas Gleixner 2009-12-12 22:21 ` Linus Torvalds 0 siblings, 2 replies; 78+ messages in thread From: Alan Cox @ 2009-12-12 21:42 UTC (permalink / raw) To: Linus Torvalds Cc: Andrew Morton, Ingo Molnar, Greg KH, Thomas Gleixner, Peter Zijlstra, linux-kernel > I think we could possibly add a "__might_sleep()" to _lock_kernel(). It > doesn't really sleep, but it's invalid to take the kernel lock in an > atomic region, so __might_sleep() might be the right thing anyway. It's only invalid if you don't already hold the lock. The old tty code worked because every path into tty_fasync already held the lock ! That specific case - taking it the first time should definitely __might_sleep(). Mind you it's probably still rather dumb and would be a good debugging aid for -next to be able to warn on all offences if only to catch this stuff for the future BKL removal work. Alan ^ permalink raw reply [flat|nested] 78+ messages in thread
* Re: [GIT PATCH] TTY patches for 2.6.33-git 2009-12-12 21:42 ` Alan Cox @ 2009-12-12 21:48 ` Thomas Gleixner 2009-12-12 22:25 ` Linus Torvalds 2009-12-12 22:21 ` Linus Torvalds 1 sibling, 1 reply; 78+ messages in thread From: Thomas Gleixner @ 2009-12-12 21:48 UTC (permalink / raw) To: Alan Cox Cc: Linus Torvalds, Andrew Morton, Ingo Molnar, Greg KH, Peter Zijlstra, linux-kernel On Sat, 12 Dec 2009, Alan Cox wrote: > > I think we could possibly add a "__might_sleep()" to _lock_kernel(). It > > doesn't really sleep, but it's invalid to take the kernel lock in an > > atomic region, so __might_sleep() might be the right thing anyway. > > It's only invalid if you don't already hold the lock. The old tty code > worked because every path into tty_fasync already held the lock ! That > specific case - taking it the first time should definitely > __might_sleep(). > > Mind you it's probably still rather dumb and would be a good debugging > aid for -next to be able to warn on all offences if only to catch this > stuff for the future BKL removal work. Just patched the following in and it catched your problem nicely. With your AB/BA fix patch applied everything is fine. Thanks, tglx --- Subject: BKL: Add might sleep to __lock_kernel From: Thomas Gleixner <tglx@linutronix.de> Date: Sat, 12 Dec 2009 20:29:00 +0100 Catches all offenders which take the BKL first time in an atomic region. Recursive lock_kernel calls are not affected. Signed-off-by: Thomas Gleixner <tglx@linutronix.de> --- lib/kernel_lock.c | 2 ++ 1 file changed, 2 insertions(+) Index: linux-2.6/lib/kernel_lock.c =================================================================== --- linux-2.6.orig/lib/kernel_lock.c +++ linux-2.6/lib/kernel_lock.c @@ -64,6 +64,8 @@ void __lockfunc __release_kernel_lock(vo #ifdef CONFIG_PREEMPT static inline void __lock_kernel(void) { + might_sleep(); + preempt_disable(); if (unlikely(!_raw_spin_trylock(&kernel_flag))) { /* ^ permalink raw reply [flat|nested] 78+ messages in thread
* Re: [GIT PATCH] TTY patches for 2.6.33-git 2009-12-12 21:48 ` Thomas Gleixner @ 2009-12-12 22:25 ` Linus Torvalds 2009-12-12 22:31 ` Thomas Gleixner 0 siblings, 1 reply; 78+ messages in thread From: Linus Torvalds @ 2009-12-12 22:25 UTC (permalink / raw) To: Thomas Gleixner Cc: Alan Cox, Andrew Morton, Ingo Molnar, Greg KH, Peter Zijlstra, linux-kernel On Sat, 12 Dec 2009, Thomas Gleixner wrote: > > Just patched the following in and it catched your problem nicely. With > your AB/BA fix patch applied everything is fine. Actually, the patch I just suggested might be better. Admittedly the CONFIG_PREEMPT case is the more important one (and the one that will catch more cases), but even without preemptyion the might_sleep() in _lock_kernel() (one underscore) would trigger on the case of somebody doing lock_kernel with local interrupts disabled. Linus ^ permalink raw reply [flat|nested] 78+ messages in thread
* Re: [GIT PATCH] TTY patches for 2.6.33-git 2009-12-12 22:25 ` Linus Torvalds @ 2009-12-12 22:31 ` Thomas Gleixner 0 siblings, 0 replies; 78+ messages in thread From: Thomas Gleixner @ 2009-12-12 22:31 UTC (permalink / raw) To: Linus Torvalds Cc: Alan Cox, Andrew Morton, Ingo Molnar, Greg KH, Peter Zijlstra, linux-kernel On Sat, 12 Dec 2009, Linus Torvalds wrote: > On Sat, 12 Dec 2009, Thomas Gleixner wrote: > > > > Just patched the following in and it catched your problem nicely. With > > your AB/BA fix patch applied everything is fine. > > Actually, the patch I just suggested might be better. Admittedly the > CONFIG_PREEMPT case is the more important one (and the one that will catch > more cases), but even without preemptyion the might_sleep() in > _lock_kernel() (one underscore) would trigger on the case of somebody > doing lock_kernel with local interrupts disabled. Fair enough. tglx ^ permalink raw reply [flat|nested] 78+ messages in thread
* Re: [GIT PATCH] TTY patches for 2.6.33-git 2009-12-12 21:42 ` Alan Cox 2009-12-12 21:48 ` Thomas Gleixner @ 2009-12-12 22:21 ` Linus Torvalds 2009-12-12 22:33 ` Thomas Gleixner 1 sibling, 1 reply; 78+ messages in thread From: Linus Torvalds @ 2009-12-12 22:21 UTC (permalink / raw) To: Alan Cox Cc: Andrew Morton, Ingo Molnar, Greg KH, Thomas Gleixner, Peter Zijlstra, linux-kernel On Sat, 12 Dec 2009, Alan Cox wrote: > > I think we could possibly add a "__might_sleep()" to _lock_kernel(). It > > doesn't really sleep, but it's invalid to take the kernel lock in an > > atomic region, so __might_sleep() might be the right thing anyway. > > It's only invalid if you don't already hold the lock. True. > The old tty code worked because every path into tty_fasync already held > the lock ! That specific case - taking it the first time should > definitely __might_sleep(). That would give us at least somewhat better debugging. And it's a very natural thing to do. IOW, just something like the appended. But maybe it complains about valid (but unusual) things. For example, it's not strictly speaking _wrong_ to take the kernel lock while preemption is disabled, even though it's a really bad idea. Anybody willing to be the guinea-pig? Linus --- lib/kernel_lock.c | 4 +++- 1 files changed, 3 insertions(+), 1 deletions(-) diff --git a/lib/kernel_lock.c b/lib/kernel_lock.c index 4ebfa5a..5526b46 100644 --- a/lib/kernel_lock.c +++ b/lib/kernel_lock.c @@ -122,8 +122,10 @@ void __lockfunc _lock_kernel(const char *func, const char *file, int line) trace_lock_kernel(func, file, line); - if (likely(!depth)) + if (likely(!depth)) { + might_sleep(); __lock_kernel(); + } current->lock_depth = depth; } ^ permalink raw reply related [flat|nested] 78+ messages in thread
* Re: [GIT PATCH] TTY patches for 2.6.33-git 2009-12-12 22:21 ` Linus Torvalds @ 2009-12-12 22:33 ` Thomas Gleixner 2009-12-12 23:17 ` Linus Torvalds 0 siblings, 1 reply; 78+ messages in thread From: Thomas Gleixner @ 2009-12-12 22:33 UTC (permalink / raw) To: Linus Torvalds Cc: Alan Cox, Andrew Morton, Ingo Molnar, Greg KH, Peter Zijlstra, linux-kernel On Sat, 12 Dec 2009, Linus Torvalds wrote: > > On Sat, 12 Dec 2009, Alan Cox wrote: > > > > I think we could possibly add a "__might_sleep()" to _lock_kernel(). It > > > doesn't really sleep, but it's invalid to take the kernel lock in an > > > atomic region, so __might_sleep() might be the right thing anyway. > > > > It's only invalid if you don't already hold the lock. > > True. > > > The old tty code worked because every path into tty_fasync already held > > the lock ! That specific case - taking it the first time should > > definitely __might_sleep(). > > That would give us at least somewhat better debugging. And it's a very > natural thing to do. IOW, just something like the appended. > > But maybe it complains about valid (but unusual) things. For example, it's > not strictly speaking _wrong_ to take the kernel lock while preemption is > disabled, even though it's a really bad idea. > > Anybody willing to be the guinea-pig? Replaced my patch with yours and it works the same way (except for the PREEMPT=n case) Acked-and-Tested-by: Thomas Gleixner <tglx@linutronix.de> > Linus > > --- > lib/kernel_lock.c | 4 +++- > 1 files changed, 3 insertions(+), 1 deletions(-) > > diff --git a/lib/kernel_lock.c b/lib/kernel_lock.c > index 4ebfa5a..5526b46 100644 > --- a/lib/kernel_lock.c > +++ b/lib/kernel_lock.c > @@ -122,8 +122,10 @@ void __lockfunc _lock_kernel(const char *func, const char *file, int line) > > trace_lock_kernel(func, file, line); > > - if (likely(!depth)) > + if (likely(!depth)) { > + might_sleep(); > __lock_kernel(); > + } > current->lock_depth = depth; > } > > ^ permalink raw reply [flat|nested] 78+ messages in thread
* Re: [GIT PATCH] TTY patches for 2.6.33-git 2009-12-12 22:33 ` Thomas Gleixner @ 2009-12-12 23:17 ` Linus Torvalds 2009-12-13 6:58 ` Ingo Molnar 0 siblings, 1 reply; 78+ messages in thread From: Linus Torvalds @ 2009-12-12 23:17 UTC (permalink / raw) To: Thomas Gleixner Cc: Alan Cox, Andrew Morton, Ingo Molnar, Greg KH, Peter Zijlstra, linux-kernel On Sat, 12 Dec 2009, Thomas Gleixner wrote: > > > > Anybody willing to be the guinea-pig? > > Replaced my patch with yours and it works the same way (except for the > PREEMPT=n case) > > Acked-and-Tested-by: Thomas Gleixner <tglx@linutronix.de> Ok, I also decided to just test it myself too (after applying the tty layer fix) and it doesn't seem to cause any problems, so I've committed it. If there is dubious BKL usage that triggers the new might_sleep() warning (and it turns out that it's necessary and not really fixable), we can always just remove it again. But on the other hand, maybe it shows some other potential problems that should just be fixed. We've had quite a bit of BKL work this merge-window. Maybe we'll even get rid of it one of these days. There are "only" about 600 instances of "lock_kernel()" in the tree right now ;) Linus ^ permalink raw reply [flat|nested] 78+ messages in thread
* Re: [GIT PATCH] TTY patches for 2.6.33-git 2009-12-12 23:17 ` Linus Torvalds @ 2009-12-13 6:58 ` Ingo Molnar 2009-12-13 11:36 ` Alan Cox ` (2 more replies) 0 siblings, 3 replies; 78+ messages in thread From: Ingo Molnar @ 2009-12-13 6:58 UTC (permalink / raw) To: Linus Torvalds Cc: Thomas Gleixner, Alan Cox, Andrew Morton, Greg KH, Peter Zijlstra, linux-kernel * Linus Torvalds <torvalds@linux-foundation.org> wrote: > We've had quite a bit of BKL work this merge-window. Maybe we'll even get > rid of it one of these days. There are "only" about 600 instances of > "lock_kernel()" in the tree right now ;) I tend to use unlock_kernel() as the metric. (as it's more precisely greppable and it is also more indicative of the underlying complexity of locking, as it gets used more in more complex scenarios) In the last ~4.5 years: earth4:~/tip> git checkout v2.6.12 Date: Fri Jun 17 12:48:29 2005 -0700 earth4:~/tip> git grep -w unlock_kernel | wc -l 713 earth4:~/tip> git checkout linus Date: Fri Dec 11 20:58:20 2009 -0800 earth4:~/tip> git grep -w unlock_kernel | wc -l 841 we grew the (absolute) number of BKL sites by ~15%. Certainly the kernel grew at a much faster rate, so the relative proportion of the BKL shrunk. Also, a lot of BKL use was hidden before, and due to the BKL removal activities (by Thomas, Frederic, Jon, Alan and others) the remaining BKL using sites are a lot more well defined, a lot more isolated and thus a lot more removable than ever before. Ingo ^ permalink raw reply [flat|nested] 78+ messages in thread
* Re: [GIT PATCH] TTY patches for 2.6.33-git 2009-12-13 6:58 ` Ingo Molnar @ 2009-12-13 11:36 ` Alan Cox 2009-12-13 12:13 ` Ingo Molnar 2009-12-13 17:46 ` Linus Torvalds 2009-12-13 17:55 ` Arjan van de Ven 2 siblings, 1 reply; 78+ messages in thread From: Alan Cox @ 2009-12-13 11:36 UTC (permalink / raw) To: Ingo Molnar Cc: Linus Torvalds, Thomas Gleixner, Andrew Morton, Greg KH, Peter Zijlstra, linux-kernel > earth4:~/tip> git checkout linus > Date: Fri Dec 11 20:58:20 2009 -0800 > earth4:~/tip> git grep -w unlock_kernel | wc -l > 841 > > we grew the (absolute) number of BKL sites by ~15%. Certainly the kernel grew > at a much faster rate, so the relative proportion of the BKL shrunk. Thats actually very misleading. The reason is we have created more lock/unlock points as we remove and drive down the lock. By your metric the original SMP kernel was best - it had one of each 8) > Also, a lot of BKL use was hidden before, and due to the BKL removal > activities (by Thomas, Frederic, Jon, Alan and others) the remaining BKL using > sites are a lot more well defined, a lot more isolated and thus a lot more > removable than ever before. ioctl is almost done and I've gont some other random ones in my tree. lseek is close. At that point most of the nasties are squashed except tty. We do have some remaining locking horrors some partly introduced by the finer locking work in the past including the rather nasty device unload/load v open file handle races. ^ permalink raw reply [flat|nested] 78+ messages in thread
* Re: [GIT PATCH] TTY patches for 2.6.33-git 2009-12-13 11:36 ` Alan Cox @ 2009-12-13 12:13 ` Ingo Molnar 0 siblings, 0 replies; 78+ messages in thread From: Ingo Molnar @ 2009-12-13 12:13 UTC (permalink / raw) To: Alan Cox Cc: Linus Torvalds, Thomas Gleixner, Andrew Morton, Greg KH, Peter Zijlstra, linux-kernel * Alan Cox <alan@lxorguk.ukuu.org.uk> wrote: > > earth4:~/tip> git checkout linus > > Date: Fri Dec 11 20:58:20 2009 -0800 > > earth4:~/tip> git grep -w unlock_kernel | wc -l > > 841 > > > > we grew the (absolute) number of BKL sites by ~15%. Certainly the kernel grew > > at a much faster rate, so the relative proportion of the BKL shrunk. > > Thats actually very misleading. [...] Somewhat, so i qualified it with the next paragraph: > > Also, a lot of BKL use was hidden before, and due to the BKL removal > > activities (by Thomas, Frederic, Jon, Alan and others) the remaining BKL > > using sites are a lot more well defined, a lot more isolated and thus a > > lot more removable than ever before. Thanks, Ingo ^ permalink raw reply [flat|nested] 78+ messages in thread
* Re: [GIT PATCH] TTY patches for 2.6.33-git 2009-12-13 6:58 ` Ingo Molnar 2009-12-13 11:36 ` Alan Cox @ 2009-12-13 17:46 ` Linus Torvalds 2009-12-13 18:17 ` Ingo Molnar 2009-12-13 17:55 ` Arjan van de Ven 2 siblings, 1 reply; 78+ messages in thread From: Linus Torvalds @ 2009-12-13 17:46 UTC (permalink / raw) To: Ingo Molnar Cc: Thomas Gleixner, Alan Cox, Andrew Morton, Greg KH, Peter Zijlstra, linux-kernel On Sun, 13 Dec 2009, Ingo Molnar wrote: > > In the last ~4.5 years: > > earth4:~/tip> git checkout v2.6.12 > Date: Fri Jun 17 12:48:29 2005 -0700 > earth4:~/tip> git grep -w unlock_kernel | wc -l > 713 > > earth4:~/tip> git checkout linus > Date: Fri Dec 11 20:58:20 2009 -0800 > earth4:~/tip> git grep -w unlock_kernel | wc -l > 841 Git hint of the day: you don't need to check out a kernel to do "git grep". Do this: git grep -w unlock_kernel v2.6.12 | wc and it will JustWork(tm). > Also, a lot of BKL use was hidden before, and due to the BKL removal > activities (by Thomas, Frederic, Jon, Alan and others) the remaining BKL using > sites are a lot more well defined, a lot more isolated and thus a lot more > removable than ever before. That's the main thing. We've been pushing them down a lot. We still have a few annoying core ones, though. I hate the execve() and file locking ones. Linus ^ permalink raw reply [flat|nested] 78+ messages in thread
* Re: [GIT PATCH] TTY patches for 2.6.33-git 2009-12-13 17:46 ` Linus Torvalds @ 2009-12-13 18:17 ` Ingo Molnar 2009-12-13 18:33 ` Trond Myklebust 2009-12-13 19:04 ` Frederic Weisbecker 0 siblings, 2 replies; 78+ messages in thread From: Ingo Molnar @ 2009-12-13 18:17 UTC (permalink / raw) To: Linus Torvalds Cc: Thomas Gleixner, Alan Cox, Andrew Morton, Greg KH, Peter Zijlstra, linux-kernel * Linus Torvalds <torvalds@linux-foundation.org> wrote: > > > On Sun, 13 Dec 2009, Ingo Molnar wrote: > > > > In the last ~4.5 years: > > > > earth4:~/tip> git checkout v2.6.12 > > Date: Fri Jun 17 12:48:29 2005 -0700 > > earth4:~/tip> git grep -w unlock_kernel | wc -l > > 713 > > > > earth4:~/tip> git checkout linus > > Date: Fri Dec 11 20:58:20 2009 -0800 > > earth4:~/tip> git grep -w unlock_kernel | wc -l > > 841 > > Git hint of the day: you don't need to check out a kernel to do "git > grep". > > Do this: > > git grep -w unlock_kernel v2.6.12 | wc > > and it will JustWork(tm). /me adds it to the metal toolbox > > Also, a lot of BKL use was hidden before, and due to the BKL removal > > activities (by Thomas, Frederic, Jon, Alan and others) the remaining BKL using > > sites are a lot more well defined, a lot more isolated and thus a lot more > > removable than ever before. > > That's the main thing. We've been pushing them down a lot. > > We still have a few annoying core ones, though. I hate the execve() and file > locking ones. When we did the BKL-as-a-mutex trick and let lockdep loose on it, three areas were particularly tricky: tty, reiser3 and NFS. tty and reiserfs should be ok now, but i havent seen much activity on the NFS front. Ingo ^ permalink raw reply [flat|nested] 78+ messages in thread
* Re: [GIT PATCH] TTY patches for 2.6.33-git 2009-12-13 18:17 ` Ingo Molnar @ 2009-12-13 18:33 ` Trond Myklebust 2009-12-13 19:07 ` Linus Torvalds 2009-12-13 19:04 ` Frederic Weisbecker 1 sibling, 1 reply; 78+ messages in thread From: Trond Myklebust @ 2009-12-13 18:33 UTC (permalink / raw) To: Ingo Molnar Cc: Linus Torvalds, Thomas Gleixner, Alan Cox, Andrew Morton, Greg KH, Peter Zijlstra, linux-kernel On Sun, 2009-12-13 at 19:17 +0100, Ingo Molnar wrote: > When we did the BKL-as-a-mutex trick and let lockdep loose on it, three areas > were particularly tricky: tty, reiser3 and NFS. tty and reiserfs should be ok > now, but i havent seen much activity on the NFS front. I've got a couple of NFS bkl removal patches queued up that I'll send on to Linus today, but they will not suffice to fully remove BKL from the NFS code. The main remaining problem area is that of file locking (i.e. anything that references inode->i_flock). I've started work on that, but a couple of higher interrupts have prevented me from pulling it all together in time for this merge window... Trond ^ permalink raw reply [flat|nested] 78+ messages in thread
* Re: [GIT PATCH] TTY patches for 2.6.33-git 2009-12-13 18:33 ` Trond Myklebust @ 2009-12-13 19:07 ` Linus Torvalds 2009-12-13 19:17 ` Trond Myklebust 0 siblings, 1 reply; 78+ messages in thread From: Linus Torvalds @ 2009-12-13 19:07 UTC (permalink / raw) To: Trond Myklebust Cc: Ingo Molnar, Thomas Gleixner, Alan Cox, Andrew Morton, Greg KH, Peter Zijlstra, linux-kernel On Sun, 13 Dec 2009, Trond Myklebust wrote: > > The main remaining problem area is that of file locking (i.e. anything > that references inode->i_flock). I've started work on that, but a couple > of higher interrupts have prevented me from pulling it all together in > time for this merge window... I'm pretty sure we've had at least two trees with the file locking code fixed, but NFS in a status of "unknown". If I recall correctly, the file locking code itself is not that hard: we've done it without the kernel lock in the past (long long ago), and the lock usage doesn't nest (or at least it didn't at some point back then ;). In fact, I think we even do the actual lock data structure allocations outside of the kernel lock exactly because we at one time had a patch that used a spinlock for protection of the lists. (Again, not only my memory, but the code itself may have bitrotted in the meantime, of course). Linus ^ permalink raw reply [flat|nested] 78+ messages in thread
* Re: [GIT PATCH] TTY patches for 2.6.33-git 2009-12-13 19:07 ` Linus Torvalds @ 2009-12-13 19:17 ` Trond Myklebust 0 siblings, 0 replies; 78+ messages in thread From: Trond Myklebust @ 2009-12-13 19:17 UTC (permalink / raw) To: Linus Torvalds Cc: Ingo Molnar, Thomas Gleixner, Alan Cox, Andrew Morton, Greg KH, Peter Zijlstra, linux-kernel On Sun, 2009-12-13 at 11:07 -0800, Linus Torvalds wrote: > > On Sun, 13 Dec 2009, Trond Myklebust wrote: > > > > The main remaining problem area is that of file locking (i.e. anything > > that references inode->i_flock). I've started work on that, but a couple > > of higher interrupts have prevented me from pulling it all together in > > time for this merge window... > > I'm pretty sure we've had at least two trees with the file locking code > fixed, but NFS in a status of "unknown". > > If I recall correctly, the file locking code itself is not that hard: > we've done it without the kernel lock in the past (long long ago), and the > lock usage doesn't nest (or at least it didn't at some point back then ;). > In fact, I think we even do the actual lock data structure allocations > outside of the kernel lock exactly because we at one time had a patch that > used a spinlock for protection of the lists. After the current set of patches, have been merged by you, the only stuff that will continue to rely on nested BKL will be lockd. I can fix that up in the next cycle. > (Again, not only my memory, but the code itself may have bitrotted in the > meantime, of course). Agreed. I'm not saying that it's hard. I'm just saying that I ran out of time due to other commitments. Cheers Trond ^ permalink raw reply [flat|nested] 78+ messages in thread
* Re: [GIT PATCH] TTY patches for 2.6.33-git 2009-12-13 18:17 ` Ingo Molnar 2009-12-13 18:33 ` Trond Myklebust @ 2009-12-13 19:04 ` Frederic Weisbecker 2009-12-13 19:09 ` Trond Myklebust 1 sibling, 1 reply; 78+ messages in thread From: Frederic Weisbecker @ 2009-12-13 19:04 UTC (permalink / raw) To: Ingo Molnar Cc: Linus Torvalds, Thomas Gleixner, Alan Cox, Andrew Morton, Greg KH, Peter Zijlstra, linux-kernel On Sun, Dec 13, 2009 at 07:17:26PM +0100, Ingo Molnar wrote: > > * Linus Torvalds <torvalds@linux-foundation.org> wrote: > > > > > > > On Sun, 13 Dec 2009, Ingo Molnar wrote: > > > > > > In the last ~4.5 years: > > > > > > earth4:~/tip> git checkout v2.6.12 > > > Date: Fri Jun 17 12:48:29 2005 -0700 > > > earth4:~/tip> git grep -w unlock_kernel | wc -l > > > 713 > > > > > > earth4:~/tip> git checkout linus > > > Date: Fri Dec 11 20:58:20 2009 -0800 > > > earth4:~/tip> git grep -w unlock_kernel | wc -l > > > 841 > > > > Git hint of the day: you don't need to check out a kernel to do "git > > grep". > > > > Do this: > > > > git grep -w unlock_kernel v2.6.12 | wc > > > > and it will JustWork(tm). > > /me adds it to the metal toolbox > > > > Also, a lot of BKL use was hidden before, and due to the BKL removal > > > activities (by Thomas, Frederic, Jon, Alan and others) the remaining BKL using > > > sites are a lot more well defined, a lot more isolated and thus a lot more > > > removable than ever before. > > > > That's the main thing. We've been pushing them down a lot. > > > > We still have a few annoying core ones, though. I hate the execve() and file > > locking ones. > > When we did the BKL-as-a-mutex trick and let lockdep loose on it, three areas > were particularly tricky: tty, reiser3 and NFS. tty and reiserfs should be ok > now, but i havent seen much activity on the NFS front. > > Ingo Nfs was a problem in the BKL-as-a-mutex tree because it is acquired recursively and then locked up. And I suspect this recursion happens only on mount time because vfs acquires it too there. But looking at it more closely, it doesn't look that dramatic at a first glance. git-grep unlock_kernel fs/nfs fs/nfs/callback.c: unlock_kernel(); fs/nfs/callback.c: unlock_kernel(); In nfs4_callback_svc() it embraces the socket listening/processing callback thread. svc_recv() might sleep so the bkl can be lost in the middle. And then svc_process(). This doesn't seem to protect anything there. In nfs4_callback_svc() it's about the same thing, plus a list manipulation but protected by a spinlock. fs/nfs/delegation.c: unlock_kernel(); fs/nfs/delegation.c: unlock_kernel(); fs/nfs/nfs4state.c: unlock_kernel(); fs/nfs/nfs4state.c: unlock_kernel(); In the above cases we have the following comment: /* Protect inode->i_flock using the BKL */ And really it doesn't seem to protect anything else, fortunately it is acquired in a short path. fs/nfs/super.c: unlock_kernel(); fs/nfs/super.c: unlock_kernel(); Protect the mount/unmount path, a bit trickier there. But really that looks way much easier to fix than it was with reiserfs. ^ permalink raw reply [flat|nested] 78+ messages in thread
* Re: [GIT PATCH] TTY patches for 2.6.33-git 2009-12-13 19:04 ` Frederic Weisbecker @ 2009-12-13 19:09 ` Trond Myklebust 2009-12-13 19:19 ` Linus Torvalds 2009-12-13 19:20 ` Frederic Weisbecker 0 siblings, 2 replies; 78+ messages in thread From: Trond Myklebust @ 2009-12-13 19:09 UTC (permalink / raw) To: Frederic Weisbecker Cc: Ingo Molnar, Linus Torvalds, Thomas Gleixner, Alan Cox, Andrew Morton, Greg KH, Peter Zijlstra, linux-kernel On Sun, 2009-12-13 at 20:04 +0100, Frederic Weisbecker wrote: > In the above cases we have the following comment: > > /* Protect inode->i_flock using the BKL */ > > And really it doesn't seem to protect anything else, > fortunately it is acquired in a short path. As I said in my reply, this is the tough one, because the BKL protection is imposed by the VFS locking scheme used in fs/locks.c. There is a similar dependency imposed upon fs/lockd/ I'm working on this, but I don't have anything ready for 2.6.33. > fs/nfs/super.c: unlock_kernel(); > fs/nfs/super.c: unlock_kernel(); > > Protect the mount/unmount path, a bit trickier there. > > But really that looks way much easier to fix than it was > with reiserfs. All the other cases you list should be fixed in the GIT PULL request that I just put out. Trond ^ permalink raw reply [flat|nested] 78+ messages in thread
* Re: [GIT PATCH] TTY patches for 2.6.33-git 2009-12-13 19:09 ` Trond Myklebust @ 2009-12-13 19:19 ` Linus Torvalds 2009-12-13 20:04 ` Trond Myklebust 2009-12-13 19:20 ` Frederic Weisbecker 1 sibling, 1 reply; 78+ messages in thread From: Linus Torvalds @ 2009-12-13 19:19 UTC (permalink / raw) To: Trond Myklebust Cc: Frederic Weisbecker, Ingo Molnar, Thomas Gleixner, Alan Cox, Andrew Morton, Greg KH, Peter Zijlstra, linux-kernel On Sun, 13 Dec 2009, Trond Myklebust wrote: > On Sun, 2009-12-13 at 20:04 +0100, Frederic Weisbecker wrote: > > In the above cases we have the following comment: > > > > /* Protect inode->i_flock using the BKL */ > > > > And really it doesn't seem to protect anything else, > > fortunately it is acquired in a short path. > > As I said in my reply, this is the tough one, because the BKL protection > is imposed by the VFS locking scheme used in fs/locks.c. > > There is a similar dependency imposed upon fs/lockd/ Note that since NFS seems to be the only one who really cares, I think the appropriate course of action is to just replace the BKL - preferably with a spinlock that you just drop before you do anything that blocks. Not only does the BKL already do that (so the locking doesn't change), but I think most _users_ of the BKL actually already do the explicit dropping of the lock (rather than the implicit one done by schedule()) because it's already been a scalability issue and we've had some history of trying alternative approaches that didn't do that whole auto-dropping anyway (whether those alternate approaches be semaphores or spinlocks). So don't worry about the "imposed by the VFS" thing. I think you can fairly easily change the VFS side. Linus ^ permalink raw reply [flat|nested] 78+ messages in thread
* Re: [GIT PATCH] TTY patches for 2.6.33-git 2009-12-13 19:19 ` Linus Torvalds @ 2009-12-13 20:04 ` Trond Myklebust 0 siblings, 0 replies; 78+ messages in thread From: Trond Myklebust @ 2009-12-13 20:04 UTC (permalink / raw) To: Linus Torvalds Cc: Frederic Weisbecker, Ingo Molnar, Thomas Gleixner, Alan Cox, Andrew Morton, Greg KH, Peter Zijlstra, linux-kernel On Sun, 2009-12-13 at 11:19 -0800, Linus Torvalds wrote: > > On Sun, 13 Dec 2009, Trond Myklebust wrote: > > > On Sun, 2009-12-13 at 20:04 +0100, Frederic Weisbecker wrote: > > > In the above cases we have the following comment: > > > > > > /* Protect inode->i_flock using the BKL */ > > > > > > And really it doesn't seem to protect anything else, > > > fortunately it is acquired in a short path. > > > > As I said in my reply, this is the tough one, because the BKL protection > > is imposed by the VFS locking scheme used in fs/locks.c. > > > > There is a similar dependency imposed upon fs/lockd/ > > Note that since NFS seems to be the only one who really cares, I think the > appropriate course of action is to just replace the BKL - preferably with > a spinlock that you just drop before you do anything that blocks. > > Not only does the BKL already do that (so the locking doesn't change), but > I think most _users_ of the BKL actually already do the explicit dropping > of the lock (rather than the implicit one done by schedule()) because it's > already been a scalability issue and we've had some history of trying > alternative approaches that didn't do that whole auto-dropping anyway > (whether those alternate approaches be semaphores or spinlocks). > > So don't worry about the "imposed by the VFS" thing. I think you can > fairly easily change the VFS side. That comment applies to the NFSv4 code, which applies the BKL only because we need to traverse the inode->i_flock list. There is no recursive use of the BKL there, and we can trivially replace it with whichever new lock that that is chosen to replace the BKL in fs/locks.c. To fix the lockd module, we have to backport some of the lessons we learned when writing the NFSv4 file locking code. It won't be a huge job, but I'd feel uncomfortable if I were to do it in a hurry just in order to meet the merge window deadline. Trond ^ permalink raw reply [flat|nested] 78+ messages in thread
* Re: [GIT PATCH] TTY patches for 2.6.33-git 2009-12-13 19:09 ` Trond Myklebust 2009-12-13 19:19 ` Linus Torvalds @ 2009-12-13 19:20 ` Frederic Weisbecker 1 sibling, 0 replies; 78+ messages in thread From: Frederic Weisbecker @ 2009-12-13 19:20 UTC (permalink / raw) To: Trond Myklebust Cc: Ingo Molnar, Linus Torvalds, Thomas Gleixner, Alan Cox, Andrew Morton, Greg KH, Peter Zijlstra, linux-kernel On Sun, Dec 13, 2009 at 02:09:14PM -0500, Trond Myklebust wrote: > On Sun, 2009-12-13 at 20:04 +0100, Frederic Weisbecker wrote: > > In the above cases we have the following comment: > > > > /* Protect inode->i_flock using the BKL */ > > > > And really it doesn't seem to protect anything else, > > fortunately it is acquired in a short path. > > As I said in my reply, this is the tough one, because the BKL protection > is imposed by the VFS locking scheme used in fs/locks.c. > > There is a similar dependency imposed upon fs/lockd/ Ok. > > fs/nfs/super.c: unlock_kernel(); > > fs/nfs/super.c: unlock_kernel(); > > > > Protect the mount/unmount path, a bit trickier there. > > > > But really that looks way much easier to fix than it was > > with reiserfs. > > All the other cases you list should be fixed in the GIT PULL request > that I just put out. > Cool, thanks a lot! ^ permalink raw reply [flat|nested] 78+ messages in thread
* Re: [GIT PATCH] TTY patches for 2.6.33-git 2009-12-13 6:58 ` Ingo Molnar 2009-12-13 11:36 ` Alan Cox 2009-12-13 17:46 ` Linus Torvalds @ 2009-12-13 17:55 ` Arjan van de Ven 2009-12-13 19:16 ` Frederic Weisbecker 2 siblings, 1 reply; 78+ messages in thread From: Arjan van de Ven @ 2009-12-13 17:55 UTC (permalink / raw) To: Ingo Molnar Cc: Linus Torvalds, Thomas Gleixner, Alan Cox, Andrew Morton, Greg KH, Peter Zijlstra, linux-kernel On Sun, 13 Dec 2009 07:58:44 +0100 Ingo Molnar <mingo@elte.hu> wrote: > > * Linus Torvalds <torvalds@linux-foundation.org> wrote: > > > We've had quite a bit of BKL work this merge-window. Maybe we'll > > even get rid of it one of these days. There are "only" about 600 > > instances of "lock_kernel()" in the tree right now ;) > > I tend to use unlock_kernel() as the metric. (as it's more precisely > greppable and it is also more indicative of the underlying complexity > of locking, as it gets used more in more complex scenarios) another metric is... how many times do we take the BKL for some workload. (For example booting or compiling a kernel). A counter like "BKLs-per-second" would be nice to expose (and then we can track that number going up as a regression etc) For me, a secondary metric would be "how many times do we depend on the magic auto-drop/reget behavior".. also easy to build a counter for. -- Arjan van de Ven Intel Open Source Technology Centre For development, discussion and tips for power savings, visit http://www.lesswatts.org ^ permalink raw reply [flat|nested] 78+ messages in thread
* Re: [GIT PATCH] TTY patches for 2.6.33-git 2009-12-13 17:55 ` Arjan van de Ven @ 2009-12-13 19:16 ` Frederic Weisbecker 2009-12-14 5:30 ` Arjan van de Ven 0 siblings, 1 reply; 78+ messages in thread From: Frederic Weisbecker @ 2009-12-13 19:16 UTC (permalink / raw) To: Arjan van de Ven Cc: Ingo Molnar, Linus Torvalds, Thomas Gleixner, Alan Cox, Andrew Morton, Greg KH, Peter Zijlstra, linux-kernel On Sun, Dec 13, 2009 at 09:55:34AM -0800, Arjan van de Ven wrote: > On Sun, 13 Dec 2009 07:58:44 +0100 > Ingo Molnar <mingo@elte.hu> wrote: > > > > > * Linus Torvalds <torvalds@linux-foundation.org> wrote: > > > > > We've had quite a bit of BKL work this merge-window. Maybe we'll > > > even get rid of it one of these days. There are "only" about 600 > > > instances of "lock_kernel()" in the tree right now ;) > > > > I tend to use unlock_kernel() as the metric. (as it's more precisely > > greppable and it is also more indicative of the underlying complexity > > of locking, as it gets used more in more complex scenarios) > > another metric is... how many times do we take the BKL for some > workload. (For example booting or compiling a kernel). > A counter like "BKLs-per-second" would be nice to expose > (and then we can track that number going up as a regression etc) We have the bkl tracepoints for that, attaching an example below, blkdev_get/bkldev_put is among the highest consumer for me. Then after we have (not sorted in order) tty, __blkdev_driver_ioctl(), etc... # tracer: nop # # TASK-PID CPU# TIMESTAMP FUNCTION # | | | | | hald-addon-stor-4285 [000] 413.952233: lock_kernel: depth=0 file:line=fs/block_dev.c:1192 func=__blkdev_get() hald-addon-stor-4285 [001] 413.969331: unlock_kernel: depth=-1 file:line=fs/block_dev.c:1278 func=__blkdev_get() hald-addon-stor-4285 [001] 413.969343: lock_kernel: depth=0 file:line=block/ioctl.c:171 func=__blkdev_driver_ioctl() hald-addon-stor-4285 [001] 413.989339: unlock_kernel: depth=-1 file:line=block/ioctl.c:173 func=__blkdev_driver_ioctl() hald-addon-stor-4285 [001] 413.989349: lock_kernel: depth=0 file:line=fs/block_dev.c:1358 func=__blkdev_put() hald-addon-stor-4285 [001] 413.992067: unlock_kernel: depth=-1 file:line=fs/block_dev.c:1383 func=__blkdev_put() hald-addon-stor-4285 [001] 415.953350: lock_kernel: depth=0 file:line=fs/block_dev.c:1192 func=__blkdev_get() hald-addon-stor-4285 [001] 415.970537: unlock_kernel: depth=-1 file:line=fs/block_dev.c:1278 func=__blkdev_get() hald-addon-stor-4285 [001] 415.970552: lock_kernel: depth=0 file:line=block/ioctl.c:171 func=__blkdev_driver_ioctl() hald-addon-stor-4285 [001] 415.990404: unlock_kernel: depth=-1 file:line=block/ioctl.c:173 func=__blkdev_driver_ioctl() hald-addon-stor-4285 [001] 415.990414: lock_kernel: depth=0 file:line=fs/block_dev.c:1358 func=__blkdev_put() hald-addon-stor-4285 [001] 415.993139: unlock_kernel: depth=-1 file:line=fs/block_dev.c:1383 func=__blkdev_put() less-5147 [001] 416.155702: lock_kernel: depth=0 file:line=drivers/char/tty_io.c:1847 func=tty_open() less-5147 [001] 416.155712: unlock_kernel: depth=-1 file:line=drivers/char/tty_io.c:1849 func=tty_open() lesspipe-5149 [001] 416.159402: lock_kernel: depth=0 file:line=drivers/char/tty_io.c:1847 func=tty_open() lesspipe-5149 [001] 416.159412: unlock_kernel: depth=-1 file:line=drivers/char/tty_io.c:1849 func=tty_open() lesspipe-5149 [001] 416.159418: lock_kernel: depth=0 file:line=drivers/char/tty_io.c:1870 func=tty_release() lesspipe-5149 [001] 416.159419: lock_kernel: depth=1 file:line=drivers/char/tty_io.c:1911 func=tty_fasync() lesspipe-5149 [001] 416.159421: unlock_kernel: depth=0 file:line=drivers/char/tty_io.c:1943 func=tty_fasync() lesspipe-5149 [001] 416.159423: unlock_kernel: depth=-1 file:line=drivers/char/tty_io.c:1872 func=tty_release() less-5147 [001] 420.459944: lock_kernel: depth=0 file:line=drivers/char/tty_io.c:1870 func=tty_release() less-5147 [001] 420.459949: lock_kernel: depth=1 file:line=drivers/char/tty_io.c:1911 func=tty_fasync() less-5147 [001] 420.459954: unlock_kernel: depth=0 file:line=drivers/char/tty_io.c:1943 func=tty_fasync() less-5147 [001] 420.459960: unlock_kernel: depth=-1 file:line=drivers/char/tty_io.c:1872 func=tty_release() hald-addon-stor-4285 [001] 421.954357: lock_kernel: depth=0 file:line=fs/block_dev.c:1192 func=__blkdev_get() hald-addon-stor-4285 [001] 421.971499: unlock_kernel: depth=-1 file:line=fs/block_dev.c:1278 func=__blkdev_get() hald-addon-stor-4285 [001] 421.971510: lock_kernel: depth=0 file:line=block/ioctl.c:171 func=__blkdev_driver_ioctl() hald-addon-stor-4285 [001] 421.991585: unlock_kernel: depth=-1 file:line=block/ioctl.c:173 func=__blkdev_driver_ioctl() hald-addon-stor-4285 [001] 421.991604: lock_kernel: depth=0 file:line=fs/block_dev.c:1358 func=__blkdev_put() hald-addon-stor-4285 [001] 421.994321: unlock_kernel: depth=-1 file:line=fs/block_dev.c:1383 func=__blkdev_put() hald-addon-stor-4285 [000] 22215.805856: lock_kernel: depth=0 file:line=fs/block_dev.c:1192 func=__blkdev_get() hald-addon-stor-4285 [000] 22215.823023: unlock_kernel: depth=-1 file:line=fs/block_dev.c:1278 func=__blkdev_get() hald-addon-stor-4285 [000] 22215.823035: lock_kernel: depth=0 file:line=block/ioctl.c:171 func=__blkdev_driver_ioctl() hald-addon-stor-4285 [000] 22215.842989: unlock_kernel: depth=-1 file:line=block/ioctl.c:173 func=__blkdev_driver_ioctl() hald-addon-stor-4285 [000] 22215.843001: lock_kernel: depth=0 file:line=fs/block_dev.c:1358 func=__blkdev_put() hald-addon-stor-4285 [000] 22215.845718: unlock_kernel: depth=-1 file:line=fs/block_dev.c:1383 func=__blkdev_put() hald-addon-stor-4285 [000] 22217.805987: lock_kernel: depth=0 file:line=fs/block_dev.c:1192 func=__blkdev_get() hald-addon-stor-4285 [000] 22217.823165: unlock_kernel: depth=-1 file:line=fs/block_dev.c:1278 func=__blkdev_get() hald-addon-stor-4285 [000] 22217.823178: lock_kernel: depth=0 file:line=block/ioctl.c:171 func=__blkdev_driver_ioctl() hald-addon-stor-4285 [000] 22217.843182: unlock_kernel: depth=-1 file:line=block/ioctl.c:173 func=__blkdev_driver_ioctl() hald-addon-stor-4285 [000] 22217.843194: lock_kernel: depth=0 file:line=fs/block_dev.c:1358 func=__blkdev_put() hald-addon-stor-4285 [001] 22217.845932: unlock_kernel: depth=-1 file:line=fs/block_dev.c:1383 func=__blkdev_put() less-10802 [000] 22218.162060: lock_kernel: depth=0 file:line=drivers/char/tty_io.c:1847 func=tty_open() less-10802 [000] 22218.162078: unlock_kernel: depth=-1 file:line=drivers/char/tty_io.c:1849 func=tty_open() lesspipe-10804 [001] 22218.169025: lock_kernel: depth=0 file:line=drivers/char/tty_io.c:1847 func=tty_open() lesspipe-10804 [001] 22218.169043: unlock_kernel: depth=-1 file:line=drivers/char/tty_io.c:1849 func=tty_open() lesspipe-10804 [001] 22218.169052: lock_kernel: depth=0 file:line=drivers/char/tty_io.c:1870 func=tty_release() lesspipe-10804 [001] 22218.169054: lock_kernel: depth=1 file:line=drivers/char/tty_io.c:1911 func=tty_fasync() lesspipe-10804 [001] 22218.169059: unlock_kernel: depth=0 file:line=drivers/char/tty_io.c:1943 func=tty_fasync() lesspipe-10804 [001] 22218.169062: unlock_kernel: depth=-1 file:line=drivers/char/tty_io.c:1872 func=tty_release() less-10802 [001] 22255.644555: lock_kernel: depth=0 file:line=drivers/char/tty_io.c:1870 func=tty_release() less-10802 [001] 22255.644560: lock_kernel: depth=1 file:line=drivers/char/tty_io.c:1911 func=tty_fasync() less-10802 [001] 22255.644565: unlock_kernel: depth=0 file:line=drivers/char/tty_io.c:1943 func=tty_fasync() less-10802 [001] 22255.644571: unlock_kernel: depth=-1 file:line=drivers/char/tty_io.c:1872 func=tty_release() hald-addon-stor-4285 [001] 22255.808942: lock_kernel: depth=0 file:line=fs/block_dev.c:1192 func=__blkdev_get() hald-addon-stor-4285 [001] 22255.826113: unlock_kernel: depth=-1 file:line=fs/block_dev.c:1278 func=__blkdev_get() hald-addon-stor-4285 [001] 22255.826126: lock_kernel: depth=0 file:line=block/ioctl.c:171 func=__blkdev_driver_ioctl() hald-addon-stor-4285 [001] 22255.846022: unlock_kernel: depth=-1 file:line=block/ioctl.c:173 func=__blkdev_driver_ioctl() hald-addon-stor-4285 [001] 22255.846034: lock_kernel: depth=0 file:line=fs/block_dev.c:1358 func=__blkdev_put() hald-addon-stor-4285 [001] 22255.848822: unlock_kernel: depth=-1 file:line=fs/block_dev.c:1383 func=__blkdev_put() less-10810 [001] 22256.438465: lock_kernel: depth=0 file:line=drivers/char/tty_io.c:1847 func=tty_open() less-10810 [001] 22256.438476: unlock_kernel: depth=-1 file:line=drivers/char/tty_io.c:1849 func=tty_open() lesspipe-10812 [001] 22256.442197: lock_kernel: depth=0 file:line=drivers/char/tty_io.c:1847 func=tty_open() lesspipe-10812 [001] 22256.442209: unlock_kernel: depth=-1 file:line=drivers/char/tty_io.c:1849 func=tty_open() lesspipe-10812 [001] 22256.442215: lock_kernel: depth=0 file:line=drivers/char/tty_io.c:1870 func=tty_release() lesspipe-10812 [001] 22256.442217: lock_kernel: depth=1 file:line=drivers/char/tty_io.c:1911 func=tty_fasync() lesspipe-10812 [001] 22256.442220: unlock_kernel: depth=0 file:line=drivers/char/tty_io.c:1943 func=tty_fasync() lesspipe-10812 [001] 22256.442223: unlock_kernel: depth=-1 file:line=drivers/char/tty_io.c:1872 func=tty_release() less-10810 [001] 22288.556512: lock_kernel: depth=0 file:line=drivers/char/tty_io.c:1870 func=tty_release() less-10810 [001] 22288.556518: lock_kernel: depth=1 file:line=drivers/char/tty_io.c:1911 func=tty_fasync() less-10810 [001] 22288.556523: unlock_kernel: depth=0 file:line=drivers/char/tty_io.c:1943 func=tty_fasync() less-10810 [001] 22288.556528: unlock_kernel: depth=-1 file:line=drivers/char/tty_io.c:1872 func=tty_release() hald-addon-stor-4285 [001] 22289.811558: lock_kernel: depth=0 file:line=fs/block_dev.c:1192 func=__blkdev_get() hald-addon-stor-4285 [001] 22289.828644: unlock_kernel: depth=-1 file:line=fs/block_dev.c:1278 func=__blkdev_get() hald-addon-stor-4285 [001] 22289.828655: lock_kernel: depth=0 file:line=block/ioctl.c:171 func=__blkdev_driver_ioctl() hald-addon-stor-4285 [001] 22289.848642: unlock_kernel: depth=-1 file:line=block/ioctl.c:173 func=__blkdev_driver_ioctl() hald-addon-stor-4285 [001] 22289.848654: lock_kernel: depth=0 file:line=fs/block_dev.c:1358 func=__blkdev_put() hald-addon-stor-4285 [001] 22289.851377: unlock_kernel: depth=-1 file:line=fs/block_dev.c:1383 func=__blkdev_put() hald-addon-stor-4285 [001] 22291.811651: lock_kernel: depth=0 file:line=fs/block_dev.c:1192 func=__blkdev_get() hald-addon-stor-4285 [001] 22291.828861: unlock_kernel: depth=-1 file:line=fs/block_dev.c:1278 func=__blkdev_get() hald-addon-stor-4285 [001] 22291.828873: lock_kernel: depth=0 file:line=block/ioctl.c:171 func=__blkdev_driver_ioctl() hald-addon-stor-4285 [001] 22291.848808: unlock_kernel: depth=-1 file:line=block/ioctl.c:173 func=__blkdev_driver_ioctl() hald-addon-stor-4285 [001] 22291.848820: lock_kernel: depth=0 file:line=fs/block_dev.c:1358 func=__blkdev_put() hald-addon-stor-4285 [001] 22291.851539: unlock_kernel: depth=-1 file:line=fs/block_dev.c:1383 func=__blkdev_put() hald-addon-stor-4285 [001] 22293.811865: lock_kernel: depth=0 file:line=fs/block_dev.c:1192 func=__blkdev_get() hald-addon-stor-4285 [001] 22293.829005: unlock_kernel: depth=-1 file:line=fs/block_dev.c:1278 func=__blkdev_get() hald-addon-stor-4285 [001] 22293.829018: lock_kernel: depth=0 file:line=block/ioctl.c:171 func=__blkdev_driver_ioctl() hald-addon-stor-4285 [001] 22293.848924: unlock_kernel: depth=-1 file:line=block/ioctl.c:173 func=__blkdev_driver_ioctl() hald-addon-stor-4285 [001] 22293.848939: lock_kernel: depth=0 file:line=fs/block_dev.c:1358 func=__blkdev_put() hald-addon-stor-4285 [001] 22293.851648: unlock_kernel: depth=-1 file:line=fs/block_dev.c:1383 func=__blkdev_put() hald-addon-stor-4285 [000] 22295.812598: lock_kernel: depth=0 file:line=fs/block_dev.c:1192 func=__blkdev_get() hald-addon-stor-4285 [000] 22295.829710: unlock_kernel: depth=-1 file:line=fs/block_dev.c:1278 func=__blkdev_get() hald-addon-stor-4285 [000] 22295.829729: lock_kernel: depth=0 file:line=block/ioctl.c:171 func=__blkdev_driver_ioctl() hald-addon-stor-4285 [001] 22295.849774: unlock_kernel: depth=-1 file:line=block/ioctl.c:173 func=__blkdev_driver_ioctl() hald-addon-stor-4285 [001] 22295.849793: lock_kernel: depth=0 file:line=fs/block_dev.c:1358 func=__blkdev_put() hald-addon-stor-4285 [000] 22295.852533: unlock_kernel: depth=-1 file:line=fs/block_dev.c:1383 func=__blkdev_put() hald-addon-stor-4285 [000] 22297.812827: lock_kernel: depth=0 file:line=fs/block_dev.c:1192 func=__blkdev_get() hald-addon-stor-4285 [001] 22297.830066: unlock_kernel: depth=-1 file:line=fs/block_dev.c:1278 func=__blkdev_get() hald-addon-stor-4285 [001] 22297.830080: lock_kernel: depth=0 file:line=block/ioctl.c:171 func=__blkdev_driver_ioctl() hald-addon-stor-4285 [001] 22297.850050: unlock_kernel: depth=-1 file:line=block/ioctl.c:173 func=__blkdev_driver_ioctl() hald-addon-stor-4285 [001] 22297.850063: lock_kernel: depth=0 file:line=fs/block_dev.c:1358 func=__blkdev_put() hald-addon-stor-4285 [001] 22297.852787: unlock_kernel: depth=-1 file:line=fs/block_dev.c:1383 func=__blkdev_put() hald-addon-stor-4285 [001] 22299.813048: lock_kernel: depth=0 file:line=fs/block_dev.c:1192 func=__blkdev_get() hald-addon-stor-4285 [001] 22299.830191: unlock_kernel: depth=-1 file:line=fs/block_dev.c:1278 func=__blkdev_get() hald-addon-stor-4285 [001] 22299.830202: lock_kernel: depth=0 file:line=block/ioctl.c:171 func=__blkdev_driver_ioctl() hald-addon-stor-4285 [001] 22299.850124: unlock_kernel: depth=-1 file:line=block/ioctl.c:173 func=__blkdev_driver_ioctl() hald-addon-stor-4285 [001] 22299.850139: lock_kernel: depth=0 file:line=fs/block_dev.c:1358 func=__blkdev_put() hald-addon-stor-4285 [001] 22299.852861: unlock_kernel: depth=-1 file:line=fs/block_dev.c:1383 func=__blkdev_put() hald-addon-stor-4285 [001] 22301.813131: lock_kernel: depth=0 file:line=fs/block_dev.c:1192 func=__blkdev_get() hald-addon-stor-4285 [000] 22301.830331: unlock_kernel: depth=-1 file:line=fs/block_dev.c:1278 func=__blkdev_get() hald-addon-stor-4285 [000] 22301.830344: lock_kernel: depth=0 file:line=block/ioctl.c:171 func=__blkdev_driver_ioctl() hald-addon-stor-4285 [000] 22301.850322: unlock_kernel: depth=-1 file:line=block/ioctl.c:173 func=__blkdev_driver_ioctl() hald-addon-stor-4285 [000] 22301.850336: lock_kernel: depth=0 file:line=fs/block_dev.c:1358 func=__blkdev_put() hald-addon-stor-4285 [000] 22301.853056: unlock_kernel: depth=-1 file:line=fs/block_dev.c:1383 func=__blkdev_put() hald-addon-stor-4285 [000] 22303.813335: lock_kernel: depth=0 file:line=fs/block_dev.c:1192 func=__blkdev_get() hald-addon-stor-4285 [001] 22303.830509: unlock_kernel: depth=-1 file:line=fs/block_dev.c:1278 func=__blkdev_get() hald-addon-stor-4285 [001] 22303.830524: lock_kernel: depth=0 file:line=block/ioctl.c:171 func=__blkdev_driver_ioctl() hald-addon-stor-4285 [001] 22303.850524: unlock_kernel: depth=-1 file:line=block/ioctl.c:173 func=__blkdev_driver_ioctl() hald-addon-stor-4285 [001] 22303.850536: lock_kernel: depth=0 file:line=fs/block_dev.c:1358 func=__blkdev_put() hald-addon-stor-4285 [001] 22303.853252: unlock_kernel: depth=-1 file:line=fs/block_dev.c:1383 func=__blkdev_put() hald-addon-stor-4285 [000] 22305.812998: lock_kernel: depth=0 file:line=fs/block_dev.c:1192 func=__blkdev_get() hald-addon-stor-4285 [001] 22305.830173: unlock_kernel: depth=-1 file:line=fs/block_dev.c:1278 func=__blkdev_get() hald-addon-stor-4285 [001] 22305.830187: lock_kernel: depth=0 file:line=block/ioctl.c:171 func=__blkdev_driver_ioctl() hald-addon-stor-4285 [001] 22305.850228: unlock_kernel: depth=-1 file:line=block/ioctl.c:173 func=__blkdev_driver_ioctl() hald-addon-stor-4285 [001] 22305.850240: lock_kernel: depth=0 file:line=fs/block_dev.c:1358 func=__blkdev_put() hald-addon-stor-4285 [001] 22305.852977: unlock_kernel: depth=-1 file:line=fs/block_dev.c:1383 func=__blkdev_put() hald-addon-stor-4285 [001] 22307.813260: lock_kernel: depth=0 file:line=fs/block_dev.c:1192 func=__blkdev_get() hald-addon-stor-4285 [001] 22307.830358: unlock_kernel: depth=-1 file:line=fs/block_dev.c:1278 func=__blkdev_get() hald-addon-stor-4285 [001] 22307.830370: lock_kernel: depth=0 file:line=block/ioctl.c:171 func=__blkdev_driver_ioctl() hald-addon-stor-4285 [001] 22307.850336: unlock_kernel: depth=-1 file:line=block/ioctl.c:173 func=__blkdev_driver_ioctl() hald-addon-stor-4285 [001] 22307.850348: lock_kernel: depth=0 file:line=fs/block_dev.c:1358 func=__blkdev_put() hald-addon-stor-4285 [001] 22307.853092: unlock_kernel: depth=-1 file:line=fs/block_dev.c:1383 func=__blkdev_put() hald-addon-stor-4285 [000] 22309.812671: lock_kernel: depth=0 file:line=fs/block_dev.c:1192 func=__blkdev_get() hald-addon-stor-4285 [001] 22309.829824: unlock_kernel: depth=-1 file:line=fs/block_dev.c:1278 func=__blkdev_get() hald-addon-stor-4285 [001] 22309.829838: lock_kernel: depth=0 file:line=block/ioctl.c:171 func=__blkdev_driver_ioctl() hald-addon-stor-4285 [001] 22309.849862: unlock_kernel: depth=-1 file:line=block/ioctl.c:173 func=__blkdev_driver_ioctl() hald-addon-stor-4285 [001] 22309.849876: lock_kernel: depth=0 file:line=fs/block_dev.c:1358 func=__blkdev_put() hald-addon-stor-4285 [001] 22309.852593: unlock_kernel: depth=-1 file:line=fs/block_dev.c:1383 func=__blkdev_put() hald-addon-stor-4285 [001] 22311.813880: lock_kernel: depth=0 file:line=fs/block_dev.c:1192 func=__blkdev_get() hald-addon-stor-4285 [001] 22311.830955: unlock_kernel: depth=-1 file:line=fs/block_dev.c:1278 func=__blkdev_get() hald-addon-stor-4285 [001] 22311.830969: lock_kernel: depth=0 file:line=block/ioctl.c:171 func=__blkdev_driver_ioctl() hald-addon-stor-4285 [000] 22311.850934: unlock_kernel: depth=-1 file:line=block/ioctl.c:173 func=__blkdev_driver_ioctl() hald-addon-stor-4285 [000] 22311.850947: lock_kernel: depth=0 file:line=fs/block_dev.c:1358 func=__blkdev_put() hald-addon-stor-4285 [000] 22311.853683: unlock_kernel: depth=-1 file:line=fs/block_dev.c:1383 func=__blkdev_put() hald-addon-stor-4285 [000] 22313.813953: lock_kernel: depth=0 file:line=fs/block_dev.c:1192 func=__blkdev_get() hald-addon-stor-4285 [000] 22313.831033: unlock_kernel: depth=-1 file:line=fs/block_dev.c:1278 func=__blkdev_get() hald-addon-stor-4285 [000] 22313.831044: lock_kernel: depth=0 file:line=block/ioctl.c:171 func=__blkdev_driver_ioctl() hald-addon-stor-4285 [000] 22313.850994: unlock_kernel: depth=-1 file:line=block/ioctl.c:173 func=__blkdev_driver_ioctl() hald-addon-stor-4285 [000] 22313.851008: lock_kernel: depth=0 file:line=fs/block_dev.c:1358 func=__blkdev_put() hald-addon-stor-4285 [000] 22313.853724: unlock_kernel: depth=-1 file:line=fs/block_dev.c:1383 func=__blkdev_put() hald-addon-stor-4285 [000] 22315.814036: lock_kernel: depth=0 file:line=fs/block_dev.c:1192 func=__blkdev_get() hald-addon-stor-4285 [000] 22315.831141: unlock_kernel: depth=-1 file:line=fs/block_dev.c:1278 func=__blkdev_get() hald-addon-stor-4285 [000] 22315.831152: lock_kernel: depth=0 file:line=block/ioctl.c:171 func=__blkdev_driver_ioctl() hald-addon-stor-4285 [000] 22315.851149: unlock_kernel: depth=-1 file:line=block/ioctl.c:173 func=__blkdev_driver_ioctl() hald-addon-stor-4285 [000] 22315.851164: lock_kernel: depth=0 file:line=fs/block_dev.c:1358 func=__blkdev_put() hald-addon-stor-4285 [000] 22315.853885: unlock_kernel: depth=-1 file:line=fs/block_dev.c:1383 func=__blkdev_put() hald-addon-stor-4285 [000] 22317.814201: lock_kernel: depth=0 file:line=fs/block_dev.c:1192 func=__blkdev_get() hald-addon-stor-4285 [000] 22317.831298: unlock_kernel: depth=-1 file:line=fs/block_dev.c:1278 func=__blkdev_get() hald-addon-stor-4285 [000] 22317.831311: lock_kernel: depth=0 file:line=block/ioctl.c:171 func=__blkdev_driver_ioctl() hald-addon-stor-4285 [000] 22317.851279: unlock_kernel: depth=-1 file:line=block/ioctl.c:173 func=__blkdev_driver_ioctl() hald-addon-stor-4285 [000] 22317.851293: lock_kernel: depth=0 file:line=fs/block_dev.c:1358 func=__blkdev_put() hald-addon-stor-4285 [000] 22317.854013: unlock_kernel: depth=-1 file:line=fs/block_dev.c:1383 func=__blkdev_put() hald-addon-stor-4285 [000] 22319.814300: lock_kernel: depth=0 file:line=fs/block_dev.c:1192 func=__blkdev_get() hald-addon-stor-4285 [000] 22319.831452: unlock_kernel: depth=-1 file:line=fs/block_dev.c:1278 func=__blkdev_get() hald-addon-stor-4285 [000] 22319.831464: lock_kernel: depth=0 file:line=block/ioctl.c:171 func=__blkdev_driver_ioctl() hald-addon-stor-4285 [000] 22319.851428: unlock_kernel: depth=-1 file:line=block/ioctl.c:173 func=__blkdev_driver_ioctl() hald-addon-stor-4285 [000] 22319.851442: lock_kernel: depth=0 file:line=fs/block_dev.c:1358 func=__blkdev_put() hald-addon-stor-4285 [000] 22319.854164: unlock_kernel: depth=-1 file:line=fs/block_dev.c:1383 func=__blkdev_put() hald-addon-stor-4285 [000] 22321.814478: lock_kernel: depth=0 file:line=fs/block_dev.c:1192 func=__blkdev_get() hald-addon-stor-4285 [000] 22321.831562: unlock_kernel: depth=-1 file:line=fs/block_dev.c:1278 func=__blkdev_get() hald-addon-stor-4285 [000] 22321.831574: lock_kernel: depth=0 file:line=block/ioctl.c:171 func=__blkdev_driver_ioctl() hald-addon-stor-4285 [000] 22321.851544: unlock_kernel: depth=-1 file:line=block/ioctl.c:173 func=__blkdev_driver_ioctl() hald-addon-stor-4285 [000] 22321.851558: lock_kernel: depth=0 file:line=fs/block_dev.c:1358 func=__blkdev_put() hald-addon-stor-4285 [000] 22321.854283: unlock_kernel: depth=-1 file:line=fs/block_dev.c:1383 func=__blkdev_put() hald-addon-stor-4285 [000] 22323.814548: lock_kernel: depth=0 file:line=fs/block_dev.c:1192 func=__blkdev_get() hald-addon-stor-4285 [000] 22323.831653: unlock_kernel: depth=-1 file:line=fs/block_dev.c:1278 func=__blkdev_get() hald-addon-stor-4285 [000] 22323.831664: lock_kernel: depth=0 file:line=block/ioctl.c:171 func=__blkdev_driver_ioctl() hald-addon-stor-4285 [000] 22323.851570: unlock_kernel: depth=-1 file:line=block/ioctl.c:173 func=__blkdev_driver_ioctl() hald-addon-stor-4285 [000] 22323.851619: lock_kernel: depth=0 file:line=fs/block_dev.c:1358 func=__blkdev_put() hald-addon-stor-4285 [000] 22323.854349: unlock_kernel: depth=-1 file:line=fs/block_dev.c:1383 func=__blkdev_put() hald-addon-stor-4285 [000] 22325.814617: lock_kernel: depth=0 file:line=fs/block_dev.c:1192 func=__blkdev_get() hald-addon-stor-4285 [000] 22325.831827: unlock_kernel: depth=-1 file:line=fs/block_dev.c:1278 func=__blkdev_get() hald-addon-stor-4285 [000] 22325.831840: lock_kernel: depth=0 file:line=block/ioctl.c:171 func=__blkdev_driver_ioctl() hald-addon-stor-4285 [000] 22325.851802: unlock_kernel: depth=-1 file:line=block/ioctl.c:173 func=__blkdev_driver_ioctl() hald-addon-stor-4285 [000] 22325.851815: lock_kernel: depth=0 file:line=fs/block_dev.c:1358 func=__blkdev_put() hald-addon-stor-4285 [000] 22325.854538: unlock_kernel: depth=-1 file:line=fs/block_dev.c:1383 func=__blkdev_put() hald-addon-stor-4285 [000] 22327.814807: lock_kernel: depth=0 file:line=fs/block_dev.c:1192 func=__blkdev_get() hald-addon-stor-4285 [000] 22327.831958: unlock_kernel: depth=-1 file:line=fs/block_dev.c:1278 func=__blkdev_get() hald-addon-stor-4285 [000] 22327.831971: lock_kernel: depth=0 file:line=block/ioctl.c:171 func=__blkdev_driver_ioctl() hald-addon-stor-4285 [000] 22327.851955: unlock_kernel: depth=-1 file:line=block/ioctl.c:173 func=__blkdev_driver_ioctl() hald-addon-stor-4285 [000] 22327.851966: lock_kernel: depth=0 file:line=fs/block_dev.c:1358 func=__blkdev_put() hald-addon-stor-4285 [000] 22327.854674: unlock_kernel: depth=-1 file:line=fs/block_dev.c:1383 func=__blkdev_put() hald-addon-stor-4285 [000] 22329.814947: lock_kernel: depth=0 file:line=fs/block_dev.c:1192 func=__blkdev_get() hald-addon-stor-4285 [000] 22329.832137: unlock_kernel: depth=-1 file:line=fs/block_dev.c:1278 func=__blkdev_get() hald-addon-stor-4285 [000] 22329.832148: lock_kernel: depth=0 file:line=block/ioctl.c:171 func=__blkdev_driver_ioctl() hald-addon-stor-4285 [000] 22329.852105: unlock_kernel: depth=-1 file:line=block/ioctl.c:173 func=__blkdev_driver_ioctl() hald-addon-stor-4285 [000] 22329.852117: lock_kernel: depth=0 file:line=fs/block_dev.c:1358 func=__blkdev_put() hald-addon-stor-4285 [000] 22329.854842: unlock_kernel: depth=-1 file:line=fs/block_dev.c:1383 func=__blkdev_put() hald-addon-stor-4285 [000] 22331.815111: lock_kernel: depth=0 file:line=fs/block_dev.c:1192 func=__blkdev_get() hald-addon-stor-4285 [000] 22331.832302: unlock_kernel: depth=-1 file:line=fs/block_dev.c:1278 func=__blkdev_get() hald-addon-stor-4285 [000] 22331.832317: lock_kernel: depth=0 file:line=block/ioctl.c:171 func=__blkdev_driver_ioctl() hald-addon-stor-4285 [000] 22331.852379: unlock_kernel: depth=-1 file:line=block/ioctl.c:173 func=__blkdev_driver_ioctl() hald-addon-stor-4285 [000] 22331.852396: lock_kernel: depth=0 file:line=fs/block_dev.c:1358 func=__blkdev_put() hald-addon-stor-4285 [000] 22331.855122: unlock_kernel: depth=-1 file:line=fs/block_dev.c:1383 func=__blkdev_put() hald-addon-stor-4285 [000] 22333.814527: lock_kernel: depth=0 file:line=fs/block_dev.c:1192 func=__blkdev_get() hald-addon-stor-4285 [000] 22333.831013: unlock_kernel: depth=-1 file:line=fs/block_dev.c:1278 func=__blkdev_get() hald-addon-stor-4285 [000] 22333.831025: lock_kernel: depth=0 file:line=block/ioctl.c:171 func=__blkdev_driver_ioctl() hald-addon-stor-4285 [001] 22333.850780: unlock_kernel: depth=-1 file:line=block/ioctl.c:173 func=__blkdev_driver_ioctl() hald-addon-stor-4285 [001] 22333.850815: lock_kernel: depth=0 file:line=fs/block_dev.c:1358 func=__blkdev_put() hald-addon-stor-4285 [001] 22333.853545: unlock_kernel: depth=-1 file:line=fs/block_dev.c:1383 func=__blkdev_put() hald-addon-stor-4285 [001] 22335.814932: lock_kernel: depth=0 file:line=fs/block_dev.c:1192 func=__blkdev_get() hald-addon-stor-4285 [000] 22335.831815: unlock_kernel: depth=-1 file:line=fs/block_dev.c:1278 func=__blkdev_get() hald-addon-stor-4285 [000] 22335.831833: lock_kernel: depth=0 file:line=block/ioctl.c:171 func=__blkdev_driver_ioctl() hald-addon-stor-4285 [000] 22335.851497: unlock_kernel: depth=-1 file:line=block/ioctl.c:173 func=__blkdev_driver_ioctl() hald-addon-stor-4285 [000] 22335.851506: lock_kernel: depth=0 file:line=fs/block_dev.c:1358 func=__blkdev_put() hald-addon-stor-4285 [000] 22335.854229: unlock_kernel: depth=-1 file:line=fs/block_dev.c:1383 func=__blkdev_put() hald-addon-stor-4285 [000] 22337.816545: lock_kernel: depth=0 file:line=fs/block_dev.c:1192 func=__blkdev_get() hald-addon-stor-4285 [000] 22337.833716: unlock_kernel: depth=-1 file:line=fs/block_dev.c:1278 func=__blkdev_get() hald-addon-stor-4285 [000] 22337.833727: lock_kernel: depth=0 file:line=block/ioctl.c:171 func=__blkdev_driver_ioctl() hald-addon-stor-4285 [000] 22337.853705: unlock_kernel: depth=-1 file:line=block/ioctl.c:173 func=__blkdev_driver_ioctl() hald-addon-stor-4285 [000] 22337.853718: lock_kernel: depth=0 file:line=fs/block_dev.c:1358 func=__blkdev_put() hald-addon-stor-4285 [000] 22337.856494: unlock_kernel: depth=-1 file:line=fs/block_dev.c:1383 func=__blkdev_put() hald-addon-stor-4285 [000] 22339.815783: lock_kernel: depth=0 file:line=fs/block_dev.c:1192 func=__blkdev_get() hald-addon-stor-4285 [000] 22339.832582: unlock_kernel: depth=-1 file:line=fs/block_dev.c:1278 func=__blkdev_get() hald-addon-stor-4285 [000] 22339.832594: lock_kernel: depth=0 file:line=block/ioctl.c:171 func=__blkdev_driver_ioctl() hald-addon-stor-4285 [000] 22339.852607: unlock_kernel: depth=-1 file:line=block/ioctl.c:173 func=__blkdev_driver_ioctl() hald-addon-stor-4285 [000] 22339.852619: lock_kernel: depth=0 file:line=fs/block_dev.c:1358 func=__blkdev_put() hald-addon-stor-4285 [000] 22339.855342: unlock_kernel: depth=-1 file:line=fs/block_dev.c:1383 func=__blkdev_put() hald-addon-stor-4285 [001] 22341.815543: lock_kernel: depth=0 file:line=fs/block_dev.c:1192 func=__blkdev_get() hald-addon-stor-4285 [001] 22341.832662: unlock_kernel: depth=-1 file:line=fs/block_dev.c:1278 func=__blkdev_get() hald-addon-stor-4285 [001] 22341.832674: lock_kernel: depth=0 file:line=block/ioctl.c:171 func=__blkdev_driver_ioctl() hald-addon-stor-4285 [001] 22341.852565: unlock_kernel: depth=-1 file:line=block/ioctl.c:173 func=__blkdev_driver_ioctl() hald-addon-stor-4285 [001] 22341.852578: lock_kernel: depth=0 file:line=fs/block_dev.c:1358 func=__blkdev_put() hald-addon-stor-4285 [001] 22341.855297: unlock_kernel: depth=-1 file:line=fs/block_dev.c:1383 func=__blkdev_put() hald-addon-stor-4285 [001] 22343.816613: lock_kernel: depth=0 file:line=fs/block_dev.c:1192 func=__blkdev_get() hald-addon-stor-4285 [000] 22343.833956: unlock_kernel: depth=-1 file:line=fs/block_dev.c:1278 func=__blkdev_get() hald-addon-stor-4285 [000] 22343.833975: lock_kernel: depth=0 file:line=block/ioctl.c:171 func=__blkdev_driver_ioctl() hald-addon-stor-4285 [000] 22343.853966: unlock_kernel: depth=-1 file:line=block/ioctl.c:173 func=__blkdev_driver_ioctl() hald-addon-stor-4285 [000] 22343.853981: lock_kernel: depth=0 file:line=fs/block_dev.c:1358 func=__blkdev_put() hald-addon-stor-4285 [000] 22343.856700: unlock_kernel: depth=-1 file:line=fs/block_dev.c:1383 func=__blkdev_put() hald-addon-stor-4285 [000] 22345.816971: lock_kernel: depth=0 file:line=fs/block_dev.c:1192 func=__blkdev_get() hald-addon-stor-4285 [000] 22345.834130: unlock_kernel: depth=-1 file:line=fs/block_dev.c:1278 func=__blkdev_get() hald-addon-stor-4285 [000] 22345.834143: lock_kernel: depth=0 file:line=block/ioctl.c:171 func=__blkdev_driver_ioctl() hald-addon-stor-4285 [000] 22345.854081: unlock_kernel: depth=-1 file:line=block/ioctl.c:173 func=__blkdev_driver_ioctl() hald-addon-stor-4285 [000] 22345.854095: lock_kernel: depth=0 file:line=fs/block_dev.c:1358 func=__blkdev_put() hald-addon-stor-4285 [000] 22345.856815: unlock_kernel: depth=-1 file:line=fs/block_dev.c:1383 func=__blkdev_put() hald-addon-stor-4285 [000] 22347.817085: lock_kernel: depth=0 file:line=fs/block_dev.c:1192 func=__blkdev_get() hald-addon-stor-4285 [000] 22347.834270: unlock_kernel: depth=-1 file:line=fs/block_dev.c:1278 func=__blkdev_get() hald-addon-stor-4285 [000] 22347.834284: lock_kernel: depth=0 file:line=block/ioctl.c:171 func=__blkdev_driver_ioctl() hald-addon-stor-4285 [000] 22347.854281: unlock_kernel: depth=-1 file:line=block/ioctl.c:173 func=__blkdev_driver_ioctl() hald-addon-stor-4285 [000] 22347.854295: lock_kernel: depth=0 file:line=fs/block_dev.c:1358 func=__blkdev_put() hald-addon-stor-4285 [000] 22347.857011: unlock_kernel: depth=-1 file:line=fs/block_dev.c:1383 func=__blkdev_put() hald-addon-stor-4285 [000] 22349.817281: lock_kernel: depth=0 file:line=fs/block_dev.c:1192 func=__blkdev_get() hald-addon-stor-4285 [000] 22349.834499: unlock_kernel: depth=-1 file:line=fs/block_dev.c:1278 func=__blkdev_get() hald-addon-stor-4285 [000] 22349.834512: lock_kernel: depth=0 file:line=block/ioctl.c:171 func=__blkdev_driver_ioctl() hald-addon-stor-4285 [000] 22349.854373: unlock_kernel: depth=-1 file:line=block/ioctl.c:173 func=__blkdev_driver_ioctl() hald-addon-stor-4285 [000] 22349.854387: lock_kernel: depth=0 file:line=fs/block_dev.c:1358 func=__blkdev_put() hald-addon-stor-4285 [000] 22349.857103: unlock_kernel: depth=-1 file:line=fs/block_dev.c:1383 func=__blkdev_put() hald-addon-stor-4285 [000] 22351.817387: lock_kernel: depth=0 file:line=fs/block_dev.c:1192 func=__blkdev_get() hald-addon-stor-4285 [000] 22351.834567: unlock_kernel: depth=-1 file:line=fs/block_dev.c:1278 func=__blkdev_get() hald-addon-stor-4285 [000] 22351.834580: lock_kernel: depth=0 file:line=block/ioctl.c:171 func=__blkdev_driver_ioctl() hald-addon-stor-4285 [000] 22351.854612: unlock_kernel: depth=-1 file:line=block/ioctl.c:173 func=__blkdev_driver_ioctl() hald-addon-stor-4285 [000] 22351.854627: lock_kernel: depth=0 file:line=fs/block_dev.c:1358 func=__blkdev_put() hald-addon-stor-4285 [000] 22351.857350: unlock_kernel: depth=-1 file:line=fs/block_dev.c:1383 func=__blkdev_put() hald-addon-stor-4285 [000] 22353.817639: lock_kernel: depth=0 file:line=fs/block_dev.c:1192 func=__blkdev_get() hald-addon-stor-4285 [000] 22353.834644: unlock_kernel: depth=-1 file:line=fs/block_dev.c:1278 func=__blkdev_get() hald-addon-stor-4285 [000] 22353.834658: lock_kernel: depth=0 file:line=block/ioctl.c:171 func=__blkdev_driver_ioctl() hald-addon-stor-4285 [000] 22353.854721: unlock_kernel: depth=-1 file:line=block/ioctl.c:173 func=__blkdev_driver_ioctl() hald-addon-stor-4285 [000] 22353.854735: lock_kernel: depth=0 file:line=fs/block_dev.c:1358 func=__blkdev_put() hald-addon-stor-4285 [000] 22353.857476: unlock_kernel: depth=-1 file:line=fs/block_dev.c:1383 func=__blkdev_put() hald-addon-stor-4285 [000] 22355.817753: lock_kernel: depth=0 file:line=fs/block_dev.c:1192 func=__blkdev_get() hald-addon-stor-4285 [000] 22355.834840: unlock_kernel: depth=-1 file:line=fs/block_dev.c:1278 func=__blkdev_get() hald-addon-stor-4285 [000] 22355.834854: lock_kernel: depth=0 file:line=block/ioctl.c:171 func=__blkdev_driver_ioctl() hald-addon-stor-4285 [000] 22355.854832: unlock_kernel: depth=-1 file:line=block/ioctl.c:173 func=__blkdev_driver_ioctl() hald-addon-stor-4285 [000] 22355.854852: lock_kernel: depth=0 file:line=fs/block_dev.c:1358 func=__blkdev_put() hald-addon-stor-4285 [000] 22355.857591: unlock_kernel: depth=-1 file:line=fs/block_dev.c:1383 func=__blkdev_put() ^ permalink raw reply [flat|nested] 78+ messages in thread
* Re: [GIT PATCH] TTY patches for 2.6.33-git 2009-12-13 19:16 ` Frederic Weisbecker @ 2009-12-14 5:30 ` Arjan van de Ven 2009-12-14 10:39 ` Oliver Neukum 2009-12-16 9:15 ` Arnd Bergmann 0 siblings, 2 replies; 78+ messages in thread From: Arjan van de Ven @ 2009-12-14 5:30 UTC (permalink / raw) To: Frederic Weisbecker Cc: Ingo Molnar, Linus Torvalds, Thomas Gleixner, Alan Cox, Andrew Morton, Greg KH, Peter Zijlstra, linux-kernel On Sun, 13 Dec 2009 20:16:08 +0100 Frederic Weisbecker <fweisbec@gmail.com> wrote: > On Sun, Dec 13, 2009 at 09:55:34AM -0800, Arjan van de Ven wrote: > > On Sun, 13 Dec 2009 07:58:44 +0100 > > Ingo Molnar <mingo@elte.hu> wrote: > > > > > > > > * Linus Torvalds <torvalds@linux-foundation.org> wrote: > > > > > > > We've had quite a bit of BKL work this merge-window. Maybe we'll > > > > even get rid of it one of these days. There are "only" about 600 > > > > instances of "lock_kernel()" in the tree right now ;) > > > > > > I tend to use unlock_kernel() as the metric. (as it's more > > > precisely greppable and it is also more indicative of the > > > underlying complexity of locking, as it gets used more in more > > > complex scenarios) > > > > another metric is... how many times do we take the BKL for some > > workload. (For example booting or compiling a kernel). > > A counter like "BKLs-per-second" would be nice to expose > > (and then we can track that number going up as a regression etc) > > > > We have the bkl tracepoints for that, attaching an example below, > blkdev_get/bkldev_put is among the highest consumer for me. we have a trace, but not a number that anyone can just pull out without having to go through great lengths to set stuff up... (esp to capture a boot)... Adding a counter always to the lock_kernel function should be fine instead... -- Arjan van de Ven Intel Open Source Technology Centre For development, discussion and tips for power savings, visit http://www.lesswatts.org ^ permalink raw reply [flat|nested] 78+ messages in thread
* Re: [GIT PATCH] TTY patches for 2.6.33-git 2009-12-14 5:30 ` Arjan van de Ven @ 2009-12-14 10:39 ` Oliver Neukum 2009-12-14 16:02 ` Arjan van de Ven 2009-12-16 9:15 ` Arnd Bergmann 1 sibling, 1 reply; 78+ messages in thread From: Oliver Neukum @ 2009-12-14 10:39 UTC (permalink / raw) To: Arjan van de Ven Cc: Frederic Weisbecker, Ingo Molnar, Linus Torvalds, Thomas Gleixner, Alan Cox, Andrew Morton, Greg KH, Peter Zijlstra, linux-kernel Am Montag, 14. Dezember 2009 06:30:15 schrieb Arjan van de Ven: > > We have the bkl tracepoints for that, attaching an example below, > > blkdev_get/bkldev_put is among the highest consumer for me. > > we have a trace, but not a number that anyone can just pull out without > having to go through great lengths to set stuff up... (esp to capture a > boot)... > Adding a counter always to the lock_kernel function should be fine > instead... But don't we need to know how long it is held? If you just count you'll make code that drops it while it can look bad. Regards Oliver ^ permalink raw reply [flat|nested] 78+ messages in thread
* Re: [GIT PATCH] TTY patches for 2.6.33-git 2009-12-14 10:39 ` Oliver Neukum @ 2009-12-14 16:02 ` Arjan van de Ven 0 siblings, 0 replies; 78+ messages in thread From: Arjan van de Ven @ 2009-12-14 16:02 UTC (permalink / raw) To: Oliver Neukum Cc: Frederic Weisbecker, Ingo Molnar, Linus Torvalds, Thomas Gleixner, Alan Cox, Andrew Morton, Greg KH, Peter Zijlstra, linux-kernel On Mon, 14 Dec 2009 11:39:48 +0100 Oliver Neukum <oliver@neukum.org> wrote: > Am Montag, 14. Dezember 2009 06:30:15 schrieb Arjan van de Ven: > > > We have the bkl tracepoints for that, attaching an example below, > > > blkdev_get/bkldev_put is among the highest consumer for me. > > > > we have a trace, but not a number that anyone can just pull out > > without having to go through great lengths to set stuff up... (esp > > to capture a boot)... > > Adding a counter always to the lock_kernel function should be fine > > instead... > > But don't we need to know how long it is held? If you just count > you'll make code that drops it while it can look bad. I think/hope we're well past that. At this point, just the act of taking it at all is bad. -- Arjan van de Ven Intel Open Source Technology Centre For development, discussion and tips for power savings, visit http://www.lesswatts.org ^ permalink raw reply [flat|nested] 78+ messages in thread
* Re: [GIT PATCH] TTY patches for 2.6.33-git 2009-12-14 5:30 ` Arjan van de Ven 2009-12-14 10:39 ` Oliver Neukum @ 2009-12-16 9:15 ` Arnd Bergmann 1 sibling, 0 replies; 78+ messages in thread From: Arnd Bergmann @ 2009-12-16 9:15 UTC (permalink / raw) To: Arjan van de Ven Cc: Frederic Weisbecker, Ingo Molnar, Linus Torvalds, Thomas Gleixner, Alan Cox, Andrew Morton, Greg KH, Peter Zijlstra, linux-kernel On Monday 14 December 2009 05:30:15 Arjan van de Ven wrote: > On Sun, 13 Dec 2009 20:16:08 +0100 Frederic Weisbecker <fweisbec@gmail.com> wrote: > > > We have the bkl tracepoints for that, attaching an example below, > > blkdev_get/bkldev_put is among the highest consumer for me. > > we have a trace, but not a number that anyone can just pull out without > having to go through great lengths to set stuff up... (esp to capture a > boot)... > Adding a counter always to the lock_kernel function should be fine > instead... FWIW, I've hacked up some debugging logic in lib/kernel_lock.c to count and measure the BKL. If anyone is interested in this, I can bring the patch into a form that is usable. The output for a boot followed by building a kernel on a four-way box with today's git looks like: fs/ioctl.c:51 vfs_ioctl,5672809,0,9,108968293432,40528 drivers/char/vt_ioctl.c:512 vt_ioctl,15615,0,45,7967944,16400928 fs/locks.c:826 __posix_lock_file,1272,0,57,2815752,2013920 sound/core/sound.c:175 snd_open,1201,0,0,3863432,0 fs/block_dev.c:1192 __blkdev_get,479,26,14,39860472,686636416 drivers/usb/core/devio.c:656 usbdev_open,240,0,0,1640792,0 drivers/usb/core/devio.c:1868 usbdev_ioctl,240,0,0,369368,0 fs/read_write.c:110 default_llseek,185,0,5,88048,669224 drivers/char/tty_io.c:1761 tty_open,136,0,11,2878344,249472048 fs/block_dev.c:1358 __blkdev_put,117,1,1,10654208,3840 drivers/char/tty_io.c:1882 tty_open,106,0,5,44344,32056 drivers/char/tty_io.c:1603 tty_release,99,0,3,363496,8192 drivers/char/tty_io.c:1513 tty_release,99,0,3,639200,104312 kernel/ptrace.c:610 sys_ptrace,98,0,0,588432,0 block/ioctl.c:171 __blkdev_driver_ioctl,40,0,4,2960544,69288 fs/locks.c:1188 __break_lease,25,0,0,14960,0 fs/namespace.c:1650 do_new_mount,14,1,0,403088,0 fs/locks.c:733 flock_lock_file,14,0,0,33072,0 fs/locks.c:2022 locks_remove_flock,9,0,0,17160,0 drivers/char/pty.c:673 ptmx_open,8,0,0,406200,0 drivers/input/input.c:1767 input_open_file,7,0,0,83776,0 drivers/char/tty_io.c:717 disassociate_ctty,5,0,1,2376,322352 lib/kernel_lock.c:236 stat_read,3,0,0,590328,0 kernel/trace/trace.c:721 register_tracer,3,0,1,2420999112,17296 fs/locks.c:647 posix_test_lock,3,0,0,6920,0 drivers/gpu/drm/drm_fops.c:176 drm_stub_open,2,0,0,16712,0 init/main.c:849 kernel_init,1,0,0,334951112,0 init/main.c:546 start_kernel,1,0,0,873891904,0 fs/ext3/super.c:2548 ext3_remount,1,0,0,86592,0 fs/ext3/super.c:2036 ext3_fill_super,1,1,0,2656,0 drivers/gpu/drm/drm_fops.c:473 drm_release,1,0,0,6360,0 block/ioctl.c:316 blkdev_ioctl,1,0,1,848,32352 The comma-separated fields are 1. caller location 2. number of lock_kernel() calls 3. number of times it was called with BKL held already 4. number of times it blocked 5. total time it was held in get_cycles() units, not counting time spent during release-on-sleep 6. total time that this lock_kernel() was blocked by another thread holding the BKL. It would be easy to add some recording of who is nesting or blocking whom, or which ones call a function that might_sleep(). Arnd ^ permalink raw reply [flat|nested] 78+ messages in thread
* Re: [GIT PATCH] TTY patches for 2.6.33-git 2009-12-12 9:39 ` Andrew Morton 2009-12-12 10:06 ` Ingo Molnar 2009-12-12 10:10 ` Ingo Molnar @ 2009-12-12 11:02 ` Alan Cox 2009-12-12 22:34 ` Thomas Gleixner 2 siblings, 1 reply; 78+ messages in thread From: Alan Cox @ 2009-12-12 11:02 UTC (permalink / raw) To: Andrew Morton Cc: Ingo Molnar, Greg KH, Thomas Gleixner, Peter Zijlstra, Linus Torvalds, linux-kernel > The do_tty_hangup()->tty_fasync() path takes the locks in the > file_list_lock()->lock_kernel() direction whereas most other code takes > them in the other direction, which cannot be good. But I'm not sure Thats a bug - the BKL does want to be taken first (and will sleep/yield/drop) > Have a trace. I'm actually wondering if perhaps there's a missing > unlock_kernel() somewhere else, and the tty code is just the victim of > that. It's introduced by the BKL shuffle. Try the following commit 1f61f07a985c7e8cfc20ad8fcced2f3d226bd0dc Author: Alan Cox <alan@linux.intel.com> Date: Sat Dec 12 10:32:36 2009 +0000 tty: Fix the AB-BA locking bug introduced in the BKL split The fasync path takes the BKL (it probably doesn't need to in fact) but this causes lock inversions and deadlocks so we can't do that. Leave the BKL over that bit for the moment. Identified by AKPM. Signed-off-by: Alan Cox <alan@linux.intel.com> diff --git a/drivers/char/tty_io.c b/drivers/char/tty_io.c index 684f0e0..f15df40 100644 --- a/drivers/char/tty_io.c +++ b/drivers/char/tty_io.c @@ -516,7 +516,6 @@ static void do_tty_hangup(struct work_struct *work) /* inuse_filps is protected by the single kernel lock */ lock_kernel(); check_tty_count(tty, "do_tty_hangup"); - unlock_kernel(); file_list_lock(); /* This breaks for file handles being sent over AF_UNIX sockets ? */ @@ -531,7 +530,6 @@ static void do_tty_hangup(struct work_struct *work) } file_list_unlock(); - lock_kernel(); tty_ldisc_hangup(tty); read_lock(&tasklist_lock); ^ permalink raw reply related [flat|nested] 78+ messages in thread
* Re: [GIT PATCH] TTY patches for 2.6.33-git 2009-12-12 11:02 ` Alan Cox @ 2009-12-12 22:34 ` Thomas Gleixner 0 siblings, 0 replies; 78+ messages in thread From: Thomas Gleixner @ 2009-12-12 22:34 UTC (permalink / raw) To: Alan Cox Cc: Andrew Morton, Ingo Molnar, Greg KH, Peter Zijlstra, Linus Torvalds, linux-kernel On Sat, 12 Dec 2009, Alan Cox wrote: > > The do_tty_hangup()->tty_fasync() path takes the locks in the > > file_list_lock()->lock_kernel() direction whereas most other code takes > > them in the other direction, which cannot be good. But I'm not sure > > Thats a bug - the BKL does want to be taken first (and will > sleep/yield/drop) > > > Have a trace. I'm actually wondering if perhaps there's a missing > > unlock_kernel() somewhere else, and the tty code is just the victim of > > that. > > It's introduced by the BKL shuffle. Try the following > > > commit 1f61f07a985c7e8cfc20ad8fcced2f3d226bd0dc > Author: Alan Cox <alan@linux.intel.com> > Date: Sat Dec 12 10:32:36 2009 +0000 > > tty: Fix the AB-BA locking bug introduced in the BKL split > > The fasync path takes the BKL (it probably doesn't need to in fact) but > this causes lock inversions and deadlocks so we can't do that. Leave the > BKL over that bit for the moment. > > Identified by AKPM. > > Signed-off-by: Alan Cox <alan@linux.intel.com> Acked-and-Tested-by: Thomas Gleixner <tglx@linutronix.de> > diff --git a/drivers/char/tty_io.c b/drivers/char/tty_io.c > index 684f0e0..f15df40 100644 > --- a/drivers/char/tty_io.c > +++ b/drivers/char/tty_io.c > @@ -516,7 +516,6 @@ static void do_tty_hangup(struct work_struct *work) > /* inuse_filps is protected by the single kernel lock */ > lock_kernel(); > check_tty_count(tty, "do_tty_hangup"); > - unlock_kernel(); > > file_list_lock(); > /* This breaks for file handles being sent over AF_UNIX sockets ? */ > @@ -531,7 +530,6 @@ static void do_tty_hangup(struct work_struct *work) > } > file_list_unlock(); > > - lock_kernel(); > tty_ldisc_hangup(tty); > > read_lock(&tasklist_lock); > ^ permalink raw reply [flat|nested] 78+ messages in thread
* Re: [GIT PATCH] TTY patches for 2.6.33-git 2009-12-12 8:46 ` Ingo Molnar 2009-12-12 9:39 ` Andrew Morton @ 2009-12-12 10:42 ` Alan Cox 2009-12-12 10:42 ` Ingo Molnar 1 sibling, 1 reply; 78+ messages in thread From: Alan Cox @ 2009-12-12 10:42 UTC (permalink / raw) To: Ingo Molnar Cc: Greg KH, Thomas Gleixner, Peter Zijlstra, Linus Torvalds, Andrew Morton, linux-kernel On Sat, 12 Dec 2009 09:46:11 +0100 Ingo Molnar <mingo@elte.hu> wrote: > > * Greg KH <gregkh@suse.de> wrote: > > > Here's the big TTY patchset for your .33-git tree. > > FYI, one of the changes in this tree is causing lockups on x86. > > Config attached. > > Possible suspects would one of these: > > 36ba782: tty: split the lock up a bit further > 5ec93d1: tty: Move the leader test in disassociate > 38c70b2: tty: Push the bkl down a bit in the hangup code > f18f949: tty: Push the lock down further into the ldisc code > eeb89d9: tty: push the BKL down into the handlers a bit > > as they deal with locking details and are fresher than two weeks. Any diagnostics with the lockup or just a system hang ? You can pop back those five and if the lockup then vanishes those are ones trying to work on hangup and BKL rather than security fixes so can just get punted to next release ^ permalink raw reply [flat|nested] 78+ messages in thread
* Re: [GIT PATCH] TTY patches for 2.6.33-git 2009-12-12 10:42 ` Alan Cox @ 2009-12-12 10:42 ` Ingo Molnar 0 siblings, 0 replies; 78+ messages in thread From: Ingo Molnar @ 2009-12-12 10:42 UTC (permalink / raw) To: Alan Cox Cc: Greg KH, Thomas Gleixner, Peter Zijlstra, Linus Torvalds, Andrew Morton, linux-kernel * Alan Cox <alan@lxorguk.ukuu.org.uk> wrote: > On Sat, 12 Dec 2009 09:46:11 +0100 > Ingo Molnar <mingo@elte.hu> wrote: > > > > > * Greg KH <gregkh@suse.de> wrote: > > > > > Here's the big TTY patchset for your .33-git tree. > > > > FYI, one of the changes in this tree is causing lockups on x86. > > > > Config attached. > > > > Possible suspects would one of these: > > > > 36ba782: tty: split the lock up a bit further > > 5ec93d1: tty: Move the leader test in disassociate > > 38c70b2: tty: Push the bkl down a bit in the hangup code > > f18f949: tty: Push the lock down further into the ldisc code > > eeb89d9: tty: push the BKL down into the handlers a bit > > > > as they deal with locking details and are fresher than two weeks. > > Any diagnostics with the lockup or just a system hang ? None that i've captured (the hang is silent) but Andrew posted some. Ingo ^ permalink raw reply [flat|nested] 78+ messages in thread
end of thread, other threads:[~2010-03-02 23:52 UTC | newest] Thread overview: 78+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2010-03-02 23:09 [GIT PATCH] TTY patches for 2.6.33-git Greg KH 2010-03-02 23:36 ` [PATCH 01/36] serial: fit blackfin uart over sport driver into common uart infrastructure Greg Kroah-Hartman 2010-03-02 23:36 ` [PATCH 02/36] serial: copy UART properties of UPF_FIXED_TYPE ports provisioned using early_serial_setup Greg Kroah-Hartman 2010-03-02 23:36 ` [PATCH 03/36] serial: 68328serial.c: remove BAUD_TABLE_SIZE macro Greg Kroah-Hartman 2010-03-02 23:36 ` [PATCH 04/36] serial: atmel_serial: add poll_get_char and poll_put_char uart_ops Greg Kroah-Hartman 2010-03-02 23:36 ` [PATCH 05/36] serial: synclink_gt: dropped transmit data bugfix Greg Kroah-Hartman 2010-03-02 23:36 ` [PATCH 06/36] serial: 8250_pci: add support for MCS9865 / SYBA 6x Serial Port Card Greg Kroah-Hartman 2010-03-02 23:36 ` [PATCH 07/36] serial: imx: fix NULL dereference Oops when pdata == NULL Greg Kroah-Hartman 2010-03-02 23:36 ` [PATCH 08/36] serial: add support for Korenix JetCard Greg Kroah-Hartman 2010-03-02 23:36 ` [PATCH 09/36] serial: fix test of unsigned Greg Kroah-Hartman 2010-03-02 23:36 ` [PATCH 10/36] serial: Char: cyclades, fix compiler warning Greg Kroah-Hartman 2010-03-02 23:36 ` [PATCH 11/36] serial: cyclades: allow overriding ISA defaults also when the driver is built-in Greg Kroah-Hartman 2010-03-02 23:36 ` [PATCH 12/36] tty: char: mxser, remove unnecessary tty test Greg Kroah-Hartman 2010-03-02 23:36 ` [PATCH 13/36] serial: isicom.c: use pr_fmt and pr_<level> Greg Kroah-Hartman 2010-03-02 23:36 ` [PATCH 14/36] hvc_console: fix test on unsigned in hvc_console_print() Greg Kroah-Hartman 2010-03-02 23:36 ` [PATCH 15/36] tty: moxa: remove #ifdef MODULE completely Greg Kroah-Hartman 2010-03-02 23:36 ` [PATCH 16/36] ip2: remove #ifdef MODULE from ip2main.c Greg Kroah-Hartman 2010-03-02 23:36 ` [PATCH 17/36] ip2: Add module parameter Greg Kroah-Hartman 2010-03-02 23:36 ` [PATCH 18/36] tty: declare MODULE_FIRMWARE in various drivers Greg Kroah-Hartman 2010-03-02 23:36 ` [PATCH 19/36] Char: synclink, remove unnecessary checks Greg Kroah-Hartman 2010-03-02 23:36 ` [PATCH 20/36] serial: bfin_5xx: remove useless gpio handling with hard flow control Greg Kroah-Hartman 2010-03-02 23:36 ` [PATCH 21/36] serial: bfin_5xx: need to disable DMA TX interrupt too Greg Kroah-Hartman 2010-03-02 23:36 ` [PATCH 22/36] serial: bfin_5xx: kgdboc should accept gdb break only when it is active Greg Kroah-Hartman 2010-03-02 23:36 ` [PATCH 23/36] serial: bfin_5xx: pull in linux/io.h for ioremap prototypes Greg Kroah-Hartman 2010-03-02 23:36 ` [PATCH 24/36] serial: bcm63xx_uart: don't use kfree() on non kmalloced area Greg Kroah-Hartman 2010-03-02 23:36 ` [PATCH 25/36] serial: bcm63xx_uart: allow more than one uart to be registered Greg Kroah-Hartman 2010-03-02 23:36 ` [PATCH 26/36] sdio_uart: Use kfifo instead of the messy circ stuff Greg Kroah-Hartman 2010-03-02 23:36 ` [PATCH 27/36] nozomi: Add tty_port usage Greg Kroah-Hartman 2010-03-02 23:36 ` [PATCH 28/36] nozomi: Fix mutex handling Greg Kroah-Hartman 2010-03-02 23:36 ` [PATCH 29/36] nozomi: Tidy up the PCI table Greg Kroah-Hartman 2010-03-02 23:36 ` [PATCH 30/36] serial: timberdale: Remove dependancies Greg Kroah-Hartman 2010-03-02 23:36 ` [PATCH 31/36] tty: Fix the ldisc hangup race Greg Kroah-Hartman 2010-03-02 23:36 ` [PATCH 32/36] tty: Fix up char drivers request_room usage Greg Kroah-Hartman 2010-03-02 23:36 ` [PATCH 33/36] tty: Keep the default buffering to sub-page units Greg Kroah-Hartman 2010-03-02 23:36 ` [PATCH 34/36] tty: Add a new VT mode which is like VT_PROCESS but doesn't require a VT_RELDISP ioctl call Greg Kroah-Hartman 2010-03-02 23:36 ` [PATCH 35/36] jsm: removing the uart structure and filename on error Greg Kroah-Hartman 2010-03-02 23:36 ` [PATCH 36/36] jsm: fixing error if the driver fails to load Greg Kroah-Hartman -- strict thread matches above, loose matches on Subject: below -- 2009-12-11 23:28 [GIT PATCH] TTY patches for 2.6.33-git Greg KH 2009-12-12 8:46 ` Ingo Molnar 2009-12-12 9:39 ` Andrew Morton 2009-12-12 10:06 ` Ingo Molnar 2009-12-12 10:15 ` Ingo Molnar 2009-12-12 10:41 ` Andrew Morton 2009-12-12 10:52 ` Ingo Molnar 2009-12-12 10:10 ` Ingo Molnar 2009-12-12 10:36 ` Andrew Morton 2009-12-12 17:16 ` Linus Torvalds 2009-12-12 17:26 ` Linus Torvalds 2009-12-12 21:42 ` Alan Cox 2009-12-12 21:48 ` Thomas Gleixner 2009-12-12 22:25 ` Linus Torvalds 2009-12-12 22:31 ` Thomas Gleixner 2009-12-12 22:21 ` Linus Torvalds 2009-12-12 22:33 ` Thomas Gleixner 2009-12-12 23:17 ` Linus Torvalds 2009-12-13 6:58 ` Ingo Molnar 2009-12-13 11:36 ` Alan Cox 2009-12-13 12:13 ` Ingo Molnar 2009-12-13 17:46 ` Linus Torvalds 2009-12-13 18:17 ` Ingo Molnar 2009-12-13 18:33 ` Trond Myklebust 2009-12-13 19:07 ` Linus Torvalds 2009-12-13 19:17 ` Trond Myklebust 2009-12-13 19:04 ` Frederic Weisbecker 2009-12-13 19:09 ` Trond Myklebust 2009-12-13 19:19 ` Linus Torvalds 2009-12-13 20:04 ` Trond Myklebust 2009-12-13 19:20 ` Frederic Weisbecker 2009-12-13 17:55 ` Arjan van de Ven 2009-12-13 19:16 ` Frederic Weisbecker 2009-12-14 5:30 ` Arjan van de Ven 2009-12-14 10:39 ` Oliver Neukum 2009-12-14 16:02 ` Arjan van de Ven 2009-12-16 9:15 ` Arnd Bergmann 2009-12-12 11:02 ` Alan Cox 2009-12-12 22:34 ` Thomas Gleixner 2009-12-12 10:42 ` Alan Cox 2009-12-12 10:42 ` Ingo Molnar
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox