Linux Serial subsystem development
 help / color / mirror / Atom feed
* [PATCH] tty: Added a CONFIG_TTY option to allow removal of TTY
From: Joe Millenbach @ 2012-08-20 21:50 UTC (permalink / raw)
  To: Greg Kroah-Hartman, Alan Cox, linux-serial, linux-kernel
  Cc: Josh Triplett, team-fjord, Joe Millenbach

The option allows you to remove TTY and compile without errors. This
saves space on systems that won't support TTY interfaces anyway.
bloat-o-meter output is below.

The bulk of this patch consists of Kconfig changes adding "depends on
TTY" to various serial devices and similar drivers that require the TTY
layer.  Ideally, these dependencies would occur on a common intermediate
symbol such as SERIO, but most drivers "select SERIO" rather than
"depends on SERIO", and "select" does not respect dependencies.

bloat-o-meter output filtered to not show removed entries with awk
'$3 != "-"' as the list was very long.

add/remove: 0/385 grow/shrink: 2/18 up/down: 14/-54016 (-54002)
function                                     old     new   delta
chr_dev_init                                 193     205     +12
selinux_setprocattr                         1167    1169      +2
static.__warned                              557     556      -1
start_kernel                                 840     835      -5
proc_root_init                               167     162      -5
unregister_console                           165     157      -8
sys_setsid                                   213     205      -8
sys_vhangup                                   37      21     -16
daemonize                                    689     673     -16
t_stop                                        72      54     -18
t_next                                       129     108     -21
static.do_acct_process                       838     806     -32
release_task                                1157    1125     -32
do_exit                                     2325    2288     -37
t_start                                      269     221     -48
static.__func__                            18289   18219     -70
do_task_stat                                2962    2892     -70
flush_unauthorized_files                     740     614    -126
static._rs                                  1440    1280    -160
static.__key                                8560    8384    -176

Signed-off-by: Joe Millenbach <jmillenbach@gmail.com>
Reviewed-by: Josh Triplett <josh@joshtriplett.org>
---
 arch/tile/Kconfig                   |    1 +
 drivers/bluetooth/Kconfig           |    1 +
 drivers/char/Kconfig                |    7 +-
 drivers/char/pcmcia/Kconfig         |    4 +-
 drivers/i2c/busses/Kconfig          |    2 +-
 drivers/input/joystick/Kconfig      |    7 ++
 drivers/input/keyboard/Kconfig      |    8 ++-
 drivers/input/mouse/Kconfig         |    3 +
 drivers/input/serio/Kconfig         |    1 +
 drivers/input/touchscreen/Kconfig   |   15 +++-
 drivers/isdn/Kconfig                |    1 +
 drivers/isdn/capi/Kconfig           |    1 +
 drivers/isdn/gigaset/Kconfig        |    1 +
 drivers/isdn/hardware/mISDN/Kconfig |    1 +
 drivers/lguest/Kconfig              |    2 +-
 drivers/media/radio/wl128x/Kconfig  |    2 +-
 drivers/misc/Kconfig                |    2 +-
 drivers/misc/ti-st/Kconfig          |    2 +-
 drivers/mmc/card/Kconfig            |    1 +
 drivers/net/caif/Kconfig            |    2 +-
 drivers/net/can/Kconfig             |    2 +-
 drivers/net/hamradio/Kconfig        |    4 +-
 drivers/net/irda/Kconfig            |    2 +-
 drivers/net/ppp/Kconfig             |    4 +-
 drivers/net/slip/Kconfig            |    1 +
 drivers/net/usb/Kconfig             |    4 +-
 drivers/net/wan/Kconfig             |    2 +-
 drivers/pps/clients/Kconfig         |    2 +-
 drivers/tty/Kconfig                 |   21 ++++--
 drivers/tty/Makefile                |    2 +-
 drivers/tty/hvc/Kconfig             |   21 +++---
 drivers/tty/serial/8250/Kconfig     |    1 +
 drivers/tty/serial/Kconfig          |  132 ++++++++++++++++++-----------------
 drivers/usb/class/Kconfig           |    2 +-
 drivers/usb/serial/Kconfig          |    2 +-
 fs/proc/Makefile                    |    4 +-
 include/linux/console.h             |    5 ++
 include/linux/proc_fs.h             |    5 ++
 include/linux/tty.h                 |   39 +++++++++++
 lib/Kconfig.kgdb                    |    1 +
 net/bluetooth/rfcomm/Kconfig        |    1 +
 net/irda/ircomm/Kconfig             |    2 +-
 sound/soc/codecs/Kconfig            |    3 +-
 43 files changed, 217 insertions(+), 109 deletions(-)

diff --git a/arch/tile/Kconfig b/arch/tile/Kconfig
index 11270ca..44620cd 100644
--- a/arch/tile/Kconfig
+++ b/arch/tile/Kconfig
@@ -102,6 +102,7 @@ config DEBUG_COPY_FROM_USER
 	def_bool n
 
 config HVC_TILE
+	depends on TTY
 	select HVC_DRIVER
 	def_bool y
 
diff --git a/drivers/bluetooth/Kconfig b/drivers/bluetooth/Kconfig
index 5ccf142..fb7acc2 100644
--- a/drivers/bluetooth/Kconfig
+++ b/drivers/bluetooth/Kconfig
@@ -26,6 +26,7 @@ config BT_HCIBTSDIO
 
 config BT_HCIUART
 	tristate "HCI UART driver"
+	depends on TTY
 	help
 	  Bluetooth HCI UART driver.
 	  This driver is required if you want to use Bluetooth devices with
diff --git a/drivers/char/Kconfig b/drivers/char/Kconfig
index 4364303..955ee518 100644
--- a/drivers/char/Kconfig
+++ b/drivers/char/Kconfig
@@ -53,7 +53,7 @@ source "drivers/tty/serial/Kconfig"
 
 config TTY_PRINTK
 	bool "TTY driver to output user messages via printk"
