All of lore.kernel.org
 help / color / mirror / Atom feed
From: Ben Hutchings <ben@decadent.org.uk>
To: linux-kernel@vger.kernel.org, stable@vger.kernel.org
Cc: akpm@linux-foundation.org, Denis Kirjanov <kda@linux-powerpc.org>,
	"Greg Kroah-Hartman" <gregkh@linuxfoundation.org>,
	"Bastien Nocera" <hadess@hadess.net>,
	"Cesar Miquel" <miquel@df.uba.ar>
Subject: [PATCH 3.16 016/136] USB: rio500: Remove Rio 500 kernel driver
Date: Tue, 17 Dec 2019 00:45:50 +0000	[thread overview]
Message-ID: <lsq.1576543535.485239367@decadent.org.uk> (raw)
In-Reply-To: <lsq.1576543534.33060804@decadent.org.uk>

3.16.80-rc1 review patch.  If anyone has any objections, please let me know.

------------------

From: Bastien Nocera <hadess@hadess.net>

commit 015664d15270a112c2371d812f03f7c579b35a73 upstream.

The Rio500 kernel driver has not been used by Rio500 owners since 2001
not long after the rio500 project added support for a user-space USB stack
through the very first versions of usbdevfs and then libusb.

Support for the kernel driver was removed from the upstream utilities
in 2008:
https://gitlab.freedesktop.org/hadess/rio500/commit/943f624ab721eb8281c287650fcc9e2026f6f5db

Cc: Cesar Miquel <miquel@df.uba.ar>
Signed-off-by: Bastien Nocera <hadess@hadess.net>
Link: https://lore.kernel.org/r/6251c17584d220472ce882a3d9c199c401a51a71.camel@hadess.net
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
[bwh: Backported to 3.16:
 - Also delete CONFIG_USB_RIO500 from arch/powerpc/configs/c2k_defconfig
 - Drop change to arch/arm/configs/pxa_defconfig
 - Adjust filename, content]
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
---
--- a/Documentation/usb/rio.txt
+++ /dev/null
@@ -1,138 +0,0 @@
-Copyright (C) 1999, 2000 Bruce Tenison
-Portions Copyright (C) 1999, 2000 David Nelson
-Thanks to David Nelson for guidance and the usage of the scanner.txt
-and scanner.c files to model our driver and this informative file.
-
-Mar. 2, 2000
-
-CHANGES
-
-- Initial Revision
-
-
-OVERVIEW
-
-This README will address issues regarding how to configure the kernel
-to access a RIO 500 mp3 player.  
-Before I explain how to use this to access the Rio500 please be warned:
-
-W A R N I N G:
---------------
-
-Please note that this software is still under development.  The authors
-are in no way responsible for any damage that may occur, no matter how
-inconsequential.
-
-It seems that the Rio has a problem when sending .mp3 with low batteries.
-I suggest when the batteries are low and you want to transfer stuff that you
-replace it with a fresh one. In my case, what happened is I lost two 16kb
-blocks (they are no longer usable to store information to it). But I don't
-know if that's normal or not; it could simply be a problem with the flash 
-memory.
-
-In an extreme case, I left my Rio playing overnight and the batteries wore 
-down to nothing and appear to have corrupted the flash memory. My RIO 
-needed to be replaced as a result.  Diamond tech support is aware of the 
-problem.  Do NOT allow your batteries to wear down to nothing before 
-changing them.  It appears RIO 500 firmware does not handle low battery 
-power well at all. 
-
-On systems with OHCI controllers, the kernel OHCI code appears to have 
-power on problems with some chipsets.  If you are having problems 
-connecting to your RIO 500, try turning it on first and then plugging it 
-into the USB cable.  
-
-Contact information:
---------------------
-
-   The main page for the project is hosted at sourceforge.net in the following
-   URL: <http://rio500.sourceforge.net>. You can also go to the project's
-   sourceforge home page at: <http://sourceforge.net/projects/rio500/>.
-   There is also a mailing list: rio500-users@lists.sourceforge.net
-
-Authors:
--------
-
-Most of the code was written by Cesar Miquel <miquel@df.uba.ar>. Keith 
-Clayton <kclayton@jps.net> is incharge of the PPC port and making sure
-things work there. Bruce Tenison <btenison@dibbs.net> is adding support
-for .fon files and also does testing. The program will mostly sure be
-re-written and Pete Ikusz along with the rest will re-design it. I would
-also like to thank Tri Nguyen <tmn_3022000@hotmail.com> who provided use 
-with some important information regarding the communication with the Rio.
-
-ADDITIONAL INFORMATION and Userspace tools
-
-http://rio500.sourceforge.net/
-
-
-REQUIREMENTS
-
-A host with a USB port.  Ideally, either a UHCI (Intel) or OHCI
-(Compaq and others) hardware port should work.
-
-A Linux development kernel (2.3.x) with USB support enabled or a
-backported version to linux-2.2.x.  See http://www.linux-usb.org for
-more information on accomplishing this.
-
-A Linux kernel with RIO 500 support enabled.
-
-'lspci' which is only needed to determine the type of USB hardware
-available in your machine.
-
-CONFIGURATION
-
-Using `lspci -v`, determine the type of USB hardware available.
-
-  If you see something like:
-
-    USB Controller: ......
-    Flags: .....
-    I/O ports at ....
-
-  Then you have a UHCI based controller.
-
-  If you see something like:
-
-     USB Controller: .....
-     Flags: ....
-     Memory at .....
-
-  Then you have a OHCI based controller.
-
-Using `make menuconfig` or your preferred method for configuring the
-kernel, select 'Support for USB', 'OHCI/UHCI' depending on your
-hardware (determined from the steps above), 'USB Diamond Rio500 support', and
-'Preliminary USB device filesystem'.  Compile and install the modules
-(you may need to execute `depmod -a` to update the module
-dependencies).
-
-Add a device for the USB rio500:
-  `mknod /dev/usb/rio500 c 180 64`
-
-Set appropriate permissions for /dev/usb/rio500 (don't forget about
-group and world permissions).  Both read and write permissions are
-required for proper operation.
-
-Load the appropriate modules (if compiled as modules):
-
-  OHCI:
-    modprobe usbcore
-    modprobe usb-ohci
-    modprobe rio500
-
-  UHCI:
-    modprobe usbcore
-    modprobe usb-uhci  (or uhci)
-    modprobe rio500
-
-That's it.  The Rio500 Utils at: http://rio500.sourceforge.net should
-be able to access the rio500.
-
-BUGS
-
-If you encounter any problems feel free to drop me an email.
-
-Bruce Tenison
-btenison@dibbs.net
-
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -9420,13 +9420,6 @@ W:	http://www.linux-usb.org/usbnet
 S:	Maintained
 F:	drivers/net/usb/dm9601.c
 
