1. 15 Feb, 2013 2 commits
  2. 14 Feb, 2013 4 commits
    • Arnd Bergmann's avatar
      ARM defconfigs: add missing inclusions of linux/platform_device.h · 56cc6cb7
      Arnd Bergmann authored
      Patch 16559ae4 "kgdb: remove #include <linux/serial_8250.h> from kgdb.h"
      removed an implicit inclusion of linux/platform_device.h
      In a number of places. This adds back explicit inclusions in a few
      more places I found.
      Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
      Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
      Cc: Florian Tobias Schandinat <FlorianSchandinat@gmx.de>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      56cc6cb7
    • Arnd Bergmann's avatar
      fb/exynos: include platform_device.h · 76bf7228
      Arnd Bergmann authored
      Patch 16559ae4 "kgdb: remove #include <linux/serial_8250.h> from kgdb.h"
      removed an implicit inclusion of linux/platform_device.h
      from the exynos framebuffer driver. This adds back the required
      explicit header file inclusions.
      Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
      Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
      Cc: Ajay Kumar <ajaykumar.rs@samsung.com>
      Cc: Florian Tobias Schandinat <FlorianSchandinat@gmx.de>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      76bf7228
    • Arnd Bergmann's avatar
      ARM: sa1100/assabet: include platform_device.h directly · 7f206d49
      Arnd Bergmann authored
      Patch "16559ae4 kgdb: remove #include <linux/serial_8250.h> from kgdb.h
      caused assabet_defconfig to fail, since assabet.c did not
      itself include linux/platform_device.h, although it needs it:
      
      In file included from include/linux/mfd/ucb1x00.h:13:0,
                       from arch/arm/mach-sa1100/assabet.c:19:
      include/linux/mfd/mcp.h:22:16: error: field 'attached_device' has incomplete type
      include/linux/mfd/mcp.h:48:23: error: field 'drv' has incomplete type
      In file included from arch/arm/mach-sa1100/assabet.c:19:0:
      include/linux/mfd/ucb1x00.h:137:16: error: field 'dev' has incomplete type
      arch/arm/mach-sa1100/assabet.c: In function 'assabet_init':
      arch/arm/mach-sa1100/assabet.c:343:3: error: implicit declaration of function 'platform_device_register_simple' [-Wimplicit-function-declaration]
      Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
      Cc: Russell King <linux@arm.linux.org.uk>
      Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      7f206d49
    • Thomas Gleixner's avatar
      serial: imx: Fix recursive locking bug · 677fe555
      Thomas Gleixner authored
      commit 9ec1882d (tty: serial: imx: console write routing is unsafe
      on SMP) introduced a recursive locking bug in imx_console_write().
      
      The callchain is:
      
      imx_rxint()
        spin_lock_irqsave(&sport->port.lock,flags);
        ...
        uart_handle_sysrq_char();
          sysrq_function();
            printk();
              imx_console_write();
                spin_lock_irqsave(&sport->port.lock,flags); <--- DEAD
      
      The bad news is that the kernel debugging facilities can dectect the
      problem, but the printks never surface on the serial console for
      obvious reasons.
      
      There is a similar issue with oops_in_progress. If the kernel crashes
      we really don't want to be stuck on the lock and unable to tell what
      happened.
      
      In general most UP originated drivers miss these checks and nobody
      ever notices because CONFIG_PROVE_LOCKING seems to be still ignored by
      a large number of developers.
      
      The solution is to avoid locking in the sysrq case and trylock in the
      oops_in_progress case.
      
      This scheme is used in other drivers as well and it would be nice if
      we could move this to a common place, so the usual copy/paste/modify
      bugs can be avoided.
      
      Now there is another issue with this scheme:
      
      CPU0 	    	     	 CPU1
      printk()
      			 rxint()
      			   sysrq_detection() -> sets port->sysrq
      			 return from interrupt
        console_write()
           if (port->sysrq)
           	avoid locking
      
      port->sysrq is reset with the next receive character. So as long as
      the port->sysrq is not reset and this can take an endless amount of
      time if after the break no futher receive character follows, all
      console writes happen unlocked.
      
      While the current writer is protected against other console writers by
      the console sem, it's unprotected against open/close or other
      operations which fiddle with the port. That's what the above mentioned
      commit tried to solve.
      
      That's an issue in all drivers which use that scheme and unfortunately
      there is no easy workaround. The only solution is to have a separate
      indicator port->sysrq_cpu. uart_handle_sysrq_char() then sets it to
      smp_processor_id() before calling into handle_sysrq() and resets it to
      -1 after that. Then change the locking check to:
      
           if (port->sysrq_cpu == smp_processor_id())
           	 locked = 0;
           else if (oops_in_progress)
               locked = spin_trylock_irqsave(port->lock, flags);
           else
        	 spin_lock_irqsave(port->lock, flags);
      
      That would force all other cpus into the spin_lock path. Problem
      solved, but that's way beyond the scope of this fix and really wants
      to be implemented in a common function which calls the uart specific
      write function to avoid another gazillion of hard to debug
      copy/paste/modify bugs.
      Reported-and-tested-by: default avatarTim Sander <tim@krieglstein.org>
      Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
      Cc: stable <stable@vger.kernel.org>  # 3.6+
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      677fe555
  3. 13 Feb, 2013 11 commits
  4. 08 Feb, 2013 1 commit
  5. 06 Feb, 2013 5 commits
  6. 05 Feb, 2013 5 commits
  7. 04 Feb, 2013 8 commits
    • Peter Hurley's avatar
      pty: Ignore slave open count for master pty open · 80cace72
      Peter Hurley authored
      Multiple slave pty opens may be performed in parallel with the
      master open. Of course, all the slave opens will fail because the
      master pty is still locked but during this time the slave pty
      count will be artificially greater than 1. This is should not
      cause the master pty open to fail.
      Signed-off-by: default avatarPeter Hurley <peter@hurleysoftware.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      80cace72
    • Peter Hurley's avatar
      tty: Document required behavior of tty driver close() · 7be88b4c
      Peter Hurley authored
      If the tty driver open() fails, the tty driver close() is still
      called during the resultant tty release.
      Signed-off-by: default avatarPeter Hurley <peter@hurleysoftware.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      7be88b4c
    • Peter Hurley's avatar
      pty: Ignore slave pty close() if never successfully opened · 69939035
      Peter Hurley authored
      If the master and slave ptys are opened in parallel, the slave open
      fails because the pty is still locked. This is as designed.
      However, pty_close() is still called for the slave pty which sets
      TTY_OTHER_CLOSED in the master pty. This can cause the master open
      to fail as well.
      
      Use a common pattern in other tty drivers by setting TTY_IO_ERROR
      until the open is successful and only closing the pty if not set.
      
      Note: the master pty always closes regardless of whether the open
      was successful, so that proper cleanup can occur.
      Signed-off-by: default avatarPeter Hurley <peter@hurleysoftware.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      69939035
    • Peter Hurley's avatar
      pty: Fix BUG()s when ptmx_open() errors out · 7acf6cd8
      Peter Hurley authored
      If pmtx_open() fails to get a slave inode or fails the pty_open(),
      the tty is released as part of the error cleanup. As evidenced by the
      first BUG stacktrace below, pty_close() assumes that the linked pty has
      a valid, initialized inode* stored in driver_data.
      
      Also, as evidenced by the second BUG stacktrace below, pty_unix98_shutdown()
      assumes that the master pty's driver_data has been initialized.
      
      1) Fix the invalid assumption in pty_close().
      2) Initialize driver_data immediately so proper devpts fs cleanup occurs.
      
      Fixes this BUG:
      
      [  815.868844] BUG: unable to handle kernel NULL pointer dereference at 0000000000000028
      [  815.869018] IP: [<ffffffff81207bcc>] devpts_pty_kill+0x1c/0xa0
      [  815.869190] PGD 7c775067 PUD 79deb067 PMD 0
      [  815.869315] Oops: 0000 [#1] PREEMPT SMP
      [  815.869443] Modules linked in: kvm_intel kvm snd_hda_intel snd_hda_codec snd_hwdep snd_pcm snd_seq_midi microcode snd_rawmidi psmouse serio_raw snd_seq_midi_event snd_seq snd_timer$
      [  815.870025] CPU 0
      [  815.870143] Pid: 27819, comm: stress_test_tty Tainted: G        W    3.8.0-next-20130125+ttypatch-2-xeon #2 Bochs Bochs
      [  815.870386] RIP: 0010:[<ffffffff81207bcc>]  [<ffffffff81207bcc>] devpts_pty_kill+0x1c/0xa0
      [  815.870540] RSP: 0018:ffff88007d3e1ac8  EFLAGS: 00010282
      [  815.870661] RAX: ffff880079c20800 RBX: 0000000000000000 RCX: 0000000000000000
      [  815.870804] RDX: ffff880079c209a8 RSI: 0000000000000286 RDI: 0000000000000000
      [  815.870933] RBP: ffff88007d3e1ae8 R08: 0000000000000000 R09: 0000000000000000
      [  815.871078] R10: 0000000000000000 R11: 0000000000000001 R12: ffff88007bfb7e00
      [  815.871209] R13: 0000000000000005 R14: ffff880079c20c00 R15: ffff880079c20c00
      [  815.871343] FS:  00007f2e86206700(0000) GS:ffff88007fc00000(0000) knlGS:0000000000000000
      [  815.871495] CS:  0010 DS: 0000 ES: 0000 CR0: 000000008005003b
      [  815.871617] CR2: 0000000000000028 CR3: 000000007ae56000 CR4: 00000000000006f0
      [  815.871752] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
      [  815.871902] DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400
      [  815.872012] Process stress_test_tty (pid: 27819, threadinfo ffff88007d3e0000, task ffff88007c874530)
      [  815.872012] Stack:
      [  815.872012]  ffff88007bfb7e00 ffff880079c20c00 ffff88007bfb7e00 0000000000000005
      [  815.872012]  ffff88007d3e1b08 ffffffff81417be7 ffff88007caa9bd8 ffff880079c20800
      [  815.872012]  ffff88007d3e1bc8 ffffffff8140e5f8 0000000000000000 0000000000000000
      [  815.872012] Call Trace:
      [  815.872012]  [<ffffffff81417be7>] pty_close+0x157/0x170
      [  815.872012]  [<ffffffff8140e5f8>] tty_release+0x138/0x580
      [  815.872012]  [<ffffffff816d29f3>] ? _raw_spin_lock+0x23/0x30
      [  815.872012]  [<ffffffff816d267a>] ? _raw_spin_unlock+0x1a/0x40
      [  815.872012]  [<ffffffff816d0178>] ? __mutex_unlock_slowpath+0x48/0x60
      [  815.872012]  [<ffffffff81417dff>] ptmx_open+0x11f/0x180
      [  815.872012]  [<ffffffff8119394b>] chrdev_open+0x9b/0x1c0
      [  815.872012]  [<ffffffff8118d643>] do_dentry_open+0x203/0x290
      [  815.872012]  [<ffffffff811938b0>] ? cdev_put+0x30/0x30
      [  815.872012]  [<ffffffff8118d705>] finish_open+0x35/0x50
      [  815.872012]  [<ffffffff8119dcce>] do_last+0x6fe/0xe90
      [  815.872012]  [<ffffffff8119a7af>] ? link_path_walk+0x7f/0x880
      [  815.872012]  [<ffffffff810909d5>] ? cpuacct_charge+0x75/0x80
      [  815.872012]  [<ffffffff8119e51c>] path_openat+0xbc/0x4e0
      [  815.872012]  [<ffffffff816d0fd0>] ? __schedule+0x400/0x7f0
      [  815.872012]  [<ffffffff8140e956>] ? tty_release+0x496/0x580
      [  815.872012]  [<ffffffff8119ec11>] do_filp_open+0x41/0xa0
      [  815.872012]  [<ffffffff816d267a>] ? _raw_spin_unlock+0x1a/0x40
      [  815.872012]  [<ffffffff811abe39>] ? __alloc_fd+0xe9/0x140
      [  815.872012]  [<ffffffff8118ea44>] do_sys_open+0xf4/0x1e0
      [  815.872012]  [<ffffffff8118eb51>] sys_open+0x21/0x30
      [  815.872012]  [<ffffffff816da499>] system_call_fastpath+0x16/0x1b
      [  815.872012] Code: 0f 1f 80 00 00 00 00 45 31 e4 eb d7 0f 0b 90 0f 1f 44 00 00 55 48 89 e5 48 83 ec 20 48 89 5d e8 48 89 fb 4c 89 65 f0 4c 89 6d f8 <48> 8b 47 28 48 81 78 58 d1 1c 0$
      [  815.872012] RIP  [<ffffffff81207bcc>] devpts_pty_kill+0x1c/0xa0
      [  815.872012]  RSP <ffff88007d3e1ac8>
      [  815.872012] CR2: 0000000000000028
      [  815.897036] ---[ end trace eadf50b7f34e47d5 ]---
      
      Fixes this BUG also:
      
      [  608.366836] BUG: unable to handle kernel NULL pointer dereference at 0000000000000028
      [  608.366948] IP: [<ffffffff812078d8>] devpts_kill_index+0x18/0x70
      [  608.367050] PGD 7c75b067 PUD 7b919067 PMD 0
      [  608.367135] Oops: 0000 [#1] PREEMPT SMP
      [  608.367201] Modules linked in: kvm_intel kvm snd_hda_intel snd_hda_codec snd_hwdep snd_pcm snd_seq_midi snd_rawmidi snd_seq_midi_event microcode snd_seq psmouse snd_timer snd_seq_device serio_raw snd mac_hid soundcore snd_page_alloc rfcomm virtio_balloon parport_pc bnep bluetooth ppdev i2c_piix4 lp parport floppy
      [  608.367617] CPU 2
      [  608.367669] Pid: 1918, comm: stress_test_tty Tainted: G        W    3.8.0-next-20130125+ttypatch-2-xeon #2 Bochs Bochs
      [  608.367796] RIP: 0010:[<ffffffff812078d8>]  [<ffffffff812078d8>] devpts_kill_index+0x18/0x70
      [  608.367885] RSP: 0018:ffff88007ae41a88  EFLAGS: 00010286
      [  608.367951] RAX: ffffffff81417e80 RBX: ffff880036472400 RCX: 0000000180400028
      [  608.368010] RDX: ffff880036470004 RSI: 0000000000000004 RDI: 0000000000000000
      [  608.368010] RBP: ffff88007ae41a98 R08: 0000000000000000 R09: 0000000000000001
      [  608.368010] R10: ffffea0001f22e40 R11: ffffffff814151d5 R12: 0000000000000004
      [  608.368010] R13: ffff880036470000 R14: 0000000000000004 R15: ffff880036472400
      [  608.368010] FS:  00007ff7a5268700(0000) GS:ffff88007fd00000(0000) knlGS:0000000000000000
      [  608.368010] CS:  0010 DS: 0000 ES: 0000 CR0: 000000008005003b
      [  608.368010] CR2: 0000000000000028 CR3: 000000007a0fd000 CR4: 00000000000006e0
      [  608.368010] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
      [  608.368010] DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400
      [  608.368010] Process stress_test_tty (pid: 1918, threadinfo ffff88007ae40000, task ffff88003688dc40)
      [  608.368010] Stack:
      [  608.368010]  ffff880036472400 0000000000000001 ffff88007ae41aa8 ffffffff81417e98
      [  608.368010]  ffff88007ae41ac8 ffffffff8140c42b ffff88007ac73100 ffff88007ac73100
      [  608.368010]  ffff88007ae41b98 ffffffff8140ead5 ffff88007ae41b38 ffff88007ca40e40
      [  608.368010] Call Trace:
      [  608.368010]  [<ffffffff81417e98>] pty_unix98_shutdown+0x18/0x20
      [  608.368010]  [<ffffffff8140c42b>] release_tty+0x3b/0xe0
      [  608.368010]  [<ffffffff8140ead5>] __tty_release+0x575/0x5d0
      [  608.368010]  [<ffffffff816d2c63>] ? _raw_spin_lock+0x23/0x30
      [  608.368010]  [<ffffffff816d28ea>] ? _raw_spin_unlock+0x1a/0x40
      [  608.368010]  [<ffffffff816d03e8>] ? __mutex_unlock_slowpath+0x48/0x60
      [  608.368010]  [<ffffffff8140ef79>] tty_open+0x449/0x5f0
      [  608.368010]  [<ffffffff8119394b>] chrdev_open+0x9b/0x1c0
      [  608.368010]  [<ffffffff8118d643>] do_dentry_open+0x203/0x290
      [  608.368010]  [<ffffffff811938b0>] ? cdev_put+0x30/0x30
      [  608.368010]  [<ffffffff8118d705>] finish_open+0x35/0x50
      [  608.368010]  [<ffffffff8119dcce>] do_last+0x6fe/0xe90
      [  608.368010]  [<ffffffff8119a7af>] ? link_path_walk+0x7f/0x880
      [  608.368010]  [<ffffffff8119e51c>] path_openat+0xbc/0x4e0
      [  608.368010]  [<ffffffff8119ec11>] do_filp_open+0x41/0xa0
      [  608.368010]  [<ffffffff816d28ea>] ? _raw_spin_unlock+0x1a/0x40
      [  608.368010]  [<ffffffff811abe39>] ? __alloc_fd+0xe9/0x140
      [  608.368010]  [<ffffffff8118ea44>] do_sys_open+0xf4/0x1e0
      [  608.368010]  [<ffffffff816d2c63>] ? _raw_spin_lock+0x23/0x30
      [  608.368010]  [<ffffffff8118eb51>] sys_open+0x21/0x30
      [  608.368010]  [<ffffffff816da719>] system_call_fastpath+0x16/0x1b
      [  608.368010] Code: ec 48 83 c4 10 5b 41 5c 5d c3 66 0f 1f 84 00 00 00 00 00 0f 1f 44 00 00 55 48 89 e5 48 83 ec 10 4c 89 65 f8 41 89 f4 48 89 5d f0 <48> 8b 47 28 48 81 78 58 d1 1c 00 00 74 0b 48 8b 05 4b 66 cf 00
      [  608.368010] RIP  [<ffffffff812078d8>] devpts_kill_index+0x18/0x70
      [  608.368010]  RSP <ffff88007ae41a88>
      [  608.368010] CR2: 0000000000000028
      [  608.394153] ---[ end trace afe83b0fb5fbda93 ]---
      Reported-by: default avatarIlya Zykov <ilya@ilyx.ru>
      Signed-off-by: default avatarPeter Hurley <peter@hurleysoftware.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      7acf6cd8
    • Greg Kroah-Hartman's avatar
      kgdb: remove #include <linux/serial_8250.h> from kgdb.h · 16559ae4
      Greg Kroah-Hartman authored
      There's no reason kgdb.h itself needs to include the 8250 serial port
      header file.  So push it down to the _very_ limited number of individual
      drivers that need the values in that file, and fix up the places where
      people really wanted serial_core.h and platform_device.h.
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      16559ae4
    • Michael Chan's avatar
      serial_core: Fix type definition for PORT_BRCM_TRUMANAGE. · 85f02440
      Michael Chan authored
      It was mistakenly defined to be 24 instead of the next higher number 25.
      Reported-by: default avatarAlexander Shishkin <alexander.shishkin@linux.intel.com>
      Cc: Stephen Hurd <shurd@broadcom.com>
      Signed-off-by: default avatarMichael Chan <mchan@broadcom.com>
      Cc: stable <stable@vger.kernel.org>  # 3.8
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      85f02440
    • Ivo Sieben's avatar
      tty: Use raw spin lock to protect the TTY read section · 98001214
      Ivo Sieben authored
      The "normal" spin lock that guards the N_TTY line discipline read section
      is replaced by a raw spin lock.
      
      On a PREEMP_RT system this prevents unwanted scheduling overhead when data is
      read at the same time as data is being received: while RX IRQ threaded handling
      is busy a TTY read call is performed from a RT priority > threaded IRQ priority.
      The read call tries to take the read section spin lock (held by the threaded
      IRQ) which blocks and causes a context switch to/from the threaded IRQ handler
      until the spin lock is unlocked.
      Signed-off-by: default avatarIvo Sieben <meltedpianoman@gmail.com>
      Reviewed-by: default avatarThomas Gleixner <tglx@linutronix.de>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      98001214
    • Oleg Nesterov's avatar
      tty: set_termios/set_termiox should not return -EINTR · 183d95cd
      Oleg Nesterov authored
      See https://bugzilla.redhat.com/show_bug.cgi?id=904907
      read command causes bash to abort with double free or corruption (out).
      
      A simple test-case from Roman:
      
      	// Compile the reproducer and send sigchld ti that process.
      	// EINTR occurs even if SA_RESTART flag is set.
      
      	void handler(int sig)
      	{
      	}
      
      	main()
      	{
      	  struct sigaction act;
      	  act.sa_handler = handler;
      	  act.sa_flags = SA_RESTART;
      	  sigaction (SIGCHLD, &act, 0);
      	  struct termio ttp;
      	  ioctl(0, TCGETA, &ttp);
      	  while(1)
      	  {
      	    if (ioctl(0, TCSETAW, ttp) < 0)
      	      {
      		if (errno == EINTR)
      		{
      		  fprintf(stderr, "BUG!"); return(1);
      		}
      	      }
      	  }
      	}
      
      Change set_termios/set_termiox to return -ERESTARTSYS to fix this
      particular problem.
      
      I didn't dare to change other EINTR's in drivers/tty/, but they look
      equally wrong.
      Reported-by: default avatarRoman Rakus <rrakus@redhat.com>
      Reported-by: default avatarLingzhu Xiang <lxiang@redhat.com>
      Signed-off-by: default avatarOleg Nesterov <oleg@redhat.com>
      Cc: Jiri Slaby <jslaby@suse.cz>
      Cc: stable <stable@vger.kernel.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      183d95cd
  8. 30 Jan, 2013 4 commits
    • Dirkjan Bussink's avatar
      tty: Prevent deadlock in n_gsm driver · 4d9b1090
      Dirkjan Bussink authored
      This change fixes a deadlock when the multiplexer is closed while there
      are still client side ports open.
      
      When the multiplexer is closed and there are active tty's it tries to
      close them with tty_vhangup. This has a problem though, because
      tty_vhangup needs the tty_lock. This patch changes it to unlock the
      tty_lock before attempting the hangup and relocks afterwards. The
      additional call to tty_port_tty_set is needed because otherwise the
      port stays active because of the reference counter.
      
      This change also exposed another problem that other code paths don't
      expect that the multiplexer could have been closed. This patch also adds
      checks for these cases in the gsmtty_ class of function that could be
      called.
      
      The documentation explicitly states that "first close all virtual ports
      before closing the physical port" but we've found this to not always
      reality in our field situations. The GPRS / UTMS modem sometimes crashes
      and needs a power cycle in that case which means cleanly shutting down
      everything is not always possible. This change makes it much more robust
      for our situation where at least the system is recoverable with this patch
      and doesn't hang in a deadlock situation inside the kernel.
      
      The patch is against the long term support kernel (3.4.27) and should
      apply cleanly to more recent branches. Tested with a Telit GE864-QUADV2
      and Telit HE910 modem.
      Signed-off-by: default avatarDirkjan Bussink <dirkjan.bussink@nedap.com>
      Cc: stable <stable@vger.kernel.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      4d9b1090
    • John Crispin's avatar
      serial: ralink: adds support for the serial core found on ralink wisoc · c420811f
      John Crispin authored
      The MIPS based Ralink WiSoC platform has 1 or more 8250 compatible serial cores.
      To make them work we require the same quirks that are used by AU1x00.
      Signed-off-by: default avatarJohn Crispin <blogic@openwrt.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      c420811f
    • Joe Perches's avatar
      TTY: synclink: Convert + to | for bit operations · 9fe8074b
      Joe Perches authored
      Dan Carpenter noticed a missing set of parentheses
      around a multiple field addition.
      
      https://lkml.org/lkml/2013/1/27/166
      
      His original commit message:
      
      There is a kind of precedence problem here, but it doesn't affect how
      the code works because ->serial_signals is unsigned char.  We want to
      clear two flags here.
      
      #define SerialSignal_RTS            0x20     /* Request to Send */
      #define SerialSignal_DTR            0x80     /* Data Terminal Ready */
      
      Without the parenthesis then it does:
      
      	info->serial_signals &= 0x5f;
      
      With the parenthesis it does:
      
      	info->serial_signals &= 0xffffff5f;
      
      info->serial_signals is an unsigned char so the two statements are
      equivalent, but it's cleaner to add the parenthesis.  In other dtr_rts()
      functions the parenthesis are there so this makes it more consistent.
      
      Other changes:
      
      Convert all + uses to | for these bit operations.
      
      Reorder the multiple fields for consistency.
      Update the comments too.
      Reported-by: default avatarDan Carpenter <dan.carpenter@oracle.com>
      Signed-off-by: default avatarJoe Perches <joe@perches.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      9fe8074b
    • Stephen Chivers's avatar
      serial/8250: Add suport for later SUNIX (TIMEDIA) boards. · abd7baca
      Stephen Chivers authored
      Add support for later SUNIX (TIMEDIA) Universal PCI Single and Multi-Port
      Communications Boards.
      
      These boards have PCI Vendor ID 1fd4 with device ID 1999 but otherwise
      appear to be the same as the TIMEDIA boards already supported by 8250_pci
      and parport_serial.
      
      Tested with:
      
      	a. the two port serial board part number SER5037A,
      	b. the two port serial and one port parallel board part number
      	   MIO5079A.
      Signed-off-by: default avatarStephen Chivers <schivers@csc.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      abd7baca