-	depends on EXPERT
+	depends on EXPERT && TTY
 	default n
 	---help---
 	  If you say Y here, the support for writing user messages (i.e.
@@ -174,7 +174,7 @@ source "drivers/tty/hvc/Kconfig"
 
 config VIRTIO_CONSOLE
 	tristate "Virtio console"
-	depends on VIRTIO
+	depends on VIRTIO && TTY
 	select HVC_DRIVER
 	help
 	  Virtio console for use with lguest and other hypervisors.
@@ -407,6 +407,7 @@ config XILINX_HWICAP
 
 config R3964
 	tristate "Siemens R3964 line discipline"
+	depends on TTY
 	---help---
 	  This driver allows synchronous communication with devices using the
 	  Siemens R3964 packet protocol. Unless you are dealing with special
@@ -454,7 +455,7 @@ source "drivers/char/pcmcia/Kconfig"
 
 config MWAVE
 	tristate "ACP Modem (Mwave) support"
-	depends on X86
+	depends on X86 && TTY
 	select SERIAL_8250
 	---help---
 	  The ACP modem (Mwave) for Linux is a WinModem. It is composed of a
diff --git a/drivers/char/pcmcia/Kconfig b/drivers/char/pcmcia/Kconfig
index 6614416..2a166d5 100644
--- a/drivers/char/pcmcia/Kconfig
+++ b/drivers/char/pcmcia/Kconfig
@@ -7,7 +7,7 @@ menu "PCMCIA character devices"
 
 config SYNCLINK_CS
 	tristate "SyncLink PC Card support"
-	depends on PCMCIA
+	depends on PCMCIA && TTY
 	help
 	  Enable support for the SyncLink PC Card serial adapter, running
 	  asynchronous and HDLC communications up to 512Kbps. The port is
@@ -45,7 +45,7 @@ config CARDMAN_4040
 
 config IPWIRELESS
 	tristate "IPWireless 3G UMTS PCMCIA card support"
-	depends on PCMCIA && NETDEVICES
+	depends on PCMCIA && NETDEVICES && TTY
 	select PPP
 	help
 	  This is a driver for 3G UMTS PCMCIA card from IPWireless company. In
diff --git a/drivers/i2c/busses/Kconfig b/drivers/i2c/busses/Kconfig
index 3101dd5..81eed4e 100644
--- a/drivers/i2c/busses/Kconfig
+++ b/drivers/i2c/busses/Kconfig
@@ -759,7 +759,7 @@ config I2C_PARPORT_LIGHT
 
 config I2C_TAOS_EVM
 	tristate "TAOS evaluation module"
-	depends on EXPERIMENTAL
+	depends on EXPERIMENTAL && TTY
 	select SERIO
 	select SERIO_SERPORT
 	default n
diff --git a/drivers/input/joystick/Kconfig b/drivers/input/joystick/Kconfig
index 56eb471..cd24588 100644
--- a/drivers/input/joystick/Kconfig
+++ b/drivers/input/joystick/Kconfig
@@ -134,6 +134,7 @@ source "drivers/input/joystick/iforce/Kconfig"
 
 config JOYSTICK_WARRIOR
 	tristate "Logitech WingMan Warrior joystick"
+	depends on TTY
 	select SERIO
 	help
 	  Say Y here if you have a Logitech WingMan Warrior joystick connected
@@ -144,6 +145,7 @@ config JOYSTICK_WARRIOR
 
 config JOYSTICK_MAGELLAN
 	tristate "LogiCad3d Magellan/SpaceMouse 6dof controllers"
+	depends on TTY
 	select SERIO
 	help
 	  Say Y here if you have a Magellan or Space Mouse 6DOF controller
@@ -154,6 +156,7 @@ config JOYSTICK_MAGELLAN
 
 config JOYSTICK_SPACEORB
 	tristate "SpaceTec SpaceOrb/Avenger 6dof controllers"
+	depends on TTY
 	select SERIO
 	help
 	  Say Y here if you have a SpaceOrb 360 or SpaceBall Avenger 6DOF
@@ -164,6 +167,7 @@ config JOYSTICK_SPACEORB
 
 config JOYSTICK_SPACEBALL
 	tristate "SpaceTec SpaceBall 6dof controllers"
+	depends on TTY
 	select SERIO
 	help
 	  Say Y here if you have a SpaceTec SpaceBall 2003/3003/4000 FLX
@@ -175,6 +179,7 @@ config JOYSTICK_SPACEBALL
 
 config JOYSTICK_STINGER
 	tristate "Gravis Stinger gamepad"
+	depends on TTY
 	select SERIO
 	help
 	  Say Y here if you have a Gravis Stinger connected to one of your
@@ -185,6 +190,7 @@ config JOYSTICK_STINGER
 
 config JOYSTICK_TWIDJOY
 	tristate "Twiddler as a joystick"
+	depends on TTY
 	select SERIO
 	help
 	  Say Y here if you have a Handykey Twiddler connected to your
@@ -195,6 +201,7 @@ config JOYSTICK_TWIDJOY
 
 config JOYSTICK_ZHENHUA
 	tristate "5-byte Zhenhua RC transmitter"
+	depends on TTY
 	select SERIO
 	help
 	  Say Y here if you have a Zhen Hua PPM-4CH transmitter which is
diff --git a/drivers/input/keyboard/Kconfig b/drivers/input/keyboard/Kconfig
index cdc385b..75f38e8 100644
--- a/drivers/input/keyboard/Kconfig
+++ b/drivers/input/keyboard/Kconfig
@@ -69,6 +69,7 @@ config KEYBOARD_ATARI
 config KEYBOARD_ATKBD
 	tristate "AT keyboard" if EXPERT || !X86
 	default y
+	depends on TTY
 	select SERIO
 	select SERIO_LIBPS2
 	select SERIO_I8042 if X86
@@ -153,6 +154,7 @@ config KEYBOARD_BFIN
 
 config KEYBOARD_LKKBD
 	tristate "DECstation/VAXstation LK201/LK401 keyboard"
+	depends on TTY
 	select SERIO
 	help
 	  Say Y here if you want to use a LK201 or LK401 style serial
@@ -265,7 +267,7 @@ config KEYBOARD_HIL_OLD
 
 config KEYBOARD_HIL
 	tristate "HP HIL keyboard/pointer support"
-	depends on GSC || HP300
+	depends on (GSC || HP300) && TTY
 	default y
 	select HP_SDC
 	select HIL_MLC
@@ -374,6 +376,7 @@ config KEYBOARD_IMX
 
 config KEYBOARD_NEWTON
 	tristate "Newton keyboard"
+	depends on TTY
 	select SERIO
 	help
 	  Say Y here if you have a Newton keyboard on a serial port.
@@ -451,6 +454,7 @@ config KEYBOARD_SAMSUNG
 
 config KEYBOARD_STOWAWAY
 	tristate "Stowaway keyboard"
+	depends on TTY
 	select SERIO
 	help
 	  Say Y here if you have a Stowaway keyboard on a serial port.
@@ -462,6 +466,7 @@ config KEYBOARD_STOWAWAY
 
 config KEYBOARD_SUNKBD
 	tristate "Sun Type 4 and Type 5 keyboard"
+	depends on TTY
 	select SERIO
 	help
 	  Say Y here if you want to use a Sun Type 4 or Type 5 keyboard,
@@ -560,6 +565,7 @@ config KEYBOARD_TWL4030
 
 config KEYBOARD_XTKBD
 	tristate "XT keyboard"
+	depends on TTY
 	select SERIO
 	help
 	  Say Y here if you want to use the old IBM PC/XT keyboard (or
diff --git a/drivers/input/mouse/Kconfig b/drivers/input/mouse/Kconfig
index 9c1e6ee..a9628c4 100644
--- a/drivers/input/mouse/Kconfig
+++ b/drivers/input/mouse/Kconfig
@@ -14,6 +14,7 @@ if INPUT_MOUSE
 
 config MOUSE_PS2
 	tristate "PS/2 mouse"
+	depends on TTY
 	default y
 	select SERIO
 	select SERIO_LIBPS2
@@ -138,6 +139,7 @@ config MOUSE_PS2_OLPC
 
 config MOUSE_SERIAL
 	tristate "Serial mouse"
+	depends on TTY
 	select SERIO
 	help
 	  Say Y here if you have a serial (RS-232, COM port) mouse connected
@@ -262,6 +264,7 @@ config MOUSE_RISCPC
 
 config MOUSE_VSXXXAA
 	tristate "DEC VSXXX-AA/GA mouse and VSXXX-AB tablet"
+	depends on TTY
 	select SERIO
 	help
 	  Say Y (or M) if you want to use a DEC VSXXX-AA (hockey
diff --git a/drivers/input/serio/Kconfig b/drivers/input/serio/Kconfig
index 55f2c22..56a6163 100644
--- a/drivers/input/serio/Kconfig
+++ b/drivers/input/serio/Kconfig
@@ -4,6 +4,7 @@
 config SERIO
 	tristate "Serial I/O support" if EXPERT || !X86
 	default y
+	depends on TTY
 	help
 	  Say Yes here if you have any input device that uses serial I/O to
 	  communicate with the system. This includes the
diff --git a/drivers/input/touchscreen/Kconfig b/drivers/input/touchscreen/Kconfig
index 4af2a18..21d4d31 100644
--- a/drivers/input/touchscreen/Kconfig
+++ b/drivers/input/touchscreen/Kconfig
@@ -113,7 +113,7 @@ config TOUCHSCREEN_AUO_PIXCIR
 
 config TOUCHSCREEN_BITSY
 	tristate "Compaq iPAQ H3600 (Bitsy) touchscreen"
-	depends on SA1100_BITSY
+	depends on SA1100_BITSY && TTY
 	select SERIO
 	help
 	  Say Y here if you have the h3600 (Bitsy) touchscreen.
@@ -159,6 +159,7 @@ config TOUCHSCREEN_DA9034
 
 config TOUCHSCREEN_DYNAPRO
 	tristate "Dynapro serial touchscreen"
+	depends on TTY
 	select SERIO
 	help
 	  Say Y here if you have a Dynapro serial touchscreen connected to
@@ -171,6 +172,7 @@ config TOUCHSCREEN_DYNAPRO
 
 config TOUCHSCREEN_HAMPSHIRE
 	tristate "Hampshire serial touchscreen"
+	depends on TTY
 	select SERIO
 	help
 	  Say Y here if you have a Hampshire serial touchscreen connected to
@@ -202,6 +204,7 @@ config TOUCHSCREEN_EGALAX
 
 config TOUCHSCREEN_FUJITSU
 	tristate "Fujitsu serial touchscreen"
+	depends on TTY
 	select SERIO
 	help
 	  Say Y here if you have the Fujitsu touchscreen (such as one
@@ -227,6 +230,7 @@ config TOUCHSCREEN_S3C2410
 
 config TOUCHSCREEN_GUNZE
 	tristate "Gunze AHL-51S touchscreen"
+	depends on TTY
 	select SERIO
 	help
 	  Say Y here if you have the Gunze AHL-51 touchscreen connected to
@@ -239,6 +243,7 @@ config TOUCHSCREEN_GUNZE
 
 config TOUCHSCREEN_ELO
 	tristate "Elo serial touchscreens"
+	depends on TTY
 	select SERIO
 	help
 	  Say Y here if you have an Elo serial touchscreen connected to
@@ -251,6 +256,7 @@ config TOUCHSCREEN_ELO
 
 config TOUCHSCREEN_WACOM_W8001
 	tristate "Wacom W8001 penabled serial touchscreen"
+	depends on TTY
 	select SERIO
 	help
 	  Say Y here if you have an Wacom W8001 penabled serial touchscreen
@@ -297,6 +303,7 @@ config TOUCHSCREEN_MCS5000
 
 config TOUCHSCREEN_MTOUCH
 	tristate "MicroTouch serial touchscreens"
+	depends on TTY
 	select SERIO
 	help
 	  Say Y here if you have a MicroTouch (3M) serial touchscreen connected to
@@ -309,6 +316,7 @@ config TOUCHSCREEN_MTOUCH
 
 config TOUCHSCREEN_INEXIO
 	tristate "iNexio serial touchscreens"
+	depends on TTY
 	select SERIO
 	help
 	  Say Y here if you have an iNexio serial touchscreen connected to
@@ -376,6 +384,7 @@ config TOUCHSCREEN_HTCPEN
 
 config TOUCHSCREEN_PENMOUNT
 	tristate "Penmount serial touchscreen"
+	depends on TTY
 	select SERIO
 	help
 	  Say Y here if you have a Penmount serial touchscreen connected to
@@ -408,6 +417,7 @@ config TOUCHSCREEN_TNETV107X
 
 config TOUCHSCREEN_TOUCHRIGHT
 	tristate "Touchright serial touchscreen"
+	depends on TTY
 	select SERIO
 	help
 	  Say Y here if you have a Touchright serial touchscreen connected to
@@ -420,6 +430,7 @@ config TOUCHSCREEN_TOUCHRIGHT
 
 config TOUCHSCREEN_TOUCHWIN
 	tristate "Touchwin serial touchscreen"
+	depends on TTY
 	select SERIO
 	help
 	  Say Y here if you have a Touchwin serial touchscreen connected to
@@ -683,6 +694,7 @@ config TOUCHSCREEN_USB_NEXIO
 
 config TOUCHSCREEN_TOUCHIT213
 	tristate "Sahara TouchIT-213 touchscreen"
+	depends on TTY
 	select SERIO
 	help
 	  Say Y here if you have a Sahara TouchIT-213 Tablet PC.
@@ -694,6 +706,7 @@ config TOUCHSCREEN_TOUCHIT213
 
 config TOUCHSCREEN_TSC_SERIO
 	tristate "TSC-10/25/40 serial touchscreen support"
+	depends on TTY
 	select SERIO
 	help
 	  Say Y here if you have a TSC-10, 25 or 40 serial touchscreen connected
diff --git a/drivers/isdn/Kconfig b/drivers/isdn/Kconfig
index a233ed5..37d50fc 100644
--- a/drivers/isdn/Kconfig
+++ b/drivers/isdn/Kconfig
@@ -22,6 +22,7 @@ if ISDN
 
 menuconfig ISDN_I4L
 	tristate "Old ISDN4Linux (deprecated)"
+	depends on TTY
 	---help---
 	  This driver allows you to use an ISDN adapter for networking
 	  connections and as dialin/out device.  The isdn-tty's have a built
diff --git a/drivers/isdn/capi/Kconfig b/drivers/isdn/capi/Kconfig
index 15c3ffd..f046865 100644
--- a/drivers/isdn/capi/Kconfig
+++ b/drivers/isdn/capi/Kconfig
@@ -18,6 +18,7 @@ config CAPI_TRACE
 
 config ISDN_CAPI_MIDDLEWARE
 	bool "CAPI2.0 Middleware support"
+	depends on TTY
 	help
 	  This option will enhance the capabilities of the /dev/capi20
 	  interface.  It will provide a means of moving a data connection,
diff --git a/drivers/isdn/gigaset/Kconfig b/drivers/isdn/gigaset/Kconfig
index b18a92c..dde5e09 100644
--- a/drivers/isdn/gigaset/Kconfig
+++ b/drivers/isdn/gigaset/Kconfig
@@ -1,5 +1,6 @@
 menuconfig ISDN_DRV_GIGASET
 	tristate "Siemens Gigaset support"
+	depends on TTY
 	select CRC_CCITT
 	select BITREVERSE
 	help
diff --git a/drivers/isdn/hardware/mISDN/Kconfig b/drivers/isdn/hardware/mISDN/Kconfig
index eadc1cd..b8611e3 100644
--- a/drivers/isdn/hardware/mISDN/Kconfig
+++ b/drivers/isdn/hardware/mISDN/Kconfig
@@ -76,6 +76,7 @@ config MISDN_NETJET
 	tristate "Support for NETJet cards"
 	depends on MISDN
 	depends on PCI
+	depends on TTY
 	select MISDN_IPAC
 	select ISDN_HDLC
 	select ISDN_I4L
diff --git a/drivers/lguest/Kconfig b/drivers/lguest/Kconfig
index 34ae49d..f9c4314 100644
--- a/drivers/lguest/Kconfig
+++ b/drivers/lguest/Kconfig
@@ -1,6 +1,6 @@
 config LGUEST
 	tristate "Linux hypervisor example code"
-	depends on X86_32 && EXPERIMENTAL && EVENTFD
+	depends on X86_32 && EXPERIMENTAL && EVENTFD && TTY
 	select HVC_DRIVER
 	---help---
 	  This is a very simple module which allows you to run
diff --git a/drivers/media/radio/wl128x/Kconfig b/drivers/media/radio/wl128x/Kconfig
index ea1e654..f359be7 100644
--- a/drivers/media/radio/wl128x/Kconfig
+++ b/drivers/media/radio/wl128x/Kconfig
@@ -4,7 +4,7 @@
 menu "Texas Instruments WL128x FM driver (ST based)"
 config RADIO_WL128X
 	tristate "Texas Instruments WL128x FM Radio"
-	depends on VIDEO_V4L2 && RFKILL && GPIOLIB
+	depends on VIDEO_V4L2 && RFKILL && GPIOLIB && TTY
 	select TI_ST if NET
 	help
 	Choose Y here if you have this FM radio chip.
diff --git a/drivers/misc/Kconfig b/drivers/misc/Kconfig
index c779509..2cbf17f 100644
--- a/drivers/misc/Kconfig
+++ b/drivers/misc/Kconfig
@@ -136,7 +136,7 @@ config PHANTOM
 
 config INTEL_MID_PTI
 	tristate "Parallel Trace Interface for MIPI P1149.7 cJTAG standard"
-	depends on PCI
+	depends on PCI && TTY
 	default n
 	help
 	  The PTI (Parallel Trace Interface) driver directs
diff --git a/drivers/misc/ti-st/Kconfig b/drivers/misc/ti-st/Kconfig
index abb5de1..f34dcc5 100644
--- a/drivers/misc/ti-st/Kconfig
+++ b/drivers/misc/ti-st/Kconfig
@@ -5,7 +5,7 @@
 menu "Texas Instruments shared transport line discipline"
 config TI_ST
 	tristate "Shared transport core driver"
-	depends on NET && GPIOLIB
+	depends on NET && GPIOLIB && TTY
 	select FW_LOADER
 	help
 	  This enables the shared transport core driver for TI
diff --git a/drivers/mmc/card/Kconfig b/drivers/mmc/card/Kconfig
index 3b1f783..5562308 100644
--- a/drivers/mmc/card/Kconfig
+++ b/drivers/mmc/card/Kconfig
@@ -52,6 +52,7 @@ config MMC_BLOCK_BOUNCE
 
 config SDIO_UART
 	tristate "SDIO UART/GPS class support"
+	depends on TTY
 	help
 	  SDIO function driver for SDIO cards that implements the UART
 	  class, as well as the GPS class which appears like a UART.
diff --git a/drivers/net/caif/Kconfig b/drivers/net/caif/Kconfig
index abf4d7a..60c2142 100644
--- a/drivers/net/caif/Kconfig
+++ b/drivers/net/caif/Kconfig
@@ -6,7 +6,7 @@ comment "CAIF transport drivers"
 
 config CAIF_TTY
 	tristate "CAIF TTY transport driver"
-	depends on CAIF
+	depends on CAIF && TTY
 	default n
 	---help---
 	The CAIF TTY transport driver is a Line Discipline (ldisc)
diff --git a/drivers/net/can/Kconfig b/drivers/net/can/Kconfig
index ab45758..739c356 100644
--- a/drivers/net/can/Kconfig
+++ b/drivers/net/can/Kconfig
@@ -13,7 +13,7 @@ config CAN_VCAN
 
 config CAN_SLCAN
 	tristate "Serial / USB serial CAN Adaptors (slcan)"
-	depends on CAN
+	depends on CAN && TTY
 	---help---
 	  CAN driver for several 'low cost' CAN interfaces that are attached
 	  via serial lines or via USB-to-serial adapters using the LAWICEL
diff --git a/drivers/net/hamradio/Kconfig b/drivers/net/hamradio/Kconfig
index 95dbcfd..bf5e596 100644
--- a/drivers/net/hamradio/Kconfig
+++ b/drivers/net/hamradio/Kconfig
@@ -1,6 +1,6 @@
 config MKISS
 	tristate "Serial port KISS driver"
-	depends on AX25
+	depends on AX25 && TTY
 	select CRC16
 	---help---
 	  KISS is a protocol used for the exchange of data between a computer
@@ -18,7 +18,7 @@ config MKISS
 
 config 6PACK
 	tristate "Serial port 6PACK driver"
-	depends on AX25
+	depends on AX25 && TTY
 	---help---
 	  6pack is a transmission protocol for the data exchange between your
 	  PC and your TNC (the Terminal Node Controller acts as a kind of
diff --git a/drivers/net/irda/Kconfig b/drivers/net/irda/Kconfig
index e535137..34773ed 100644
--- a/drivers/net/irda/Kconfig
+++ b/drivers/net/irda/Kconfig
@@ -5,7 +5,7 @@ comment "SIR device drivers"
 
 config IRTTY_SIR
 	tristate "IrTTY (uses Linux serial driver)"
-	depends on IRDA
+	depends on IRDA && TTY
 	help
 	  Say Y here if you want to build support for the IrTTY line
 	  discipline.  To compile it as a module, choose M here: the module
diff --git a/drivers/net/ppp/Kconfig b/drivers/net/ppp/Kconfig
index 872df3e..192485f 100644
--- a/drivers/net/ppp/Kconfig
+++ b/drivers/net/ppp/Kconfig
@@ -150,7 +150,7 @@ config PPPOL2TP
 
 config PPP_ASYNC
 	tristate "PPP support for async serial ports"
-	depends on PPP
+	depends on PPP && TTY
 	select CRC_CCITT
 	---help---
 	  Say Y (or M) here if you want to be able to use PPP over standard
@@ -164,7 +164,7 @@ config PPP_ASYNC
 
 config PPP_SYNC_TTY
 	tristate "PPP support for sync tty ports"
-	depends on PPP
+	depends on PPP && TTY
 	---help---
 	  Say Y (or M) here if you want to be able to use PPP over synchronous
 	  (HDLC) tty devices, such as the SyncLink adapter. These devices
diff --git a/drivers/net/slip/Kconfig b/drivers/net/slip/Kconfig
index 211b160..48e6871 100644
--- a/drivers/net/slip/Kconfig
+++ b/drivers/net/slip/Kconfig
@@ -4,6 +4,7 @@
 
 config SLIP
 	tristate "SLIP (serial line) support"
+	depends on TTY
 	---help---
 	  Say Y if you intend to use SLIP or CSLIP (compressed SLIP) to
 	  connect to your Internet service provider or to connect to some
diff --git a/drivers/net/usb/Kconfig b/drivers/net/usb/Kconfig
index 2335761..de4e543 100644
--- a/drivers/net/usb/Kconfig
+++ b/drivers/net/usb/Kconfig
@@ -400,7 +400,7 @@ config USB_NET_KALMIA
 
 config USB_HSO
 	tristate "Option USB High Speed Mobile Devices"
-	depends on USB && RFKILL
+	depends on USB && RFKILL && TTY
 	default n
 	help
 	  Choose this option if you have an Option HSDPA/HSUPA card.
@@ -448,7 +448,7 @@ config USB_SIERRA_NET
 
 config USB_VL600
 	tristate "LG VL600 modem dongle"
-	depends on USB_NET_CDCETHER
+	depends on USB_NET_CDCETHER && TTY
 	select USB_ACM
 	help
 	  Select this if you want to use an LG Electronics 4G/LTE usb modem
diff --git a/drivers/net/wan/Kconfig b/drivers/net/wan/Kconfig
index 423eb26..636c950 100644
--- a/drivers/net/wan/Kconfig
+++ b/drivers/net/wan/Kconfig
@@ -460,7 +460,7 @@ config LAPBETHER
 
 config X25_ASY
 	tristate "X.25 async driver (EXPERIMENTAL)"
-	depends on LAPB && X25
+	depends on LAPB && X25 && TTY
 	---help---
 	  Send and receive X.25 frames over regular asynchronous serial
 	  lines such as telephone lines equipped with ordinary modems.
diff --git a/drivers/pps/clients/Kconfig b/drivers/pps/clients/Kconfig
index 445197d..6efd9b6 100644
--- a/drivers/pps/clients/Kconfig
+++ b/drivers/pps/clients/Kconfig
@@ -17,7 +17,7 @@ config PPS_CLIENT_KTIMER
 
 config PPS_CLIENT_LDISC
 	tristate "PPS line discipline"
-	depends on PPS
+	depends on PPS && TTY
 	help
 	  If you say yes here you get support for a PPS source connected
 	  with the CD (Carrier Detect) pin of your serial port.
diff --git a/drivers/tty/Kconfig b/drivers/tty/Kconfig
index 830cd62..71f93c6 100644
--- a/drivers/tty/Kconfig
+++ b/drivers/tty/Kconfig
@@ -1,6 +1,15 @@
+config TTY
+	bool "Enable TTY" if EXPERT
+	default y
+	---help---
+	  Allows you to remove TTY support which can save space, and
+	  blocks features that require TTY from inclusion in the kernel.
+	  TTY is required for any text terminals or serial port
+	  communication. Most users should leave this enabled.
+
 config VT
 	bool "Virtual terminal" if EXPERT
-	depends on !S390 && !UML
+	depends on !S390 && !UML && TTY
 	select INPUT
 	default y
 	---help---
@@ -88,6 +97,7 @@ config VT_HW_CONSOLE_BINDING
 
 config UNIX98_PTYS
 	bool "Unix98 PTY support" if EXPERT
+	depends on TTY
 	default y
 	---help---
 	  A pseudo terminal (PTY) is a software device consisting of two
@@ -122,6 +132,7 @@ config DEVPTS_MULTIPLE_INSTANCES
 
 config LEGACY_PTYS
 	bool "Legacy (BSD) PTY support"
+	depends on TTY
 	default y
 	---help---
 	  A pseudo terminal (PTY) is a software device consisting of two
@@ -166,7 +177,7 @@ config BFIN_JTAG_COMM_CONSOLE
 
 config SERIAL_NONSTANDARD
 	bool "Non-standard serial port support"
-	depends on HAS_IOMEM
+	depends on HAS_IOMEM && TTY
 	---help---
 	  Say Y here if you have any non-standard serial boards -- boards
 	  which aren't supported using the standard "dumb" serial driver.
@@ -285,7 +296,7 @@ config SYNCLINK_GT
 
 config NOZOMI
 	tristate "HSDPA Broadband Wireless Data Card - Globe Trotter"
-	depends on PCI && EXPERIMENTAL
+	depends on PCI && EXPERIMENTAL && TTY
 	help
 	  If you have a HSDPA driver Broadband Wireless Data Card -
 	  Globe Trotter PCMCIA card, say Y here.
@@ -317,8 +328,7 @@ config N_HDLC
 
 config N_GSM
 	tristate "GSM MUX line discipline support (EXPERIMENTAL)"
-	depends on EXPERIMENTAL
-	depends on NET
+	depends on EXPERIMENTAL && NET && TTY
 	help
 	  This line discipline provides support for the GSM MUX protocol and
 	  presents the mux as a set of 61 individual tty devices.
@@ -342,6 +352,7 @@ config TRACE_ROUTER
 
 config TRACE_SINK
 	tristate "Trace data sink for MIPI P1149.7 cJTAG standard"
+	depends on TTY
 	default n
 	help
 	  The trace sink uses the Linux line discipline framework to receive
diff --git a/drivers/tty/Makefile b/drivers/tty/Makefile
index 2953059..df5663d 100644
--- a/drivers/tty/Makefile
+++ b/drivers/tty/Makefile
@@ -1,4 +1,4 @@
-obj-y				+= tty_io.o n_tty.o tty_ioctl.o tty_ldisc.o \
+obj-$(CONFIG_TTY)		+= tty_io.o n_tty.o tty_ioctl.o tty_ldisc.o \
 				   tty_buffer.o tty_port.o tty_mutex.o
 obj-$(CONFIG_LEGACY_PTYS)	+= pty.o
 obj-$(CONFIG_UNIX98_PTYS)	+= pty.o
diff --git a/drivers/tty/hvc/Kconfig b/drivers/tty/hvc/Kconfig
index 4222035..81864d9 100644
--- a/drivers/tty/hvc/Kconfig
+++ b/drivers/tty/hvc/Kconfig
@@ -1,5 +1,6 @@
 config HVC_DRIVER
 	bool
+	depends on TTY
 	help
 	  Generic "hypervisor virtual console" infrastructure for various
 	  hypervisors (pSeries, iSeries, Xen, lguest).
@@ -11,7 +12,7 @@ config HVC_IRQ
 
 config HVC_CONSOLE
 	bool "pSeries Hypervisor Virtual Console support"
-	depends on PPC_PSERIES
+	depends on PPC_PSERIES && TTY
 	select HVC_DRIVER
 	select HVC_IRQ
 	help
@@ -26,7 +27,7 @@ config HVC_OLD_HVSI
 
 config HVC_ISERIES
 	bool "iSeries Hypervisor Virtual Console support"
-	depends on PPC_ISERIES
+	depends on PPC_ISERIES && TTY
 	default y
 	select HVC_DRIVER
 	select HVC_IRQ
@@ -36,7 +37,7 @@ config HVC_ISERIES
 
 config HVC_OPAL
 	bool "OPAL Console support"
-	depends on PPC_POWERNV
+	depends on PPC_POWERNV && TTY
 	select HVC_DRIVER
 	select HVC_IRQ
 	default y
@@ -45,21 +46,21 @@ config HVC_OPAL
 
 config HVC_RTAS
 	bool "IBM RTAS Console support"
-	depends on PPC_RTAS
+	depends on PPC_RTAS && TTY
 	select HVC_DRIVER
 	help
 	  IBM Console device driver which makes use of RTAS
 
 config HVC_BEAT
 	bool "Toshiba's Beat Hypervisor Console support"
-	depends on PPC_CELLEB
+	depends on PPC_CELLEB && TTY
 	select HVC_DRIVER
 	help
 	  Toshiba's Cell Reference Set Beat Console device driver
 
 config HVC_IUCV
 	bool "z/VM IUCV Hypervisor console support (VM only)"
-	depends on S390
+	depends on S390 && TTY
 	select HVC_DRIVER
 	select IUCV
 	default y
@@ -69,7 +70,7 @@ config HVC_IUCV
 
 config HVC_XEN
 	bool "Xen Hypervisor Console support"
-	depends on XEN
+	depends on XEN && TTY
 	select HVC_DRIVER
 	select HVC_IRQ
 	default y
@@ -78,13 +79,13 @@ config HVC_XEN
 
 config HVC_UDBG
        bool "udbg based fake hypervisor console"
-       depends on PPC && EXPERIMENTAL
+       depends on PPC && EXPERIMENTAL && TTY
        select HVC_DRIVER
        default n
 
 config HVC_DCC
        bool "ARM JTAG DCC console"
-       depends on ARM
+       depends on ARM && TTY
        select HVC_DRIVER
        help
          This console uses the JTAG DCC on ARM to create a console under the HVC
@@ -93,7 +94,7 @@ config HVC_DCC
 
 config HVC_BFIN_JTAG
 	bool "Blackfin JTAG console"
-	depends on BLACKFIN
+	depends on BLACKFIN && TTY
 	select HVC_DRIVER
 	help
 	 This console uses the Blackfin JTAG to create a console under the
diff --git a/drivers/tty/serial/8250/Kconfig b/drivers/tty/serial/8250/Kconfig
index 591f801..dd3f938 100644
--- a/drivers/tty/serial/8250/Kconfig
+++ b/drivers/tty/serial/8250/Kconfig
@@ -5,6 +5,7 @@
 
 config SERIAL_8250
 	tristate "8250/16550 and compatible serial support"
+	depends on TTY
 	select SERIAL_CORE
 	---help---
 	  This selects whether you want to include the driver for the standard
diff --git a/drivers/tty/serial/Kconfig b/drivers/tty/serial/Kconfig
index 2de9924..fbf0c04 100644
--- a/drivers/tty/serial/Kconfig
+++ b/drivers/tty/serial/Kconfig
@@ -11,7 +11,7 @@ comment "Non-8250 serial port support"
 
 config SERIAL_AMBA_PL010
 	tristate "ARM AMBA PL010 serial port support"
-	depends on ARM_AMBA && (BROKEN || !ARCH_VERSATILE)
+	depends on ARM_AMBA && (BROKEN || !ARCH_VERSATILE) && TTY
 	select SERIAL_CORE
 	help
 	  This selects the ARM(R) AMBA(R) PrimeCell PL010 UART.  If you have
@@ -22,7 +22,7 @@ config SERIAL_AMBA_PL010
 
 config SERIAL_AMBA_PL010_CONSOLE
 	bool "Support for console on AMBA serial port"
-	depends on SERIAL_AMBA_PL010=y
+	depends on SERIAL_AMBA_PL010=y && TTY
 	select SERIAL_CORE_CONSOLE
 	---help---
 	  Say Y here if you wish to use an AMBA PrimeCell UART as the system
@@ -38,7 +38,7 @@ config SERIAL_AMBA_PL010_CONSOLE
 
 config SERIAL_AMBA_PL011
 	tristate "ARM AMBA PL011 serial port support"
-	depends on ARM_AMBA
+	depends on ARM_AMBA && TTY
 	select SERIAL_CORE
 	help
 	  This selects the ARM(R) AMBA(R) PrimeCell PL011 UART.  If you have
@@ -49,7 +49,7 @@ config SERIAL_AMBA_PL011
 
 config SERIAL_AMBA_PL011_CONSOLE
 	bool "Support for console on AMBA serial port"
-	depends on SERIAL_AMBA_PL011=y
+	depends on SERIAL_AMBA_PL011=y && TTY
 	select SERIAL_CORE_CONSOLE
 	---help---
 	  Say Y here if you wish to use an AMBA PrimeCell UART as the system
@@ -65,7 +65,7 @@ config SERIAL_AMBA_PL011_CONSOLE
 
 config SERIAL_SB1250_DUART
 	tristate "BCM1xxx on-chip DUART serial support"
-	depends on SIBYTE_SB1xxx_SOC=y
+	depends on SIBYTE_SB1xxx_SOC=y && TTY
 	select SERIAL_CORE
 	default y
 	---help---
@@ -80,7 +80,7 @@ config SERIAL_SB1250_DUART
 
 config SERIAL_SB1250_DUART_CONSOLE
 	bool "Support for console on a BCM1xxx DUART serial port"
-	depends on SERIAL_SB1250_DUART=y
+	depends on SERIAL_SB1250_DUART=y && TTY
 	select SERIAL_CORE_CONSOLE
 	default y
 	---help---
@@ -93,7 +93,7 @@ config SERIAL_SB1250_DUART_CONSOLE
 
 config SERIAL_ATMEL
 	bool "AT91 / AT32 on-chip serial port support"
-	depends on (ARM && ARCH_AT91) || AVR32
+	depends on ((ARM && ARCH_AT91) || AVR32) && TTY
 	select SERIAL_CORE
 	help
 	  This enables the driver for the on-chip UARTs of the Atmel
@@ -143,7 +143,7 @@ config SERIAL_ATMEL_TTYAT
 
 config SERIAL_KS8695
 	bool "Micrel KS8695 (Centaur) serial port support"
-	depends on ARCH_KS8695
+	depends on ARCH_KS8695 && TTY
 	select SERIAL_CORE
 	help
 	  This selects the Micrel Centaur KS8695 UART.  Say Y here.
@@ -160,7 +160,7 @@ config SERIAL_KS8695_CONSOLE
 
 config SERIAL_CLPS711X
 	tristate "CLPS711X serial port support"
-	depends on ARM && ARCH_CLPS711X
+	depends on ARM && ARCH_CLPS711X && TTY
 	select SERIAL_CORE
 	help
 	  ::: To be written :::
@@ -179,7 +179,7 @@ config SERIAL_CLPS711X_CONSOLE
 
 config SERIAL_SAMSUNG
 	tristate "Samsung SoC serial support"
-	depends on ARM && PLAT_SAMSUNG
+	depends on ARM && PLAT_SAMSUNG && TTY
 	select SERIAL_CORE
 	help
 	  Support for the on-chip UARTs on the Samsung S3C24XX series CPUs,
@@ -189,14 +189,14 @@ config SERIAL_SAMSUNG
 
 config SERIAL_SAMSUNG_UARTS_4
 	bool
-	depends on ARM && PLAT_SAMSUNG
+	depends on ARM && PLAT_SAMSUNG && TTY
 	default y if !(CPU_S3C2410 || SERIAL_S3C2412 || CPU_S3C2440 || CPU_S3C2442)
 	help
 	  Internal node for the common case of 4 Samsung compatible UARTs
 
 config SERIAL_SAMSUNG_UARTS
 	int
-	depends on ARM && PLAT_SAMSUNG
+	depends on ARM && PLAT_SAMSUNG && TTY
 	default 6 if ARCH_S5P6450
 	default 4 if SERIAL_SAMSUNG_UARTS_4 || CPU_S3C2416
 	default 3
@@ -230,7 +230,7 @@ config SERIAL_SAMSUNG_CONSOLE
 
 config SERIAL_SIRFSOC
         tristate "SiRF SoC Platform Serial port support"
-        depends on ARM && ARCH_PRIMA2
+        depends on ARM && ARCH_PRIMA2 && TTY
         select SERIAL_CORE
         help
           Support for the on-chip UART on the CSR SiRFprimaII series,
@@ -252,21 +252,21 @@ config SERIAL_SIRFSOC_CONSOLE
 
 config SERIAL_MAX3100
 	tristate "MAX3100 support"
-	depends on SPI
+	depends on SPI && TTY
 	select SERIAL_CORE
 	help
 	  MAX3100 chip support
 
 config SERIAL_MAX3107
 	tristate "MAX3107 support"
-	depends on SPI
+	depends on SPI && TTY
 	select SERIAL_CORE
 	help
 	  MAX3107 chip support
 
 config SERIAL_DZ
 	bool "DECstation DZ serial driver"
-	depends on MACH_DECSTATION && 32BIT
+	depends on MACH_DECSTATION && 32BIT && TTY
 	select SERIAL_CORE
 	default y
 	---help---
@@ -291,7 +291,7 @@ config SERIAL_DZ_CONSOLE
 
 config SERIAL_ZS
 	tristate "DECstation Z85C30 serial support"
-	depends on MACH_DECSTATION
+	depends on MACH_DECSTATION && TTY
 	select SERIAL_CORE
 	default y
 	---help---
@@ -321,7 +321,7 @@ config SERIAL_ZS_CONSOLE
 
 config SERIAL_21285
 	tristate "DC21285 serial port support"
-	depends on ARM && FOOTBRIDGE
+	depends on ARM && FOOTBRIDGE && TTY
 	select SERIAL_CORE
 	help
 	  If you have a machine based on a 21285 (Footbridge) StrongARM(R)/
@@ -345,7 +345,7 @@ config SERIAL_21285_CONSOLE
 
 config SERIAL_MPSC
 	bool "Marvell MPSC serial port support"
-	depends on PPC32 && MV64X60
+	depends on PPC32 && MV64X60 && TTY
 	select SERIAL_CORE
 	help
 	  Say Y here if you want to use the Marvell MPSC serial controller.
@@ -359,7 +359,7 @@ config SERIAL_MPSC_CONSOLE
 
 config SERIAL_PXA
 	bool "PXA serial port support"
-	depends on ARCH_PXA || ARCH_MMP
+	depends on (ARCH_PXA || ARCH_MMP) && TTY
 	select SERIAL_CORE
 	help
 	  If you have a machine based on an Intel XScale PXA2xx CPU you
@@ -382,7 +382,7 @@ config SERIAL_PXA_CONSOLE
 
 config SERIAL_SA1100
 	bool "SA1100 serial port support"
-	depends on ARM && ARCH_SA1100
+	depends on (ARM && ARCH_SA1100) && TTY
 	select SERIAL_CORE
 	help
 	  If you have a machine based on a SA1100/SA1110 StrongARM(R) CPU you
@@ -407,7 +407,7 @@ config SERIAL_SA1100_CONSOLE
 
 config SERIAL_MRST_MAX3110
 	tristate "SPI UART driver for Max3110"
-	depends on SPI_DW_PCI
+	depends on SPI_DW_PCI && TTY
 	select SERIAL_CORE
 	select SERIAL_CORE_CONSOLE
 	help
@@ -417,7 +417,7 @@ config SERIAL_MRST_MAX3110
 
 config SERIAL_MFD_HSU
 	tristate "Medfield High Speed UART support"
-	depends on PCI
+	depends on PCI && TTY
 	select SERIAL_CORE
 
 config SERIAL_MFD_HSU_CONSOLE
@@ -427,7 +427,7 @@ config SERIAL_MFD_HSU_CONSOLE
 
 config SERIAL_BFIN
 	tristate "Blackfin serial port support"
-	depends on BLACKFIN
+	depends on BLACKFIN && TTY
 	select SERIAL_CORE
 	select SERIAL_BFIN_UART0 if (BF531 || BF532 || BF533 || BF561)
 	help
@@ -513,7 +513,7 @@ config BFIN_UART3_CTSRTS
 
 config SERIAL_IMX
 	bool "IMX serial port support"
-	depends on ARCH_MXC
+	depends on ARCH_MXC && TTY
 	select SERIAL_CORE
 	select RATIONAL
 	help
@@ -537,7 +537,7 @@ config SERIAL_IMX_CONSOLE
 
 config SERIAL_UARTLITE
 	tristate "Xilinx uartlite serial port support"
-	depends on PPC32 || MICROBLAZE || MFD_TIMBERDALE
+	depends on (PPC32 || MICROBLAZE || MFD_TIMBERDALE) && TTY
 	select SERIAL_CORE
 	help
 	  Say Y here if you want to use the Xilinx uartlite serial controller.
@@ -556,14 +556,14 @@ config SERIAL_UARTLITE_CONSOLE
 
 config SERIAL_SUNCORE
 	bool
-	depends on SPARC
+	depends on SPARC && TTY
 	select SERIAL_CORE
 	select SERIAL_CORE_CONSOLE
 	default y
 
 config SERIAL_SUNZILOG
 	tristate "Sun Zilog8530 serial support"
-	depends on SPARC
+	depends on SPARC && TTY
 	help
 	  This driver supports the Zilog8530 serial ports found on many Sparc
 	  systems.  Say Y or M if you want to be able to these serial ports.
@@ -578,7 +578,7 @@ config SERIAL_SUNZILOG_CONSOLE
 
 config SERIAL_SUNSU
 	tristate "Sun SU serial support"
-	depends on SPARC && PCI
+	depends on SPARC && PCI && TTY
 	help
 	  This driver supports the 8250 serial ports that run the keyboard and
 	  mouse on (PCI) UltraSPARC systems.  Say Y or M if you want to be able
@@ -594,7 +594,7 @@ config SERIAL_SUNSU_CONSOLE
 
 config SERIAL_MUX
 	tristate "Serial MUX support"
-	depends on GSC
+	depends on GSC && TTY
 	select SERIAL_CORE
 	default y
 	---help---
@@ -635,7 +635,7 @@ config PDC_CONSOLE
 
 config SERIAL_SUNSAB
 	tristate "Sun Siemens SAB82532 serial support"
-	depends on SPARC && PCI
+	depends on SPARC && PCI && TTY
 	help
 	  This driver supports the Siemens SAB82532 DUSCC serial ports on newer
 	  (PCI) UltraSPARC systems.  Say Y or M if you want to be able to these
@@ -651,14 +651,14 @@ config SERIAL_SUNSAB_CONSOLE
 
 config SERIAL_SUNHV
 	bool "Sun4v Hypervisor Console support"
-	depends on SPARC64
+	depends on SPARC64 && TTY
 	help
 	  This driver supports the console device found on SUN4V Sparc
 	  systems.  Say Y if you want to be able to use this device.
 
 config SERIAL_IP22_ZILOG
 	tristate "SGI Zilog8530 serial support"
-	depends on SGI_HAS_ZILOG
+	depends on SGI_HAS_ZILOG && TTY
 	select SERIAL_CORE
 	help
 	  This driver supports the Zilog8530 serial ports found on SGI
@@ -671,7 +671,7 @@ config SERIAL_IP22_ZILOG_CONSOLE
 
 config SERIAL_SH_SCI
 	tristate "SuperH SCI(F) serial port support"
-	depends on HAVE_CLK && (SUPERH || ARCH_SHMOBILE)
+	depends on HAVE_CLK && (SUPERH || ARCH_SHMOBILE) && TTY
 	select SERIAL_CORE
 
 config SERIAL_SH_SCI_NR_UARTS
@@ -690,7 +690,7 @@ config SERIAL_SH_SCI_DMA
 
 config SERIAL_PNX8XXX
 	bool "Enable PNX8XXX SoCs' UART Support"
-	depends on MIPS && (SOC_PNX8550 || SOC_PNX833X)
+	depends on MIPS && (SOC_PNX8550 || SOC_PNX833X) && TTY
 	select SERIAL_CORE
 	help
 	  If you have a MIPS-based Philips SoC such as PNX8550 or PNX8330
@@ -715,7 +715,7 @@ config CONSOLE_POLL
 
 config SERIAL_68328
 	bool "68328 serial support"
-	depends on M68328 || M68EZ328 || M68VZ328
+	depends on (M68328 || M68EZ328 || M68VZ328) && TTY
 	help
 	  This driver supports the built-in serial port of the Motorola 68328
 	  (standard, EZ and VZ varieties).
@@ -726,7 +726,7 @@ config SERIAL_68328_RTS_CTS
 
 config SERIAL_MCF
 	bool "Coldfire serial support"
-	depends on COLDFIRE
+	depends on COLDFIRE && TTY
 	select SERIAL_CORE
 	help
 	  This serial driver supports the Freescale Coldfire serial ports.
@@ -749,7 +749,7 @@ config SERIAL_MCF_CONSOLE
 
 config SERIAL_PMACZILOG
 	tristate "Mac or PowerMac z85c30 ESCC support"
-	depends on (M68K && MAC) || (PPC_OF && PPC_PMAC)
+	depends on ((M68K && MAC) || (PPC_OF && PPC_PMAC)) && TTY
 	select SERIAL_CORE
 	help
 	  This driver supports the Zilog z85C30 serial ports found on
@@ -792,7 +792,7 @@ config SERIAL_PMACZILOG_CONSOLE
 
 config SERIAL_CPM
 	tristate "CPM SCC/SMC serial port support"
-	depends on CPM2 || 8xx
+	depends on (CPM2 || 8xx) && TTY
 	select SERIAL_CORE
 	help
 	  This driver supports the SCC and SMC serial ports on Motorola 
@@ -816,7 +816,7 @@ config SERIAL_CPM_CONSOLE
 
 config SERIAL_SGI_L1_CONSOLE
 	bool "SGI Altix L1 serial console support"
-	depends on IA64_GENERIC || IA64_SGI_SN2
+	depends on (IA64_GENERIC || IA64_SGI_SN2) && TTY
 	select SERIAL_CORE
 	select SERIAL_CORE_CONSOLE
 	help
@@ -826,7 +826,7 @@ config SERIAL_SGI_L1_CONSOLE
 
 config SERIAL_MPC52xx
 	tristate "Freescale MPC52xx/MPC512x family PSC serial support"
-	depends on PPC_MPC52xx || PPC_MPC512x
+	depends on (PPC_MPC52xx || PPC_MPC512x) && TTY
 	select SERIAL_CORE
 	help
 	  This driver supports MPC52xx and MPC512x PSC serial ports. If you would
@@ -853,7 +853,7 @@ config SERIAL_MPC52xx_CONSOLE_BAUD
 
 config SERIAL_ICOM
 	tristate "IBM Multiport Serial Adapter"
-	depends on PCI && (PPC_ISERIES || PPC_PSERIES)
+	depends on PCI && (PPC_ISERIES || PPC_PSERIES) && TTY
 	select SERIAL_CORE
 	select FW_LOADER
 	help
@@ -866,7 +866,7 @@ config SERIAL_ICOM
 
 config SERIAL_M32R_SIO
 	bool "M32R SIO I/F"
-	depends on M32R
+	depends on M32R && TTY
 	default y
 	select SERIAL_CORE
 	help
@@ -895,7 +895,7 @@ config SERIAL_M32R_PLDSIO
 
 config SERIAL_TXX9
 	bool "TMPTX39XX/49XX SIO support"
-	depends on HAS_TXX9_SERIAL
+	depends on HAS_TXX9_SERIAL && TTY
 	select SERIAL_CORE
 	default y
 
@@ -918,7 +918,7 @@ config SERIAL_TXX9_STDSERIAL
 
 config SERIAL_VR41XX
 	tristate "NEC VR4100 series Serial Interface Unit support"
-	depends on CPU_VR41XX
+	depends on CPU_VR41XX && TTY
 	select SERIAL_CORE
 	help
 	  If you have a NEC VR4100 series processor and you want to use
@@ -935,7 +935,7 @@ config SERIAL_VR41XX_CONSOLE
 
 config SERIAL_JSM
 	tristate "Digi International NEO PCI Support"
-	depends on PCI
+	depends on PCI && TTY
 	select SERIAL_CORE
 	help
 	  This is a driver for Digi International's Neo series
@@ -951,7 +951,7 @@ config SERIAL_JSM
 
 config SERIAL_SGI_IOC4
 	tristate "SGI IOC4 controller serial support"
-	depends on (IA64_GENERIC || IA64_SGI_SN2) && SGI_IOC4
+	depends on (IA64_GENERIC || IA64_SGI_SN2) && SGI_IOC4 && TTY
 	select SERIAL_CORE
 	help
 		If you have an SGI Altix with an IOC4 based Base IO card
@@ -960,7 +960,7 @@ config SERIAL_SGI_IOC4
 
 config SERIAL_SGI_IOC3
 	tristate "SGI Altix IOC3 serial support"
-	depends on (IA64_GENERIC || IA64_SGI_SN2) && SGI_IOC3
+	depends on (IA64_GENERIC || IA64_SGI_SN2) && SGI_IOC3 && TTY
 	select SERIAL_CORE
 	help
 	  If you have an SGI Altix with an IOC3 serial card,
@@ -968,7 +968,7 @@ config SERIAL_SGI_IOC3
 
 config SERIAL_MSM
 	bool "MSM on-chip serial port support"
-	depends on ARM && ARCH_MSM
+	depends on ARM && ARCH_MSM && TTY
 	select SERIAL_CORE
 
 config SERIAL_MSM_CONSOLE
@@ -990,7 +990,7 @@ config SERIAL_MSM_HS
 
 config SERIAL_VT8500
 	bool "VIA VT8500 on-chip serial port support"
-	depends on ARM && ARCH_VT8500
+	depends on ARM && ARCH_VT8500 && TTY
 	select SERIAL_CORE
 
 config SERIAL_VT8500_CONSOLE
@@ -1000,7 +1000,7 @@ config SERIAL_VT8500_CONSOLE
 
 config SERIAL_NETX
 	tristate "NetX serial port support"
-	depends on ARM && ARCH_NETX
+	depends on (ARM && ARCH_NETX) && TTY
 	select SERIAL_CORE
 	help
 	  If you have a machine based on a Hilscher NetX SoC you
@@ -1029,7 +1029,7 @@ config SERIAL_OF_PLATFORM
 
 config SERIAL_OMAP
 	tristate "OMAP serial port support"
-	depends on ARCH_OMAP2PLUS
+	depends on ARCH_OMAP2PLUS && TTY
 	select SERIAL_CORE
 	help
 	  If you have a machine based on an Texas Instruments OMAP CPU you
@@ -1056,7 +1056,7 @@ config SERIAL_OMAP_CONSOLE
 
 config SERIAL_OF_PLATFORM_NWPSERIAL
 	tristate "NWP serial port driver"
-	depends on PPC_OF && PPC_DCR
+	depends on PPC_OF && PPC_DCR && TTY
 	select SERIAL_OF_PLATFORM
 	select SERIAL_CORE_CONSOLE
 	select SERIAL_CORE
@@ -1073,7 +1073,7 @@ config SERIAL_OF_PLATFORM_NWPSERIAL_CONSOLE
 
 config SERIAL_LANTIQ
 	bool "Lantiq serial driver"
-	depends on LANTIQ
+	depends on LANTIQ && TTY
 	select SERIAL_CORE
 	select SERIAL_CORE_CONSOLE
 	help
@@ -1081,7 +1081,7 @@ config SERIAL_LANTIQ
 
 config SERIAL_QE
 	tristate "Freescale QUICC Engine serial port support"
-	depends on QUICC_ENGINE
+	depends on QUICC_ENGINE && TTY
 	select SERIAL_CORE
 	select FW_LOADER
 	default n
@@ -1091,7 +1091,7 @@ config SERIAL_QE
 
 config SERIAL_SC26XX
 	tristate "SC2681/SC2692 serial port support"
-	depends on SNI_RM
+	depends on SNI_RM && TTY
 	select SERIAL_CORE
 	help
 	  This is a driver for the onboard serial ports of
@@ -1106,7 +1106,7 @@ config SERIAL_SC26XX_CONSOLE
 
 config SERIAL_BFIN_SPORT
 	tristate "Blackfin SPORT emulate UART"
-	depends on BLACKFIN
+	depends on BLACKFIN && TTY
 	select SERIAL_CORE
 	help
 	  Enable SPORT emulate UART on Blackfin series.
@@ -1169,14 +1169,15 @@ config SERIAL_BFIN_SPORT3_UART_CTSRTS
 
 config SERIAL_TIMBERDALE
 	tristate "Support for timberdale UART"
+	depends on TTY
 	select SERIAL_CORE
 	---help---
 	Add support for UART controller on timberdale.
 
 config SERIAL_BCM63XX
 	tristate "bcm63xx serial port support"
+	depends on BCM63XX && TTY
 	select SERIAL_CORE
-	depends on BCM63XX
 	help
 	  If you have a bcm63xx CPU, you can enable its onboard
 	  serial port by enabling this options.
@@ -1194,7 +1195,7 @@ config SERIAL_BCM63XX_CONSOLE
 
 config SERIAL_GRLIB_GAISLER_APBUART
 	tristate "GRLIB APBUART serial support"
-	depends on OF && SPARC
+	depends on OF && SPARC && TTY
 	select SERIAL_CORE
 	---help---
 	Add support for the GRLIB APBUART serial port.
@@ -1208,6 +1209,7 @@ config SERIAL_GRLIB_GAISLER_APBUART_CONSOLE
 
 config SERIAL_ALTERA_JTAGUART
 	tristate "Altera JTAG UART support"
+	depends on TTY
 	select SERIAL_CORE
 	help
 	  This driver supports the Altera JTAG UART port.
@@ -1229,6 +1231,7 @@ config SERIAL_ALTERA_JTAGUART_CONSOLE_BYPASS
 
 config SERIAL_ALTERA_UART
 	tristate "Altera UART support"
+	depends on TTY
 	select SERIAL_CORE
 	help
 	  This driver supports the Altera softcore UART port.
@@ -1260,13 +1263,13 @@ config SERIAL_ALTERA_UART_CONSOLE
 
 config SERIAL_IFX6X60
         tristate "SPI protocol driver for Infineon 6x60 modem (EXPERIMENTAL)"
-	depends on GPIOLIB && SPI && EXPERIMENTAL
+	depends on GPIOLIB && SPI && EXPERIMENTAL && TTY
 	help
 	  Support for the IFX6x60 modem devices on Intel MID platforms.
 
 config SERIAL_PCH_UART
 	tristate "Intel EG20T PCH/LAPIS Semicon IOH(ML7213/ML7223/ML7831) UART"
-	depends on PCI
+	depends on PCI && TTY
 	select SERIAL_CORE
 	help
 	  This driver is for PCH(Platform controller Hub) UART of Intel EG20T
@@ -1291,15 +1294,15 @@ config SERIAL_PCH_UART_CONSOLE
 
 config SERIAL_MSM_SMD
 	bool "Enable tty device interface for some SMD ports"
+	depends on MSM_SMD && TTY
 	default n
-	depends on MSM_SMD
 	help
 	  Enables userspace clients to read and write to some streaming SMD
 	  ports via tty device interface for MSM chipset.
 
 config SERIAL_MXS_AUART
-	depends on ARCH_MXS
 	tristate "MXS AUART support"
+	depends on ARCH_MXS && TTY
 	select SERIAL_CORE
 	help
 	  This driver supports the MXS Application UART (AUART) port.
@@ -1313,6 +1316,7 @@ config SERIAL_MXS_AUART_CONSOLE
 
 config SERIAL_XILINX_PS_UART
 	tristate "Xilinx PS UART support"
+	depends on TTY
 	select SERIAL_CORE
 	help
 	  This driver supports the Xilinx PS UART port.
@@ -1326,7 +1330,7 @@ config SERIAL_XILINX_PS_UART_CONSOLE
 
 config SERIAL_AR933X
 	bool "AR933X serial port support"
-	depends on SOC_AR933X
+	depends on SOC_AR933X && TTY
 	select SERIAL_CORE
 	help
 	  If you have an Atheros AR933X SOC based board and want to use the
diff --git a/drivers/usb/class/Kconfig b/drivers/usb/class/Kconfig
index 2519e32..316aac8 100644
--- a/drivers/usb/class/Kconfig
+++ b/drivers/usb/class/Kconfig
@@ -6,7 +6,7 @@ comment "USB Device Class drivers"
 
 config USB_ACM
 	tristate "USB Modem (CDC ACM) support"
-	depends on USB
+	depends on USB && TTY
 	---help---
 	  This driver supports USB modems and ISDN adapters which support the
 	  Communication Device Class Abstract Control Model interface.
diff --git a/drivers/usb/serial/Kconfig b/drivers/usb/serial/Kconfig
index 677f577..4a8e075 100644
--- a/drivers/usb/serial/Kconfig
+++ b/drivers/usb/serial/Kconfig
@@ -4,7 +4,7 @@
 
 menuconfig USB_SERIAL
 	tristate "USB Serial Converter support"
-	depends on USB
+	depends on USB && TTY
 	---help---
 	  Say Y here if you have a USB device that provides normal serial
 	  ports, or acts like a serial device, and you want to connect it to
diff --git a/fs/proc/Makefile b/fs/proc/Makefile
index c1c7293..a634e15 100644
--- a/fs/proc/Makefile
+++ b/fs/proc/Makefile
@@ -7,8 +7,8 @@ obj-y   += proc.o
 proc-y			:= nommu.o task_nommu.o
 proc-$(CONFIG_MMU)	:= mmu.o task_mmu.o
 
-proc-y       += inode.o root.o base.o generic.o array.o \
-		proc_tty.o
+proc-y       += inode.o root.o base.o generic.o array.o
+proc-$(CONFIG_TTY)	+= proc_tty.o
 proc-y	+= cmdline.o
 proc-y	+= consoles.o
 proc-y	+= cpuinfo.o
diff --git a/include/linux/console.h b/include/linux/console.h
index 7201ce4..84efbf7 100644
--- a/include/linux/console.h
+++ b/include/linux/console.h
@@ -151,7 +151,12 @@ extern int is_console_locked(void);
 extern int braille_register_console(struct console *, int index,
 		char *console_options, char *braille_options);
 extern int braille_unregister_console(struct console *);
+#ifdef CONFIG_TTY
 extern void console_sysfs_notify(void);
+#else
+static inline void console_sysfs_notify(void)
+{ }
+#endif
 extern bool console_suspend_enabled;
 
 /* Suspend and resume console messages over PM events */
diff --git a/include/linux/proc_fs.h b/include/linux/proc_fs.h
index 85c5073..d82e473 100644
--- a/include/linux/proc_fs.h
+++ b/include/linux/proc_fs.h
@@ -123,7 +123,12 @@ extern void pid_ns_release_proc(struct pid_namespace *ns);
  * proc_tty.c
  */
 struct tty_driver;
+#ifdef CONFIG_TTY
 extern void proc_tty_init(void);
+#else
+static inline void proc_tty_init(void)
+{ }
+#endif
 extern void proc_tty_register_driver(struct tty_driver *driver);
 extern void proc_tty_unregister_driver(struct tty_driver *driver);
 
diff --git a/include/linux/tty.h b/include/linux/tty.h
index 5dbb3cb..c1406e3 100644
--- a/include/linux/tty.h
+++ b/include/linux/tty.h
@@ -377,7 +377,12 @@ extern void tty_write_flush(struct tty_struct *);
 
 extern struct ktermios tty_std_termios;
 
+#ifdef CONFIG_TTY
 extern void console_init(void);
+#else
+static inline void console_init(void)
+{ }
+#endif
 extern int vcs_init(void);
 
 extern struct class *tty_class;
@@ -397,7 +402,12 @@ static inline struct tty_struct *tty_kref_get(struct tty_struct *tty)
 		kref_get(&tty->kref);
 	return tty;
 }
+#ifdef CONFIG_TTY
 extern void tty_kref_put(struct tty_struct *tty);
+#else
+static inline void tty_kref_put(struct tty_struct *tty)
+{ }
+#endif
 
 extern int tty_paranoia_check(struct tty_struct *tty, struct inode *inode,
 			      const char *routine);
@@ -426,18 +436,33 @@ extern void tty_driver_remove_tty(struct tty_driver *driver,
 extern void tty_shutdown(struct tty_struct *tty);
 extern void tty_free_termios(struct tty_struct *tty);
 extern int is_current_pgrp_orphaned(void);
+#ifdef CONFIG_TTY
 extern struct pid *tty_get_pgrp(struct tty_struct *tty);
+#else
+static inline struct pid *tty_get_pgrp(struct tty_struct *tty)
+{ return NULL; }
+#endif
 extern int is_ignored(int sig);
 extern int tty_signal(int sig, struct tty_struct *tty);
 extern void tty_hangup(struct tty_struct *tty);
 extern void tty_vhangup(struct tty_struct *tty);
 extern void tty_vhangup_locked(struct tty_struct *tty);
+#ifdef CONFIG_TTY
 extern void tty_vhangup_self(void);
+#else
+static inline void tty_vhangup_self(void)
+{ }
+#endif
 extern void tty_unhangup(struct file *filp);
 extern int tty_hung_up_p(struct file *filp);
 extern void do_SAK(struct tty_struct *tty);
 extern void __do_SAK(struct tty_struct *tty);
+#ifdef CONFIG_TTY
 extern void disassociate_ctty(int priv);
+#else
+static inline void disassociate_ctty(int priv)
+{ }
+#endif
 extern void no_tty(void);
 extern void tty_flip_buffer_push(struct tty_struct *tty);
 extern void tty_flush_to_ldisc(struct tty_struct *tty);
@@ -468,9 +493,18 @@ extern long tty_ioctl(struct file *file, unsigned int cmd, unsigned long arg);
 extern int tty_mode_ioctl(struct tty_struct *tty, struct file *file,
 			unsigned int cmd, unsigned long arg);
 extern int tty_perform_flush(struct tty_struct *tty, unsigned long arg);
+#ifdef CONFIG_TTY
 extern dev_t tty_devnum(struct tty_struct *tty);
 extern void proc_clear_tty(struct task_struct *p);
 extern struct tty_struct *get_current_tty(void);
+#else
+static inline dev_t tty_devnum(struct tty_struct *tty)
+{ return 0; }
+static inline void proc_clear_tty(struct task_struct *p)
+{ }
+static inline struct tty_struct *get_current_tty(void)
+{ return NULL; }
+#endif
 extern void tty_default_fops(struct file_operations *fops);
 extern struct tty_struct *alloc_tty_struct(void);
 extern int tty_alloc_file(struct file *file);
@@ -578,7 +612,12 @@ static inline int tty_audit_push_task(struct task_struct *tsk,
 #endif
 
 /* tty_io.c */
+#ifdef CONFIG_TTY
 extern int __init tty_init(void);
+#else
+static inline int __init tty_init(void)
+{ return 0; }
+#endif
 
 /* tty_ioctl.c */
 extern int n_tty_ioctl_helper(struct tty_struct *tty, struct file *file,
diff --git a/lib/Kconfig.kgdb b/lib/Kconfig.kgdb
index 43cb93f..30894fa 100644
--- a/lib/Kconfig.kgdb
+++ b/lib/Kconfig.kgdb
@@ -22,6 +22,7 @@ config KGDB_SERIAL_CONSOLE
 	tristate "KGDB: use kgdb over the serial console"
 	select CONSOLE_POLL
 	select MAGIC_SYSRQ
+	depends on TTY
 	default y
 	help
 	  Share a serial console with kgdb. Sysrq-g must be used
diff --git a/net/bluetooth/rfcomm/Kconfig b/net/bluetooth/rfcomm/Kconfig
index 22e718b..18d352e 100644
--- a/net/bluetooth/rfcomm/Kconfig
+++ b/net/bluetooth/rfcomm/Kconfig
@@ -12,6 +12,7 @@ config BT_RFCOMM
 config BT_RFCOMM_TTY
 	bool "RFCOMM TTY support"
 	depends on BT_RFCOMM
+	depends on TTY
 	help
 	  This option enables TTY emulation support for RFCOMM channels.
 
diff --git a/net/irda/ircomm/Kconfig b/net/irda/ircomm/Kconfig
index 2d4c6b4..19492c1 100644
--- a/net/irda/ircomm/Kconfig
+++ b/net/irda/ircomm/Kconfig
@@ -1,6 +1,6 @@
 config IRCOMM
 	tristate "IrCOMM protocol"
-	depends on IRDA
+	depends on IRDA && TTY
 	help
 	  Say Y here if you want to build support for the IrCOMM protocol.
 	  To compile it as modules, choose M here: the modules will be
diff --git a/sound/soc/codecs/Kconfig b/sound/soc/codecs/Kconfig
index 7c205e7..125587a1 100644
--- a/sound/soc/codecs/Kconfig
+++ b/sound/soc/codecs/Kconfig
@@ -32,7 +32,7 @@ config SND_SOC_ALL_CODECS
 	select SND_SOC_CS42L73 if I2C
 	select SND_SOC_CS4270 if I2C
 	select SND_SOC_CS4271 if SND_SOC_I2C_AND_SPI
-	select SND_SOC_CX20442
+	select SND_SOC_CX20442 if TTY
 	select SND_SOC_DA7210 if I2C
 	select SND_SOC_DFBMCS320
 	select SND_SOC_JZ4740_CODEC
@@ -199,6 +199,7 @@ config SND_SOC_CS4271
 
 config SND_SOC_CX20442
 	tristate
+	depends on TTY
 
 config SND_SOC_JZ4740_CODEC
 	tristate
-- 
1.7.9.5


^ permalink raw reply related

* [PATCH] tty: serial: altera_uart: Use platform_{get,set}_drvdata
From: Tobias Klauser @ 2012-08-20 13:56 UTC (permalink / raw)
  To: Alan Cox, Greg Kroah-Hartman; +Cc: linux-serial

Use the wrapper functions, so we can directly pass a struct
platfrom_device.

Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
---
 drivers/tty/serial/altera_uart.c |    6 +++---
 1 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/drivers/tty/serial/altera_uart.c b/drivers/tty/serial/altera_uart.c
index 1f03309..15d80b9 100644
--- a/drivers/tty/serial/altera_uart.c
+++ b/drivers/tty/serial/altera_uart.c
@@ -591,7 +591,7 @@ static int __devinit altera_uart_probe(struct platform_device *pdev)
 	port->ops = &altera_uart_ops;
 	port->flags = UPF_BOOT_AUTOCONF;
 
-	dev_set_drvdata(&pdev->dev, port);
+	platform_set_drvdata(pdev, port);
 
 	uart_add_one_port(&altera_uart_driver, port);
 
@@ -600,11 +600,11 @@ static int __devinit altera_uart_probe(struct platform_device *pdev)
 
 static int __devexit altera_uart_remove(struct platform_device *pdev)
 {
-	struct uart_port *port = dev_get_drvdata(&pdev->dev);
+	struct uart_port *port = platform_get_drvdata(pdev);
 
 	if (port) {
 		uart_remove_one_port(&altera_uart_driver, port);
-		dev_set_drvdata(&pdev->dev, NULL);
+		platform_set_drvdata(pdev, NULL);
 		port->mapbase = 0;
 	}
 
-- 
1.7.5.4


^ permalink raw reply related

* Re: restart callback not supposed to sleep?
From: Uwe Kleine-König @ 2012-08-20  9:47 UTC (permalink / raw)
  To: Russell King - ARM Linux
  Cc: Lothar Waßmann, linux-serial, linux-arm-kernel
In-Reply-To: <20120820094455.GS18957@n2100.arm.linux.org.uk>

Hello,

On Mon, Aug 20, 2012 at 10:44:55AM +0100, Russell King - ARM Linux wrote:
> On Mon, Aug 20, 2012 at 11:21:45AM +0200, Uwe Kleine-König wrote:
> > Just for the log: The restart works ok.
> 
> Restart with a command or restart with sysrq ?
using sysrq. I get all these messages, but in the end the machine
restarts.

Best regards
Uwe

-- 
Pengutronix e.K.                           | Uwe Kleine-König            |
Industrial Linux Solutions                 | http://www.pengutronix.de/  |
--
To unsubscribe from this list: send the line "unsubscribe linux-serial" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply

* Re: restart callback not supposed to sleep?
From: Russell King - ARM Linux @ 2012-08-20  9:44 UTC (permalink / raw)
  To: Uwe Kleine-König; +Cc: Lothar Waßmann, linux-serial, linux-arm-kernel
In-Reply-To: <20120820092145.GM2232@pengutronix.de>

On Mon, Aug 20, 2012 at 11:21:45AM +0200, Uwe Kleine-König wrote:
> Just for the log: The restart works ok.

Restart with a command or restart with sysrq ?
--
To unsubscribe from this list: send the line "unsubscribe linux-serial" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply

* Re: restart callback not supposed to sleep?
From: Uwe Kleine-König @ 2012-08-20  9:21 UTC (permalink / raw)
  To: Russell King - ARM Linux
  Cc: Lothar Waßmann, linux-serial, linux-arm-kernel
In-Reply-To: <20120820090546.GR18957@n2100.arm.linux.org.uk>

On Mon, Aug 20, 2012 at 10:05:46AM +0100, Russell King - ARM Linux wrote:
> On Mon, Aug 20, 2012 at 10:57:34AM +0200, Lothar Waßmann wrote:
> > Hi,
> > 
> > Uwe Kleine-König writes:
> > > Hello,
> > > 
> > > while triggering a reboot via sysrq on an ARM machine I saw a "BUG:
> > > sleeping function called from invalid context" message (details below).
> > > The reason is that the sysrq handler is calling the restart hook in irq
> > > context. So what should be done about that? The obvious possiblities
> > > are:
> > > 
> > >  a) ignore the problem as it won't result in problems (and maybe somehow
> > >     silence the warnign); or
> > >  b) make the restart hook atomic; or
> > >  c) assert sysrq not calling the hook in atomic mode
> > > 
> > > What do you think?
> > > 
> > This has been discussed earlier (with your participation) with 'a)'
> > being the conclusion.
> > http://lists.infradead.org/pipermail/linux-arm-kernel/2010-December/033877.html
> 
> Except if you look at the backtrace, it seems that it fails to restart.
> There are two attempts there at making it restart so the first could
> not have succeeded.
Just for the log: The restart works ok.

Best regards
Uwe

-- 
Pengutronix e.K.                           | Uwe Kleine-König            |
Industrial Linux Solutions                 | http://www.pengutronix.de/  |
--
To unsubscribe from this list: send the line "unsubscribe linux-serial" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply

* Re: restart callback not supposed to sleep?
From: Russell King - ARM Linux @ 2012-08-20  9:05 UTC (permalink / raw)
  To: Lothar Waßmann; +Cc: Uwe Kleine-König, linux-serial, linux-arm-kernel
In-Reply-To: <20529.64510.403690.325993@ipc1.ka-ro>

On Mon, Aug 20, 2012 at 10:57:34AM +0200, Lothar Waßmann wrote:
> Hi,
> 
> Uwe Kleine-König writes:
> > Hello,
> > 
> > while triggering a reboot via sysrq on an ARM machine I saw a "BUG:
> > sleeping function called from invalid context" message (details below).
> > The reason is that the sysrq handler is calling the restart hook in irq
> > context. So what should be done about that? The obvious possiblities
> > are:
> > 
> >  a) ignore the problem as it won't result in problems (and maybe somehow
> >     silence the warnign); or
> >  b) make the restart hook atomic; or
> >  c) assert sysrq not calling the hook in atomic mode
> > 
> > What do you think?
> > 
> This has been discussed earlier (with your participation) with 'a)'
> being the conclusion.
> http://lists.infradead.org/pipermail/linux-arm-kernel/2010-December/033877.html

