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