- fix-locking-for-tty-drivers-when-doing-urgent-characters.patch removed from -mm tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



The patch titled

     Fix locking for tty drivers when doing urgent characters

has been removed from the -mm tree.  Its filename is

     fix-locking-for-tty-drivers-when-doing-urgent-characters.patch

This patch was dropped because it was merged into mainline or a subsystem tree

------------------------------------------------------
Subject: Fix locking for tty drivers when doing urgent characters
From: Alan Cox <alan@xxxxxxxxxxxxxxxxxxx>

If you send a priority character (as is done for flow control) then the tty
driver can either have its own method for "jumping the queue" or the characrer
can be queued normally.  In the latter case we call the write method but
without the atomic_write_lock taken elsewhere.

Make this consistent.  Note that the send_xchar method if implemented remains
outside of the lock as it can jump ahead of a current write so must not be
locked out by it.

Signed-off-by: Alan Cox <alan@xxxxxxxxxx>
Signed-off-by: Andrew Morton <akpm@xxxxxxxx>
---

 drivers/char/tty_ioctl.c |   18 +++++++++++-------
 1 file changed, 11 insertions(+), 7 deletions(-)

diff -puN drivers/char/tty_ioctl.c~fix-locking-for-tty-drivers-when-doing-urgent-characters drivers/char/tty_ioctl.c
--- a/drivers/char/tty_ioctl.c~fix-locking-for-tty-drivers-when-doing-urgent-characters
+++ a/drivers/char/tty_ioctl.c
@@ -423,24 +423,28 @@ static int set_ltchars(struct tty_struct
  *
  *	Send a high priority character to the tty even if stopped
  *
- *	Locking: none
- *
- *	FIXME: overlapping calls with start/stop tty lose state of tty
+ *	Locking: none for xchar method, write ordering for write method.
  */
 
-static void send_prio_char(struct tty_struct *tty, char ch)
+static int send_prio_char(struct tty_struct *tty, char ch)
 {
 	int	was_stopped = tty->stopped;
 
 	if (tty->driver->send_xchar) {
 		tty->driver->send_xchar(tty, ch);
-		return;
+		return 0;
 	}
+
+	if (mutex_lock_interruptible(&tty->atomic_write_lock))
+		return -ERESTARTSYS;
+
 	if (was_stopped)
 		start_tty(tty);
 	tty->driver->write(tty, &ch, 1);
 	if (was_stopped)
 		stop_tty(tty);
+	mutex_unlock(&tty->atomic_write_lock);
+	return 0;
 }
 
 int n_tty_ioctl(struct tty_struct * tty, struct file * file,
@@ -514,11 +518,11 @@ int n_tty_ioctl(struct tty_struct * tty,
 				break;
 			case TCIOFF:
 				if (STOP_CHAR(tty) != __DISABLED_CHAR)
-					send_prio_char(tty, STOP_CHAR(tty));
+					return send_prio_char(tty, STOP_CHAR(tty));
 				break;
 			case TCION:
 				if (START_CHAR(tty) != __DISABLED_CHAR)
-					send_prio_char(tty, START_CHAR(tty));
+					return send_prio_char(tty, START_CHAR(tty));
 				break;
 			default:
 				return -EINVAL;
_

Patches currently in -mm which might be from alan@xxxxxxxxxxxxxxxxxxx are

origin.patch
git-agpgart.patch
fix-gregkh-driver-nozomi.patch
git-dvb.patch
libata-add-40pin-short-cable-support-honour-drive.patch
via-pata-controller-xfer-fixes.patch
edac-new-opteron-athlon64-memory-controller-driver.patch
edac-new-opteron-athlon64-memory-controller-driver-tidy.patch
ahci-ati-sb600-sata-support-for-various-modes.patch
serial-fix-up-offenders-peering-at-baud-bits-directly.patch
pci-via82cxxx_audio-use-pci_get_device.patch
pci-cs46xx-oss-switch-to-pci_get_device.patch
pci-piix-use-refcounted-interface-when-searching-for-a-450nx.patch
pci-serverworks-switch-to-pci-refcounted-interfaces.patch
pci-sis5513-switch-to-pci-refcounting.patch
pci-via-switch-to-pci_get_device-refcounted-pci-api.patch
ip2-use-newer-pci_get-functions.patch
i2o-switch-to-pci_get-api.patch
cardbus-switch-to-ref-counting-hotplug-safe-api.patch
char-specialix-kill-unneeded-page-alloc.patch
ioremap-balanced-with-iounmap-for-drivers-serial-8250_acorn.patch
ioremap-balanced-with-iounmap-for-drivers-serial-8250_gsc.patch
ioremap-balanced-with-iounmap-for-drivers-serial-ioc4_serial.patch
ioremap-balanced-with-iounmap-for-drivers-serial-ip22zilog.patch
ioremap-balanced-with-iounmap-for-drivers-serial-mpc52xx_uart.patch
ioremap-balanced-with-iounmap-for-drivers-serial-mpsc.patch
ioremap-balanced-with-iounmap-for-drivers-serial-mux.patch
ioremap-balanced-with-iounmap-for-drivers-serial-sunsu.patch
support-piping-into-commands-in-proc-sys-kernel-core_pattern.patch
support-piping-into-commands-in-proc-sys-kernel-core_pattern-fix-2.patch
pci-mxser-pci-refcounts.patch
mxser-make-an-experimental-clone.patch
char-mxser_new-correct-include-file.patch
char-mxser_new-upgrade-to-191.patch
char-mxser_new-rework-to-allow-dynamic-structs.patch
non-libata-driver-for-jmicron-devices.patch
ide-claim-extra-dma-ports-regardless-of-channel.patch
ide-always-release-dma-engine.patch
ide-error-handling-fixes.patch
ide-hpt3xxn-clocking-fixes.patch
ide-fix-hpt37x-timing-tables.patch
ide-optimize-hpt37x-timing-tables.patch
ide-fix-hpt3xx-hotswap-support.patch
ide-fix-the-case-of-multiple-hpt3xx-chips-present.patch
ide-hpt3xx-fix-pci-clock-detection.patch
ide-hpt3xx-fix-pci-clock-detection-fix-2.patch
piix-fix-82371mx-enablebits.patch
piix-remove-check-for-broken-mw-dma-mode-0.patch
piix-slc90e66-pio-mode-fallback-fix.patch
make-number-of-ide-interfaces-configurable.patch
ide_dma_speed-fixes.patch
hpt3xx-rework-rate-filtering.patch
hpt3xx-rework-rate-filtering-tidy.patch
hpt3xx-print-the-real-chip-name-at-startup.patch
hpt3xx-switch-to-using-pci_get_slot.patch
hpt3xx-cache-channels-mcr-address.patch
hpt3x7-merge-speedproc-handlers.patch
hpt370-clean-up-dma-timeout-handling.patch
enable-cdrom-dma-access-with-pdc20265_old.patch
ide-fix-revision-comparison-in-ide_in_drive_list.patch
ide-backport-piix-fixes-from-libata-into-the-legacy-driver.patch
hpt3xx-init-code-rewrite.patch
move-ide-to-unmaintained-drop-reference-to-old-git-tree.patch
drivers-ide-cleanups.patch
ide-remove-dma_base2-field-from-ide_hwif_t.patch
ide-reprogram-disk-pio-timings-on-resume.patch
config_pm=n-slim-drivers-ide-pci-sc1200c.patch
ide-fix-crash-on-repeated-reset.patch
ide-fix-crash-on-repeated-reset-tidy.patch
sstfb-clean-ups.patch
pci_module_init-convertion-in-ata_genericc.patch
pci_module_init-convertion-in-ata_genericc-fix.patch

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

[Index of Archives]     [Kernel Newbies FAQ]     [Kernel Archive]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [Bugtraq]     [Photo]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]

  Powered by Linux