Except if you look at the backtrace, it seems that it fails to restart.
There are two attempts there at making it restart so the first could
not have succeeded.
--
To unsubscribe from this list: send the line "unsubscribe linux-serial" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply

* Re: restart callback not supposed to sleep?
From: Lothar Waßmann @ 2012-08-20  8:57 UTC (permalink / raw)
  To: Uwe Kleine-König; +Cc: linux-arm-kernel, linux-serial
In-Reply-To: <20120820082423.GJ2232@pengutronix.de>

Hi,

Uwe Kleine-König writes:
> Hello,
> 
> while triggering a reboot via sysrq on an ARM machine I saw a "BUG:
> sleeping function called from invalid context" message (details below).
> The reason is that the sysrq handler is calling the restart hook in irq
> context. So what should be done about that? The obvious possiblities
> are:
> 
>  a) ignore the problem as it won't result in problems (and maybe somehow
>     silence the warnign); or
>  b) make the restart hook atomic; or
>  c) assert sysrq not calling the hook in atomic mode
> 
> What do you think?
> 
This has been discussed earlier (with your participation) with 'a)'
being the conclusion.
http://lists.infradead.org/pipermail/linux-arm-kernel/2010-December/033877.html


Lothar Waßmann
-- 
___________________________________________________________

Ka-Ro electronics GmbH | Pascalstraße 22 | D - 52076 Aachen
Phone: +49 2408 1402-0 | Fax: +49 2408 1402-10
Geschäftsführer: Matthias Kaussen
Handelsregistereintrag: Amtsgericht Aachen, HRB 4996