-USB DIAMOND RIO500 DRIVER
-M:	Cesar Miquel <miquel@df.uba.ar>
-L:	rio500-users@lists.sourceforge.net
-W:	http://rio500.sourceforge.net
-S:	Maintained
-F:	drivers/usb/misc/rio500*
-
 USB EHCI DRIVER
 M:	Alan Stern <stern@rowland.harvard.edu>
 L:	linux-usb@vger.kernel.org
--- a/arch/arm/configs/badge4_defconfig
+++ b/arch/arm/configs/badge4_defconfig
@@ -98,7 +98,6 @@ CONFIG_USB_SERIAL_PL2303=m
 CONFIG_USB_SERIAL_CYBERJACK=m
 CONFIG_USB_SERIAL_XIRCOM=m
 CONFIG_USB_SERIAL_OMNINET=m
-CONFIG_USB_RIO500=m
 CONFIG_EXT2_FS=m
 CONFIG_EXT3_FS=m
 CONFIG_MSDOS_FS=y
--- a/arch/arm/configs/corgi_defconfig
+++ b/arch/arm/configs/corgi_defconfig
@@ -207,7 +207,6 @@ CONFIG_USB_SERIAL_XIRCOM=m
 CONFIG_USB_SERIAL_OMNINET=m
 CONFIG_USB_EMI62=m
 CONFIG_USB_EMI26=m
-CONFIG_USB_RIO500=m
 CONFIG_USB_LEGOTOWER=m
 CONFIG_USB_LCD=m
 CONFIG_USB_LED=m
--- a/arch/arm/configs/s3c2410_defconfig
+++ b/arch/arm/configs/s3c2410_defconfig
@@ -355,7 +355,6 @@ CONFIG_USB_EMI62=m
 CONFIG_USB_EMI26=m
 CONFIG_USB_ADUTUX=m
 CONFIG_USB_SEVSEG=m
-CONFIG_USB_RIO500=m
 CONFIG_USB_LEGOTOWER=m
 CONFIG_USB_LCD=m
 CONFIG_USB_LED=m
--- a/arch/arm/configs/spitz_defconfig
+++ b/arch/arm/configs/spitz_defconfig
@@ -202,7 +202,6 @@ CONFIG_USB_SERIAL_XIRCOM=m
 CONFIG_USB_SERIAL_OMNINET=m
 CONFIG_USB_EMI62=m
 CONFIG_USB_EMI26=m
-CONFIG_USB_RIO500=m
 CONFIG_USB_LEGOTOWER=m
 CONFIG_USB_LCD=m
 CONFIG_USB_LED=m
--- a/arch/mips/configs/mtx1_defconfig
+++ b/arch/mips/configs/mtx1_defconfig
@@ -637,7 +637,6 @@ CONFIG_USB_SERIAL_OMNINET=m
 CONFIG_USB_EMI62=m
 CONFIG_USB_EMI26=m
 CONFIG_USB_ADUTUX=m
-CONFIG_USB_RIO500=m
 CONFIG_USB_LEGOTOWER=m
 CONFIG_USB_LCD=m
 CONFIG_USB_LED=m
--- a/arch/mips/configs/rm200_defconfig
+++ b/arch/mips/configs/rm200_defconfig
@@ -351,7 +351,6 @@ CONFIG_USB_SERIAL_SAFE_PADDED=y
 CONFIG_USB_SERIAL_CYBERJACK=m
 CONFIG_USB_SERIAL_XIRCOM=m
 CONFIG_USB_SERIAL_OMNINET=m
-CONFIG_USB_RIO500=m
 CONFIG_USB_LEGOTOWER=m
 CONFIG_USB_LCD=m
 CONFIG_USB_LED=m
--- a/arch/powerpc/configs/c2k_defconfig
+++ b/arch/powerpc/configs/c2k_defconfig
@@ -315,7 +315,6 @@ CONFIG_USB_SERIAL_CYBERJACK=m
 CONFIG_USB_SERIAL_XIRCOM=m
 CONFIG_USB_SERIAL_OMNINET=m
 CONFIG_USB_EMI62=m
-CONFIG_USB_RIO500=m
 CONFIG_USB_LEGOTOWER=m
 CONFIG_USB_LCD=m
 CONFIG_USB_LED=m
--- a/drivers/usb/misc/Kconfig
+++ b/drivers/usb/misc/Kconfig
@@ -46,16 +46,6 @@ config USB_SEVSEG
 	  To compile this driver as a module, choose M here: the
 	  module will be called usbsevseg.
 
-config USB_RIO500
-	tristate "USB Diamond Rio500 support"
-	help
-	  Say Y here if you want to connect a USB Rio500 mp3 player to your
-	  computer's USB port. Please read <file:Documentation/usb/rio.txt>
-	  for more information.
-
-	  To compile this driver as a module, choose M here: the
-	  module will be called rio500.
-
 config USB_LEGOTOWER
 	tristate "USB Lego Infrared Tower support"
 	help
--- a/drivers/usb/misc/Makefile
+++ b/drivers/usb/misc/Makefile
@@ -17,7 +17,6 @@ obj-$(CONFIG_USB_LCD)			+= usblcd.o
 obj-$(CONFIG_USB_LD)			+= ldusb.o
 obj-$(CONFIG_USB_LED)			+= usbled.o
 obj-$(CONFIG_USB_LEGOTOWER)		+= legousbtower.o
-obj-$(CONFIG_USB_RIO500)		+= rio500.o
 obj-$(CONFIG_USB_TEST)			+= usbtest.o
 obj-$(CONFIG_USB_EHSET_TEST_FIXTURE)    += ehset.o
 obj-$(CONFIG_USB_TRANCEVIBRATOR)	+= trancevibrator.o
