| Age | Commit message (Collapse) | Author | Files | Lines |
|
Make sure to handle an infinite timeout (0).
Note that wait_until_sent is currently never called with a 0-timeout
argument due to a bug in tty_wait_until_sent.
Fixes: dcf010503966 ("USB: serial: add generic wait_until_sent
implementation")
Cc: stable <[email protected]> # v3.10
Signed-off-by: Johan Hovold <[email protected]>
Signed-off-by: Greg Kroah-Hartman <[email protected]>
|
|
If a USB serial device (e.g. /dev/ttyUSB0) with an active program is
unplugged, an -ENODEV (19) error will be produced after it gives up
trying to resubmit a read.
usb_serial_generic_submit_read_urb - usb_submit_urb failed: -19
Add -ENODEV as one of the permanent errors along with -EPERM that
usb_serial_generic_submit_read_urb() handles quietly without an error.
Signed-off-by: Jeremiah Mahler <[email protected]>
Signed-off-by: Johan Hovold <[email protected]>
|
|
If a USB serial device is unplugged while there is an active program
using the device it may spam the logs with -EPROTO (71) messages as it
attempts to retry.
Most serial usb drivers (metro-usb, pl2303, mos7840, ...) only output
these messages for debugging. The generic driver treats these as
errors.
Change the default output for the generic serial driver from error to
debug to silence these non-critical errors.
Signed-off-by: Jeremiah Mahler <[email protected]>
Signed-off-by: Johan Hovold <[email protected]>
|
|
Add missing braces to conditional branches and one loop in usb-serial
core and generic implementation.
Signed-off-by: Johan Hovold <[email protected]>
Signed-off-by: Greg Kroah-Hartman <[email protected]>
|
|
Do not discard buffered data and make sure to try to resubmit the write
urbs on errors.
Currently a recoverable error would lead to more data than necessary
being dropped.
Also upgrade error messages from debug to error log level.
Signed-off-by: Johan Hovold <[email protected]>
Signed-off-by: Greg Kroah-Hartman <[email protected]>
|
|
Make sure to try to resubmit the read urb on errors.
Currently a recoverable error would lead to reduced throughput as only
one urb will be used until the port is closed and reopened (or
resumed or unthrottled).
Also upgrade error messages from debug to error log level.
Signed-off-by: Johan Hovold <[email protected]>
Signed-off-by: Greg Kroah-Hartman <[email protected]>
|
|
Fix regression introduced by commit 818f60365a29 ("USB: serial: add
memory flags to usb_serial_generic_write_start"), which incorrectly used
GFP_KERNEL in write(), which must not not sleep.
Reported-by: Dave Jones <[email protected]>
Tested-by: Dave Jones <[email protected]>
Cc: Dave Jones <[email protected]>
Signed-off-by: Johan Hovold <[email protected]>
Signed-off-by: Greg Kroah-Hartman <[email protected]>
|
|
Fix race in generic write implementation, which could lead to
temporarily degraded throughput.
The current generic write implementation introduced by commit
27c7acf22047 ("USB: serial: reimplement generic fifo-based writes") has
always had this bug, although it's fairly hard to trigger and the
consequences are not likely to be noticed.
Specifically, a write() on one CPU while the completion handler is
running on another could result in only one of the two write urbs being
utilised to empty the remainder of the write fifo (unless there is a
second write() that doesn't race during that time).
Cc: stable <[email protected]> # 2.6.35
Signed-off-by: Johan Hovold <[email protected]>
Signed-off-by: Greg Kroah-Hartman <[email protected]>
|
|
Export usb_serial_generic_write_start which is needed when implementing
a custom resume function while still relying on the generic write
implementation.
Signed-off-by: Johan Hovold <[email protected]>
Signed-off-by: Greg Kroah-Hartman <[email protected]>
|
|
Add memory-flags parameter to usb_serial_generic_write_start which is
called from write, resume and completion handler, all with different
allocation requirements.
Note that by using the memory flag to determine when called from the
completion handler, everything will work as before even if the
completion handler is run with interrupts enabled (as suggested).
Signed-off-by: Johan Hovold <[email protected]>
Signed-off-by: Greg Kroah-Hartman <[email protected]>
|
|
Clean up some comments, drop excessive comments and fix-up style.
Signed-off-by: Johan Hovold <[email protected]>
Signed-off-by: Greg Kroah-Hartman <[email protected]>
|
|
The DCD pin of the serial port can receive a PPS signal. By calling
the port line discipline dcd handle, this patch allow to monitor PPS
through USB serial devices.
However the performance aren't as good as the uart drivers, so
document this point too.
Signed-off-by: Paul Chavent <[email protected]>
Acked-by: Rodolfo Giometti <[email protected]>
Signed-off-by: Greg Kroah-Hartman <[email protected]>
|
|
Since commit 31ca020b ("TTY: wake up processes last at hangup") there no
longer any need to check the hupping flag in the generic tiocmiwait
implementation, so remove it.
Signed-off-by: Johan Hovold <[email protected]>
Signed-off-by: Greg Kroah-Hartman <[email protected]>
|
|
Add generic wait_until_sent implementation which polls for empty
hardware buffers using the new port-operation tx_empty.
The generic implementation will be used for all sub-drivers that
implement tx_empty but does not define wait_until_sent.
Signed-off-by: Johan Hovold <[email protected]>
Signed-off-by: Greg Kroah-Hartman <[email protected]>
|
|
Update copyright information.
Signed-off-by: Johan Hovold <[email protected]>
Signed-off-by: Greg Kroah-Hartman <[email protected]>
|
|
Add generic get_icount implementation that subdrivers relying on the
port interrupt counters can use.
Signed-off-by: Johan Hovold <[email protected]>
Signed-off-by: Greg Kroah-Hartman <[email protected]>
|
|
Add generic TIOCMIWAIT implementation which correctly handles hangup,
USB-device disconnect, does not rely on the deprecated sleep_on
functions and hence does not suffer from the races currently affecting
several usb-serial drivers.
This makes it much easier to add TIOCMIWAIT support to subdrivers as the
tricky details related to hangup and disconnect (e.g. atomicity, that
the private port data may have been freed when woken up, and waking up
processes at disconnect) have been handled once and for all.
To add support to a subdriver, simply set the tiocmiwait-port-operation
field, update the port icount fields and wake up any process sleeping on
the tty-port modem-status-change wait queue on changes.
Note that the tty-port initialised flag can be used to detect
disconnected as the port will be hung up as part of disconnect (and
cannot be reactivated due to the disconnected flag). However, as the
tty-port implementation currently wakes up processes before calling port
shutdown, the tty-hupping flag must also be checked to detect hangup for
now.
Signed-off-by: Johan Hovold <[email protected]>
Signed-off-by: Greg Kroah-Hartman <[email protected]>
|
|
Remove empty generic release implementation and make the release
callback non-mandatory (like attach, probe and disconnect).
Signed-off-by: Johan Hovold <[email protected]>
Signed-off-by: Greg Kroah-Hartman <[email protected]>
|
|
Remove the now empty generic disconnect callback and make the disconnect
callback non-mandatory.
Signed-off-by: Johan Hovold <[email protected]>
Signed-off-by: Greg Kroah-Hartman <[email protected]>
|
|
There is no need for the generic disconnect callback to stop the read
and write urbs a second time as this has already been taken care of by
close (which is called from hangup as part of disconnect).
Signed-off-by: Johan Hovold <[email protected]>
Signed-off-by: Greg Kroah-Hartman <[email protected]>
|
|
Remove bogus (and unnecessary) test for serial->dev being NULL in
cleanup.
The device is never cleared, and cleanup is never called after a
completed disconnect anyway.
Signed-off-by: Johan Hovold <[email protected]>
Signed-off-by: Greg Kroah-Hartman <[email protected]>
|
|
Remove redundant port number from debug output (already printed as part
of device name).
Signed-off-by: Johan Hovold <[email protected]>
Signed-off-by: Greg Kroah-Hartman <[email protected]>
|
|
Now, we start converting tty buffer functions to actually use
tty_port. This will allow us to get rid of the need of tty in many
call sites. Only tty_port will needed and hence no more
tty_port_tty_get in those paths.
Now, the one where most of tty_port_tty_get gets removed:
tty_flip_buffer_push.
IOW we also closed all the races in drivers not using tty_port_tty_get
at all yet.
Also we move tty_flip_buffer_push declaration from include/linux/tty.h
to include/linux/tty_flip.h to all others while we are changing it
anyway.
Signed-off-by: Jiri Slaby <[email protected]>
Signed-off-by: Greg Kroah-Hartman <[email protected]>
|
|
Now, we start converting tty buffer functions to actually use
tty_port. This will allow us to get rid of the need of tty in many
call sites. Only tty_port will needed and hence no more
tty_port_tty_get in those paths.
tty_insert_flip_string this time.
Signed-off-by: Jiri Slaby <[email protected]>
Signed-off-by: Greg Kroah-Hartman <[email protected]>
|
|
Now, we start converting tty buffer functions to actually use
tty_port. This will allow us to get rid of the need of tty in many
call sites. Only tty_port will needed and hence no more
tty_port_tty_get in those paths.
tty_insert_flip_char is the next one to proceed. This one is used all
over the code, so the patch is huge.
Signed-off-by: Jiri Slaby <[email protected]>
Signed-off-by: Greg Kroah-Hartman <[email protected]>
|
|
Export generic chars_in_buffer implementation so it can be used in
subdrivers in combination with checks of any hardware buffers.
Signed-off-by: Johan Hovold <[email protected]>
Signed-off-by: Greg Kroah-Hartman <[email protected]>
|
|
Now that all usb-serial modules are only using dev_dbg()
the debug module parameter does not do anything at all, so
remove it to reduce any confusion if someone were to try
to use it.
Signed-off-by: Greg Kroah-Hartman <[email protected]>
|
|
We should use dev_dbg() for usb_serial_debug_data() like all of the rest
of the usb-serial drivers use, so remove the debug parameter as it's not
needed.
Signed-off-by: Greg Kroah-Hartman <[email protected]>
|
|
The usb-serial-generic driver uses different device IDs for its USB
matching and its serial matching. This can lead to problems: The
driver can end up getting bound to a USB interface without being
allowed to bind to the corresponding serial port.
This patch (as1557) fixes the problem by using the same device ID
table (the one that can be altered by the "vendor=" and "product="
module parameters) for both purposes. The unused table is removed.
Now the driver will bind only to the intended devices.
Signed-off-by: Alan Stern <[email protected]>
CC: Bjørn Mork <[email protected]>
Signed-off-by: Greg Kroah-Hartman <[email protected]>
|
|
dbg() is a usb-serial specific macro. This patch converts
the generic.c driver to use dev_dbg() instead to tie into the
dynamic debug infrastructure.
Signed-off-by: Greg Kroah-Hartman <[email protected]>
|
|
This reworks the usb_serial_register_drivers() and
usb_serial_deregister_drivers() to not need a pointer to a struct
usb_driver anymore. The usb_driver structure is now created dynamically
and registered and unregistered as needed.
This saves lines of code in each usb-serial driver. All in-kernel users
of these functions were also fixed up at this time. The pl2303 driver
was tested that everything worked properly.
Thanks for the idea to do this from Alan Stern.
Cc: Adhir Ramjiawan <[email protected]>
Cc: Alan Stern <[email protected]>
Cc: Al Borchers <[email protected]>
Cc: Aleksey Babahin <[email protected]>
Cc: Andrew Morton <[email protected]>
Cc: Andrew Worsley <[email protected]>
Cc: Bart Hartgers <[email protected]>
Cc: Bill Pemberton <[email protected]>
Cc: Dan Carpenter <[email protected]>
Cc: Dan Williams <[email protected]>
Cc: Donald Lee <[email protected]>
Cc: Eric Dumazet <[email protected]>
Cc: "Eric W. Biederman" <[email protected]>
Cc: Felipe Balbi <[email protected]>
Cc: Gary Brubaker <[email protected]>
Cc: Jesper Juhl <[email protected]>
Cc: Jiri Kosina <[email protected]>
Cc: Johan Hovold <[email protected]>
Cc: Julia Lawall <[email protected]>
Cc: Kautuk Consul <[email protected]>
Cc: Kuninori Morimoto <[email protected]>
Cc: Lonnie Mendez <[email protected]>
Cc: Matthias Bruestle and Harald Welte <[email protected]>
Cc: Matthias Urlichs <[email protected]>
Cc: Mauro Carvalho Chehab <[email protected]>
Cc: Michal Sroczynski <[email protected]>
Cc: "Michał Wróbel" <[email protected]>
Cc: Oliver Neukum <[email protected]>
Cc: Paul Gortmaker <[email protected]>
Cc: Peter Berger <[email protected]>
Cc: Preston Fick <[email protected]>
Cc: "Rafael J. Wysocki" <[email protected]>
Cc: Rigbert Hamisch <[email protected]>
Cc: Rusty Russell <[email protected]>
Cc: Simon Arlott <[email protected]>
Cc: Support Department <[email protected]>
Cc: Thomas Tuttle <[email protected]>
Cc: Uwe Bonnes <[email protected]>
Cc: Wang YanQing <[email protected]>
Cc: William Greathouse <[email protected]>
Signed-off-by: Greg Kroah-Hartman <[email protected]>
|
|
I can't remember why I wrote it like this many many years ago, but it's
not needed at all, let's rely on the usb-serial core for this function,
especially as it is being overridden by it anyway.
This lets us make usb_serial_probe() a static function, which it should
be.
Cc: Alan Stern <[email protected]>
Signed-off-by: Greg Kroah-Hartman <[email protected]>
|
|
This is now set by the usb-serial core, no need for the driver to
individually set it.
Thanks to Alan Stern for the idea to get rid of it.
Cc: William Greathouse <[email protected]>
Cc: Matthias Bruestle and Harald Welte <[email protected]>
Cc: Lonnie Mendez <[email protected]>
Cc: Peter Berger <[email protected]>
Cc: Al Borchers <[email protected]>
Cc: Gary Brubaker <[email protected]>
Cc: Oliver Neukum <[email protected]>
Cc: Matthias Urlichs <[email protected]>
Cc: Support Department <[email protected]>
Cc: Rusty Russell <[email protected]>
Cc: Alan Stern <[email protected]>
Cc: Mauro Carvalho Chehab <[email protected]>
Cc: Kautuk Consul <[email protected]>
Cc: Bill Pemberton <[email protected]>
Cc: Paul Gortmaker <[email protected]>
Cc: Bart Hartgers <[email protected]>
Cc: Johan Hovold <[email protected]>
Cc: Preston Fick <[email protected]>
Cc: Uwe Bonnes <[email protected]>
Cc: Simon Arlott <[email protected]>
Cc: Andrew Worsley <[email protected]>
Cc: "Michał Wróbel" <[email protected]>
Cc: Andrew Morton <[email protected]>
Cc: Eric Dumazet <[email protected]>
Cc: "Eric W. Biederman" <[email protected]>
Cc: Felipe Balbi <[email protected]>
Cc: Aleksey Babahin <[email protected]>
Cc: Dan Carpenter <[email protected]>
Cc: Jiri Kosina <[email protected]>
Cc: Donald Lee <[email protected]>
Cc: Julia Lawall <[email protected]>
Cc: Michal Sroczynski <[email protected]>
Cc: Wang YanQing <[email protected]>
Cc: Dan Williams <[email protected]>
Cc: Thomas Tuttle <[email protected]>
Cc: Rigbert Hamisch <[email protected]>
Cc: "Rafael J. Wysocki" <[email protected]>
Cc: Kuninori Morimoto <[email protected]>
Cc: Jesper Juhl <[email protected]>
Cc: Adhir Ramjiawan <[email protected]>
Signed-off-by: Greg Kroah-Hartman <[email protected]>
|
|
dbg() was used a lot a long time ago to trace code flow. Now that we have
ftrace, this isn't needed at all, so remove these calls.
Signed-off-by: Greg Kroah-Hartman <[email protected]>
|
|
Remove trailing newlines from debug messages.
Signed-off-by: Johan Hovold <[email protected]>
Signed-off-by: Greg Kroah-Hartman <[email protected]>
|
|
Since commit 1ce7b9349fad ("USB: serial: reuse generic write urb and
bulk-out buffer") the port write_urb is simply a pointer to the first
member of write_urbs so there's no need to kill it twice.
Signed-off-by: Johan Hovold <[email protected]>
Signed-off-by: Greg Kroah-Hartman <[email protected]>
|
|
This patch (as1522) adds two new routines to the usb-serial core, for
registering and unregistering serial drivers. Instead of registering
the usb_driver and usb_serial_drivers separately, with error checking
for each one, the drivers can all be registered and unregistered by a
single function call. This reduces duplicated code.
More importantly, the new core routines change the order in which the
drivers are registered. Currently the usb-serial drivers are all
registered first and the usb_driver is done last, which leaves a
window for problems. A udev script may quickly add a new dynamic-ID
for a usb-serial driver, causing the corresponding usb_driver to be
probed. If the usb_driver hasn't been registered yet then an oops
will occur.
The new routine prevents such problems by registering the usb_driver
first. To insure that it gets probed properly for already-attached
serial devices, we call driver_attach() after all the usb-serial
drivers have been registered.
Along with adding the new routines, the patch modifies the "generic"
serial driver to use them. Further patches will similarly modify all
the other in-tree USB serial drivers.
Signed-off-by: Alan Stern <[email protected]>
Signed-off-by: Greg Kroah-Hartman <[email protected]>
|
|
Use dev_err_console in write path so that an error at least gets
reported once.
Signed-off-by: Johan Hovold <[email protected]>
Signed-off-by: Greg Kroah-Hartman <[email protected]>
|
|
Do not report errors in write path if port is used as a console as this
may trigger the same error (and error report) resulting in a loop.
Reported-by: Stephen Hemminger <[email protected]>
Cc: stable <[email protected]>
Signed-off-by: Johan Hovold <[email protected]>
Signed-off-by: Greg Kroah-Hartman <[email protected]>
|
|
Add support for multiple read urbs to generic read implementation.
Use a static array of two read urbs for now which is enough to get a
50% throughput increase in one test setup.
Signed-off-by: Johan Hovold <[email protected]>
Signed-off-by: Greg Kroah-Hartman <[email protected]>
|
|
Alan's commit 335f8514f200e63d689113d29cb7253a5c282967 introduced
.carrier_raised function in several drivers. That also means
tty_port_block_til_ready can now suspend the process trying to open the serial
port when Carrier Detect is low and put it into tty_port.open_wait queue. We
need to wake up the process when Carrier Detect goes high and trigger TTY
hangup when CD goes low.
Some of the devices do not report modem status line changes, or at least we
don't understand the status message, so for those we remove .carrier_raised
again.
Signed-off-by: Libor Pechacek <[email protected]>
Cc: stable <[email protected]>
Signed-off-by: Greg Kroah-Hartman <[email protected]>
|
|
git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input:
Input: pxa27x_keypad - remove input_free_device() in pxa27x_keypad_remove()
Input: mousedev - fix regression of inverting axes
Input: uinput - add devname alias to allow module on-demand load
Input: hil_kbd - fix compile error
USB: drop tty argument from usb_serial_handle_sysrq_char()
Input: sysrq - drop tty argument form handle_sysrq()
Input: sysrq - drop tty argument from sysrq ops handlers
|
|
This is needed by the ssu100 driver to use this function.
Signed-off-by: Bill Pemberton <[email protected]>
Signed-off-by: Greg Kroah-Hartman <[email protected]>
|
|
Since handle_sysrq() does not take tty as argument anymore we can
drop it from usb_serial_handle_sysrq_char() as well.
Acked-by: Alan Cox <[email protected]>
Acked-by: Jason Wessel <[email protected]>
Acked-by: Greg Kroah-Hartman <[email protected]>
Signed-off-by: Dmitry Torokhov <[email protected]>
|
|
Sysrq operations do not accept tty argument anymore so no need to pass
it to us.
[Stephen Rothwell <[email protected]>: fix build breakage in drm code
caused by sysrq using bool but not including linux/types.h]
[Sachin Sant <[email protected]>: fix build breakage in s390 keyboadr
driver]
Acked-by: Alan Cox <[email protected]>
Acked-by: Jason Wessel <[email protected]>
Acked-by: Greg Kroah-Hartman <[email protected]>
Signed-off-by: Dmitry Torokhov <[email protected]>
|
|
As David VomLehn points out, it was possible to receive an interrupt
before clearing the free-urb flag which could lead to the urb being
incorrectly marked as busy.
For the same reason, move tx_bytes accounting so that it will never be
negative.
Note that the free-flags set and clear operations do not need any
additional locking as they are manipulated while USB_SERIAL_WRITE_BUSY
is set.
Reported-by: David VomLehn <[email protected]>
Tested-by: David VomLehn <[email protected]>
Signed-off-by: Johan Hovold <[email protected]>
Cc: stable <[email protected]>
Signed-off-by: Greg Kroah-Hartman <[email protected]>
|
|
Return immediately from generic process_read_urb if urb is empty.
Signed-off-by: Johan Hovold <[email protected]>
Signed-off-by: Greg Kroah-Hartman <[email protected]>
|
|
Remove multi-urb write from the generic driver and simplify the
prepare_write_buffer prototype:
int (*prepare_write_buffer)(struct usb_serial_port *port,
void *dest, size_t size);
The default implementation simply fills dest with data from port write
fifo but drivers can override it if they need to process the outgoing
data (e.g. add headers).
Turn ftdi_sio into a generic fifo-based driver, which lowers CPU usage
significantly for small writes while retaining maximum throughput.
Signed-off-by: Johan Hovold <[email protected]>
Signed-off-by: Greg Kroah-Hartman <[email protected]>
|
|
Reimplement fifo-based writes in the generic driver using a multiple
pre-allocated urb scheme.
In contrast to multi-urb writes, no allocations (of urbs or buffers) are
made during run-time and there is less pressure on the host stack
queues as currently only two urbs are used (implementation is generic
and can handle more than two urbs as well, though).
Initial tests using ftdi_sio show that the implementation achieves the
same (maximum) throughput at high baudrates as multi-urb writes. The CPU
usage is much lower than for multi-urb writes for small write requests
and only slightly higher for large (e.g. 2k) requests (due to extra copy
via fifo?).
Also outperforms multi-urb writes for small write requests on an
embedded arm-9 system, where multi-urb writes are CPU-bound at high
baudrates (perf reveals that a lot of time is spent in the host stack
enqueue function -- could perhaps be a bug as well).
Keeping the original write_urb, buffer and flag for now as there are
other drivers depending on them.
Signed-off-by: Johan Hovold <[email protected]>
Signed-off-by: Greg Kroah-Hartman <[email protected]>
|
|
Generalise write buffer preparation.
This allows for drivers to manipulate (e.g. add headers) to bulk out
data before it is sent.
This adds a new function pointer to usb_serial_driver:
int (*prepare_write_buffer)(struct usb_serial_port *port,
void **dest, size_t size, const void *src, size_t count);
The function is generic and can be used with either kfifo-based or
multi-urb writes:
If *dest is NULL the implementation should allocate dest.
If src is NULL the implementation should use the port write fifo.
If not set, a generic implementation is used which simply uses memcpy or
kfifo_out.
Signed-off-by: Johan Hovold <[email protected]>
Signed-off-by: Greg Kroah-Hartman <[email protected]>
|