www.karo-electronics.de | info@karo-electronics.de
___________________________________________________________
--
To unsubscribe from this list: send the line "unsubscribe linux-serial" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply

* Re: restart callback not supposed to sleep?
From: Russell King - ARM Linux @ 2012-08-20  8:57 UTC (permalink / raw)
  To: Uwe Kleine-König; +Cc: linux-arm-kernel, linux-serial
In-Reply-To: <20120820082423.GJ2232@pengutronix.de>

On Mon, Aug 20, 2012 at 10:24:23AM +0200, Uwe Kleine-König wrote:
> while triggering a reboot via sysrq on an ARM machine I saw a "BUG:
> sleeping function called from invalid context" message (details below).
> The reason is that the sysrq handler is calling the restart hook in irq
> context.

Correct - it's been the case for years that the restart hook is called
from atomic contexts (it's not only sysrq, but also softdog as well which
does this, as well as any system panic with panic timeout/panic-on-oops
enabled.)

You need to fix your platform restart hook.
--
To unsubscribe from this list: send the line "unsubscribe linux-serial" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply

* restart callback not supposed to sleep?
From: Uwe Kleine-König @ 2012-08-20  8:24 UTC (permalink / raw)
  To: linux-arm-kernel, linux-serial

Hello,

while triggering a reboot via sysrq on an ARM machine I saw a "BUG:
sleeping function called from invalid context" message (details below).
The reason is that the sysrq handler is calling the restart hook in irq
context. So what should be done about that? The obvious possiblities
are:

 a) ignore the problem as it won't result in problems (and maybe somehow
    silence the warnign); or
 b) make the restart hook atomic; or
 c) assert sysrq not calling the hook in atomic mode

