1. 13 7月, 2009 2 次提交
    • J
      USB: console: Fix regression in usb console on kernel boot · 6e406121
      Jason Wessel 提交于
      The commit 335f8514 introduced a
      regression which stopped usb consoles from working correctly as a
      kernel boot console as well as interactive login device.
      
      The addition of the serial_close() which in turn calls
      tty_port_close_start() will change the reference count of port.count
      and warn about it.  The usb console code had previously incremented
      the port.count to indicate it was making use of the device as a
      console and the forced change causes a double open on the usb device
      which leads to a non obvious kernel oops later on when the tty is
      freed.
      
      To fix the problem instead make use of port->console to track if the
      port is in fact an active console port to avoid double initialization
      of the usb serial device.  The port.count is incremented and
      decremented only with in the scope of usb_console_setup() for the
      purpose of the low level driver initialization.
      Signed-off-by: NJason Wessel <jason.wessel@windriver.com>
      Acked-by: NAlan Cox <alan@linux.intel.com>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
      6e406121
    • A
      headers: smp_lock.h redux · 405f5571
      Alexey Dobriyan 提交于
      * Remove smp_lock.h from files which don't need it (including some headers!)
      * Add smp_lock.h to files which do need it
      * Make smp_lock.h include conditional in hardirq.h
        It's needed only for one kernel_locked() usage which is under CONFIG_PREEMPT
      
        This will make hardirq.h inclusion cheaper for every PREEMPT=n config
        (which includes allmodconfig/allyesconfig, BTW)
      Signed-off-by: NAlexey Dobriyan <adobriyan@gmail.com>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      405f5571
  2. 26 6月, 2009 1 次提交
  3. 16 6月, 2009 2 次提交
  4. 11 6月, 2009 1 次提交
  5. 29 5月, 2009 1 次提交
    • A
      usb-serial: fix crash when sub-driver updates firmware · 0a3c8549
      Alan Stern 提交于
      This patch (as1244) fixes a crash in usb-serial that occurs when a
      sub-driver returns a positive value from its attach method, indicating
      that new firmware was loaded and the device will disconnect and
      reconnect.  The usb-serial core then skips the step of registering the
      port devices; when the disconnect occurs, the attempt to unregister
      the ports fails dramatically.
      
      This problem shows up with Keyspan devices and it might affect others
      as well.
      
      When the attach method returns a positive value, the patch sets
      num_ports to 0.  This tells usb_serial_disconnect() not to try
      unregistering any of the ports; instead they are cleaned up by
      destroy_serial().
      Signed-off-by: NAlan Stern <stern@rowland.harvard.edu>
      Tested-by: NBenjamin Herrenschmidt <benh@kernel.crashing.org>
      Cc: stable <stable@kernel.org>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
      
      0a3c8549
  6. 24 4月, 2009 1 次提交
    • A
      USB: serial: fix lifetime and locking problems · 2d93148a
      Alan Stern 提交于
      This patch (as1229) fixes a few lifetime and locking problems in the
      usb-serial driver.  The main symptom is that an invalid kevent is
      created when the serial device is unplugged while a connection is
      active.
      
      	Ports should be unregistered when device is disconnected,
      	not when the parent usb_serial structure is deallocated.
      
      	Each open file should hold a reference to the corresponding
      	port structure, and the reference should be released when
      	the file is closed.
      
      	serial->disc_mutex should be acquired in serial_open(), to
      	resolve the classic race between open and disconnect.
      
      	serial_close() doesn't need to hold both serial->disc_mutex
      	and port->mutex at the same time.
      
      	Release the subdriver's module reference only after releasing
      	all the other references, in case one of the release routines
      	needs to invoke some code in the subdriver module.
      
      	Replace a call to flush_scheduled_work() (which is prone to
      	deadlocks) with cancel_work_sync().  Also, add a call to
      	cancel_work_sync() in the disconnect routine.
      
      	Reduce the scope of serial->disc_mutex in serial_disconnect().
      	The only place it really needs to protect is where the
      	"disconnected" flag is set.
      
      This fixes the bug reported in
      
      	http://bugs.freedesktop.org/show_bug.cgi?id=20703Signed-off-by: NAlan Stern <stern@rowland.harvard.edu>
      Tested-by: NDan Williams <dcbw@redhat.com>
      Tested-by: NMing Lei <tom.leiming@gmail.com>
      Reviewed-by: NOliver Neukum <oliver@neukum.org>
      Acked-by: NAlan Cox <alan@linux.intel.com>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
      
      2d93148a
  7. 01 4月, 2009 1 次提交
  8. 25 3月, 2009 5 次提交
    • D
      usb-serial: fix usb_serial_register bug when boot with nousb param · e4abe665
      Dave Young 提交于
      With "nousb" cmdline booting, built-in serial drivers (ie. airecable)
      will trigger kernel oops.
      
      Indeed, if nousb, usb_serial_init will failed, and the usb serial bus type
      will not be registerd, then usb_serial_register call driver_register
      which try to register the driver to a not registered bus.
      
      Here add usb_disabled() check in usb_serial_register to fix it.
      Signed-off-by: NDave Young <hidave.darkstar@gmail.com>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
      e4abe665
    • J
      USB: serial: refuse to open recently removed USB Serial devices · 331879fd
      James Woodcock 提交于
      A USB-serial converter device is plugged into a system, and a process
      opens it's device node.  If the device is physically removed whilst the
      process still has its device node open, then other processes can
      sucessfully open the now non-existent device's node.  I would expect
      that open() on a device that has been physically removed should return
      ENODEV.
      
      This is manifesting itself with getty on my system.  I do the following:
      1.  set up inittab to spawn getty on ttyUSB0, eg:
          T1:23:respawn:/sbin/getty -L ttyUSB0 115200 vt100
      2.  Plug in USB-serial converter cable
      3.  Wait for a login prompt on a terminal program attached to the serial
          cable
      4.  Login
      5.  Pull the USB-serial converter cable from the box
      6.  getty doesn't realise that ttyUSB0 no longer exists as /dev/ttyUSB0
          can still be opened.
      7.  Re-insert the USB-serial converter cable
      8.  You should no longer get a login prompt over the serial cable, as
          the the USB-serial cable now shows up as /dev/ttyUSB1, and getty is
          trying to talk to /dev/ttyUSB0.
      
      The attached patch will cause open("/dev/ttyUSB0", O_RDONLY) to return
      ENODEV after the USB-serial converter has been pulled.  The patch was
      created against 2.6.28.1.  I can supply it against something else if
      needs be.  It is fairly simple, so should be OK.
      
      I am using a pl2303 device, although I don't think that makes any
      difference.
      
      
      From: James Woodcock <James.Woodcock@ACULAB.COM>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
      331879fd
    • O
      USB: serial: remove recourse to generic method · 1c27ae67
      Oliver Neukum 提交于
      This removes the fallback to the generic method. It is cleaner to
      explicitely request it. Introducing this was my mistake. This will
      be solved by an explicit test and the driver being allowed to request
      what it needs to be done upon resumption.
      Signed-off-by: NOliver Neukum <oneukum@suse.de>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
      1c27ae67
    • O
      USB: serial: use generic method if no alternative is provided in usb serial layer · c49cfa91
      Oliver Neukum 提交于
      This patch makes use of the generic method if a serial driver provides
      no implementation. This simplifies implementing suspend/resume support
      in serial drivers.
      Signed-off-by: NOliver Neukum <oneukum@suse.de>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
      c49cfa91
    • O
      USB: serial: introduce a flag into the usb serial layer to tell drivers that... · f8bece8d
      Oliver Neukum 提交于
      USB: serial: introduce a flag into the usb serial layer to tell drivers that their URBs are killed due to suspension
      
      This patch introduces a flag into the usb serial layer to tell drivers
      that their URBs are killed due to suspension. That is necessary to let
      drivers know whether they should report an error back.
      Signed-off-by: NOliver Neukum <oneukum@suse.de>
      
      Hi Greg,
      
      this is for 2.6.30. Patches to use this in drivers are under development.
      
      	Regards
      		Oliver
      
      f8bece8d
  9. 13 1月, 2009 1 次提交
  10. 03 1月, 2009 3 次提交
  11. 31 10月, 2008 1 次提交
  12. 18 10月, 2008 2 次提交
  13. 14 10月, 2008 1 次提交
    • A
      tty: usb-serial krefs · 4a90f09b
      Alan Cox 提交于
      Use kref in the USB serial drivers so that we don't free tty structures
      from under the URB receive handlers as has historically been the case if
      you were unlucky. This also gives us a framework for general tty drivers to
      use tty_port objects and refcount.
      
      Contains two err->dev_err changes merged together to fix clashes in the
      -next tree.
      Signed-off-by: NAlan Cox <alan@redhat.com>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      4a90f09b
  14. 24 9月, 2008 1 次提交
  15. 14 8月, 2008 1 次提交
  16. 23 7月, 2008 3 次提交
  17. 22 7月, 2008 4 次提交
  18. 30 4月, 2008 1 次提交
    • A
      tty: The big operations rework · f34d7a5b
      Alan Cox 提交于
      - Operations are now a shared const function block as with most other Linux
        objects
      
      - Introduce wrappers for some optional functions to get consistent behaviour
      
      - Wrap put_char which used to be patched by the tty layer
      
      - Document which functions are needed/optional
      
      - Make put_char report success/fail
      
      - Cache the driver->ops pointer in the tty as tty->ops
      
      - Remove various surplus lock calls we no longer need
      
      - Remove proc_write method as noted by Alexey Dobriyan
      
      - Introduce some missing sanity checks where certain driver/ldisc
        combinations would oops as they didn't check needed methods were present
      
      [akpm@linux-foundation.org: fix fs/compat_ioctl.c build]
      [akpm@linux-foundation.org: fix isicom]
      [akpm@linux-foundation.org: fix arch/ia64/hp/sim/simserial.c build]
      [akpm@linux-foundation.org: fix kgdb]
      Signed-off-by: NAlan Cox <alan@redhat.com>
      Acked-by: NGreg Kroah-Hartman <gregkh@suse.de>
      Cc: Jason Wessel <jason.wessel@windriver.com>
      Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      f34d7a5b
  19. 25 4月, 2008 4 次提交
  20. 16 4月, 2008 1 次提交
    • G
      USB: remove broken usb-serial num_endpoints check · 07c3b1a1
      Greg Kroah-Hartman 提交于
      The num_interrupt_in, num_bulk_in, and other checks in the usb-serial
      code are just wrong, there are too many different devices out there with
      different numbers of endpoints.  We need to just be sticking with the
      device ids instead of trying to catch this kind of thing.  It broke too
      many different devices.
      
      This fixes a large number of usb-serial devices to get them working
      properly again.
      
      
      Cc: Oliver Neukum <oliver@neukum.org>
      Cc: stable <stable@kernel.org>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
      07c3b1a1
  21. 02 2月, 2008 3 次提交
    • O
      USB: stop io performed by mos7720 upon close() · a1cd7e99
      Oliver Neukum 提交于
      This fixes a problem where the mos7720 driver will make io to a device from
      which it has been logically disconnected. It does so by introducing a flag by
      which the generic usb serial code can signal the subdrivers their
      disconnection and appropriate locking.
      Signed-off-by: NOliver Neukum <oneukum@suse.de>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
      
      a1cd7e99
    • S
      USB: Prepare serial core for autosuspend. · f0fbd5b9
      Sarah Sharp 提交于
      Claim the interface for a USB to serial converter when the tty is open,
      and release the interface when the tty is closed.
      
      If a driver doesn't provide a resume function, use the generic resume
      instead.
      
      Make sure the generic resume function does not submit the URBs if we're
      coming back from autosuspend.  On autoresume, we know that the open
      function will be called next, which will attempt to submit the URBs.  If
      we submit them in the resume function, the open will fail.
      
      This works for:
       - autosuspend
       - suspending with the tty open or closed
       - hibernate with the tty closed
      
      A hibernate (or a suspend that causes the USB subsystem to lose power)
      has issues.  If you have the tty open when you hibernate, a new tty will
      be created when the device re-enumerates during resume.
      Signed-off-by: NSarah Sharp <sarah.a.sharp@intel.com>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
      f0fbd5b9
    • A
      USB: usb_serial: clean tty reference in the last close · 9a6b1efa
      Aristeu Rozanski 提交于
      When a usb serial adapter is used as console, the usb serial console
      driver bumps the open_count on the port struct used but doesn't attach
      a real tty to it (only a fake one temporaly). If this port is opened later
      using the regular character device interface, the open method won't
      initialize the port, which is the expected, and will receive a brand new
      tty struct created by tty layer, which will be stored in port->tty.
      
      When the last close is issued, open_count won't be 0 because of the
      console usage and the port->tty will still contain the old tty value. This
      is the last ttyUSB<n> close so the allocated tty will be freed by the
      tty layer. The usb_serial and usb_serial_port are still in use by the
      console, so port_free() won't be called (serial_close() ->
      usb_serial_put() -> destroy_serial() -> port_free()), so the scheduled
      work (port->work, usb_serial_port_work()) will still run. And
      usb_serial_port_work() does:
      (...)
              tty = port->tty;
              if (!tty)
                      return;
      
              tty_wakeup(tty);
      which causes (manually copied):
      
      Faulting instruction address: 0x6b6b6b68
      Oops: Kernel access of bad area, sig: 11 [#1]
      PREEMPT PowerMac
      Modules linked in: binfmt_misc ipv6 nfs lockd nfs_acl sunrpc dm_snapshot dm_mirror dm_mod hfsplus uinput ams input_polldev genrtc cpufreq_powersave i2c_powermac therm_adt746x snd_aoa_codec_tas snd_aoa_fabric_layout snd_aoa joydev snd_aoa_i2sbus snd_pcm_oss snd_mixer_oss snd_pcm snd_timer snd_page_alloc pmac_zilog serial_core evdev ide_cd cdrom snd appletouch soundcore snd_aoa_soundbus bcm43xx firmware_class usbhid ieee80211softmac ff_memless firewire_ohci firewire_core ieee80211 ieee80211_crypt crc_itu_t sungem sungem_phy uninorth_agp agpart ssb
      NIP: 6b6b6b68 LR: c01b2108 CTR: 6b6b6b6b
      REGS: c106de80 TRAP: 0400   Not tainted  (2.6.24-rc2)
      MSR: 40009032 <EE,ME,IR,DR>  CR: 82004024  XER: 00000000
      TASK = c106b4c0[5] 'events/0' THREAD: c106c000
      GPR00: 6b6b6b6b c106df30 c106b4c0 c2d613a0 00009032 00000001 00001a00 00000001
      GPR08: 00000008 00000000 00000000 c106c000 42004028 00000000 016ffbe0 0171a724
      GPR16: 016ffcf4 00240e24 00240e70 016fee68 016ff9a4 c03046c4 c0327f50 c03046fc
      GPR24: c106b6b9 c106b4c0 c101d610 c106c000 c02160fc c1eac1dc c2d613ac c2d613a0
      NIP [6b6b6b68] 0x6b6b6b68
      LR [c01b2108] tty_wakeup+0x6c/0x9c
      Call Trace:
      [c106df30] [c01b20e8] tty_wakeup+0x4c/0x9c (unreliable)
      [c106df40] [c0216138] usb_serial_port_work+0x3c/0x78
      [c106df50] [c00432e8] run_workqueue+0xc4/0x15c
      [c106df90] [c0043798] worker_thread+0xa0/0x124
      [c106dfd0] [c0048224] kthread+0x48/0x84
      [c106dff0] [c00129bc] kernel_thread+0x44/0x60
      Instruction dump:
      XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX
      XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX
      Slab corruption: size-2048 start=c2d613a0, len=2048
      Redzone: 0x9f911029d74e35b/0x9f911029d74e35b.
      Last user: [<c01b16d8>](release_one_tty+0xbc/0xf4)
      050: 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b
      Prev obj: start=c2d60b88, len=2048
      Redzone: 0x9f911029d74e35b/0x9f911029d74e35b.
      Last user: [<c00f30ec>](show_stat+0x410/0x428)
      000: 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b
      010: 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b
      
      This patch avoids this, clearing port->tty considering if the port is
      used as serial console or not
      Signed-off-by: NAristeu Rozanski <arozansk@redhat.com>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
      
      9a6b1efa