Merge tag 'tty-3.9-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/tty
Pull tty/serial patches from Greg Kroah-Hartman: "Here's the big tty/serial driver patches for 3.9-rc1. More tty port rework and fixes from Jiri here, as well as lots of individual serial driver updates and fixes. All of these have been in the linux-next tree for a while." * tag 'tty-3.9-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/tty: (140 commits) tty: mxser: improve error handling in mxser_probe() and mxser_module_init() serial: imx: fix uninitialized variable warning serial: tegra: assume CONFIG_OF TTY: do not update atime/mtime on read/write lguest: select CONFIG_TTY to build properly. ARM defconfigs: add missing inclusions of linux/platform_device.h fb/exynos: include platform_device.h ARM: sa1100/assabet: include platform_device.h directly serial: imx: Fix recursive locking bug pps: Fix build breakage from decoupling pps from tty tty: Remove ancient hardpps() pps: Additional cleanups in uart_handle_dcd_change pps: Move timestamp read into PPS code proper pps: Don't crash the machine when exiting will do pps: Fix a use-after free bug when unregistering a source. pps: Use pps_lookup_dev to reduce ldisc coupling pps: Add pps_lookup_dev() function tty: serial: uartlite: Support uartlite on big and little endian systems tty: serial: uartlite: Fix sparse and checkpatch warnings serial/arc-uart: Miscll DT related updates (Grant's review comments) ... Fix up trivial conflicts, mostly just due to the TTY config option clashing with the EXPERIMENTAL removal.
This commit is contained in:
@@ -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.
|
||||
|
||||
|
@@ -541,23 +541,21 @@ int rfcomm_dev_ioctl(struct sock *sk, unsigned int cmd, void __user *arg)
|
||||
static void rfcomm_dev_data_ready(struct rfcomm_dlc *dlc, struct sk_buff *skb)
|
||||
{
|
||||
struct rfcomm_dev *dev = dlc->owner;
|
||||
struct tty_struct *tty;
|
||||
|
||||
if (!dev) {
|
||||
kfree_skb(skb);
|
||||
return;
|
||||
}
|
||||
|
||||
tty = dev->port.tty;
|
||||
if (!tty || !skb_queue_empty(&dev->pending)) {
|
||||
if (!skb_queue_empty(&dev->pending)) {
|
||||
skb_queue_tail(&dev->pending, skb);
|
||||
return;
|
||||
}
|
||||
|
||||
BT_DBG("dlc %p tty %p len %d", dlc, tty, skb->len);
|
||||
BT_DBG("dlc %p len %d", dlc, skb->len);
|
||||
|
||||
tty_insert_flip_string(tty, skb->data, skb->len);
|
||||
tty_flip_buffer_push(tty);
|
||||
tty_insert_flip_string(&dev->port, skb->data, skb->len);
|
||||
tty_flip_buffer_push(&dev->port);
|
||||
|
||||
kfree_skb(skb);
|
||||
}
|
||||
@@ -621,26 +619,23 @@ static void rfcomm_dev_modem_status(struct rfcomm_dlc *dlc, u8 v24_sig)
|
||||
/* ---- TTY functions ---- */
|
||||
static void rfcomm_tty_copy_pending(struct rfcomm_dev *dev)
|
||||
{
|
||||
struct tty_struct *tty = dev->port.tty;
|
||||
struct sk_buff *skb;
|
||||
int inserted = 0;
|
||||
|
||||
if (!tty)
|
||||
return;
|
||||
|
||||
BT_DBG("dev %p tty %p", dev, tty);
|
||||
BT_DBG("dev %p", dev);
|
||||
|
||||
rfcomm_dlc_lock(dev->dlc);
|
||||
|
||||
while ((skb = skb_dequeue(&dev->pending))) {
|
||||
inserted += tty_insert_flip_string(tty, skb->data, skb->len);
|
||||
inserted += tty_insert_flip_string(&dev->port, skb->data,
|
||||
skb->len);
|
||||
kfree_skb(skb);
|
||||
}
|
||||
|
||||
rfcomm_dlc_unlock(dev->dlc);
|
||||
|
||||
if (inserted > 0)
|
||||
tty_flip_buffer_push(tty);
|
||||
tty_flip_buffer_push(&dev->port);
|
||||
}
|
||||
|
||||
static int rfcomm_tty_open(struct tty_struct *tty, struct file *filp)
|
||||
|
@@ -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
|
||||
|
@@ -452,7 +452,7 @@ static int ircomm_tty_open(struct tty_struct *tty, struct file *filp)
|
||||
self->line, self->port.count);
|
||||
|
||||
/* Not really used by us, but lets do it anyway */
|
||||
tty->low_latency = (self->port.flags & ASYNC_LOW_LATENCY) ? 1 : 0;
|
||||
self->port.low_latency = (self->port.flags & ASYNC_LOW_LATENCY) ? 1 : 0;
|
||||
|
||||
/*
|
||||
* If the port is the middle of closing, bail out now
|
||||
@@ -1136,14 +1136,14 @@ static int ircomm_tty_data_indication(void *instance, void *sap,
|
||||
ircomm_tty_send_initial_parameters(self);
|
||||
ircomm_tty_link_established(self);
|
||||
}
|
||||
tty_kref_put(tty);
|
||||
|
||||
/*
|
||||
* Use flip buffer functions since the code may be called from interrupt
|
||||
* context
|
||||
*/
|
||||
tty_insert_flip_string(tty, skb->data, skb->len);
|
||||
tty_flip_buffer_push(tty);
|
||||
tty_kref_put(tty);
|
||||
tty_insert_flip_string(&self->port, skb->data, skb->len);
|
||||
tty_flip_buffer_push(&self->port);
|
||||
|
||||
/* No need to kfree_skb - see ircomm_ttp_data_indication() */
|
||||
|
||||
|
Reference in New Issue
Block a user