What do you think?

Best regards
Uwe

[  357.957733] SysRq : Resetting
[  357.960772] BUG: sleeping function called from invalid context at kernel/mutex.c:269
[  357.973053] in_atomic(): 1, irqs_disabled(): 0, pid: 0, name: swapper
[  357.979508] 2 locks held by swapper/0:
[  357.983268]  #0:  (&port_lock_key){-.-...}, at: [<801df9ec>] imx_rxint+0x24/0x2a4
[  357.990887]  #1:  (sysrq_key_table_lock){-.....}, at: [<801cda7c>] __handle_sysrq+0x1c/0x188
[  357.999442] Backtrace: 
[  358.001962] [<80010e9c>] (dump_backtrace+0x0/0x10c) from [<80365da0>] (dump_stack+0x18/0x1c)
[  358.010415]  r6:0000166c r5:804dbc00 r4:804ce000 r3:60000113
[  358.016200] [<80365d88>] (dump_stack+0x0/0x1c) from [<80040f70>] (__might_sleep+0xe0/0x11c)
[  358.024590] [<80040e90>] (__might_sleep+0x0/0x11c) from [<80369d8c>] (mutex_lock_nested+0x2c/0x2d0)
[  358.033649]  r6:804e90dc r5:80425b9c r4:804fb224
[  358.038372] [<80369d60>] (mutex_lock_nested+0x0/0x2d0) from [<8028ffdc>] (clk_get_sys+0x24/0x110)
[  358.047290] [<8028ffb8>] (clk_get_sys+0x0/0x110) from [<800188c8>] (mxc_restart+0x18/0xb8)
[  358.055588] [<800188b0>] (mxc_restart+0x0/0xb8) from [<8000ed70>] (machine_restart+0x24/0x60)
[  358.064126]  r5:804e4d70 r4:804dab3c
[  358.067863] [<8000ed4c>] (machine_restart+0x0/0x60) from [<8002d554>] (emergency_restart+0x1c/0x20)
[  358.076961]  r5:00000062 r4:804dab3c
[  358.080615] [<8002d538>] (emergency_restart+0x0/0x20) from [<801cd93c>] (sysrq_handle_reboot+0x1c/0x20)
[  358.090073] [<801cd920>] (sysrq_handle_reboot+0x0/0x20) from [<801cdb6c>] (__handle_sysrq+0x10c/0x188)
[  358.099441] [<801cda60>] (__handle_sysrq+0x0/0x188) from [<801cde00>] (handle_sysrq+0x30/0x38)
[  358.108115] [<801cddd0>] (handle_sysrq+0x0/0x38) from [<801dfba8>] (imx_rxint+0x1e0/0x2a4)
[  358.116440] [<801df9c8>] (imx_rxint+0x0/0x2a4) from [<801e0b0c>] (imx_int+0xa0/0xb8)
[  358.124224] [<801e0a6c>] (imx_int+0x0/0xb8) from [<80063f44>] (handle_irq_event_percpu+0x54/0x1bc)
[  358.133226]  r6:00000000 r5:87808e90 r4:870e9000 r3:801e0a6c
[  358.139026] [<80063ef0>] (handle_irq_event_percpu+0x0/0x1bc) from [<800640f0>] (handle_irq_event+0x44/0x64)
[  358.148834] [<800640ac>] (handle_irq_event+0x0/0x64) from [<80066414>] (handle_level_irq+0x94/0xf0)
[  358.157923]  r6:00000000 r5:87808e90 r4:87808e40 r3:00020000
[  358.163698] [<80066380>] (handle_level_irq+0x0/0xf0) from [<800637a8>] (generic_handle_irq+0x28/0x38)
[  358.172961]  r5:0000003d r4:0000003d
[  358.176635] [<80063780>] (generic_handle_irq+0x0/0x38) from [<8000e92c>] (handle_IRQ+0x38/0x8c)
[  358.185347]  r4:804e4da4 r3:000000b4
[  358.189023] [<8000e8f4>] (handle_IRQ+0x0/0x8c) from [<800084c4>] (avic_handle_irq+0x3c/0x5c)
[  358.197502]  r6:0000ffff r5:804cff18 r4:80502e58 r3:00000010
[  358.203272] [<80008488>] (avic_handle_irq+0x0/0x5c) from [<8000dd24>] (__irq_svc+0x44/0x58)
[  358.211670] Exception stack(0x804cff18 to 0x804cff60)
[  358.216769] ff00:                                                       00000001 00000001
[  358.224977] ff20: 00000000 804d8600 804ce000 80502a68 804d98d0 804ce000 80004008 4117b363
[  358.233211] ff40: 804c1cec 804cff6c 804cff30 804cff60 800530e0 8000eaac 20000013 ffffffff
[  358.241430]  r6:ffffffff r5:20000013 r4:8000eaac r3:804d8600
[  358.247229] [<8000ea84>] (default_idle+0x0/0x40) from [<8000ec88>] (cpu_idle+0x64/0xd0)
[  358.255281] [<8000ec24>] (cpu_idle+0x0/0xd0) from [<803605a8>] (rest_init+0xc4/0xec)
[  358.263069]  r7:00000002 r6:00000001 r5:804dc534 r4:804ce000
[  358.268876] [<803604e4>] (rest_init+0x0/0xec) from [<804a27d0>] (start_kernel+0x2ac/0x2fc)
[  358.277184]  r7:80b4e620 r6:804c31bc r5:805029c0 r4:804d6140
[  358.282954] [<804a2524>] (start_kernel+0x0/0x2fc) from [<80008040>] (0x80008040)
[  358.290400] BUG: scheduling while atomic: swapper/0/0x40010004
[  358.296277] 2 locks held by swapper/0:
[  358.300038]  #0:  (&port_lock_key){-.-...}, at: [<801df9ec>] imx_rxint+0x24/0x2a4
[  358.307669]  #1:  (sysrq_key_table_lock){-.....}, at: [<801cda7c>] __handle_sysrq+0x1c/0x188
[  358.316253] Modules linked in:
[  358.319337] Backtrace: 
[  358.321837] [<80010e9c>] (dump_backtrace+0x0/0x10c) from [<80365da0>] (dump_stack+0x18/0x1c)
[  358.330320]  r6:804d8600 r5:80425b9c r4:804d8600 r3:20000113
[  358.336121] [<80365d88>] (dump_stack+0x0/0x1c) from [<803664cc>] (__schedule_bug+0x64/0x78)
[  358.344505] [<80366468>] (__schedule_bug+0x0/0x78) from [<8036acf8>] (__schedule+0x3fc/0x464)
[  358.353072]  r4:804ce000 r3:00000000
[  358.356752] [<8036a8fc>] (__schedule+0x0/0x464) from [<8004153c>] (__cond_resched+0x28/0x38)
[  358.365225] [<80041514>] (__cond_resched+0x0/0x38) from [<8036adf4>] (_cond_resched+0x38/0x48)
[  358.373880]  r4:804fb224 r3:00010003
[  358.377553] [<8036adbc>] (_cond_resched+0x0/0x48) from [<80369d90>] (mutex_lock_nested+0x30/0x2d0)
[  358.386580] [<80369d60>] (mutex_lock_nested+0x0/0x2d0) from [<8028ffdc>] (clk_get_sys+0x24/0x110)
[  358.395492] [<8028ffb8>] (clk_get_sys+0x0/0x110) from [<800188c8>] (mxc_restart+0x18/0xb8)
[  358.403824] [<800188b0>] (mxc_restart+0x0/0xb8) from [<8000ed70>] (machine_restart+0x24/0x60)
[  358.412393]  r5:804e4d70 r4:804dab3c
[  358.416046] [<8000ed4c>] (machine_restart+0x0/0x60) from [<8002d554>] (emergency_restart+0x1c/0x20)
[  358.425135]  r5:00000062 r4:804dab3c
[  358.428810] [<8002d538>] (emergency_restart+0x0/0x20) from [<801cd93c>] (sysrq_handle_reboot+0x1c/0x20)
[  358.438265] [<801cd920>] (sysrq_handle_reboot+0x0/0x20) from [<801cdb6c>] (__handle_sysrq+0x10c/0x188)
[  358.447631] [<801cda60>] (__handle_sysrq+0x0/0x188) from [<801cde00>] (handle_sysrq+0x30/0x38)
[  358.456308] [<801cddd0>] (handle_sysrq+0x0/0x38) from [<801dfba8>] (imx_rxint+0x1e0/0x2a4)
[  358.464604] [<801df9c8>] (imx_rxint+0x0/0x2a4) from [<801e0b0c>] (imx_int+0xa0/0xb8)
[  358.472410] [<801e0a6c>] (imx_int+0x0/0xb8) from [<80063f44>] (handle_irq_event_percpu+0x54/0x1bc)
[  358.481411]  r6:00000000 r5:87808e90 r4:870e9000 r3:801e0a6c
[  358.487210] [<80063ef0>] (handle_irq_event_percpu+0x0/0x1bc) from [<800640f0>] (handle_irq_event+0x44/0x64)
[  358.497013] [<800640ac>] (handle_irq_event+0x0/0x64) from [<80066414>] (handle_level_irq+0x94/0xf0)
[  358.506072]  r6:00000000 r5:87808e90 r4:87808e40 r3:00020000
[  358.511877] [<80066380>] (handle_level_irq+0x0/0xf0) from [<800637a8>] (generic_handle_irq+0x28/0x38)
[  358.521139]  r5:0000003d r4:0000003d
[  358.524787] [<80063780>] (generic_handle_irq+0x0/0x38) from [<8000e92c>] (handle_IRQ+0x38/0x8c)
[  358.533529]  r4:804e4da4 r3:000000b4
[  358.537199] [<8000e8f4>] (handle_IRQ+0x0/0x8c) from [<800084c4>] (avic_handle_irq+0x3c/0x5c)
[  358.545650]  r6:0000ffff r5:804cff18 r4:80502e58 r3:00000010
[  358.551450] [<80008488>] (avic_handle_irq+0x0/0x5c) from [<8000dd24>] (__irq_svc+0x44/0x58)
[  358.559847] Exception stack(0x804cff18 to 0x804cff60)
[  358.564918] ff00:                                                       00000001 00000001
[  358.573156] ff20: 00000000 804d8600 804ce000 80502a68 804d98d0 804ce000 80004008 4117b363
[  358.581391] ff40: 804c1cec 804cff6c 804cff30 804cff60 800530e0 8000eaac 20000013 ffffffff
[  358.589609]  r6:ffffffff r5:20000013 r4:8000eaac r3:804d8600
[  358.595383] [<8000ea84>] (default_idle+0x0/0x40) from [<8000ec88>] (cpu_idle+0x64/0xd0)
[  358.603455] [<8000ec24>] (cpu_idle+0x0/0xd0) from [<803605a8>] (rest_init+0xc4/0xec)
[  358.611241]  r7:00000002 r6:00000001 r5:804dc534 r4:804ce000
[  358.617041] [<803604e4>] (rest_init+0x0/0xec) from [<804a27d0>] (start_kernel+0x2ac/0x2fc)
[  358.625319]  r7:80b4e620 r6:804c31bc r5:805029c0 r4:804d6140
[  358.631118] [<804a2524>] (start_kernel+0x0/0x2fc) from [<80008040>] (0x80008040)
[  358.686854] ------------[ cut here ]------------
[  358.691551] WARNING: at kernel/mutex.c:198 mutex_lock_nested+0x290/0x2d0()
[  358.703020] Modules linked in:
[  358.706145] Backtrace: 
[  358.708665] [<80010e9c>] (dump_backtrace+0x0/0x10c) from [<80365da0>] (dump_stack+0x18/0x1c)
[  358.717153]  r6:000000c6 r5:80369ff0 r4:00000000 r3:00000000
[  358.722925] [<80365d88>] (dump_stack+0x0/0x1c) from [<8001b4d0>] (warn_slowpath_common+0x54/0x6c)
[  358.731860] [<8001b47c>] (warn_slowpath_common+0x0/0x6c) from [<8001b50c>] (warn_slowpath_null+0x24/0x2c)
[  358.741469]  r8:00000000 r7:804d8600 r6:804ce000 r5:8050401c r4:804fb224 r3:00000009
[  358.749478] [<8001b4e8>] (warn_slowpath_null+0x0/0x2c) from [<80369ff0>] (mutex_lock_nested+0x290/0x2d0)
[  358.759032] [<80369d60>] (mutex_lock_nested+0x0/0x2d0) from [<8028ffdc>] (clk_get_sys+0x24/0x110)
[  358.767984] [<8028ffb8>] (clk_get_sys+0x0/0x110) from [<800188c8>] (mxc_restart+0x18/0xb8)
[  358.776318] [<800188b0>] (mxc_restart+0x0/0xb8) from [<8000ed70>] (machine_restart+0x24/0x60)
[  358.784858]  r5:804e4d70 r4:804dab3c
[  358.788547] [<8000ed4c>] (machine_restart+0x0/0x60) from [<8002d554>] (emergency_restart+0x1c/0x20)
[  358.797637]  r5:00000062 r4:804dab3c
[  358.801294] [<8002d538>] (emergency_restart+0x0/0x20) from [<801cd93c>] (sysrq_handle_reboot+0x1c/0x20)
[  358.810750] [<801cd920>] (sysrq_handle_reboot+0x0/0x20) from [<801cdb6c>] (__handle_sysrq+0x10c/0x188)
[  358.820115] [<801cda60>] (__handle_sysrq+0x0/0x188) from [<801cde00>] (handle_sysrq+0x30/0x38)
[  358.828795] [<801cddd0>] (handle_sysrq+0x0/0x38) from [<801dfba8>] (imx_rxint+0x1e0/0x2a4)
[  358.837123] [<801df9c8>] (imx_rxint+0x0/0x2a4) from [<801e0b0c>] (imx_int+0xa0/0xb8)
[  358.844909] [<801e0a6c>] (imx_int+0x0/0xb8) from [<80063f44>] (handle_irq_event_percpu+0x54/0x1bc)
[  358.853909]  r6:00000000 r5:87808e90 r4:870e9000 r3:801e0a6c
[  358.859708] [<80063ef0>] (handle_irq_event_percpu+0x0/0x1bc) from [<800640f0>] (handle_irq_event+0x44/0x64)
[  358.869513] [<800640ac>] (handle_irq_event+0x0/0x64) from [<80066414>] (handle_level_irq+0x94/0xf0)
[  358.878602]  r6:00000000 r5:87808e90 r4:87808e40 r3:00020000
[  358.884374] [<80066380>] (handle_level_irq+0x0/0xf0) from [<800637a8>] (generic_handle_irq+0x28/0x38)
[  358.893635]  r5:0000003d r4:0000003d
[  358.897307] [<80063780>] (generic_handle_irq+0x0/0x38) from [<8000e92c>] (handle_IRQ+0x38/0x8c)
[  358.906020]  r4:804e4da4 r3:000000b4
[  358.909693] [<8000e8f4>] (handle_IRQ+0x0/0x8c) from [<800084c4>] (avic_handle_irq+0x3c/0x5c)
[  358.918173]  r6:0000ffff r5:804cff18 r4:80502e58 r3:00000010
[  358.923941] [<80008488>] (avic_handle_irq+0x0/0x5c) from [<8000dd24>] (__irq_svc+0x44/0x58)
[  358.932339] Exception stack(0x804cff18 to 0x804cff60)
[  358.937439] ff00:                                                       00000001 00000001
[  358.945645] ff20: 00000000 804d8600 804ce000 80502a68 804d98d0 804ce000 80004008 4117b363
[  358.953878] ff40: 804c1cec 804cff6c 804cff30 804cff60 800530e0 8000eaac 20000013 ffffffff
[  358.962095]  r6:ffffffff r5:20000013 r4:8000eaac r3:804d8600
[  358.967894] [<8000ea84>] (default_idle+0x0/0x40) from [<8000ec88>] (cpu_idle+0x64/0xd0)
[  358.975943] [<8000ec24>] (cpu_idle+0x0/0xd0) from [<803605a8>] (rest_init+0xc4/0xec)
[  358.983728]  r7:00000002 r6:00000001 r5:804dc534 r4:804ce000
[  358.989531] [<803604e4>] (rest_init+0x0/0xec) from [<804a27d0>] (start_kernel+0x2ac/0x2fc)
[  358.997838]  r7:80b4e620 r6:804c31bc r5:805029c0 r4:804d6140
[  359.003606] [<804a2524>] (start_kernel+0x0/0x2fc) from [<80008040>] (0x80008040)
[  359.011047] ---[ end trace 1ad357144973f17c ]---
[  359.015715] BUG: sleeping function called from invalid context at kernel/mutex.c:269
[  359.028025] in_atomic(): 1, irqs_disabled(): 0, pid: 0, name: swapper
[  359.034479] INFO: lockdep is turned off.
[  359.038440] Backtrace: 
[  359.040946] [<80010e9c>] (dump_backtrace+0x0/0x10c) from [<80365da0>] (dump_stack+0x18/0x1c)
[  359.049430]  r6:000016d5 r5:804dbc00 r4:804ce000 r3:60000013
[  359.055216] [<80365d88>] (dump_stack+0x0/0x1c) from [<80040f70>] (__might_sleep+0xe0/0x11c)
[  359.063635] [<80040e90>] (__might_sleep+0x0/0x11c) from [<80369d8c>] (mutex_lock_nested+0x2c/0x2d0)
[  359.072726]  r6:804e90dc r5:8780db40 r4:804fb274
[  359.077470] [<80369d60>] (mutex_lock_nested+0x0/0x2d0) from [<80291478>] (clk_prepare+0x20/0x40)
[  359.086333] [<80291458>] (clk_prepare+0x0/0x40) from [<800188d8>] (mxc_restart+0x28/0xb8)
[  359.094526]  r5:804e4d70 r4:8780db40
[  359.098207] [<800188b0>] (mxc_restart+0x0/0xb8) from [<8000ed70>] (machine_restart+0x24/0x60)
[  359.106776]  r5:804e4d70 r4:804dab3c
[  359.110427] [<8000ed4c>] (machine_restart+0x0/0x60) from [<8002d554>] (emergency_restart+0x1c/0x20)
[  359.119517]  r5:00000062 r4:804dab3c
[  359.123166] [<8002d538>] (emergency_restart+0x0/0x20) from [<801cd93c>] (sysrq_handle_reboot+0x1c/0x20)
[  359.132621] [<801cd920>] (sysrq_handle_reboot+0x0/0x20) from [<801cdb6c>] (__handle_sysrq+0x10c/0x188)
[  359.141988] [<801cda60>] (__handle_sysrq+0x0/0x188) from [<801cde00>] (handle_sysrq+0x30/0x38)
[  359.150664] [<801cddd0>] (handle_sysrq+0x0/0x38) from [<801dfba8>] (imx_rxint+0x1e0/0x2a4)
[  359.158987] [<801df9c8>] (imx_rxint+0x0/0x2a4) from [<801e0b0c>] (imx_int+0xa0/0xb8)
[  359.166794] [<801e0a6c>] (imx_int+0x0/0xb8) from [<80063f44>] (handle_irq_event_percpu+0x54/0x1bc)
[  359.175767]  r6:00000000 r5:87808e90 r4:870e9000 r3:801e0a6c
[  359.181569] [<80063ef0>] (handle_irq_event_percpu+0x0/0x1bc) from [<800640f0>] (handle_irq_event+0x44/0x64)
[  359.191374] [<800640ac>] (handle_irq_event+0x0/0x64) from [<80066414>] (handle_level_irq+0x94/0xf0)
[  359.200461]  r6:00000000 r5:87808e90 r4:87808e40 r3:00020000
[  359.206260] [<80066380>] (handle_level_irq+0x0/0xf0) from [<800637a8>] (generic_handle_irq+0x28/0x38)
[  359.215494]  r5:0000003d r4:0000003d
[  359.219168] [<80063780>] (generic_handle_irq+0x0/0x38) from [<8000e92c>] (handle_IRQ+0x38/0x8c)
[  359.227911]  r4:804e4da4 r3:000000b4
[  359.231555] [<8000e8f4>] (handle_IRQ+0x0/0x8c) from [<800084c4>] (avic_handle_irq+0x3c/0x5c)
[  359.240035]  r6:0000ffff r5:804cff18 r4:80502e58 r3:00000010
[  359.245803] [<80008488>] (avic_handle_irq+0x0/0x5c) from [<8000dd24>] (__irq_svc+0x44/0x58)
[  359.254198] Exception stack(0x804cff18 to 0x804cff60)
[  359.259296] ff00:                                                       00000001 00000001
[  359.267530] ff20: 00000000 804d8600 804ce000 80502a68 804d98d0 804ce000 80004008 4117b363
[  359.275736] ff40: 804c1cec 804cff6c 804cff30 804cff60 800530e0 8000eaac 20000013 ffffffff
[  359.283951]  r6:ffffffff r5:20000013 r4:8000eaac r3:804d8600
[  359.289748] [<8000ea84>] (default_idle+0x0/0x40) from [<8000ec88>] (cpu_idle+0x64/0xd0)
[  359.297818] [<8000ec24>] (cpu_idle+0x0/0xd0) from [<803605a8>] (rest_init+0xc4/0xec)
[  359.305576]  r7:00000002 r6:00000001 r5:804dc534 r4:804ce000
[  359.311380] [<803604e4>] (rest_init+0x0/0xec) from [<804a27d0>] (start_kernel+0x2ac/0x2fc)
[  359.319688]  r7:80b4e620 r6:804c31bc r5:805029c0 r4:804d6140
[  359.325454] [<804a2524>] (start_kernel+0x0/0x2fc) from [<80008040>] (0x80008040)
[  359.332899] BUG: scheduling while atomic: swapper/0/0x40010004
[  359.338769] INFO: lockdep is turned off.
[  359.342703] Modules linked in:
[  359.345783] Backtrace: 
[  359.348312] [<80010e9c>] (dump_backtrace+0x0/0x10c) from [<80365da0>] (dump_stack+0x18/0x1c)
[  359.356797]  r6:804d8600 r5:8780db40 r4:804d8600 r3:60000013
[  359.362567] [<80365d88>] (dump_stack+0x0/0x1c) from [<803664cc>] (__schedule_bug+0x64/0x78)
[  359.370980] [<80366468>] (__schedule_bug+0x0/0x78) from [<8036acf8>] (__schedule+0x3fc/0x464)
[  359.379546]  r4:804ce000 r3:00000000
[  359.383201] [<8036a8fc>] (__schedule+0x0/0x464) from [<8004153c>] (__cond_resched+0x28/0x38)
[  359.391708] [<80041514>] (__cond_resched+0x0/0x38) from [<8036adf4>] (_cond_resched+0x38/0x48)
[  359.400365]  r4:804fb274 r3:00010003
[  359.404012] [<8036adbc>] (_cond_resched+0x0/0x48) from [<80369d90>] (mutex_lock_nested+0x30/0x2d0)
[  359.413041] [<80369d60>] (mutex_lock_nested+0x0/0x2d0) from [<80291478>] (clk_prepare+0x20/0x40)
[  359.421896] [<80291458>] (clk_prepare+0x0/0x40) from [<800188d8>] (mxc_restart+0x28/0xb8)
[  359.430116]  r5:804e4d70 r4:8780db40
[  359.433767] [<800188b0>] (mxc_restart+0x0/0xb8) from [<8000ed70>] (machine_restart+0x24/0x60)
[  359.442336]  r5:804e4d70 r4:804dab3c
[  359.445986] [<8000ed4c>] (machine_restart+0x0/0x60) from [<8002d554>] (emergency_restart+0x1c/0x20)
[  359.455074]  r5:00000062 r4:804dab3c
[  359.458748] [<8002d538>] (emergency_restart+0x0/0x20) from [<801cd93c>] (sysrq_handle_reboot+0x1c/0x20)
[  359.468202] [<801cd920>] (sysrq_handle_reboot+0x0/0x20) from [<801cdb6c>] (__handle_sysrq+0x10c/0x188)
[  359.477569] [<801cda60>] (__handle_sysrq+0x0/0x188) from [<801cde00>] (handle_sysrq+0x30/0x38)
[  359.486242] [<801cddd0>] (handle_sysrq+0x0/0x38) from [<801dfba8>] (imx_rxint+0x1e0/0x2a4)
[  359.494538] [<801df9c8>] (imx_rxint+0x0/0x2a4) from [<801e0b0c>] (imx_int+0xa0/0xb8)
[  359.502344] [<801e0a6c>] (imx_int+0x0/0xb8) from [<80063f44>] (handle_irq_event_percpu+0x54/0x1bc)
[  359.511344]  r6:00000000 r5:87808e90 r4:870e9000 r3:801e0a6c
[  359.517140] [<80063ef0>] (handle_irq_event_percpu+0x0/0x1bc) from [<800640f0>] (handle_irq_event+0x44/0x64)
[  359.526943] [<800640ac>] (handle_irq_event+0x0/0x64) from [<80066414>] (handle_level_irq+0x94/0xf0)
[  359.536002]  r6:00000000 r5:87808e90 r4:87808e40 r3:00020000
[  359.541803] [<80066380>] (handle_level_irq+0x0/0xf0) from [<800637a8>] (generic_handle_irq+0x28/0x38)
[  359.551064]  r5:0000003d r4:0000003d
[  359.554713] [<80063780>] (generic_handle_irq+0x0/0x38) from [<8000e92c>] (handle_IRQ+0x38/0x8c)
[  359.563453]  r4:804e4da4 r3:000000b4
[  359.567121] [<8000e8f4>] (handle_IRQ+0x0/0x8c) from [<800084c4>] (avic_handle_irq+0x3c/0x5c)
[  359.575572]  r6:0000ffff r5:804cff18 r4:80502e58 r3:00000010
[  359.581372] [<80008488>] (avic_handle_irq+0x0/0x5c) from [<8000dd24>] (__irq_svc+0x44/0x58)
[  359.589768] Exception stack(0x804cff18 to 0x804cff60)
[  359.594839] ff00:                                                       00000001 00000001
[  359.603073] ff20: 00000000 804d8600 804ce000 80502a68 804d98d0 804ce000 80004008 4117b363
[  359.611307] ff40: 804c1cec 804cff6c 804cff30 804cff60 800530e0 8000eaac 20000013 ffffffff
[  359.619524]  r6:ffffffff r5:20000013 r4:8000eaac r3:804d8600
[  359.625296] [<8000ea84>] (default_idle+0x0/0x40) from [<8000ec88>] (cpu_idle+0x64/0xd0)
[  359.633366] [<8000ec24>] (cpu_idle+0x0/0xd0) from [<803605a8>] (rest_init+0xc4/0xec)
[  359.641152]  r7:00000002 r6:00000001 r5:804dc534 r4:804ce000
[  359.646950] [<803604e4>] (rest_init+0x0/0xec) from [<804a27d0>] (start_kernel+0x2ac/0x2fc)
[  359.655227]  r7:80b4e620 r6:804c31bc r5:805029c0 r4:804d6140
[  359.661024] [<804a2524>] (start_kernel+0x0/0x2fc) from [<80008040>] (0x80008040)


