Ian Abbott [Fri, 19 Feb 2016 16:13:57 +0000 (16:13 +0000)]
staging: comedi: COMEDI_BUFINFO: terminate "write" command when stopped
The `COMEDI_BUFINFO` ioctl is used to advance the current position in
the buffer by a specified amount (which can be 0) and get the current
position. An asynchronous command in the "read" direction is terminated
automatically once it has stopped and information about the final
position and error has been reported back to the user. That is not
currently done for commands in the "write" direction. Change it to
terminate the command in the "write" direction automatically. If the
command stopped with an error, report an `EPIPE` error back to the user,
otherwise just report the final buffer position back to the user.
Signed-off-by: Ian Abbott <abbotti@mev.co.uk> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Ian Abbott [Fri, 19 Feb 2016 16:13:56 +0000 (16:13 +0000)]
staging: comedi: COMEDI_BUFINFO: return -EPIPE for abnormal read
The `COMEDI_BUFINFO` ioctl is used to advance the current position in
the buffer by a specified amount (which can be 0) and get the current
position. If an asynchronous command in the "read" direction has
stopped normally, the command is terminated as soon as the position has
been advanced to the end of all available data. This is not currently
done if the command terminated with an error. Change it to allow the
command to be terminated even if it stopped with an error, but report an
`EPIPE` error to the user first. The `EPIPE` error will not be
reported until the "read" position reported back to the user has been
advanced to the end of all available data.
Signed-off-by: Ian Abbott <abbotti@mev.co.uk> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Ian Abbott [Fri, 19 Feb 2016 16:13:55 +0000 (16:13 +0000)]
staging: comedi: COMEDI_BUFINFO: become non-busy even if bytes_read is 0
The `COMEDI_BUFINFO` ioctl is used to advance the current position in
the buffer by a specified amount (which can be 0) and get the new
position. On input, the `bytes_read` member of `struct comedi_bufinfo`
specified the amount to advance the "read" position for an asynchronous
command in the "read" direction. If the command has already stopped
normally, and the "read" position has been advanced to the end of all
available data, the command is terminated by calling
`do_become_nonbusy()`. (That is not currently done if the command
stopped with an error.) Currently, the command is only terminated if
the user is trying to advance the "read" position by a non-zero amount.
Change it to allow the command to be terminated even if the user is not
trying to advance the "read" position. This is justifiable, as the only
time a command stops without error is when it has been set up to read a
finite amount of data.
Signed-off-by: Ian Abbott <abbotti@mev.co.uk> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Ian Abbott [Fri, 19 Feb 2016 16:13:54 +0000 (16:13 +0000)]
staging: comedi: COMEDI_BUFINFO: return error if no active command
The `COMEDI_BUFINFO` ioctl is used to advance the current position in
the buffer and/or get the current buffer position. If no asynchronous
command is active (started via the file object that issued this ioctl),
this information is meaningless. Change it to return an error
(`-EINVAL`) in this case. Prior to this change, if a command was
started via a different file object, the ioctl returned `-EACCES`, but
now it will return `-EINVAL`, which is consistent with the current
behavior of the "read" and "write" file operation handlers.
Signed-off-by: Ian Abbott <abbotti@mev.co.uk> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Ian Abbott [Fri, 19 Feb 2016 16:13:53 +0000 (16:13 +0000)]
staging: comedi: COMEDI_BUFINFO: force bytes_written to 0 if stopped
The `COMEDI_BUFINFO` ioctl is used to advance the current position in
the buffer by a specified amount (which can be 0) and get the new
position. On input, the `bytes_written` member of `struct
comedi_bufinfo` specifies the amount to advance the "write" position for
an asynchronous command in the "write" direction. On output, the member
indicates the amount the "write" position has actually been advanced.
Advancing the "write" position is current done even if the command has
stopped and cannot use any more written data. Change it to force the
amount successfully written to 0 in that case.
Signed-off-by: Ian Abbott <abbotti@mev.co.uk> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Ian Abbott [Fri, 19 Feb 2016 16:13:52 +0000 (16:13 +0000)]
staging: comedi: COMEDI_BUFINFO: update buffer before becoming non-busy
The `COMEDI_BUFINFO` ioctl is used to advance the current position in
the buffer by a specified amount (which can be 0) and get the new
position. For an asynchronous command in the "read" direction, if the
command has finished acquiring data normally, `do_become_nonbusy()` is
called to terminate the command. That resets the buffer position, and
currently, the position information returned back to the user is after
the buffer has been reset. It should be more useful to return the
buffer position before the reset, so move the call to
`do_become_nonbusy()` after the code that gets the updated buffer
position.
Signed-off-by: Ian Abbott <abbotti@mev.co.uk> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Ian Abbott [Fri, 19 Feb 2016 16:13:51 +0000 (16:13 +0000)]
staging: comedi: COMEDI_BUFINFO: force bytes_read or bytes_written to 0
The `COMEDI_BUFINFO` ioctl is used to advance the current position in
the buffer by a specified amount (which can be 0) and get the new
position. On input, the `bytes_read` member of `struct comedi_bufinfo`
specifies the amount to advance the "read" position for an asynchronous
command in the "read" direction, and the `bytes_written` member
specifies the amount to advance the "write" position for a command in
the "write" direction. The handler `do_bufinfo_ioctl()` may adjust
these by the amount the position is actually advanced before copying
them back to the user. Currently, it ignores the specified `bytes_read`
value for a command in the "write" direction, and ignores the specified
`bytes_written` for a command in the "read" direction, so the values
copied back to the user are unchanged. Change it to force the ignored
value to 0 before copying the values back to the user.
Signed-off-by: Ian Abbott <abbotti@mev.co.uk> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Ian Abbott [Fri, 19 Feb 2016 16:13:50 +0000 (16:13 +0000)]
staging: comedi: COMEDI_BUFINFO: get amount freed, not amount allocated
The `COMEDI_BUFINFO` ioctl is used to advance the current position in
the buffer by a specified amount (which can be 0) and get the new
position. On input, the `bytes_read` member of `struct comedi_bufinfo`
specifies the amount to advance the "read" position for an asynchronous
command in the "read" direction, and the `bytes_written` member
specifies the amount to advance the "write" position for a command in
the "write" direction. The handler `do_bufinfo_ioctl()` may limit the
specified values according to amount of readable or writable space in
the buffer. On output, the `struct comedi_bufinfo` is filled in with
the updated position information, along with the adjusted `bytes_read`
and `bytes_written` members.
Advancing the buffer position occurs in two steps: first, some buffer
space is allocated, and second, it is freed, advancing the current
"read" or "write" position. Currently, `do_bufinfo_ioctl()` limits
`bytes_read` or `bytes_written` to the amount it could allocate in the
first step, but that is invisible and irrelevant to the ioctl user.
It's mostly irrelevant to the COMEDI internals as well, apart from
limiting how much can be freed in the second step. Change it to ignore
how much it managed to allocate in the first step and just use the
amount that was actually freed in the second step, which is the amount
the current buffer position was actually moved by this ioctl call.
Signed-off-by: Ian Abbott <abbotti@mev.co.uk> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Arnd Bergmann [Wed, 17 Feb 2016 08:32:58 +0000 (09:32 +0100)]
staging: rtl8712: reduce stack usage
The "translate_scan" function in rtl8712 uses a lot of stack, and
gets inlined into its single caller, r8711_wx_get_scan, which
in some configurations now blows the 1024 byte stack warning
limit:
drivers/staging/rtl8712/rtl871x_ioctl_linux.c: In function 'r8711_wx_get_scan':
drivers/staging/rtl8712/rtl871x_ioctl_linux.c:1227:1: error: the frame size of 1032 bytes is larger than 1024 bytes [-Werror=frame-larger-than=]
This somewhat reduces the stack usage by moving the translate_scan
function out of line with the noinline_for_stack annotation.
It might be possible to modify translate_scan() a little further
to reduce the stack usage, but with this patch, we can build without
the warning, the the call chain to get here is rather predictable
(sys_ioctl->vfs_ioctl->sock_ioctl->dev_ioctl->wext_ioctl->
r8711_wx_get_scan).
Fix a driver hang caused by earlier suspend/resume cycles. By handling a
ENODEV error during suspend as a real error we eventually end up stopping
the whole driver.
Fix this by handling the ENODEV error (during suspend) essentially by
retrying.
Bhumika Goyal [Thu, 18 Feb 2016 05:49:38 +0000 (11:19 +0530)]
Staging: fsl-mc: bus: Drop owner assignment from platform_driver
For platform_driver, we don't need to set .owner field as is set by
platform driver core. The semantic patch used here first checks whether
platform_driver struct was actually used in a call to set the .owner
field.
The coccinelle script that generated the patch can be found here:
http://www.spinics.net/lists/kernel/msg2029903.html
staging: rtl8192e: Remove explicit pointer cast in assignments
In this file, the values returned by rtllib_priv() are unnecessarily cast
into a pointer type in some assignment statements. Remove the cast as it
is unneeded.
Colin Vidal [Tue, 16 Feb 2016 22:12:16 +0000 (23:12 +0100)]
Staging: rtl8188eu/core: remove paragraph which mention FSF address in comment header
As FSF address changed in the past, and can change in the future,
remove the address paragraph in the comment header, and avoid a warning
of checkpatch.
Signed-off-by: Colin Vidal <colin@cvidal.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Bhumika Goyal [Mon, 15 Feb 2016 08:58:22 +0000 (14:28 +0530)]
Staging: rtl8188eu: core: rtw_xmit.c: Remove NULL test before vfree
The function vfree tests whether the argument is NULL and returns
immediately. So NULL test is not needed before vfree. Also remove blank
line between function calls.
Bhumika Goyal [Mon, 15 Feb 2016 08:58:20 +0000 (14:28 +0530)]
Staging: rtl8188eu: core: rtw_mlme.c: Remove NULL test before vfree
The function vfree tests whether the argument is NULL and returns
immediately. So NULL test before vfree is not needed. Also remove braces
around if branch as they are no longer needed.
With concurrency managed workqueues, use of dedicated workqueues can
be replaced by using system_wq. Drop schedule_usb_work by using
system_wq.
Since there is only one work item per buf_anchor and most_dev and they
do not need to be ordered, increase of concurrency by switching to
system_wq should not break anything.
Both work items are sync canceled before the driver can be
unregistered, to ensure no work item is pending or executing on any
CPU by the time exit path is in flight.
staging: most: hdm-dim2: Replace request_irq with devm_request_irq
Devm_ functions allocate memory that is released when a driver
detaches. Replace request_irq with devm_request_irq to get the
interrupt for device which is automatically freed on exit. Remove
corresponding free_irq from probe and remove functions of a platform
device.
staging: most: hdm-dim2: Switch to devm_ioremap_resource()
Devm_ functions allocate memory that is released when a driver
detaches. Replace request_mem_region and ioremap with
devm_ioremap_resource and remove corresponding freeing functions
release_mem_region and iounmap from probe and remove functions of a
platform device.
Also, an unnecessary platform_set_drvdata() has been removed since the
driver core clears the driver data to NULL after device release or on
probe failure. There is no need to manually clear the device driver
data to NULL.
staging: most: hdm-dim2: Replace kzalloc with devm_kzalloc
Devm_ functions allocate memory that is released when a driver detaches.
Replace kzalloc with devm_kzalloc and remove corresponding
kfrees from probe and remove functions of a platform
device.
staging: netlogic: Return zero pointer after failed kmalloc
Return a ZERO_SIZE_PTR in the xlr_config_spill function if the
kmalloc returns an invalid value. This change prevents a possible
segmentation fault as the invalid pointer is fed into PTR_ALIGN macro.
Signed-off-by: Laura Garcia Liebana <nevola@gmail.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Bhumika Goyal [Wed, 17 Feb 2016 16:50:09 +0000 (22:20 +0530)]
Staging: wlan-ng: Remove unused functions and prototypes
hfa384x_drvr_getconfig_async is not used anywhere in the kernel
so remove it. Also remove its prototype from the header file. Also
the function hfa384x_cb_rrid was only used by hfa384x_drvr_getconfig_async
so remove its definition and prototype as well.
staging: iio: adc: Remove unnecessary test from if conditions
Remove unnecessary test condition on ret variable which has been
previously tested and returns its value if the value is non zero.
This fixes the following smatch warnings:
drivers/staging/iio/adc/ad7816.c:299 ad7816_set_oti() warn: we tested
'ret' before and it was 'false'
drivers/staging/iio/adc/ad7816.c:306 ad7816_set_oti() warn: we tested
'ret' before and it was 'false'
Bhumika Goyal [Sat, 20 Feb 2016 21:42:11 +0000 (03:12 +0530)]
Staging: wilc1000: Remove and rename struct typedefs from .c files
Using typedef for a structure type is not suggested in Linux kernel coding
style guidelines. So remove typedefs from structures wilc_sdio_t,
wilc_spi_t and wilc_mac_cfg_t.
Also remove '_t' suffix from the struct names by hand.
Bhumika Goyal [Sat, 20 Feb 2016 18:00:25 +0000 (23:30 +0530)]
Staging: wilc1000: Remove unused function WILC_WFI_update_stats
This patch removes the function WILC_WFI_update_stats as it is not used
anywhere in the kernel. Also remove its declaration from the header
file. Grepped to find the occurences.
Bhumika Goyal [Tue, 16 Feb 2016 19:31:58 +0000 (01:01 +0530)]
Staging: lustre: lov: Pull assignments out of function call
Assignments in function call arguments are undesirable. So pull such
assignments out before function call.
Made a coccinelle script to detect such cases:
@@
expression fn,b,d;
@@
* fn(...,d=b,...);
staging: lustre: osc: osc_request: Declare local function and structure as static
Declare osc_cleanup() function and osc_obd_ops structure as static
since they are defined and called only in this file.
Removed osc_cleanup() function prototype since it wasn't required.
This fixes the following sparse warnings:
drivers/staging/lustre/lustre/osc/osc_request.c:3210:5: warning:
symbol 'osc_cleanup' was not declared. Should it be static?
drivers/staging/lustre/lustre/osc/osc_request.c:3259:16: warning:
symbol 'osc_obd_ops' was not declared. Should it be static?