--- a/drivers/usb/misc/rio500.c
+++ /dev/null
@@ -1,578 +0,0 @@
-/* -*- linux-c -*- */
-
-/* 
- * Driver for USB Rio 500
- *
- * Cesar Miquel (miquel@df.uba.ar)
- * 
- * based on hp_scanner.c by David E. Nelson (dnelson@jump.net)
- * 
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- *
- * Based upon mouse.c (Brad Keryan) and printer.c (Michael Gee).
- *
- * Changelog:
- * 30/05/2003  replaced lock/unlock kernel with up/down
- *             Daniele Bellucci  bellucda@tiscali.it
- * */
-
-#include <linux/module.h>
-#include <linux/kernel.h>
-#include <linux/signal.h>
-#include <linux/sched.h>
-#include <linux/mutex.h>
-#include <linux/errno.h>
-#include <linux/random.h>
-#include <linux/poll.h>
-#include <linux/slab.h>
-#include <linux/spinlock.h>
-#include <linux/usb.h>
-#include <linux/wait.h>
-
-#include "rio500_usb.h"
-
-/*
- * Version Information
- */
-#define DRIVER_VERSION "v1.1"
-#define DRIVER_AUTHOR "Cesar Miquel <miquel@df.uba.ar>"
-#define DRIVER_DESC "USB Rio 500 driver"
-
-#define RIO_MINOR	64
-
-/* stall/wait timeout for rio */
-#define NAK_TIMEOUT (HZ)
-
-#define IBUF_SIZE 0x1000
-
-/* Size of the rio buffer */
-#define OBUF_SIZE 0x10000
-
-struct rio_usb_data {
-        struct usb_device *rio_dev;     /* init: probe_rio */
-        unsigned int ifnum;             /* Interface number of the USB device */
-        int isopen;                     /* nz if open */
-        int present;                    /* Device is present on the bus */
-        char *obuf, *ibuf;              /* transfer buffers */
-        char bulk_in_ep, bulk_out_ep;   /* Endpoint assignments */
-        wait_queue_head_t wait_q;       /* for timeouts */
-	struct mutex lock;          /* general race avoidance */
-};
-
-static DEFINE_MUTEX(rio500_mutex);
-static struct rio_usb_data rio_instance;
-
-static int open_rio(struct inode *inode, struct file *file)
-{
-	struct rio_usb_data *rio = &rio_instance;
-
-	/* against disconnect() */
-	mutex_lock(&rio500_mutex);
-	mutex_lock(&(rio->lock));
-
-	if (rio->isopen || !rio->present) {
-		mutex_unlock(&(rio->lock));
-		mutex_unlock(&rio500_mutex);
-		return -EBUSY;
-	}
-	rio->isopen = 1;
-
-	init_waitqueue_head(&rio->wait_q);
-
-	mutex_unlock(&(rio->lock));
-
-	dev_info(&rio->rio_dev->dev, "Rio opened.\n");
-	mutex_unlock(&rio500_mutex);
-
-	return 0;
-}
-
-static int close_rio(struct inode *inode, struct file *file)
-{
-	struct rio_usb_data *rio = &rio_instance;
-
-	/* against disconnect() */
-	mutex_lock(&rio500_mutex);
-	mutex_lock(&(rio->lock));
-
-	rio->isopen = 0;
-	if (!rio->present) {
-		/* cleanup has been delayed */
-		kfree(rio->ibuf);
-		kfree(rio->obuf);
-		rio->ibuf = NULL;
-		rio->obuf = NULL;
-	} else {
-		dev_info(&rio->rio_dev->dev, "Rio closed.\n");
-	}
-	mutex_unlock(&(rio->lock));
-	mutex_unlock(&rio500_mutex);
-	return 0;
-}
-
-static long ioctl_rio(struct file *file, unsigned int cmd, unsigned long arg)
-{
-	struct RioCommand rio_cmd;
-	struct rio_usb_data *rio = &rio_instance;
-	void __user *data;
-	unsigned char *buffer;
-	int result, requesttype;
-	int retries;
-	int retval=0;
-
-	mutex_lock(&(rio->lock));
-        /* Sanity check to make sure rio is connected, powered, etc */
-        if (rio->present == 0 || rio->rio_dev == NULL) {
-		retval = -ENODEV;
-		goto err_out;
-	}
-
-	switch (cmd) {
-	case RIO_RECV_COMMAND:
-		data = (void __user *) arg;
-		if (data == NULL)
-			break;
-		if (copy_from_user(&rio_cmd, data, sizeof(struct RioCommand))) {
-			retval = -EFAULT;
-			goto err_out;
-		}
-		if (rio_cmd.length < 0 || rio_cmd.length > PAGE_SIZE) {
-			retval = -EINVAL;
-			goto err_out;
-		}
-		buffer = (unsigned char *) __get_free_page(GFP_KERNEL);
-		if (buffer == NULL) {
-			retval = -ENOMEM;
-			goto err_out;
-		}
-		if (copy_from_user(buffer, rio_cmd.buffer, rio_cmd.length)) {
-			retval = -EFAULT;
-			free_page((unsigned long) buffer);
-			goto err_out;
-		}
-
-		requesttype = rio_cmd.requesttype | USB_DIR_IN |
-		    USB_TYPE_VENDOR | USB_RECIP_DEVICE;
-		dev_dbg(&rio->rio_dev->dev,
-			"sending command:reqtype=%0x req=%0x value=%0x index=%0x len=%0x\n",
-			requesttype, rio_cmd.request, rio_cmd.value,
-			rio_cmd.index, rio_cmd.length);
-		/* Send rio control message */
-		retries = 3;
-		while (retries) {
-			result = usb_control_msg(rio->rio_dev,
-						 usb_rcvctrlpipe(rio-> rio_dev, 0),
-						 rio_cmd.request,
-						 requesttype,
-						 rio_cmd.value,
-						 rio_cmd.index, buffer,
-						 rio_cmd.length,
-						 jiffies_to_msecs(rio_cmd.timeout));
-			if (result == -ETIMEDOUT)
-				retries--;
-			else if (result < 0) {
-				dev_err(&rio->rio_dev->dev,
-					"Error executing ioctrl. code = %d\n",
-					result);
-				retries = 0;
-			} else {
-				dev_dbg(&rio->rio_dev->dev,
-					"Executed ioctl. Result = %d (data=%02x)\n",
-					result, buffer[0]);
-				if (copy_to_user(rio_cmd.buffer, buffer,
-						 rio_cmd.length)) {
-					free_page((unsigned long) buffer);
-					retval = -EFAULT;
-					goto err_out;
-				}
-				retries = 0;
-			}
-
-			/* rio_cmd.buffer contains a raw stream of single byte
-			   data which has been returned from rio.  Data is
-			   interpreted at application level.  For data that
-			   will be cast to data types longer than 1 byte, data
-			   will be little_endian and will potentially need to
-			   be swapped at the app level */
-
-		}
-		free_page((unsigned long) buffer);
-		break;
-
-	case RIO_SEND_COMMAND:
-		data = (void __user *) arg;
-		if (data == NULL)
-			break;
-		if (copy_from_user(&rio_cmd, data, sizeof(struct RioCommand))) {
-			retval = -EFAULT;
-			goto err_out;
-		}
-		if (rio_cmd.length < 0 || rio_cmd.length > PAGE_SIZE) {
-			retval = -EINVAL;
-			goto err_out;
-		}
-		buffer = (unsigned char *) __get_free_page(GFP_KERNEL);
-		if (buffer == NULL) {
-			retval = -ENOMEM;
-			goto err_out;
-		}
-		if (copy_from_user(buffer, rio_cmd.buffer, rio_cmd.length)) {
-			free_page((unsigned long)buffer);
-			retval = -EFAULT;
-			goto err_out;
-		}
-
-		requesttype = rio_cmd.requesttype | USB_DIR_OUT |
-		    USB_TYPE_VENDOR | USB_RECIP_DEVICE;
-		dev_dbg(&rio->rio_dev->dev,
-			"sending command: reqtype=%0x req=%0x value=%0x index=%0x len=%0x\n",
-			requesttype, rio_cmd.request, rio_cmd.value,
-			rio_cmd.index, rio_cmd.length);
-		/* Send rio control message */
-		retries = 3;
-		while (retries) {
-			result = usb_control_msg(rio->rio_dev,
-						 usb_sndctrlpipe(rio-> rio_dev, 0),
-						 rio_cmd.request,
-						 requesttype,
-						 rio_cmd.value,
-						 rio_cmd.index, buffer,
-						 rio_cmd.length,
-						 jiffies_to_msecs(rio_cmd.timeout));
-			if (result == -ETIMEDOUT)
-				retries--;
-			else if (result < 0) {
-				dev_err(&rio->rio_dev->dev,
-					"Error executing ioctrl. code = %d\n",
-					result);
-				retries = 0;
-			} else {
-				dev_dbg(&rio->rio_dev->dev,
-					"Executed ioctl. Result = %d\n", result);
-				retries = 0;
-
-			}
-
-		}
-		free_page((unsigned long) buffer);
-		break;
-
-	default:
-		retval = -ENOTTY;
-		break;
-	}
-
-
-err_out:
-	mutex_unlock(&(rio->lock));
-	return retval;
-}
-
-static ssize_t
-write_rio(struct file *file, const char __user *buffer,
-	  size_t count, loff_t * ppos)
-{
-	DEFINE_WAIT(wait);
-	struct rio_usb_data *rio = &rio_instance;
-
-	unsigned long copy_size;
-	unsigned long bytes_written = 0;
-	unsigned int partial;
-
-	int result = 0;
-	int maxretry;
-	int errn = 0;
-	int intr;
-
-	intr = mutex_lock_interruptible(&(rio->lock));
-	if (intr)
-		return -EINTR;
-        /* Sanity check to make sure rio is connected, powered, etc */
-        if (rio->present == 0 || rio->rio_dev == NULL) {
-		mutex_unlock(&(rio->lock));
-		return -ENODEV;
-	}
-
-
-
-	do {
-		unsigned long thistime;
-		char *obuf = rio->obuf;
-
-		thistime = copy_size =
-		    (count >= OBUF_SIZE) ? OBUF_SIZE : count;
-		if (copy_from_user(rio->obuf, buffer, copy_size)) {
-			errn = -EFAULT;
-			goto error;
-		}
-		maxretry = 5;
-		while (thistime) {
-			if (!rio->rio_dev) {
-				errn = -ENODEV;
-				goto error;
-			}
-			if (signal_pending(current)) {
-				mutex_unlock(&(rio->lock));
-				return bytes_written ? bytes_written : -EINTR;
-			}
-
-			result = usb_bulk_msg(rio->rio_dev,
-					 usb_sndbulkpipe(rio->rio_dev, 2),
-					 obuf, thistime, &partial, 5000);
-
-			dev_dbg(&rio->rio_dev->dev,
-				"write stats: result:%d thistime:%lu partial:%u\n",
-				result, thistime, partial);
-
-			if (result == -ETIMEDOUT) {	/* NAK - so hold for a while */
-				if (!maxretry--) {
-					errn = -ETIME;
-					goto error;
-				}
-				prepare_to_wait(&rio->wait_q, &wait, TASK_INTERRUPTIBLE);
-				schedule_timeout(NAK_TIMEOUT);
-				finish_wait(&rio->wait_q, &wait);
-				continue;
-			} else if (!result && partial) {
-				obuf += partial;
-				thistime -= partial;
-			} else
-				break;
-		}
-		if (result) {
-			dev_err(&rio->rio_dev->dev, "Write Whoops - %x\n",
-				result);
-			errn = -EIO;
-			goto error;
-		}
-		bytes_written += copy_size;
-		count -= copy_size;
-		buffer += copy_size;
-	} while (count > 0);
-
-	mutex_unlock(&(rio->lock));
-
-	return bytes_written ? bytes_written : -EIO;
-
-error:
-	mutex_unlock(&(rio->lock));
-	return errn;
-}
-
-static ssize_t
-read_rio(struct file *file, char __user *buffer, size_t count, loff_t * ppos)
-{
-	DEFINE_WAIT(wait);
-	struct rio_usb_data *rio = &rio_instance;
-	ssize_t read_count;
-	unsigned int partial;
-	int this_read;
-	int result;
-	int maxretry = 10;
-	char *ibuf;
-	int intr;
-
-	intr = mutex_lock_interruptible(&(rio->lock));
-	if (intr)
-		return -EINTR;
-	/* Sanity check to make sure rio is connected, powered, etc */
-        if (rio->present == 0 || rio->rio_dev == NULL) {
-		mutex_unlock(&(rio->lock));
-		return -ENODEV;
-	}
-
-	ibuf = rio->ibuf;
-
-	read_count = 0;
-
-
-	while (count > 0) {
-		if (signal_pending(current)) {
-			mutex_unlock(&(rio->lock));
-			return read_count ? read_count : -EINTR;
-		}
-		if (!rio->rio_dev) {
-			mutex_unlock(&(rio->lock));
-			return -ENODEV;
-		}
-		this_read = (count >= IBUF_SIZE) ? IBUF_SIZE : count;
-
-		result = usb_bulk_msg(rio->rio_dev,
-				      usb_rcvbulkpipe(rio->rio_dev, 1),
-				      ibuf, this_read, &partial,
-				      8000);
-
-		dev_dbg(&rio->rio_dev->dev,
-			"read stats: result:%d this_read:%u partial:%u\n",
-			result, this_read, partial);
-
-		if (partial) {
-			count = this_read = partial;
-		} else if (result == -ETIMEDOUT || result == 15) {	/* FIXME: 15 ??? */
-			if (!maxretry--) {
-				mutex_unlock(&(rio->lock));
-				dev_err(&rio->rio_dev->dev,
-					"read_rio: maxretry timeout\n");
-				return -ETIME;
-			}
-			prepare_to_wait(&rio->wait_q, &wait, TASK_INTERRUPTIBLE);
-			schedule_timeout(NAK_TIMEOUT);
-			finish_wait(&rio->wait_q, &wait);
-			continue;
-		} else if (result != -EREMOTEIO) {
-			mutex_unlock(&(rio->lock));
-			dev_err(&rio->rio_dev->dev,
-				"Read Whoops - result:%u partial:%u this_read:%u\n",
-				result, partial, this_read);
-			return -EIO;
-		} else {
-			mutex_unlock(&(rio->lock));
-			return (0);
-		}
-
-		if (this_read) {
-			if (copy_to_user(buffer, ibuf, this_read)) {
-				mutex_unlock(&(rio->lock));
-				return -EFAULT;
-			}
-			count -= this_read;
-			read_count += this_read;
-			buffer += this_read;
-		}
-	}
-	mutex_unlock(&(rio->lock));
-	return read_count;
-}
-
-static const struct file_operations usb_rio_fops = {
-	.owner =	THIS_MODULE,
-	.read =		read_rio,
-	.write =	write_rio,
-	.unlocked_ioctl = ioctl_rio,
-	.open =		open_rio,
-	.release =	close_rio,
-	.llseek =	noop_llseek,
-};
-
-static struct usb_class_driver usb_rio_class = {
-	.name =		"rio500%d",
-	.fops =		&usb_rio_fops,
-	.minor_base =	RIO_MINOR,
-};
-
-static int probe_rio(struct usb_interface *intf,
-		     const struct usb_device_id *id)
-{
-	struct usb_device *dev = interface_to_usbdev(intf);
-	struct rio_usb_data *rio = &rio_instance;
-	int retval = 0;
-
-	mutex_lock(&rio500_mutex);
-	if (rio->present) {
-		dev_info(&intf->dev, "Second USB Rio at address %d refused\n", dev->devnum);
-		retval = -EBUSY;
-		goto bail_out;
-	} else {
-		dev_info(&intf->dev, "USB Rio found at address %d\n", dev->devnum);
-	}
-
-	retval = usb_register_dev(intf, &usb_rio_class);
-	if (retval) {
-		dev_err(&dev->dev,
-			"Not able to get a minor for this device.\n");
-		retval = -ENOMEM;
-		goto bail_out;
-	}
-
-	rio->rio_dev = dev;
-
-	if (!(rio->obuf = kmalloc(OBUF_SIZE, GFP_KERNEL))) {
-		dev_err(&dev->dev,
-			"probe_rio: Not enough memory for the output buffer\n");
-		usb_deregister_dev(intf, &usb_rio_class);
-		retval = -ENOMEM;
-		goto bail_out;
-	}
-	dev_dbg(&intf->dev, "obuf address:%p\n", rio->obuf);
-
-	if (!(rio->ibuf = kmalloc(IBUF_SIZE, GFP_KERNEL))) {
-		dev_err(&dev->dev,
-			"probe_rio: Not enough memory for the input buffer\n");
-		usb_deregister_dev(intf, &usb_rio_class);
-		kfree(rio->obuf);
-		retval = -ENOMEM;
-		goto bail_out;
-	}
-	dev_dbg(&intf->dev, "ibuf address:%p\n", rio->ibuf);
-
-	mutex_init(&(rio->lock));
-
-	usb_set_intfdata (intf, rio);
-	rio->present = 1;
-bail_out:
-	mutex_unlock(&rio500_mutex);
-
-	return retval;
-}
-
-static void disconnect_rio(struct usb_interface *intf)
-{
-	struct rio_usb_data *rio = usb_get_intfdata (intf);
-
-	usb_set_intfdata (intf, NULL);
-	mutex_lock(&rio500_mutex);
-	if (rio) {
-		usb_deregister_dev(intf, &usb_rio_class);
-
-		mutex_lock(&(rio->lock));
-		if (rio->isopen) {
-			rio->isopen = 0;
-			/* better let it finish - the release will do whats needed */
-			rio->rio_dev = NULL;
-			mutex_unlock(&(rio->lock));
-			mutex_unlock(&rio500_mutex);
-			return;
-		}
-		kfree(rio->ibuf);
-		kfree(rio->obuf);
-
-		dev_info(&intf->dev, "USB Rio disconnected.\n");
-
-		rio->present = 0;
-		mutex_unlock(&(rio->lock));
-	}
-	mutex_unlock(&rio500_mutex);
-}
-
-static const struct usb_device_id rio_table[] = {
-	{ USB_DEVICE(0x0841, 1) }, 		/* Rio 500 */
-	{ }					/* Terminating entry */
-};
-
-MODULE_DEVICE_TABLE (usb, rio_table);
-
-static struct usb_driver rio_driver = {
-	.name =		"rio500",
-	.probe =	probe_rio,
-	.disconnect =	disconnect_rio,
-	.id_table =	rio_table,
-};
-
-module_usb_driver(rio_driver);
-
-MODULE_AUTHOR( DRIVER_AUTHOR );
-MODULE_DESCRIPTION( DRIVER_DESC );
-MODULE_LICENSE("GPL");
-
--- a/drivers/usb/misc/rio500_usb.h
+++ /dev/null
@@ -1,37 +0,0 @@
-/*  ----------------------------------------------------------------------
-
-    Copyright (C) 2000  Cesar Miquel  (miquel@df.uba.ar)
-
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program; if not, write to the Free Software
-    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-
-    ---------------------------------------------------------------------- */
-
-
-
-#define RIO_SEND_COMMAND			0x1
-#define RIO_RECV_COMMAND			0x2
-
-#define RIO_DIR_OUT               	        0x0
-#define RIO_DIR_IN				0x1
-
-struct RioCommand {
-	short length;
-	int request;
-	int requesttype;
-	int value;
-	int index;
-	void __user *buffer;
-	int timeout;
-};


  parent reply	other threads:[~2019-12-17  1:00 UTC|newest]