-- 
Pengutronix e.K.                           | Uwe Kleine-König            |
Industrial Linux Solutions                 | http://www.pengutronix.de/  |
--
To unsubscribe from this list: send the line "unsubscribe linux-serial" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply

* [PATCH] serial/imx: improve error diagnosics for clock and pinctrl failures
From: Uwe Kleine-König @ 2012-08-20  7:57 UTC (permalink / raw)
  To: linux-kernel, Alan Cox, Greg Kroah-Hartman; +Cc: kernel, linux-serial

These error paths are used more often now after deep changes to the
clock code and pinctrl is still new for imx. So help debugging and give
clues in the boot log.

Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
---
 drivers/tty/serial/imx.c |    3 +++
 1 file changed, 3 insertions(+)

diff --git a/drivers/tty/serial/imx.c b/drivers/tty/serial/imx.c
index d5c689d6..ce44de7 100644
--- a/drivers/tty/serial/imx.c
+++ b/drivers/tty/serial/imx.c
@@ -1505,18 +1505,21 @@ static int serial_imx_probe(struct platform_device *pdev)
 	pinctrl = devm_pinctrl_get_select_default(&pdev->dev);
 	if (IS_ERR(pinctrl)) {
 		ret = PTR_ERR(pinctrl);
+		dev_err(&pdev->dev, "failed to get default pinctrl: %d\n", ret);
 		goto unmap;
 	}
 
 	sport->clk_ipg = devm_clk_get(&pdev->dev, "ipg");
 	if (IS_ERR(sport->clk_ipg)) {
 		ret = PTR_ERR(sport->clk_ipg);
+		dev_err(&pdev->dev, "failed to get ipg clk: %d\n", ret);
 		goto unmap;
 	}
 
 	sport->clk_per = devm_clk_get(&pdev->dev, "per");
 	if (IS_ERR(sport->clk_per)) {
 		ret = PTR_ERR(sport->clk_per);
+		dev_err(&pdev->dev, "failed to get per clk: %d\n", ret);
 		goto unmap;
 	}
 
-- 
1.7.10.4

^ permalink raw reply related

* [PATCHv4 1/1] [RFC] uartclk from serial_core exposed to sysfs
From: Tomas Hlavacek @ 2012-08-19 18:34 UTC (permalink / raw)
  To: gregkh, alan, linux-serial, linux-kernel; +Cc: marek.vasut, Tomas Hlavacek
In-Reply-To: <1344929718-22736-1-git-send-email-tmshlvck@gmail.com>

Added file /sys/devices/.../tty/ttySX/uartclk to allow reading
uartclk value in struct uart_port in serial_core via sysfs.

It simplifies initialization verification of no-name cards that
have non-standard oscillator speed while having no distinguishing
PCI IDs to allow autodetection.

tty_register_device() has been generalized and refactored in order
to add support for setting drvdata and attribute_group to the device.

Signed-off-by: Tomas Hlavacek <tmshlvck@gmail.com>
---
 Documentation/ABI/testing/sysfs-tty |    9 +++++
 drivers/tty/serial/serial_core.c    |   37 +++++++++++++++++++-
 drivers/tty/tty_io.c                |   63 ++++++++++++++++++++++++++++++++---
 include/linux/tty.h                 |    4 +++
 4 files changed, 108 insertions(+), 5 deletions(-)

diff --git a/Documentation/ABI/testing/sysfs-tty b/Documentation/ABI/testing/sysfs-tty
index b138b66..b93a174 100644
--- a/Documentation/ABI/testing/sysfs-tty
+++ b/Documentation/ABI/testing/sysfs-tty
@@ -17,3 +17,12 @@ Description:
 		 device, like 'tty1'.
 		 The file supports poll() to detect virtual
 		 console switches.
+
+What:		/sys/class/tty/ttyS0/uartclk
+Date:		Aug 2012
+Contact:	Tomas Hlavacek <tmshlvck@gmail.com>
+Description:
+		Shows the current uartclk value associated with the
+		UART port in serial_core, that is bound to TTY like ttyS0.
+		uartclk = 16 * baud_base
+
diff --git a/drivers/tty/serial/serial_core.c b/drivers/tty/serial/serial_core.c
index a21dc8e..e0c11da 100644
--- a/drivers/tty/serial/serial_core.c
+++ b/drivers/tty/serial/serial_core.c
@@ -2293,6 +2293,38 @@ struct tty_driver *uart_console_device(struct console *co, int *index)
 	return p->tty_driver;
 }
 
+static ssize_t uart_get_attr_uartclk(struct device *dev,
+		struct device_attribute *attr, char *buf)
+{
+	int ret;
+
+	struct tty_port *port = dev_get_drvdata(dev);
+	struct uart_state *state = container_of(port, struct uart_state, port);
+
+	mutex_lock(&state->port.mutex);
+	ret = snprintf(buf, PAGE_SIZE, "%d\n", state->uart_port->uartclk);
+	mutex_unlock(&state->port.mutex);
+
+	return ret;
+}
+
+static DEVICE_ATTR(uartclk, S_IRUSR | S_IRGRP, uart_get_attr_uartclk,
+		NULL);
+
+static struct attribute *tty_dev_attrs[] = {
+	&dev_attr_uartclk.attr,
+	NULL,
+};
+
+static struct attribute_group tty_dev_attr_group = {
+	.attrs = tty_dev_attrs,
+};
+
+static struct attribute_group *tty_dev_attr_groups[] = {
+	&tty_dev_attr_group,
+	NULL
+};
+
 /**
  *	uart_add_one_port - attach a driver-defined port structure
  *	@drv: pointer to the uart low level driver structure for this port
@@ -2345,8 +2377,11 @@ int uart_add_one_port(struct uart_driver *drv, struct uart_port *uport)
 	/*
 	 * Register the port whether it's detected or not.  This allows
 	 * setserial to be used to alter this ports parameters.
+	 * Use driverdata of the tty device for referencing the UART port.
+	 * Set default device attributes to the new device.
 	 */
