summaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2013-01-29staging/fwserial: Cleanup /proc/tty/driver/ filePeter Hurley
Factor out extra stats, data profiles, debugging info and peer info from procfs file in preparation for using debugfs instead. Signed-off-by: Peter Hurley <peter@hurleysoftware.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2013-01-29staging/fwserial: Create loop device the 'tty' wayPeter Hurley
Register a second tty driver to create loopback devices for each firewire node. Note that the loopback devices are numbered from 0; the tty->index is transformed when used to index the port table. Remove the hack that previously enabled this. Signed-off-by: Peter Hurley <peter@hurleysoftware.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2013-01-29staging/fwserial: Fix sparse build warningsPeter Hurley
Reported-by: Stefan Richter <stefanr@s5r6.in-berlin.de> Signed-off-by: Peter Hurley <peter@hurleysoftware.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2013-01-29staging/fwserial: Release port regardless of unplug response codePeter Hurley
After sending the unplug response, release the port even if an error occurred. Signed-off-by: Peter Hurley <peter@hurleysoftware.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2013-01-29staging/fwserial: Only reset port status for attached peersPeter Hurley
When a port has been reserved in an attempt to connect to a peer but that attempt does not succeed, releasing the port should not reset the port line status. Although resetting is functionally harmless, it can appear as if a remote peer dropped carrier to a port it was not attached to (which can be confusing). Signed-off-by: Peter Hurley <peter@hurleysoftware.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2013-01-29staging/fwserial: Drop suggestion for helper fn integrationPeter Hurley
The firewire core does not require or want the suggested helper fns; drop suggestion from TODO file. Signed-off-by: Peter Hurley <peter@hurleysoftware.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2013-01-29staging/fwserial: Assume firmware is OHCI-complaintPeter Hurley
Devices which are OHCI v1.0/ v1.1/ v1.2-draft compliant or RFC 2734 compliant are required by specification to support max_rec of 8 (512 bytes) or more. Accept reported value. Signed-off-by: Peter Hurley <peter@hurleysoftware.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2013-01-29staging/fwserial: Fold constant MAX_ASYNC_PAYLOADPeter Hurley
Since peer->max_payload is now limited to 1394-2008 spec maximum of 4096, the port->max_payload limit can now be simplified. Signed-off-by: Peter Hurley <peter@hurleysoftware.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2013-01-29staging/fwserial: Simplify max payload calculationPeter Hurley
Signed-off-by: Peter Hurley <peter@hurleysoftware.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2013-01-29staging/fwserial: Refer to fw_device as "node"Peter Hurley
Signed-off-by: Peter Hurley <peter@hurleysoftware.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2013-01-29staging/fwserial: Remove bandwidth limit logicPeter Hurley
Self-limiting asynchronous bandwidth (via reducing the payload) is not necessary and does not work, because 1) asynchronous traffic will absorb all available bandwidth (less that being used for isochronous traffic) 2) isochronous arbitration always wins. Signed-off-by: Peter Hurley <peter@hurleysoftware.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2013-01-29staging:ozwpan: Fix following warning.Rupesh Gujare
The patch ae926051d7eb: "staging: ozwpan: Added USB HCD implementation" from Feb 20, 2012, leads to the following warning: drivers/staging/ozwpan/ozhcd.c:1094 oz_hcd_heartbeat() warn: what is this condition about? 'ep->buffered_units * 50' Reported-by: Dan Carpenter <dan.carpenter@oracle.com> Signed-off-by: Rupesh Gujare <rupesh.gujare@atmel.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2013-01-29staging: nvec: cleanup the string messMarc Dietrich
Replace the various command strings by named constants. Signed-off-by: Marc Dietrich <marvin24@gmx.de> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2013-01-29staging: nvec: fix mouse suspend/resume callsMarc Dietrich
The EC command for enable/disable is not an EC command. Instead it needs to be send to the mouse. Signed-off-by: Marc Dietrich <marvin24@gmx.de> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2013-01-29staging: nvec: move toggle global event reporting to its own functionMarc Dietrich
Cleanup toggle of global event reporting by moving it to its own function. This simplifies the following cleanup. Signed-off-by: Marc Dietrich <marvin24@gmx.de> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2013-01-29staging: zsmalloc: Fix TLB coherency and build problemMinchan Kim
Recently, Matt Sealey reported he fail to build zsmalloc caused by using of local_flush_tlb_kernel_range which are architecture dependent function so !CONFIG_SMP in ARM couldn't implement it so it ends up build error following as. MODPOST 216 modules LZMA arch/arm/boot/compressed/piggy.lzma AS arch/arm/boot/compressed/lib1funcs.o ERROR: "v7wbi_flush_kern_tlb_range" [drivers/staging/zsmalloc/zsmalloc.ko] undefined! make[1]: *** [__modpost] Error 1 make: *** [modules] Error 2 make: *** Waiting for unfinished jobs.... The reason we used that function is copy method by [1] was really slow in ARM but at that time. More severe problem is ARM can prefetch speculatively on other CPUs so under us, other TLBs can have an entry only if we do flush local CPU. Russell King pointed that. Thanks! We don't have many choices except using flush_tlb_kernel_range. My experiment in ARMv7 processor 4 core didn't make any difference with zsmapbench[2] between local_flush_tlb_kernel_range and flush_tlb_kernel_range but still page-table based is much better than copy-based. * bigger is better. 1. local_flush_tlb_kernel_range: 3918795 mappings 2. flush_tlb_kernel_range : 3989538 mappings 3. copy-based: 635158 mappings This patch replace local_flush_tlb_kernel_range with flush_tlb_kernel_range which are avaialbe in all architectures because we already have used it in vmalloc allocator which are generic one so build problem should go away and performane loss shoud be void. [1] f553646, zsmalloc: add page table mapping method [2] https://github.com/spartacus06/zsmapbench Cc: stable@vger.kernel.org Cc: Dan Magenheimer <dan.magenheimer@oracle.com> Cc: Russell King <linux@arm.linux.org.uk> Cc: Konrad Rzeszutek Wilk <konrad@darnok.org> Cc: Nitin Gupta <ngupta@vflare.org> Cc: Seth Jennings <sjenning@linux.vnet.ibm.com> Reported-by: Matt Sealey <matt@genesi-usa.com> Signed-off-by: Minchan Kim <minchan@kernel.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2013-01-29staging/omapdrm: Use kmemdup rather than duplicating its implementationPeter Huewe
Found with coccicheck. The semantic patch that makes this change is available in scripts/coccinelle/api/memdup.cocci. Signed-off-by: Peter Huewe <peterhuewe@gmx.de> Signed-off-by: Rob Clark <rob@ti.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2013-01-29Staging: zcache: remove unnecessary braces in zcache-main.cRyo Munakata
This fixes a checkpatch.pl issue of 'braces {} are not necessary for single statement blocks' Signed-off-by: Ryo Munakata <ryomnktml@gmail.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2013-01-29staging/csr: Use kmemdup rather than duplicating its implementationPeter Huewe
Found with coccicheck. The semantic patch that makes this change is available in scripts/coccinelle/api/memdup.cocci. Signed-off-by: Peter Huewe <peterhuewe@gmx.de> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2013-01-29staging: zsmalloc: make CLASS_DELTA relative to PAGE_SIZESeth Jennings
Right now ZS_SIZE_CLASS_DELTA is hardcoded to be 16. This creates 254 classes for systems with 4k pages. However, on PPC64 with 64k pages, it creates 4095 classes which is far too many. This patch makes ZS_SIZE_CLASS_DELTA relative to PAGE_SIZE so that regardless of the page size, there will be the same number of classes. Acked-by: Nitin Gupta <ngupta@vflare.org> Acked-by: Minchan Kim <minchan@kernel.org> Signed-off-by: Seth Jennings <sjenning@linux.vnet.ibm.com> Acked-by: Dan Magenheimer <dan.magenheimer@oracle.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2013-01-29staging/comedi/adl_pci8164: Don't assign stringPeter Huewe
Assigning a string is really bad, and since we only have 1 char strings here we can simply use a char to store the value and change the format specifier. Signed-off-by: Peter Huewe <peterhuewe@gmx.de> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2013-01-29staging: comedi: simplify comedi_set_hw_dev()Ian Abbott
Since `get_device()` and `put_device()` can take a NULL device parameter, `comedi_set_hw_dev()` can be simplified to always call `get_device()` for the new, possibly NULL hardware device, and `put_device()` for the old, possibly NULL hardware device. As long as we do it in that order, there shouldn't be any problem with `kref_release()` getting called unexpectedly when the new hardware device is the old hardware device. Simplify `comedi_set_hw_dev()` and update the comment because the function is used for additional purposes since the old comment was written. Signed-off-by: Ian Abbott <abbotti@mev.co.uk> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2013-01-29staging: comedi: don't override read/write subdevice if not supportedIan Abbott
For comedi devices that support asynchronous commands on some of their subdevices, the comedi core creates extra device files for each of those subdevices of the form "/dev/comedi%i_subd%i". These use the same comedi device as the corresponding "/dev/comedi%i" but override the default "read" and "write" subdevice for the device. Currently it overrides both the read and write subdevice, but it only makes sense to override the "read" subdevice if the subdevice supports "read" commands, and to override the "write" subdevice if the subdevice supports "write" commands. In `comedi_alloc_subdevice_minor()`, only set `info->read_subdevice` non-NULL if the subdevice has the `SDF_CMD_READ` flag set, and only set `info->write_subdevice` non-NULL if the subdevice has the `SDF_CMD_WRITE` flag set. (`comedi_read_subdevice(info)` will use the device's default read subdevice if `info->read_subdevice` is NULL. `comedi_write_subdevice(info)` will use the device's default write subdevice if `info->write_subdevice` is NULL. Signed-off-by: Ian Abbott <abbotti@mev.co.uk> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2013-01-29staging: comedi: ni_labpc_cs: remove '#undef LABPC_DEBUG'H Hartley Sweeten
The LABPC_DEBUG define is not used in any of the code. Just remove the #undef. Signed-off-by: H Hartley Sweeten <hsweeten@visionengravers.com> Cc: Ian Abbott <abbotti@mev.co.uk> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2013-01-29staging: comedi: ni_labpc_cs: cleanup the boardinfo declarationH Hartley Sweeten
For aesthetic reasons, reformat the boardinfo declaration and add some whitespace. Remove all the information that is set to '0' as this is the default. Signed-off-by: H Hartley Sweeten <hsweeten@visionengravers.com> Cc: Ian Abbott <abbotti@mev.co.uk> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2013-01-29staging: comedi: ni_labpc_cs: remove thisboard macroH Hartley Sweeten
The 'thisboard' macro relies on a local variable having a specific name and yields a pointer derived from that local variable. Replace the macro with a local variable and use the comedi_board() helper to get the pointer. Signed-off-by: H Hartley Sweeten <hsweeten@visionengravers.com> Cc: Ian Abbott <abbotti@mev.co.uk> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2013-01-29staging: comedi: ni_labpc_cs: move comedi_driver declarationH Hartley Sweeten
Move the comedi_driver declaration down in the file. This removes the need for the forward declaration. For aesthetic reasons, add some whitespace to the declaration and remove the unnecessary '&' before the function names. They are already addresses. Signed-off-by: H Hartley Sweeten <hsweeten@visionengravers.com> Cc: Ian Abbott <abbotti@mev.co.uk> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2013-01-29staging: comedi: ni_labpc_cs: remove pcmcia_device private dataH Hartley Sweeten
The private data, struct local_info_t, is not being used in the driver. Remove it as well as the kzalloc/kfree. Also, don't set the 'pcmcia_cur_dev' variable unless the pcmcia configuration is successful. Signed-off-by: H Hartley Sweeten <hsweeten@visionengravers.com> Cc: Ian Abbott <abbotti@mev.co.uk> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2013-01-29staging: comedi: ni_labpc_cs: cleanup labpc_cs_attach()H Hartley Sweeten
Absorb the code from labpc_config() into this function and properly return the error if the configuration fails. Also, remove the dev_dbg() function trace message. Signed-off-by: H Hartley Sweeten <hsweeten@visionengravers.com> Cc: Ian Abbott <abbotti@mev.co.uk> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2013-01-29staging: comedi: ni_labpc_cs: move pcmcia_driver functionsH Hartley Sweeten
For aesthetic reasons, move all the pcmcia_driver functions so they are near the pcmcia_driver declaration. This also removes the need for some of the forward declarations. Signed-off-by: H Hartley Sweeten <hsweeten@visionengravers.com> Cc: Ian Abbott <abbotti@mev.co.uk> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2013-01-29staging: comedi: ni_labpc_cs: remove pcmcia_driver suspend/resumeH Hartley Sweeten
The pcmcia_driver suspend and resume functions in this driver don't do anything. Since they are optional just remove them. Signed-off-by: H Hartley Sweeten <hsweeten@visionengravers.com> Cc: Ian Abbott <abbotti@mev.co.uk> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2013-01-29staging: comedi: ni_labpc_cs: remove 'stop' from private pcmcia dataH Hartley Sweeten
The pcmcia_driver suspend and remove functions set the 'stop' variable and the resume function clears it. Nothing in the comedi_driver code uses the 'stop' variable. Just remove it so we can get rid of the suspend/resume. Signed-off-by: H Hartley Sweeten <hsweeten@visionengravers.com> Cc: Ian Abbott <abbotti@mev.co.uk> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2013-01-29staging: comedi: ni_labpc_cs: remove labpc_release()H Hartley Sweeten
The function simply calls pcmcia_disable_device(). Remove it and just call pcmcia_disable_device() where needed. Signed-off-by: H Hartley Sweeten <hsweeten@visionengravers.com> Cc: Ian Abbott <abbotti@mev.co.uk> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2013-01-29staging: comedi: ni_labpc_cs: cleanup pcmcia_driverH Hartley Sweeten
For aesthetic reasons, reorder the pcmcia_driver variables and add some whitespace. Signed-off-by: H Hartley Sweeten <hsweeten@visionengravers.com> Cc: Ian Abbott <abbotti@mev.co.uk> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2013-01-29staging: comedi: ni_labpc_cs: move MODULE_* info to end of fileH Hartley Sweeten
For aesthetic reasons, move all the MODULE_* information to the end of the file. Signed-off-by: H Hartley Sweeten <hsweeten@visionengravers.com> Cc: Ian Abbott <abbotti@mev.co.uk> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2013-01-29staging: comedi: ni_mio_cs: cleanup the boardinfo declarationH Hartley Sweeten
For aesthetic reasons, reformat the boardinfo declaration and add some whitespace. Remove all the information that is set to '0' as this is the default. Signed-off-by: H Hartley Sweeten <hsweeten@visionengravers.com> Cc: Ian Abbott <abbotti@mev.co.uk> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2013-01-29staging: comedi: ni_mio_cs: cleanup mio_cs_attach()H Hartley Sweeten
Remove the DPRINTK() function trace message as well as the #if 0'ed out debug code that dumps the board "fingerprint". Remove the need for the local variable that holds the link->irq passed to request_irq(). Also, return the error code from that function instead of assuming -EINVAL. Use the dev->board_name for the resource string passed to request_irq() instead of the open coded string "ni_mio_cs". For aesthetic reasons, add some whitespace to the initializatio of the devpriv values. Just return the result of ni_E_init() instead of checking it for an error, returning the error, or returning "0". Signed-off-by: H Hartley Sweeten <hsweeten@visionengravers.com> Cc: Ian Abbott <abbotti@mev.co.uk> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2013-01-29staging: comedi: ni_mio_cs: remove last forward declarationH Hartley Sweeten
Move the ni_getboardtype() function to remove the last forward declaration in this file. Signed-off-by: H Hartley Sweeten <hsweeten@visionengravers.com> Cc: Ian Abbott <abbotti@mev.co.uk> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2013-01-29staging: comedi: ni_mio_cs: move mio_cs_detach()H Hartley Sweeten
For aesthetic reasons, move this function down so it's by the comedi_driver declaration. Signed-off-by: H Hartley Sweeten <hsweeten@visionengravers.com> Cc: Ian Abbott <abbotti@mev.co.uk> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2013-01-29staging: comedi: ni_mio_cs: move comedi_driver declarationH Hartley Sweeten
Move the comedi_driver declaration down in the file. This gets rid of the need for a couple forward declarations. For aesthetic reasons, add some whitespace to the declaration. Signed-off-by: H Hartley Sweeten <hsweeten@visionengravers.com> Cc: Ian Abbott <abbotti@mev.co.uk> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2013-01-29staging: comedi: ni_mio_cs: cleanup cs_attach()H Hartley Sweeten
Absorb the code from mio_cs_config() into this function and properly return the error if the configuration fails. Remove the DPRINTK() function trace message. Signed-off-by: H Hartley Sweeten <hsweeten@visionengravers.com> Cc: Ian Abbott <abbotti@mev.co.uk> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2013-01-29staging: comedi: ni_mio_cs: remove cs_release()H Hartley Sweeten
This function simply calls pcmcia_disable_device(). Remove it and just call pcmcia_disable_device() where needed. Signed-off-by: H Hartley Sweeten <hsweeten@visionengravers.com> Cc: Ian Abbott <abbotti@mev.co.uk> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2013-01-29staging: comedi: ni_mio_cs: move pcmcia_driver functionsH Hartley Sweeten
For aesthetic reasons, move all the pcmcia_driver functions so they are near the pcmcia_driver declaration. This also removes the need for a couple forward declarations. Signed-off-by: H Hartley Sweeten <hsweeten@visionengravers.com> Cc: Ian Abbott <abbotti@mev.co.uk> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2013-01-29staging: comedi: ni_mio_cs: remove pcmcia_driver suspend/resumeH Hartley Sweeten
The pcmcia_driver suspend and resume functions in this driver don't do anything. Since they are optional just remove them. Signed-off-by: H Hartley Sweeten <hsweeten@visionengravers.com> Cc: Ian Abbott <abbotti@mev.co.uk> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2013-01-29staging: comedi: ni_mio_cs: remove setting dev->driverH Hartley Sweeten
The comedi core sets the dev->driver pointer before calling the comedi_driver attach function. Signed-off-by: H Hartley Sweeten <hsweeten@visionengravers.com> Cc: Ian Abbott <abbotti@mev.co.uk> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2013-01-29staging: comedi: ni_mio_cs: cleanup pcmcia_driverH Hartley Sweeten
For aesthetic reasons, reorder the pcmcia_driver variables and add some whitespace. Also, remove the unnecessary '&' before the function names. They are already addresses. Signed-off-by: H Hartley Sweeten <hsweeten@visionengravers.com> Cc: Ian Abbott <abbotti@mev.co.uk> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2013-01-29staging: comedi: ni_mio_cs: move MODULE_* info to end of fileH Hartley Sweeten
For aesthetic reasons, move all the MODULE_* information to the end of the file. Signed-off-by: H Hartley Sweeten <hsweeten@visionengravers.com> Cc: Ian Abbott <abbotti@mev.co.uk> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2013-01-29staging: comedi: quatech_daqp_cs: cleanup subdevice initH Hartley Sweeten
Remove the dev_info() board attach noise. For aesthetic reasons, add some whitespace to the subdevice init. Remove the init of the s->len_chanlist for the subdevices that do not support commands. It's not used by them and the comedi core will handle initializing it properly in the postconfig. Change the return after a successful attach to "0". The comedi core expects a < 0 value to indicate an error and "0" is the typical value returned to indicate success. Signed-off-by: H Hartley Sweeten <hsweeten@visionengravers.com> Cc: Ian Abbott <abbotti@mev.co.uk> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2013-01-29staging: comedi: quatech_daqp_cs: fix possible memory dereference issueH Hartley Sweeten
In daqp_attach(), the first options value passed in the comedi_devconfig is used as an index to the private dev_table[] in this driver. This table is used to pass the pcmcia_device to the comedi_driver. Fix the code so that the index is checked before the table is accessed so that we don't get a possible memory dereference BUG. Change the error returned to the comedi core from -EIO to -ENODEV. Signed-off-by: H Hartley Sweeten <hsweeten@visionengravers.com> Cc: Ian Abbott <abbotti@mev.co.uk> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2013-01-29staging: comedi: quatech_daqp_cs: cleanup the comedi_lrange tablesH Hartley Sweeten
For aesthetic reasons, cleanup the whitespace of the range_daqp_ai table. Remove the range_daqp_ao table and use the comedi core provided range table for bipolar 5V (range_bipolar5). Signed-off-by: H Hartley Sweeten <hsweeten@visionengravers.com> Cc: Ian Abbott <abbotti@mev.co.uk> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>