Thread overview: 140+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-12-17  0:45 [PATCH 3.16 000/136] 3.16.80-rc1 review Ben Hutchings
2019-12-17  0:45 ` [PATCH 3.16 001/136] hrtimer: Store cpu-number in struct hrtimer_cpu_base Ben Hutchings
2019-12-17  0:45 ` [PATCH 3.16 002/136] tick: broadcast-hrtimer: Remove overly clever return value abuse Ben Hutchings
2019-12-17  0:45 ` [PATCH 3.16 003/136] tick: hrtimer-broadcast: Prevent endless restarting when broadcast device is unused Ben Hutchings
2019-12-17  0:45 ` [PATCH 3.16 004/136] tick: broadcast-hrtimer: Fix a race in bc_set_next Ben Hutchings
2019-12-17  0:45 ` [PATCH 3.16 005/136] sch_cbq: validate TCA_CBQ_WRROPT to avoid crash Ben Hutchings
2019-12-17  0:45 ` [PATCH 3.16 006/136] scsi: sd: Ignore a failure to sync cache due to lack of authorization Ben Hutchings
2019-12-17  0:45 ` [PATCH 3.16 007/136] staging: rtl8188eu: fix HighestRate check in odm_ARFBRefresh_8188E() Ben Hutchings
2019-12-17  0:45 ` [PATCH 3.16 008/136] HID: fix error message in hid_open_report() Ben Hutchings
2019-12-17  0:45 ` [PATCH 3.16 009/136] RDMA/iwcm: Fix a lock inversion issue Ben Hutchings
2019-12-17  0:45 ` [PATCH 3.16 010/136] net: stmmac: Correctly take timestamp for PTPv2 Ben Hutchings
2019-12-17  0:45 ` [PATCH 3.16 011/136] hso: fix NULL-deref on tty open Ben Hutchings
2019-12-17  0:45 ` [PATCH 3.16 012/136] USB: serial: ftdi_sio: add device IDs for Sienna and Echelon PL-20 Ben Hutchings
2019-12-17  0:45 ` [PATCH 3.16 013/136] drm/omap: fix max fclk divider for omap36xx Ben Hutchings
2019-12-23 14:00   ` Adam Ford
2019-12-17  0:45 ` [PATCH 3.16 014/136] ipv6: drop incoming packets having a v4mapped source address Ben Hutchings
2019-12-17  0:45 ` [PATCH 3.16 015/136] scsi: zfcp: fix reaction on bit error threshold notification Ben Hutchings
2019-12-17  0:45 ` Ben Hutchings [this message]
2019-12-17  0:45 ` [PATCH 3.16 017/136] USB: serial: keyspan: fix NULL-derefs on open() and write() Ben Hutchings
2019-12-17  0:45 ` [PATCH 3.16 018/136] USB: microtek: fix info-leak at probe Ben Hutchings
2019-12-17  0:45 ` [PATCH 3.16 019/136] USB: adutux: fix NULL-derefs on disconnect Ben Hutchings
2019-12-17  0:45 ` [PATCH 3.16 020/136] USB: yurex: Don't retry on unexpected errors Ben Hutchings
2019-12-17  0:45 ` [PATCH 3.16 021/136] USB: dummy-hcd: fix power budget for SuperSpeed mode Ben Hutchings
2019-12-17  0:45 ` [PATCH 3.16 022/136] USB: usblcd: fix I/O after disconnect Ben Hutchings
2019-12-17  0:45 ` [PATCH 3.16 023/136] mac80211: Reject malformed SSID elements Ben Hutchings
2019-12-17  0:45 ` [PATCH 3.16 024/136] USB: legousbtower: fix slab info leak at probe Ben Hutchings
2019-12-17  0:45 ` [PATCH 3.16 025/136] USB: legousbtower: fix deadlock on disconnect Ben Hutchings
2019-12-17  0:46 ` [PATCH 3.16 026/136] USB: legousbtower: fix potential NULL-deref " Ben Hutchings
2019-12-17  0:46 ` [PATCH 3.16 027/136] USB: legousbtower: fix open after failed reset request Ben Hutchings
2019-12-17  0:46 ` [PATCH 3.16 028/136] xhci: Prevent device initiated U1/U2 link pm if exit latency is too long Ben Hutchings
2019-12-17  0:46 ` [PATCH 3.16 029/136] xhci: Check all endpoints for LPM timeout Ben Hutchings
2019-12-17  0:46 ` [PATCH 3.16 030/136] usb: xhci: wait for CNR controller not ready bit in xhci resume Ben Hutchings
2019-12-17  0:46 ` [PATCH 3.16 031/136] usb: renesas_usbhs: gadget: Do not discard queues in usb_ep_set_{halt,wedge}() Ben Hutchings
2019-12-17  0:46 ` [PATCH 3.16 032/136] usb: renesas_usbhs: gadget: Fix usb_ep_set_{halt,wedge}() behavior Ben Hutchings
2019-12-17  0:46 ` [PATCH 3.16 033/136] USB: usb-skeleton: fix runtime PM after driver unbind Ben Hutchings
2019-12-17  0:46 ` [PATCH 3.16 034/136] USB: usblp: " Ben Hutchings
2019-12-17  0:46 ` [PATCH 3.16 035/136] USB: serial: " Ben Hutchings
2019-12-17  0:46 ` [PATCH 3.16 036/136] media: stkwebcam: " Ben Hutchings
2019-12-17  0:46 ` [PATCH 3.16 037/136] serial: uartlite: fix exit path null pointer Ben Hutchings
2019-12-17  0:46 ` [PATCH 3.16 038/136] net: ipv4: use a dedicated counter for icmp_v4 redirect packets Ben Hutchings
2019-12-17  0:46 ` [PATCH 3.16 039/136] net: ipv4: avoid mixed n_redirects and rate_tokens usage Ben Hutchings
2019-12-17  0:46 ` [PATCH 3.16 040/136] sch_dsmark: fix potential NULL deref in dsmark_init() Ben Hutchings
2019-12-17  0:46 ` [PATCH 3.16 041/136] nfc: fix memory leak in llcp_sock_bind() Ben Hutchings
2019-12-17  0:46 ` [PATCH 3.16 042/136] CIFS: Gracefully handle QueryInfo errors during open Ben Hutchings
2019-12-17  0:46 ` [PATCH 3.16 043/136] panic: ensure preemption is disabled during panic() Ben Hutchings
2019-12-17  0:46 ` [PATCH 3.16 044/136] llc: fix sk_buff leak in llc_sap_state_process() Ben Hutchings
2019-12-17  0:46 ` [PATCH 3.16 045/136] Fix to check Unique id and FileType when client refer file directly Ben Hutchings
2019-12-17  0:46 ` [PATCH 3.16 046/136] cifs: Check uniqueid for SMB2+ and return -ESTALE if necessary Ben Hutchings
2019-12-17  0:46 ` [PATCH 3.16 047/136] CIFS: Force revalidate inode when dentry is stale Ben Hutchings
2019-12-17  0:46 ` [PATCH 3.16 048/136] CIFS: Force reval dentry if LOOKUP_REVAL flag is set Ben Hutchings
2019-12-17  0:46 ` [PATCH 3.16 049/136] memstick: jmb38x_ms: Fix an error handling path in 'jmb38x_ms_probe()' Ben Hutchings
2019-12-17  0:46 ` [PATCH 3.16 050/136] sched/fair: Scale bandwidth quota and period without losing quota/period ratio precision Ben Hutchings
2019-12-17  0:46 ` [PATCH 3.16 051/136] ARM: mm: fix alignment handler faults under memory pressure Ben Hutchings
2019-12-17  0:46 ` [PATCH 3.16 052/136] USB: usb-skeleton: fix NULL-deref on disconnect Ben Hutchings
2019-12-17  0:46 ` [PATCH 3.16 053/136] USB: legousbtower: fix use-after-free on release Ben Hutchings
2019-12-17  0:46 ` [PATCH 3.16 054/136] USB: ldusb: fix NULL-derefs on driver unbind Ben Hutchings
2019-12-17  0:46 ` [PATCH 3.16 055/136] USB: adutux: fix use-after-free on release Ben Hutchings
2019-12-17  0:46 ` [PATCH 3.16 056/136] USB: iowarrior: " Ben Hutchings
2019-12-17  0:46 ` [PATCH 3.16 057/136] USB: iowarrior: fix use-after-free after driver unbind Ben Hutchings
2019-12-17  0:46 ` [PATCH 3.16 058/136] USB: yurex: fix NULL-derefs on disconnect Ben Hutchings
2019-12-17  0:46 ` [PATCH 3.16 059/136] tracing: Get trace_array reference for available_tracers files Ben Hutchings
2019-12-17  0:46 ` [PATCH 3.16 060/136] batman-adv: iv_ogm_iface_enable, direct return values Ben Hutchings
2019-12-17  0:46 ` [PATCH 3.16 061/136] batman-adv: Avoid free/alloc race when handling OGM buffer Ben Hutchings
2019-12-17  0:46 ` [PATCH 3.16 062/136] parisc: Fix vmap memory leak in ioremap()/iounmap() Ben Hutchings
2019-12-17  0:46 ` [PATCH 3.16 063/136] mm/slub: fix a deadlock in show_slab_objects() Ben Hutchings
2019-12-17  0:46 ` [PATCH 3.16 064/136] xtensa: drop EXPORT_SYMBOL for outs*/ins* Ben Hutchings
2019-12-17  0:46 ` [PATCH 3.16 065/136] ceph: just skip unrecognized info in ceph_reply_info_extra Ben Hutchings
2019-12-17  0:46 ` [PATCH 3.16 066/136] USB: ldusb: fix memleak on disconnect Ben Hutchings
2019-12-17  0:46 ` [PATCH 3.16 067/136] USB: legousbtower: " Ben Hutchings
2019-12-17  0:46 ` [PATCH 3.16 068/136] USB: legousbtower: fix a signedness bug in tower_probe() Ben Hutchings
2019-12-17  0:46 ` [PATCH 3.16 069/136] usb: udc: lpc32xx: fix bad bit shift operation Ben Hutchings
2019-12-17  0:46 ` [PATCH 3.16 070/136] USB: usblp: fix use-after-free on disconnect Ben Hutchings
2019-12-17  0:46 ` [PATCH 3.16 071/136] PCI: PM: Fix pci_power_up() Ben Hutchings
2019-12-17  0:46 ` [PATCH 3.16 072/136] net: avoid potential infinite loop in tc_ctl_action() Ben Hutchings
2019-12-17  0:46 ` [PATCH 3.16 073/136] net: bcmgenet: Fix RGMII_MODE_EN value for GENET v1/2/3 Ben Hutchings
2019-12-17  0:46 ` [PATCH 3.16 074/136] USB: serial: ti_usb_3410_5052: fix port-close races Ben Hutchings
2019-12-17  0:46 ` [PATCH 3.16 075/136] Btrfs: check for the full sync flag while holding the inode lock during fsync Ben Hutchings
2019-12-17  0:46 ` [PATCH 3.16 076/136] scsi: core: try to get module before removing device Ben Hutchings
2019-12-17  0:46 ` [PATCH 3.16 077/136] net: phy: bcm7xxx: define soft_reset for 40nm EPHY Ben Hutchings
2019-12-17  0:46 ` [PATCH 3.16 078/136] net: bcmgenet: reset 40nm EPHY on energy detect Ben Hutchings
2019-12-17  0:46 ` [PATCH 3.16 079/136] USB: ldusb: fix read info leaks Ben Hutchings
2019-12-17  0:46 ` [PATCH 3.16 080/136] xen/netback: fix error path of xenvif_connect_data() Ben Hutchings
2019-12-17  0:46 ` [PATCH 3.16 081/136] net: netem: correct the parent's backlog when corrupted packet was dropped Ben Hutchings
2019-12-17  0:46 ` [PATCH 3.16 082/136] CIFS: avoid using MID 0xFFFF Ben Hutchings
2019-12-17  0:46 ` [PATCH 3.16 083/136] ARC: perf: Accommodate big-endian CPU Ben Hutchings
2019-12-17  0:46 ` [PATCH 3.16 084/136] scsi: lpfc: Honor module parameter lpfc_use_adisc Ben Hutchings
2019-12-17  0:46 ` [PATCH 3.16 085/136] fuse: flush dirty data/metadata before non-truncate setattr Ben Hutchings
2019-12-17  0:47 ` [PATCH 3.16 086/136] fuse: truncate pending writes on O_TRUNC Ben Hutchings
2019-12-17  0:47 ` [PATCH 3.16 087/136] ASoC: kirkwood: fix external clock probe defer Ben Hutchings
2019-12-17  0:47 ` [PATCH 3.16 088/136] MIPS: bmips: mark exception vectors as char arrays Ben Hutchings
2019-12-17  0:47 ` [PATCH 3.16 089/136] MIPS: tlbex: Fix build_restore_pagemask KScratch restore Ben Hutchings
2019-12-17  0:47 ` [PATCH 3.16 090/136] ipvs: move old_secure_tcp into struct netns_ipvs Ben Hutchings
2019-12-17  0:47 ` [PATCH 3.16 091/136] bonding: fix unexpected IFF_BONDING bit unset Ben Hutchings
2019-12-17  0:47 ` [PATCH 3.16 092/136] clk: samsung: exynos5420: Preserve PLL configuration during suspend/resume Ben Hutchings
2019-12-17  0:47 ` [PATCH 3.16 093/136] ALSA: bebob: Fix prototype of helper function to return negative value Ben Hutchings
2019-12-17  0:47 ` [PATCH 3.16 094/136] usb: gadget: udc: atmel: Fix interrupt storm in FIFO mode Ben Hutchings
2019-12-17  0:47 ` [PATCH 3.16 095/136] perf/x86/amd/ibs: Fix reading of the IBS OpData register and thus precise RIP validity Ben Hutchings
2019-12-17  0:47 ` [PATCH 3.16 096/136] perf/x86/amd/ibs: Handle erratum #420 only on the affected CPU family (10h) Ben Hutchings
2019-12-17  0:47 ` [PATCH 3.16 097/136] clk: at91: avoid sleeping early Ben Hutchings
2019-12-17  0:47 ` [PATCH 3.16 098/136] USB: ldusb: fix ring-buffer locking Ben Hutchings
2019-12-17  0:47 ` [PATCH 3.16 099/136] USB: ldusb: fix control-message timeout Ben Hutchings
2019-12-17  0:47 ` [PATCH 3.16 100/136] net: fix sk_page_frag() recursion from memory reclaim Ben Hutchings
2019-12-17  0:47 ` [PATCH 3.16 101/136] scsi: qla2xxx: stop timer in shutdown path Ben Hutchings
2019-12-17  0:47 ` [PATCH 3.16 102/136] USB: gadget: Reject endpoints with 0 maxpacket value Ben Hutchings
2019-12-17  0:47 ` [PATCH 3.16 103/136] ceph: fix use-after-free in __ceph_remove_cap() Ben Hutchings
2019-12-17  0:47 ` [PATCH 3.16 104/136] ceph: add missing check in d_revalidate snapdir handling Ben Hutchings
2019-12-17  0:47 ` [PATCH 3.16 105/136] USB: serial: whiteheat: fix potential slab corruption Ben Hutchings
2019-12-17  0:47 ` [PATCH 3.16 106/136] USB: serial: whiteheat: fix line-speed endianness Ben Hutchings
2019-12-17  0:47 ` [PATCH 3.16 107/136] nl80211: fix validation of mesh path nexthop Ben Hutchings
2019-12-17  0:47 ` [PATCH 3.16 108/136] ALSA: timer: Simplify error path in snd_timer_open() Ben Hutchings
2019-12-17  0:47 ` [PATCH 3.16 109/136] ALSA: timer: Fix incorrectly assigned timer instance Ben Hutchings
2019-12-17  0:47 ` [PATCH 3.16 110/136] ALSA: timer: Fix mutex deadlock at releasing card Ben Hutchings
2019-12-17  0:47 ` [PATCH 3.16 111/136] s390/cmm: fix information leak in cmm_timeout_handler() Ben Hutchings
2019-12-17  0:47 ` [PATCH 3.16 112/136] inet: stop leaking jiffies on the wire Ben Hutchings
2019-12-17  0:47 ` [PATCH 3.16 113/136] ALSA: bebob: fix to detect configured source of sampling clock for Focusrite Saffire Pro i/o series Ben Hutchings
2019-12-17  0:47 ` [PATCH 3.16 114/136] dccp: do not leak jiffies on the wire Ben Hutchings
2019-12-17  0:47 ` [PATCH 3.16 115/136] netfilter: ipset: Fix an error code in ip_set_sockfn_get() Ben Hutchings
2019-12-17  0:47 ` [PATCH 3.16 116/136] netfilter: nf_tables: Align nft_expr private data to 64-bit Ben Hutchings
2019-12-17  0:47 ` [PATCH 3.16 117/136] can: usb_8dev: fix use-after-free on disconnect Ben Hutchings
2019-12-17  0:47 ` [PATCH 3.16 118/136] can: peak_usb: fix a potential out-of-sync while decoding packets Ben Hutchings
2019-12-17  0:47 ` [PATCH 3.16 119/136] can: c_can: c_can_poll(): only read status register after status IRQ Ben Hutchings
2019-12-17  0:47 ` [PATCH 3.16 120/136] perf tools: Fix time sorting Ben Hutchings
2019-12-17  0:47 ` [PATCH 3.16 121/136] mm, vmstat: hide /proc/pagetypeinfo from normal users Ben Hutchings
2019-12-17  0:47 ` [PATCH 3.16 122/136] dump_stack: avoid the livelock of the dump_lock Ben Hutchings
2019-12-17  0:47 ` [PATCH 3.16 123/136] drm/radeon: fix si_enable_smc_cac() failed issue Ben Hutchings
2019-12-17  0:47 ` [PATCH 3.16 124/136] block: drbd: remove a stray unlock in __drbd_send_protocol() Ben Hutchings
2019-12-17  0:47 ` [PATCH 3.16 125/136] ALSA: usb-audio: Fix missing error check at mixer resolution test Ben Hutchings
2019-12-17  0:47 ` [PATCH 3.16 126/136] ecryptfs_lookup_interpose(): lower_dentry->d_inode is not stable Ben Hutchings
2019-12-17  0:47 ` [PATCH 3.16 127/136] ecryptfs_lookup_interpose(): lower_dentry->d_parent is not stable either Ben Hutchings
2019-12-17  0:47 ` [PATCH 3.16 128/136] x86/quirks: Disable HPET on Intel Coffe Lake platforms Ben Hutchings
2019-12-17  0:47 ` [PATCH 3.16 129/136] ALSA: usb-audio: not submit urb for stopped endpoint Ben Hutchings
2019-12-17  0:47 ` [PATCH 3.16 130/136] mm: memcg: switch to css_tryget() in get_mem_cgroup_from_mm() Ben Hutchings
2019-12-17  0:47 ` [PATCH 3.16 131/136] mm: hugetlb: switch to css_tryget() in hugetlb_cgroup_charge_cgroup() Ben Hutchings
2019-12-17  0:47 ` [PATCH 3.16 132/136] virtio_console: allocate inbufs in add_port() only if it is needed Ben Hutchings
2019-12-17  0:47 ` [PATCH 3.16 133/136] net/sched: act_pedit: fix WARN() in the traffic path Ben Hutchings
2019-12-17  0:47 ` [PATCH 3.16 134/136] sfc: Only cancel the PPS workqueue if it exists Ben Hutchings
2019-12-17  0:47 ` [PATCH 3.16 135/136] mm/ksm.c: don't WARN if page is still mapped in remove_stable_node() Ben Hutchings
2019-12-17  0:47 ` [PATCH 3.16 136/136] fs/dcache: move security_d_instantiate() behind attaching dentry to inode Ben Hutchings
2019-12-17 18:19 ` [PATCH 3.16 000/136] 3.16.80-rc1 review Guenter Roeck
2019-12-17 18:43   ` Ben Hutchings

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=lsq.1576543535.485239367@decadent.org.uk \
    --to=ben@decadent.org.uk \
    --cc=akpm@linux-foundation.org \
    --cc=gregkh@linuxfoundation.org \
    --cc=hadess@hadess.net \
    --cc=kda@linux-powerpc.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=miquel@df.uba.ar \
    --cc=stable@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.