-	tty_dev = tty_register_device(drv->tty_driver, uport->line, uport->dev);
+	tty_dev = tty_register_device_attr(drv->tty_driver, uport->line,
+			uport->dev, port, tty_dev_attr_groups);
 	if (likely(!IS_ERR(tty_dev))) {
 		device_set_wakeup_capable(tty_dev, 1);
 	} else {
diff --git a/drivers/tty/tty_io.c b/drivers/tty/tty_io.c
index b425c79..1c9d5b5 100644
--- a/drivers/tty/tty_io.c
+++ b/drivers/tty/tty_io.c
@@ -3009,12 +3009,42 @@ struct class *tty_class;
  *
  *	Locking: ??
  */
-
 struct device *tty_register_device(struct tty_driver *driver, unsigned index,
 				   struct device *device)
 {
+	return tty_register_device_attr(driver, index, device, NULL, NULL);
+}
+EXPORT_SYMBOL(tty_register_device);
+
+/**
+ *	tty_register_device_attr - register a tty device
+ *	@driver: the tty driver that describes the tty device
+ *	@index: the index in the tty driver for this tty device
+ *	@device: a struct device that is associated with this tty device.
+ *		This field is optional, if there is no known struct device
+ *		for this tty device it can be set to NULL safely.
+ *	@drvdata: Driver data to be set to device (NULL = do not touch).
+ *	@attr_grp: Attribute group to be set on device (NULL = do not touch).
+ *
+ *	Returns a pointer to the struct device for this tty device
+ *	(or ERR_PTR(-EFOO) on error).
+ *
+ *	This call is required to be made to register an individual tty device
+ *	if the tty driver's flags have the TTY_DRIVER_DYNAMIC_DEV bit set.  If
+ *	that bit is not set, this function should not be called by a tty
+ *	driver.
+ *
+ *	Locking: ??
+ */
+struct device *tty_register_device_attr(struct tty_driver *driver,
+				   unsigned index, struct device *device,
+				   void *drvdata,
+				   struct attribute_group **attr_grp)
+{
 	char name[64];
-	dev_t dev = MKDEV(driver->major, driver->minor_start) + index;
+	struct device *dev = NULL;
+	int retval = -ENODEV;
+	dev_t devt = MKDEV(driver->major, driver->minor_start) + index;
 
 	if (index >= driver->num) {
 		printk(KERN_ERR "Attempt to register invalid tty line number "
@@ -3027,9 +3057,34 @@ struct device *tty_register_device(struct tty_driver *driver, unsigned index,
 	else
 		tty_line_name(driver, index, name);
 
-	return device_create(tty_class, device, dev, NULL, name);
+
+	dev = kzalloc(sizeof(*dev), GFP_KERNEL);
+	if (!dev) {
+		retval = -ENOMEM;
+		goto error;
+	}
+
+	dev->devt = devt;
+	dev->class = tty_class;
+	dev->parent = device;
+	dev_set_name(dev, "%s", name);
+	if (attr_grp)
+		dev->groups = attr_grp;
+	if (drvdata)
+		dev_set_drvdata(dev, drvdata);
+
+	retval = device_register(dev);
+	if (retval)
+		goto error;
+
+	return dev;
+
+error:
+	put_device(dev);
+	return ERR_PTR(retval);
+
 }
-EXPORT_SYMBOL(tty_register_device);
+EXPORT_SYMBOL_GPL(tty_register_device_attr);
 
 /**
  * 	tty_unregister_device - unregister a tty device
diff --git a/include/linux/tty.h b/include/linux/tty.h
index 9f47ab5..424777a 100644
--- a/include/linux/tty.h
+++ b/include/linux/tty.h
@@ -410,6 +410,10 @@ extern int tty_register_driver(struct tty_driver *driver);
 extern int tty_unregister_driver(struct tty_driver *driver);
 extern struct device *tty_register_device(struct tty_driver *driver,
 					  unsigned index, struct device *dev);
+struct device *tty_register_device_attr(struct tty_driver *driver,
+				   unsigned index, struct device *device,
+				   void *drvdata,
+				   struct attribute_group **attr_grp);
 extern void tty_unregister_device(struct tty_driver *driver, unsigned index);
 extern int tty_read_raw_data(struct tty_struct *tty, unsigned char *bufp,
 			     int buflen);
-- 
1.7.10.4

^ permalink raw reply related

* [PATCH] serial: add a new helper function
From: Huang Shijie @ 2012-08-19 18:27 UTC (permalink / raw)
  To: gregkh; +Cc: alan, jirislaby, linux-kernel, linux-serial, netdev, Huang Shijie

In most of the time, the driver needs to check if the cts flow control
is enabled. But now, the driver checks the ASYNC_CTS_FLOW flag manually,
which is not a grace way. So add a new wraper function to make the code
tidy and clean.

Signed-off-by: Huang Shijie <shijie8@gmail.com>
---
 drivers/char/pcmcia/synclink_cs.c   |    2 +-
 drivers/tty/amiserial.c             |    2 +-
 drivers/tty/cyclades.c              |    2 +-
 drivers/tty/isicom.c                |    2 +-
 drivers/tty/mxser.c                 |    2 +-
 drivers/tty/serial/mxs-auart.c      |    2 +-
 drivers/tty/serial/serial_core.c    |    4 ++--
 drivers/tty/synclink.c              |    2 +-
 drivers/tty/synclink_gt.c           |    2 +-
 drivers/tty/synclinkmp.c            |    2 +-
 include/linux/tty.h                 |    7 +++++++
 net/irda/ircomm/ircomm_tty.c        |    4 ++--
 net/irda/ircomm/ircomm_tty_attach.c |    2 +-
 13 files changed, 21 insertions(+), 14 deletions(-)

diff --git a/drivers/char/pcmcia/synclink_cs.c b/drivers/char/pcmcia/synclink_cs.c
index 5db08c7..3f57d5de 100644
--- a/drivers/char/pcmcia/synclink_cs.c
+++ b/drivers/char/pcmcia/synclink_cs.c
@@ -1050,7 +1050,7 @@ static void cts_change(MGSLPC_INFO *info, struct tty_struct *tty)
 	wake_up_interruptible(&info->status_event_wait_q);
 	wake_up_interruptible(&info->event_wait_q);
 
-	if (info->port.flags & ASYNC_CTS_FLOW) {
+	if (tty_port_cts_enabled(&info->port)) {
 		if (tty->hw_stopped) {
 			if (info->serial_signals & SerialSignal_CTS) {
 				if (debug_level >= DEBUG_LEVEL_ISR)
diff --git a/drivers/tty/amiserial.c b/drivers/tty/amiserial.c
index 2b7535d..42d0a25 100644
--- a/drivers/tty/amiserial.c
+++ b/drivers/tty/amiserial.c
@@ -420,7 +420,7 @@ static void check_modem_status(struct serial_state *info)
 				tty_hangup(port->tty);
 		}
 	}
-	if (port->flags & ASYNC_CTS_FLOW) {
+	if (tty_port_cts_enabled(port)) {
 		if (port->tty->hw_stopped) {
 			if (!(status & SER_CTS)) {
 #if (defined(SERIAL_DEBUG_INTR) || defined(SERIAL_DEBUG_FLOW))
diff --git a/drivers/tty/cyclades.c b/drivers/tty/cyclades.c
index e3954da..0a6a0bc 100644
--- a/drivers/tty/cyclades.c
+++ b/drivers/tty/cyclades.c
@@ -727,7 +727,7 @@ static void cyy_chip_modem(struct cyclades_card *cinfo, int chip,
 		else
 			tty_hangup(tty);
 	}
-	if ((mdm_change & CyCTS) && (info->port.flags & ASYNC_CTS_FLOW)) {
+	if ((mdm_change & CyCTS) && tty_port_cts_enabled(&info->port)) {
 		if (tty->hw_stopped) {
 			if (mdm_status & CyCTS) {
 				/* cy_start isn't used
diff --git a/drivers/tty/isicom.c b/drivers/tty/isicom.c
index 99cf22e..d7492e1 100644
--- a/drivers/tty/isicom.c
+++ b/drivers/tty/isicom.c
@@ -600,7 +600,7 @@ static irqreturn_t isicom_interrupt(int irq, void *dev_id)
 					port->status &= ~ISI_DCD;
 			}
 
-			if (port->port.flags & ASYNC_CTS_FLOW) {
+			if (tty_port_cts_enabled(&port->port)) {
 				if (tty->hw_stopped) {
 					if (header & ISI_CTS) {
 						port->port.tty->hw_stopped = 0;
diff --git a/drivers/tty/mxser.c b/drivers/tty/mxser.c
index bb2da4c..cfda47d 100644
--- a/drivers/tty/mxser.c
+++ b/drivers/tty/mxser.c
@@ -830,7 +830,7 @@ static void mxser_check_modem_status(struct tty_struct *tty,
 			wake_up_interruptible(&port->port.open_wait);
 	}
 
-	if (port->port.flags & ASYNC_CTS_FLOW) {
+	if (tty_port_cts_enabled(&port->port)) {
 		if (tty->hw_stopped) {
 			if (status & UART_MSR_CTS) {
 				tty->hw_stopped = 0;
diff --git a/drivers/tty/serial/mxs-auart.c b/drivers/tty/serial/mxs-auart.c
index 3a667ee..dafeef2 100644
--- a/drivers/tty/serial/mxs-auart.c
+++ b/drivers/tty/serial/mxs-auart.c
@@ -262,7 +262,7 @@ static void mxs_auart_set_mctrl(struct uart_port *u, unsigned mctrl)
 
 	ctrl &= ~AUART_CTRL2_RTSEN;
 	if (mctrl & TIOCM_RTS) {
-		if (u->state->port.flags & ASYNC_CTS_FLOW)
+		if (tty_port_cts_enabled(&u->state->port))
 			ctrl |= AUART_CTRL2_RTSEN;
 	}
 
diff --git a/drivers/tty/serial/serial_core.c b/drivers/tty/serial/serial_core.c
index 5b308c8..1920e5c 100644
--- a/drivers/tty/serial/serial_core.c
+++ b/drivers/tty/serial/serial_core.c
@@ -176,7 +176,7 @@ static int uart_port_startup(struct tty_struct *tty, struct uart_state *state,
 				uart_set_mctrl(uport, TIOCM_RTS | TIOCM_DTR);
 		}
 
-		if (port->flags & ASYNC_CTS_FLOW) {
+		if (tty_port_cts_enabled(port)) {
 			spin_lock_irq(&uport->lock);
 			if (!(uport->ops->get_mctrl(uport) & TIOCM_CTS))
 				tty->hw_stopped = 1;
@@ -2493,7 +2493,7 @@ void uart_handle_cts_change(struct uart_port *uport, unsigned int status)
 
 	uport->icount.cts++;
 
-	if (port->flags & ASYNC_CTS_FLOW) {
+	if (tty_port_cts_enabled(port)) {
 		if (tty->hw_stopped) {
 			if (status) {
 				tty->hw_stopped = 0;
diff --git a/drivers/tty/synclink.c b/drivers/tty/synclink.c
index 666aa14..70e3a52 100644
--- a/drivers/tty/synclink.c
+++ b/drivers/tty/synclink.c
@@ -1359,7 +1359,7 @@ static void mgsl_isr_io_pin( struct mgsl_struct *info )
 			}
 		}
 	
-		if ( (info->port.flags & ASYNC_CTS_FLOW) && 
+		if (tty_port_cts_enabled(&info->port) &&
 		     (status & MISCSTATUS_CTS_LATCHED) ) {
 			if (info->port.tty->hw_stopped) {
 				if (status & MISCSTATUS_CTS) {
diff --git a/drivers/tty/synclink_gt.c b/drivers/tty/synclink_gt.c
index 45f6136..b38e954 100644
--- a/drivers/tty/synclink_gt.c
+++ b/drivers/tty/synclink_gt.c
@@ -2053,7 +2053,7 @@ static void cts_change(struct slgt_info *info, unsigned short status)
 	wake_up_interruptible(&info->event_wait_q);
 	info->pending_bh |= BH_STATUS;
 
-	if (info->port.flags & ASYNC_CTS_FLOW) {
+	if (tty_port_cts_enabled(&info->port)) {
 		if (info->port.tty) {
 			if (info->port.tty->hw_stopped) {
 				if (info->signals & SerialSignal_CTS) {
diff --git a/drivers/tty/synclinkmp.c b/drivers/tty/synclinkmp.c
index 53429c8..f17d9f3 100644
--- a/drivers/tty/synclinkmp.c
+++ b/drivers/tty/synclinkmp.c
@@ -2500,7 +2500,7 @@ static void isr_io_pin( SLMP_INFO *info, u16 status )
 			}
 		}
 
-		if ( (info->port.flags & ASYNC_CTS_FLOW) &&
+		if (tty_port_cts_enabled(&info->port) &&
 		     (status & MISCSTATUS_CTS_LATCHED) ) {
 			if ( info->port.tty ) {
 				if (info->port.tty->hw_stopped) {
diff --git a/include/linux/tty.h b/include/linux/tty.h
index 69a787f..e0b4871 100644
--- a/include/linux/tty.h
+++ b/include/linux/tty.h
@@ -43,6 +43,7 @@
 #include <linux/tty_driver.h>
 #include <linux/tty_ldisc.h>
 #include <linux/mutex.h>
+#include <linux/serial.h>
 
 
 
@@ -513,6 +514,12 @@ static inline struct tty_port *tty_port_get(struct tty_port *port)
 	return port;
 }
 
+/* If the cts flow control is enabled, return true. */
+static inline bool tty_port_cts_enabled(struct tty_port *port)
+{
+	return port->flags & ASYNC_CTS_FLOW;
+}
+
 extern struct tty_struct *tty_port_tty_get(struct tty_port *port);
 extern void tty_port_tty_set(struct tty_port *port, struct tty_struct *tty);
 extern int tty_port_carrier_raised(struct tty_port *port);
diff --git a/net/irda/ircomm/ircomm_tty.c b/net/irda/ircomm/ircomm_tty.c
index 9668990..95a3a7a 100644
--- a/net/irda/ircomm/ircomm_tty.c
+++ b/net/irda/ircomm/ircomm_tty.c
@@ -1070,7 +1070,7 @@ void ircomm_tty_check_modem_status(struct ircomm_tty_cb *self)
 			goto put;
 		}
 	}
-	if (tty && self->port.flags & ASYNC_CTS_FLOW) {
+	if (tty && tty_port_cts_enabled(&self->port)) {
 		if (tty->hw_stopped) {
 			if (status & IRCOMM_CTS) {
 				IRDA_DEBUG(2,
@@ -1313,7 +1313,7 @@ static void ircomm_tty_line_info(struct ircomm_tty_cb *self, struct seq_file *m)
 
 	seq_puts(m, "Flags:");
 	sep = ' ';
-	if (self->port.flags & ASYNC_CTS_FLOW) {
+	if (tty_port_cts_enabled(&self->port)) {
 		seq_printf(m, "%cASYNC_CTS_FLOW", sep);
 		sep = '|';
 	}
diff --git a/net/irda/ircomm/ircomm_tty_attach.c b/net/irda/ircomm/ircomm_tty_attach.c
index 3ab70e7..edab393 100644
--- a/net/irda/ircomm/ircomm_tty_attach.c
+++ b/net/irda/ircomm/ircomm_tty_attach.c
@@ -578,7 +578,7 @@ void ircomm_tty_link_established(struct ircomm_tty_cb *self)
 	 * will have to wait for the peer device (DCE) to raise the CTS
 	 * line.
 	 */
-	if ((self->port.flags & ASYNC_CTS_FLOW) &&
+	if (tty_port_cts_enabled(&self->port) &&
 			((self->settings.dce & IRCOMM_CTS) == 0)) {
 		IRDA_DEBUG(0, "%s(), waiting for CTS ...\n", __func__ );
 		goto put;
-- 
1.7.4.4

^ permalink raw reply related

* Re: [PATCH] [media] winbond-cir: Fix initialization
From: Alan Cox @ 2012-08-19 16:00 UTC (permalink / raw)
  To: Mauro Carvalho Chehab
  Cc: David Härdeman, Sean Young, Jarod Wilson, Alan Cox,
	linux-media, linux-serial, lirc-list
In-Reply-To: <5026BE78.80902@redhat.com>

> > +#ifdef CONFIG_SERIAL_8250

Coule be modular

> > +	if (!io) {
> > +		struct uart_port port = { .iobase = data->sbase };
> > +		int line = serial8250_find_port(&port);
> > +		if (line >= 0) {
> > +			serial8250_unregister_port(line);
> 
> Hmm... Not sure if it makes sense, but perhaps the unregistering code
> should be reverting serial8250_unregister_port(line).

Can't do that anyway it may well be busy.

> > --- a/drivers/tty/serial/8250/8250.c
> > +++ b/drivers/tty/serial/8250/8250.c
> > @@ -2914,6 +2914,7 @@ int serial8250_find_port(struct uart_port *p)
> >  	}
> >  	return -ENODEV;
> >  }
> > +EXPORT_SYMBOL(serial8250_find_port);

No - this leaks all the uart internal abstractions into the tree. We
really don't want that happening.

The right way to fix this (and a couple of other uglies) is to make 8250
on x86 scan for PnP ports *before* generic ports and to make a note of
any ports to skip on the PnP scan (so that the port poking scan ignores
them too)

Alan

^ permalink raw reply

* Re: [PATCH] serial: add a new helper function
From: Alan Cox @ 2012-08-19 15:46 UTC (permalink / raw)
  To: Greg KH; +Cc: Huang Shijie, alan, jirislaby, linux-kernel, linux-serial, netdev
In-Reply-To: <20120819064429.GA3252@kroah.com>

On Sat, 18 Aug 2012 23:44:29 -0700
Greg KH <gregkh@linuxfoundation.org> wrote:

> On Sun, Aug 19, 2012 at 02:27:12PM -0400, Huang Shijie wrote:
> > --- a/include/linux/tty.h
> > +++ b/include/linux/tty.h
> > @@ -43,6 +43,7 @@
> >  #include <linux/tty_driver.h>
> >  #include <linux/tty_ldisc.h>
> >  #include <linux/mutex.h>
> > +#include <linux/serial.h>
> >  
> >  
> >  
> > @@ -513,6 +514,12 @@ static inline struct tty_port *tty_port_get(struct tty_port *port)
> >  	return port;
> >  }
> >  
> > +/* If the cts flow control is enabled, return true. */
> > +static inline bool tty_port_cts_enabled(struct tty_port *port)
> > +{
> > +	return port->flags & ASYNC_CTS_FLOW;
> > +}
> > +
> 
> The fact that you have to add serial.h to this file kind of implies that
> this function shouldn't be here, right?
> 
> How about serial.h instead?  Not all tty drivers are serial drivers :)

tty_port is tty generic so possibly if there is a generic helper the
flags and helper should likewise be this way.

As it stands at the moment ASYNC_CTS_FLOW is a convention a few drivers
use. So calling it tty_port_xxx is going to misleading.

Alan

^ permalink raw reply

* [PATCH v2] serial: add a new helper function
From: Huang Shijie @ 2012-08-19 21:33 UTC (permalink / raw)
  To: gregkh; +Cc: alan, jirislaby, linux-kernel, linux-serial, netdev, Huang Shijie

In most of the time, the driver needs to check if the cts flow control
is enabled. But now, the driver checks the ASYNC_CTS_FLOW flag manually,
which is not a grace way. So add a new wraper function to make the code
tidy and clean.

Signed-off-by: Huang Shijie <shijie8@gmail.com>
---
v1 --> v2:
	move the new help function to serial.h 

---
 drivers/char/pcmcia/synclink_cs.c   |    2 +-
 drivers/tty/amiserial.c             |    2 +-
 drivers/tty/cyclades.c              |    2 +-
 drivers/tty/isicom.c                |    2 +-
 drivers/tty/mxser.c                 |    2 +-
 drivers/tty/serial/mxs-auart.c      |    2 +-
 drivers/tty/serial/serial_core.c    |    4 ++--
 drivers/tty/synclink.c              |    2 +-
 drivers/tty/synclink_gt.c           |    2 +-
 drivers/tty/synclinkmp.c            |    2 +-
 include/linux/serial.h              |    7 +++++++
 net/irda/ircomm/ircomm_tty.c        |    4 ++--
 net/irda/ircomm/ircomm_tty_attach.c |    2 +-
 13 files changed, 21 insertions(+), 14 deletions(-)

diff --git a/drivers/char/pcmcia/synclink_cs.c b/drivers/char/pcmcia/synclink_cs.c
index 5db08c7..3f57d5de 100644
--- a/drivers/char/pcmcia/synclink_cs.c
+++ b/drivers/char/pcmcia/synclink_cs.c
@@ -1050,7 +1050,7 @@ static void cts_change(MGSLPC_INFO *info, struct tty_struct *tty)
 	wake_up_interruptible(&info->status_event_wait_q);
 	wake_up_interruptible(&info->event_wait_q);
 
-	if (info->port.flags & ASYNC_CTS_FLOW) {
+	if (tty_port_cts_enabled(&info->port)) {
 		if (tty->hw_stopped) {
 			if (info->serial_signals & SerialSignal_CTS) {
 				if (debug_level >= DEBUG_LEVEL_ISR)
diff --git a/drivers/tty/amiserial.c b/drivers/tty/amiserial.c
index 2b7535d..42d0a25 100644
--- a/drivers/tty/amiserial.c
+++ b/drivers/tty/amiserial.c
@@ -420,7 +420,7 @@ static void check_modem_status(struct serial_state *info)
 				tty_hangup(port->tty);
 		}
 	}
-	if (port->flags & ASYNC_CTS_FLOW) {
+	if (tty_port_cts_enabled(port)) {
 		if (port->tty->hw_stopped) {
 			if (!(status & SER_CTS)) {
 #if (defined(SERIAL_DEBUG_INTR) || defined(SERIAL_DEBUG_FLOW))
diff --git a/drivers/tty/cyclades.c b/drivers/tty/cyclades.c
index e3954da..0a6a0bc 100644
--- a/drivers/tty/cyclades.c
+++ b/drivers/tty/cyclades.c
@@ -727,7 +727,7 @@ static void cyy_chip_modem(struct cyclades_card *cinfo, int chip,
 		else
 			tty_hangup(tty);
 	}
-	if ((mdm_change & CyCTS) && (info->port.flags & ASYNC_CTS_FLOW)) {
+	if ((mdm_change & CyCTS) && tty_port_cts_enabled(&info->port)) {
 		if (tty->hw_stopped) {
 			if (mdm_status & CyCTS) {
 				/* cy_start isn't used
diff --git a/drivers/tty/isicom.c b/drivers/tty/isicom.c
index 99cf22e..d7492e1 100644
--- a/drivers/tty/isicom.c
+++ b/drivers/tty/isicom.c
@@ -600,7 +600,7 @@ static irqreturn_t isicom_interrupt(int irq, void *dev_id)
 					port->status &= ~ISI_DCD;
 			}
 
-			if (port->port.flags & ASYNC_CTS_FLOW) {
+			if (tty_port_cts_enabled(&port->port)) {
 				if (tty->hw_stopped) {
 					if (header & ISI_CTS) {
 						port->port.tty->hw_stopped = 0;
diff --git a/drivers/tty/mxser.c b/drivers/tty/mxser.c
index bb2da4c..cfda47d 100644
--- a/drivers/tty/mxser.c
+++ b/drivers/tty/mxser.c
@@ -830,7 +830,7 @@ static void mxser_check_modem_status(struct tty_struct *tty,
 			wake_up_interruptible(&port->port.open_wait);
 	}
 
-	if (port->port.flags & ASYNC_CTS_FLOW) {
+	if (tty_port_cts_enabled(&port->port)) {
 		if (tty->hw_stopped) {
 			if (status & UART_MSR_CTS) {
 				tty->hw_stopped = 0;
diff --git a/drivers/tty/serial/mxs-auart.c b/drivers/tty/serial/mxs-auart.c
index 3a667ee..dafeef2 100644
--- a/drivers/tty/serial/mxs-auart.c
+++ b/drivers/tty/serial/mxs-auart.c
@@ -262,7 +262,7 @@ static void mxs_auart_set_mctrl(struct uart_port *u, unsigned mctrl)
 
 	ctrl &= ~AUART_CTRL2_RTSEN;
 	if (mctrl & TIOCM_RTS) {
-		if (u->state->port.flags & ASYNC_CTS_FLOW)
+		if (tty_port_cts_enabled(&u->state->port))
 			ctrl |= AUART_CTRL2_RTSEN;
 	}
 
diff --git a/drivers/tty/serial/serial_core.c b/drivers/tty/serial/serial_core.c
index 5b308c8..1920e5c 100644
--- a/drivers/tty/serial/serial_core.c
+++ b/drivers/tty/serial/serial_core.c
@@ -176,7 +176,7 @@ static int uart_port_startup(struct tty_struct *tty, struct uart_state *state,
 				uart_set_mctrl(uport, TIOCM_RTS | TIOCM_DTR);
 		}
 
-		if (port->flags & ASYNC_CTS_FLOW) {
+		if (tty_port_cts_enabled(port)) {
 			spin_lock_irq(&uport->lock);
 			if (!(uport->ops->get_mctrl(uport) & TIOCM_CTS))
 				tty->hw_stopped = 1;
@@ -2493,7 +2493,7 @@ void uart_handle_cts_change(struct uart_port *uport, unsigned int status)
 
 	uport->icount.cts++;
 
-	if (port->flags & ASYNC_CTS_FLOW) {
+	if (tty_port_cts_enabled(port)) {
 		if (tty->hw_stopped) {
 			if (status) {
 				tty->hw_stopped = 0;
diff --git a/drivers/tty/synclink.c b/drivers/tty/synclink.c
index 666aa14..70e3a52 100644
--- a/drivers/tty/synclink.c
+++ b/drivers/tty/synclink.c
@@ -1359,7 +1359,7 @@ static void mgsl_isr_io_pin( struct mgsl_struct *info )
 			}
 		}
 	
-		if ( (info->port.flags & ASYNC_CTS_FLOW) && 
+		if (tty_port_cts_enabled(&info->port) &&
 		     (status & MISCSTATUS_CTS_LATCHED) ) {
 			if (info->port.tty->hw_stopped) {
 				if (status & MISCSTATUS_CTS) {
diff --git a/drivers/tty/synclink_gt.c b/drivers/tty/synclink_gt.c
index 45f6136..b38e954 100644
--- a/drivers/tty/synclink_gt.c
+++ b/drivers/tty/synclink_gt.c
@@ -2053,7 +2053,7 @@ static void cts_change(struct slgt_info *info, unsigned short status)
 	wake_up_interruptible(&info->event_wait_q);
 	info->pending_bh |= BH_STATUS;
 
-	if (info->port.flags & ASYNC_CTS_FLOW) {
+	if (tty_port_cts_enabled(&info->port)) {
 		if (info->port.tty) {
 			if (info->port.tty->hw_stopped) {
 				if (info->signals & SerialSignal_CTS) {
diff --git a/drivers/tty/synclinkmp.c b/drivers/tty/synclinkmp.c
index 53429c8..f17d9f3 100644
--- a/drivers/tty/synclinkmp.c
+++ b/drivers/tty/synclinkmp.c
@@ -2500,7 +2500,7 @@ static void isr_io_pin( SLMP_INFO *info, u16 status )
 			}
 		}
 
-		if ( (info->port.flags & ASYNC_CTS_FLOW) &&
+		if (tty_port_cts_enabled(&info->port) &&
 		     (status & MISCSTATUS_CTS_LATCHED) ) {
 			if ( info->port.tty ) {
 				if (info->port.tty->hw_stopped) {
diff --git a/include/linux/serial.h b/include/linux/serial.h
index 90e9f98..154dc94 100644
--- a/include/linux/serial.h
+++ b/include/linux/serial.h
@@ -11,6 +11,7 @@
 #define _LINUX_SERIAL_H
 
 #include <linux/types.h>
+#include <linux/tty.h>
 
 #ifdef __KERNEL__
 #include <asm/page.h>
@@ -218,6 +219,12 @@ struct serial_rs485 {
 					   are a royal PITA .. */
 };
 
+/* If the cts flow control is enabled, return true. */
+static inline bool tty_port_cts_enabled(struct tty_port *port)
+{
+	return port->flags & ASYNC_CTS_FLOW;
+}
+
 #ifdef __KERNEL__
 #include <linux/compiler.h>
 
diff --git a/net/irda/ircomm/ircomm_tty.c b/net/irda/ircomm/ircomm_tty.c
index 9668990..95a3a7a 100644
--- a/net/irda/ircomm/ircomm_tty.c
+++ b/net/irda/ircomm/ircomm_tty.c
@@ -1070,7 +1070,7 @@ void ircomm_tty_check_modem_status(struct ircomm_tty_cb *self)
 			goto put;
 		}
 	}
-	if (tty && self->port.flags & ASYNC_CTS_FLOW) {
+	if (tty && tty_port_cts_enabled(&self->port)) {
 		if (tty->hw_stopped) {
 			if (status & IRCOMM_CTS) {
 				IRDA_DEBUG(2,
@@ -1313,7 +1313,7 @@ static void ircomm_tty_line_info(struct ircomm_tty_cb *self, struct seq_file *m)
 
 	seq_puts(m, "Flags:");
 	sep = ' ';
-	if (self->port.flags & ASYNC_CTS_FLOW) {
+	if (tty_port_cts_enabled(&self->port)) {
 		seq_printf(m, "%cASYNC_CTS_FLOW", sep);
 		sep = '|';
 	}
diff --git a/net/irda/ircomm/ircomm_tty_attach.c b/net/irda/ircomm/ircomm_tty_attach.c
index 3ab70e7..edab393 100644
--- a/net/irda/ircomm/ircomm_tty_attach.c
+++ b/net/irda/ircomm/ircomm_tty_attach.c
@@ -578,7 +578,7 @@ void ircomm_tty_link_established(struct ircomm_tty_cb *self)
 	 * will have to wait for the peer device (DCE) to raise the CTS
 	 * line.
 	 */
-	if ((self->port.flags & ASYNC_CTS_FLOW) &&
+	if (tty_port_cts_enabled(&self->port) &&
 			((self->settings.dce & IRCOMM_CTS) == 0)) {
 		IRDA_DEBUG(0, "%s(), waiting for CTS ...\n", __func__ );
 		goto put;
-- 
1.7.4.4


^ permalink raw reply related

* Re: [PATCH] serial: add a new helper function
From: Huang Shijie @ 2012-08-19  7:00 UTC (permalink / raw)
  To: Greg KH; +Cc: alan, jirislaby, linux-kernel, linux-serial, netdev
In-Reply-To: <20120819064429.GA3252@kroah.com>

On Sun, Aug 19, 2012 at 2:44 AM, Greg KH <gregkh@linuxfoundation.org> wrote:
> On Sun, Aug 19, 2012 at 02:27:12PM -0400, Huang Shijie wrote:
>> --- a/include/linux/tty.h
>> +++ b/include/linux/tty.h
>> @@ -43,6 +43,7 @@
>>  #include <linux/tty_driver.h>
>>  #include <linux/tty_ldisc.h>
>>  #include <linux/mutex.h>
>> +#include <linux/serial.h>
>>
>>
>>
>> @@ -513,6 +514,12 @@ static inline struct tty_port *tty_port_get(struct tty_port *port)
>>       return port;
>>  }
>>
>> +/* If the cts flow control is enabled, return true. */
>> +static inline bool tty_port_cts_enabled(struct tty_port *port)
>> +{
>> +     return port->flags & ASYNC_CTS_FLOW;
>> +}
>> +
>
> The fact that you have to add serial.h to this file kind of implies that
> this function shouldn't be here, right?
>
> How about serial.h instead?  Not all tty drivers are serial drivers :)
OK.

thanks for so quick review.


Huang Shijie

>
> greg k-h

^ permalink raw reply

* Re: [PATCH] serial: add a new helper function
From: Greg KH @ 2012-08-19  6:44 UTC (permalink / raw)
  To: Huang Shijie; +Cc: alan, jirislaby, linux-kernel, linux-serial, netdev
In-Reply-To: <1345400832-23572-1-git-send-email-shijie8@gmail.com>

On Sun, Aug 19, 2012 at 02:27:12PM -0400, Huang Shijie wrote:
> --- a/include/linux/tty.h
> +++ b/include/linux/tty.h
> @@ -43,6 +43,7 @@
>  #include <linux/tty_driver.h>
>  #include <linux/tty_ldisc.h>
>  #include <linux/mutex.h>
> +#include <linux/serial.h>
>  
>  
>  
> @@ -513,6 +514,12 @@ static inline struct tty_port *tty_port_get(struct tty_port *port)
>  	return port;
>  }
>  
> +/* If the cts flow control is enabled, return true. */
> +static inline bool tty_port_cts_enabled(struct tty_port *port)
> +{
> +	return port->flags & ASYNC_CTS_FLOW;
> +}
> +

The fact that you have to add serial.h to this file kind of implies that
this function shouldn't be here, right?

How about serial.h instead?  Not all tty drivers are serial drivers :)

greg k-h

^ permalink raw reply

* Re: [PATCH] [media] winbond-cir: Fix initialization
From: David Härdeman @ 2012-08-18 22:46 UTC (permalink / raw)
  To: Sean Young
  Cc: Mauro Carvalho Chehab, Jarod Wilson, Alan Cox, linux-media,
	linux-serial, lirc-list, greg
In-Reply-To: <1343731023-9822-1-git-send-email-sean@mess.org>

On Tue, Jul 31, 2012 at 11:37:03AM +0100, Sean Young wrote:
>The serial driver will detect the winbond cir device as a serial port,
>since it looks exactly like a serial port unless you know what it is
>from the PNP ID.
>
>Winbond CIR 00:04: Region 0x2f8-0x2ff already in use!
>Winbond CIR 00:04: disabled
>Winbond CIR: probe of 00:04 failed with error -16

The proposed solution means that a serial port will show up and then
automagically disappear (potentially) during boot, which isn't very
elegant.

When I discussed this a long time ago with Alan Cox (while he was still
the serial maintainer) I got the feeling that he was advocating
implementing a PNP ID based blacklist in the serial driver (apologies to
Alan if I misrepresented him now).

That seems to be a better solution (one that I never got around to
implementing myself).

>
>Signed-off-by: Sean Young <sean@mess.org>
>---
> drivers/media/rc/winbond-cir.c | 21 ++++++++++++++++++++-
> drivers/tty/serial/8250/8250.c |  1 +
> 2 files changed, 21 insertions(+), 1 deletion(-)

(BTW, I'm on vacation with sporadic Internet access for two more weeks,
and when I return I'll be spending most of my spare time moving in to a
new apartment, expect slow turnaround times for replying to emails).



^ permalink raw reply

* hii
From: sonia @ 2012-08-18 17:35 UTC (permalink / raw)
  To: sonialife2

Hello my dear
 How was your living life today i hope all is well, am Sonia by name i just
went into your profile at this site linux-archive.org  and saw how you have 
pest
your explanation over it i feel to know who your are so that we can shear one
thing or the
other from there i can send you my photo you can know who am ok . i am waiting
for your reply yours Sonia


^ permalink raw reply

* [PATCH 2/2] tty: serial: Remove explicit use of devm_kfree
From: Emil Goode @ 2012-08-18 16:12 UTC (permalink / raw)
  To: alan, gregkh; +Cc: linux-serial, linux-kernel, kernel-janitors, Emil Goode
In-Reply-To: <1345306369-10407-1-git-send-email-emilgoode@gmail.com>

There is no reason to explicitly call devm_kfree
in probe or remove functions.

Signed-off-by: Emil Goode <emilgoode@gmail.com>
---
 drivers/tty/serial/max310x.c |    3 ---
 1 file changed, 3 deletions(-)

diff --git a/drivers/tty/serial/max310x.c b/drivers/tty/serial/max310x.c
index 06ff5ad..2bc28a5 100644
--- a/drivers/tty/serial/max310x.c
+++ b/drivers/tty/serial/max310x.c
@@ -1198,7 +1198,6 @@ err_freq:
 
 err_out:
 	dev_set_drvdata(dev, NULL);
-	devm_kfree(dev, s);
 
 	return ret;
 }
@@ -1234,8 +1233,6 @@ static int __devexit max310x_remove(struct spi_device *spi)
 	if (s->pdata->exit)
 		s->pdata->exit();
 
-	devm_kfree(dev, s);
-
 	return ret;
 }
 
-- 
1.7.10.4


^ permalink raw reply related

* [PATCH 1/2] tty: serial: Check return code of gpiochip_remove
From: Emil Goode @ 2012-08-18 16:12 UTC (permalink / raw)
  To: alan, gregkh; +Cc: linux-serial, linux-kernel, kernel-janitors, Emil Goode

The gpiochip_remove function may fail to remove a gpio_chip
if any GPIOs are still requested. This patch informs the caller
of such a senario.

Sparse is warning because the function prototype has a
__must_check annotation.

Sparse warning:
drivers/tty/serial/max310x.c:1223:18: warning:
	ignoring return value of ‘gpiochip_remove’,
	declared with attribute warn_unused_result
	[-Wunused-result]

Signed-off-by: Emil Goode <emilgoode@gmail.com>
---
 drivers/tty/serial/max310x.c |   10 +++++++---
 1 file changed, 7 insertions(+), 3 deletions(-)

diff --git a/drivers/tty/serial/max310x.c b/drivers/tty/serial/max310x.c
index 534e448..06ff5ad 100644
--- a/drivers/tty/serial/max310x.c
+++ b/drivers/tty/serial/max310x.c
@@ -1207,6 +1207,7 @@ static int __devexit max310x_remove(struct spi_device *spi)
 {
 	struct device *dev = &spi->dev;
 	struct max310x_port *s = dev_get_drvdata(dev);
+	int ret = 0;
 
 	dev_dbg(dev, "Removing port\n");
 
@@ -1219,8 +1220,11 @@ static int __devexit max310x_remove(struct spi_device *spi)
 	uart_unregister_driver(&s->uart);
 
 #ifdef CONFIG_GPIOLIB
-	if (s->pdata->gpio_base)
-		gpiochip_remove(&s->gpio);
+	if (s->pdata->gpio_base) {
+		ret = gpiochip_remove(&s->gpio);
+		if (ret)
+			dev_err(dev, "Failed to remove gpio chip: %d\n", ret);
+	}
 #endif
 
 	dev_set_drvdata(dev, NULL);
@@ -1232,7 +1236,7 @@ static int __devexit max310x_remove(struct spi_device *spi)
 
 	devm_kfree(dev, s);
 
-	return 0;
+	return ret;
 }
 
 static const struct spi_device_id max310x_id_table[] = {
-- 
1.7.10.4

--
To unsubscribe from this list: send the line "unsubscribe linux-serial" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply related

* Re: [PATCHv3 1/1] [RFC] uartclk from serial_core exposed to sysfs
From: Tomas Hlavacek @ 2012-08-17 20:25 UTC (permalink / raw)
  To: Greg KH; +Cc: Marek Vasut, alan, linux-serial, linux-kernel
In-Reply-To: <20120817190114.GA31011@kroah.com>

Hello!

On Fri, Aug 17, 2012 at 9:01 PM, Greg KH <gregkh@linuxfoundation.org> wrote:
> On Fri, Aug 17, 2012 at 08:44:14PM +0200, Marek Vasut wrote:
>> Dear Greg KH,
>>
>> > On Fri, Aug 17, 2012 at 06:30:36PM +0200, Tomas Hlavacek wrote:
>> > > Hello Greg!
>> > >
>> > > On Fri, Aug 17, 2012 at 5:06 PM, Greg KH <gregkh@linuxfoundation.org> wrote:
>> > > >> @@ -2355,6 +2373,14 @@ int uart_add_one_port(struct uart_driver *drv,
>> > > >> struct uart_port *uport)
>> > > >>
>> > > >>       }
>> > > >>
>> > > >>       /*
>> > > >>
>> > > >> +      * Expose uartclk in sysfs. Use driverdata of the tty device for
>> > > >> +      * referencing the UART port.
>> > > >> +      */
>> > > >> +     dev_set_drvdata(tty_dev, port);
>> > > >> +     if (device_create_file(tty_dev, &dev_attr_uartclk) < 0)
>> > > >> +             dev_err(tty_dev, "Failed to add uartclk attr\n");
>> > > >
>> > > > I think you just raced with userspace in creating the file after the
>> > > > device was announced to userspace.  Are you sure it's ok?
>> > > >
>> > > > If not (hint, I don't think so), please make it a default attribute of
>> > > > the device, which will then cause the file to be created before it is
>> > > > announced to userspace.  It will also be less code as you don't have to
>> > > > clean it up by hand :)
>> > >
>> > > Do you mean I should modify the tty_register_device() function not to
>> > > use device_create() but it should rather do the device initialization
>> > > on it's own.
>> >
>> > No, not at all.
>> >
>> > > And I should add add the attribute (via struct attribute_group) to
>> > > struct device in between device_initialize() and device_add() calls.
>> > > Did I get it right?
>> >
>> > No, make this a driver attribute, that way when the device is
>> > registered, it adds the attribute automagically to the device that is
>> > bound to it.
>>
>> (hint, DEVICE_ATTR), right ?
>
> No, that's just a macro that creates the structure for the attribute.
> You need to take that structure and tie it to the driver itself, using
> the struct device_driver->groups; field.

Please forgive me my ignorance, but I am lost in this. I tried to read
through the serial_core and tty_io.c over and over to figure out how
the drivers are registered and where could I hook the driver
initialization for all UART ports, but I do not get it.

And there is another thing I am confused of: Should I use macro
DEVICE_ATTR or DRIVER_ATTR? There is a different signature of
callbacks in case of DRIVER_ATTR and I do not know how to find out
from struct device_driver which particular UART port it is associated
to? (Is it indeed associated with one particular port?) Value uartclk
could be, AFAIK, different on each port of the same chip and therefore
I need to know which particular TTY device I want to operate on. More
precisely, I have to get to proper struct uart_state associated with
the particular port.

Thanks,
Tomas

-- 
Tomáš Hlaváček <tmshlvck@gmail.com>
--
To unsubscribe from this list: send the line "unsubscribe linux-serial" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply

* Re: [PATCHv3 1/1] [RFC] uartclk from serial_core exposed to sysfs
From: Greg KH @ 2012-08-17 19:01 UTC (permalink / raw)
  To: Marek Vasut; +Cc: Tomas Hlavacek, alan, linux-serial, linux-kernel
In-Reply-To: <201208172044.14868.marek.vasut@gmail.com>

On Fri, Aug 17, 2012 at 08:44:14PM +0200, Marek Vasut wrote:
> Dear Greg KH,
> 
> > On Fri, Aug 17, 2012 at 06:30:36PM +0200, Tomas Hlavacek wrote:
> > > Hello Greg!
> > > 
> > > On Fri, Aug 17, 2012 at 5:06 PM, Greg KH <gregkh@linuxfoundation.org> wrote:
> > > >> @@ -2355,6 +2373,14 @@ int uart_add_one_port(struct uart_driver *drv,
> > > >> struct uart_port *uport)
> > > >> 
> > > >>       }
> > > >>       
> > > >>       /*
> > > >> 
> > > >> +      * Expose uartclk in sysfs. Use driverdata of the tty device for
> > > >> +      * referencing the UART port.
> > > >> +      */
> > > >> +     dev_set_drvdata(tty_dev, port);
> > > >> +     if (device_create_file(tty_dev, &dev_attr_uartclk) < 0)
> > > >> +             dev_err(tty_dev, "Failed to add uartclk attr\n");
> > > > 
> > > > I think you just raced with userspace in creating the file after the
> > > > device was announced to userspace.  Are you sure it's ok?
> > > > 
> > > > If not (hint, I don't think so), please make it a default attribute of
> > > > the device, which will then cause the file to be created before it is
> > > > announced to userspace.  It will also be less code as you don't have to
> > > > clean it up by hand :)
> > > 
> > > Do you mean I should modify the tty_register_device() function not to
> > > use device_create() but it should rather do the device initialization
> > > on it's own.
> > 
> > No, not at all.
> > 
> > > And I should add add the attribute (via struct attribute_group) to
> > > struct device in between device_initialize() and device_add() calls.
> > > Did I get it right?
> > 
> > No, make this a driver attribute, that way when the device is
> > registered, it adds the attribute automagically to the device that is
> > bound to it.
> 
> (hint, DEVICE_ATTR), right ?

No, that's just a macro that creates the structure for the attribute.
You need to take that structure and tie it to the driver itself, using
the struct device_driver->groups; field.

greg k-h

^ permalink raw reply

* Re: [PATCHv3 1/1] [RFC] uartclk from serial_core exposed to sysfs
From: Marek Vasut @ 2012-08-17 18:44 UTC (permalink / raw)
  To: Greg KH; +Cc: Tomas Hlavacek, alan, linux-serial, linux-kernel
In-Reply-To: <20120817165446.GA12361@kroah.com>

Dear Greg KH,

> On Fri, Aug 17, 2012 at 06:30:36PM +0200, Tomas Hlavacek wrote:
> > Hello Greg!
> > 
> > On Fri, Aug 17, 2012 at 5:06 PM, Greg KH <gregkh@linuxfoundation.org> wrote:
> > >> @@ -2355,6 +2373,14 @@ int uart_add_one_port(struct uart_driver *drv,
> > >> struct uart_port *uport)
> > >> 
> > >>       }
> > >>       
> > >>       /*
> > >> 
> > >> +      * Expose uartclk in sysfs. Use driverdata of the tty device for
> > >> +      * referencing the UART port.
> > >> +      */
> > >> +     dev_set_drvdata(tty_dev, port);
> > >> +     if (device_create_file(tty_dev, &dev_attr_uartclk) < 0)
> > >> +             dev_err(tty_dev, "Failed to add uartclk attr\n");
> > > 
> > > I think you just raced with userspace in creating the file after the
> > > device was announced to userspace.  Are you sure it's ok?
> > > 
> > > If not (hint, I don't think so), please make it a default attribute of
> > > the device, which will then cause the file to be created before it is
> > > announced to userspace.  It will also be less code as you don't have to
> > > clean it up by hand :)
> > 
> > Do you mean I should modify the tty_register_device() function not to
> > use device_create() but it should rather do the device initialization
> > on it's own.
> 
> No, not at all.
> 
> > And I should add add the attribute (via struct attribute_group) to
> > struct device in between device_initialize() and device_add() calls.
> > Did I get it right?
> 
> No, make this a driver attribute, that way when the device is
> registered, it adds the attribute automagically to the device that is
> bound to it.

(hint, DEVICE_ATTR), right ?

> Does that make sense?
> 
> greg k-h

Best regards,
Marek Vasut

^ permalink raw reply

* [GIT PATCH] Serial fixes for 3.6-rc3
From: Greg KH @ 2012-08-17 18:10 UTC (permalink / raw)
  To: Linus Torvalds, Alan Cox, Jiri Slaby
  Cc: Andrew Morton, linux-kernel, linux-serial

The following changes since commit 0d7614f09c1ebdbaa1599a5aba7593f147bf96ee:

  Linux 3.6-rc1 (2012-08-02 16:38:10 -0700)

are available in the git repository at:

  git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/tty.git/ tags/tty-3.6-rc3

for you to fetch changes up to 38f8eefccf3a23c4058a570fa2938a4f553cf8e0:

  pmac_zilog,kdb: Fix console poll hook to return instead of loop (2012-08-16 12:20:20 -0700)

----------------------------------------------------------------
TTY fixes for 3.6-rc3

Here are 4 tiny patches, each fixing a serial driver problem that people
have reported.

Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

----------------------------------------------------------------
Alexander Shiyan (1):
      serial: Change Kconfig entry for CLPS711X-target

Fengguang Wu (1):
      serial: ifx6x60: fix paging fault on spi_register_driver

Huang Shijie (1):
      serial: mxs-auart: fix the wrong RTS hardware flow control

Jason Wessel (1):
      pmac_zilog,kdb: Fix console poll hook to return instead of loop

 drivers/tty/serial/Kconfig      | 10 +++++-----
 drivers/tty/serial/ifx6x60.c    |  2 +-
 drivers/tty/serial/mxs-auart.c  | 14 +++++++++-----
 drivers/tty/serial/pmac_zilog.c | 12 +++++++++---
 4 files changed, 24 insertions(+), 14 deletions(-)

^ permalink raw reply


This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox