Commit a9e4820c authored by Linus Torvalds's avatar Linus Torvalds
Browse files

Merge with Greg's USB tree at kernel.org:/pub/scm/linux/kernel/git/gregkh/usb-2.6.git/

Yah, it does work to merge. Knock wood.
parents c0698f2f e838a0d4
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -1128,8 +1128,8 @@ static void stir_disconnect(struct usb_interface *intf)
}

#ifdef CONFIG_PM
/* Power management suspend, so power off the transmitter/receiver */
static int stir_suspend(struct usb_interface *intf, u32 state)
/* USB suspend, so power off the transmitter/receiver */
static int stir_suspend(struct usb_interface *intf, pm_message_t message)
{
	struct stir_cb *stir = usb_get_intfdata(intf);

+16 −32
Original line number Diff line number Diff line
@@ -649,13 +649,9 @@ static void usbin_stop(struct usb_audiodev *as)
		}
	}
	set_current_state(TASK_RUNNING);
	if (u->durb[0].urb->transfer_buffer)
	kfree(u->durb[0].urb->transfer_buffer);
	if (u->durb[1].urb->transfer_buffer)
	kfree(u->durb[1].urb->transfer_buffer);
	if (u->surb[0].urb->transfer_buffer)
	kfree(u->surb[0].urb->transfer_buffer);
	if (u->surb[1].urb->transfer_buffer)
	kfree(u->surb[1].urb->transfer_buffer);
	u->durb[0].urb->transfer_buffer = u->durb[1].urb->transfer_buffer = 
		u->surb[0].urb->transfer_buffer = u->surb[1].urb->transfer_buffer = NULL;
@@ -1009,20 +1005,16 @@ static int usbin_start(struct usb_audiodev *as)
		u->phase = 0;
		maxsze = (u->freqmax + 0x3fff) >> (14 - AFMT_BYTESSHIFT(u->format));
		bufsz = DESCFRAMES * maxsze;
		if (u->durb[0].urb->transfer_buffer)
		kfree(u->durb[0].urb->transfer_buffer);
		u->durb[0].urb->transfer_buffer = kmalloc(bufsz, GFP_KERNEL);
		u->durb[0].urb->transfer_buffer_length = bufsz;
		if (u->durb[1].urb->transfer_buffer)
		kfree(u->durb[1].urb->transfer_buffer);
		u->durb[1].urb->transfer_buffer = kmalloc(bufsz, GFP_KERNEL);
		u->durb[1].urb->transfer_buffer_length = bufsz;
		if (u->syncpipe) {
			if (u->surb[0].urb->transfer_buffer)
			kfree(u->surb[0].urb->transfer_buffer);
			u->surb[0].urb->transfer_buffer = kmalloc(3*SYNCFRAMES, GFP_KERNEL);
			u->surb[0].urb->transfer_buffer_length = 3*SYNCFRAMES;
			if (u->surb[1].urb->transfer_buffer)
			kfree(u->surb[1].urb->transfer_buffer);
			u->surb[1].urb->transfer_buffer = kmalloc(3*SYNCFRAMES, GFP_KERNEL);
			u->surb[1].urb->transfer_buffer_length = 3*SYNCFRAMES;
@@ -1128,13 +1120,9 @@ static void usbout_stop(struct usb_audiodev *as)
		}
	}
	set_current_state(TASK_RUNNING);
	if (u->durb[0].urb->transfer_buffer)
	kfree(u->durb[0].urb->transfer_buffer);
	if (u->durb[1].urb->transfer_buffer)
	kfree(u->durb[1].urb->transfer_buffer);
	if (u->surb[0].urb->transfer_buffer)
	kfree(u->surb[0].urb->transfer_buffer);
	if (u->surb[1].urb->transfer_buffer)
	kfree(u->surb[1].urb->transfer_buffer);
	u->durb[0].urb->transfer_buffer = u->durb[1].urb->transfer_buffer = 
		u->surb[0].urb->transfer_buffer = u->surb[1].urb->transfer_buffer = NULL;
@@ -1376,20 +1364,16 @@ static int usbout_start(struct usb_audiodev *as)
		u->phase = 0;
		maxsze = (u->freqmax + 0x3fff) >> (14 - AFMT_BYTESSHIFT(u->format));
		bufsz = DESCFRAMES * maxsze;
		if (u->durb[0].urb->transfer_buffer)
		kfree(u->durb[0].urb->transfer_buffer);
		u->durb[0].urb->transfer_buffer = kmalloc(bufsz, GFP_KERNEL);
		u->durb[0].urb->transfer_buffer_length = bufsz;
		if (u->durb[1].urb->transfer_buffer)
		kfree(u->durb[1].urb->transfer_buffer);
		u->durb[1].urb->transfer_buffer = kmalloc(bufsz, GFP_KERNEL);
		u->durb[1].urb->transfer_buffer_length = bufsz;
		if (u->syncpipe) {
			if (u->surb[0].urb->transfer_buffer)
			kfree(u->surb[0].urb->transfer_buffer);
			u->surb[0].urb->transfer_buffer = kmalloc(3*SYNCFRAMES, GFP_KERNEL);
			u->surb[0].urb->transfer_buffer_length = 3*SYNCFRAMES;
			if (u->surb[1].urb->transfer_buffer)
			kfree(u->surb[1].urb->transfer_buffer);
			u->surb[1].urb->transfer_buffer = kmalloc(3*SYNCFRAMES, GFP_KERNEL);
			u->surb[1].urb->transfer_buffer_length = 3*SYNCFRAMES;
+2 −1
Original line number Diff line number Diff line
@@ -10,7 +10,8 @@
#include <linux/slab.h>
#include <linux/device.h>
#include <asm/byteorder.h>

#include "usb.h"
#include "hcd.h"

#define USB_MAXALTSETTING		128	/* Hard limit */
#define USB_MAXENDPOINTS		30	/* Hard limit */
+3 −5
Original line number Diff line number Diff line
@@ -59,6 +59,7 @@
#include <linux/usbdevice_fs.h>
#include <asm/uaccess.h>

#include "usb.h"
#include "hcd.h"

#define MAX_TOPO_LEVEL		6
@@ -636,11 +637,8 @@ static int usb_device_open(struct inode *inode, struct file *file)

static int usb_device_release(struct inode *inode, struct file *file)
{
	if (file->private_data) {
	kfree(file->private_data);
	file->private_data = NULL;
	}

        return 0;
}

+31 −41
Original line number Diff line number Diff line
@@ -213,9 +213,7 @@ static struct async *alloc_async(unsigned int numisoframes)

static void free_async(struct async *as)
{
        if (as->urb->transfer_buffer)
	kfree(as->urb->transfer_buffer);
        if (as->urb->setup_packet)
	kfree(as->urb->setup_packet);
	usb_free_urb(as->urb);
	kfree(as);
@@ -938,16 +936,12 @@ static int proc_do_submiturb(struct dev_state *ps, struct usbdevfs_urb *uurb,
		return -EINVAL;
	}
	if (!(as = alloc_async(uurb->number_of_packets))) {
		if (isopkt)
		kfree(isopkt);
		if (dr)
		kfree(dr);
		return -ENOMEM;
	}
	if (!(as->urb->transfer_buffer = kmalloc(uurb->buffer_length, GFP_KERNEL))) {
		if (isopkt)
		kfree(isopkt);
		if (dr)
		kfree(dr);
		free_async(as);
		return -ENOMEM;
@@ -967,7 +961,6 @@ static int proc_do_submiturb(struct dev_state *ps, struct usbdevfs_urb *uurb,
		as->urb->iso_frame_desc[u].length = isopkt[u].length;
		totlen += isopkt[u].length;
	}
	if (isopkt)
	kfree(isopkt);
	as->ps = ps;
        as->userurb = arg;
@@ -1032,8 +1025,7 @@ static int processcompl(struct async *as, void __user * __user *arg)
	if (put_user(urb->error_count, &userurb->error_count))
		return -EFAULT;

	if (!(usb_pipeisoc(urb->pipe)))
		return 0;
	if (usb_pipeisoc(urb->pipe)) {
		for (i = 0; i < urb->number_of_packets; i++) {
			if (put_user(urb->iso_frame_desc[i].actual_length,
				     &userurb->iso_frame_desc[i].actual_length))
@@ -1042,6 +1034,7 @@ static int processcompl(struct async *as, void __user * __user *arg)
				     &userurb->iso_frame_desc[i].status))
				return -EFAULT;
		}
	}

	free_async(as);

@@ -1126,7 +1119,7 @@ static int proc_submiturb_compat(struct dev_state *ps, void __user *arg)
	if (get_urb32(&uurb,(struct usbdevfs_urb32 *)arg))
		return -EFAULT;

	return proc_do_submiturb(ps, &uurb, ((struct usbdevfs_urb __user *)arg)->iso_frame_desc, arg);
	return proc_do_submiturb(ps, &uurb, ((struct usbdevfs_urb32 __user *)arg)->iso_frame_desc, arg);
}

static int processcompl_compat(struct async *as, void __user * __user *arg)
@@ -1146,8 +1139,7 @@ static int processcompl_compat(struct async *as, void __user * __user *arg)
	if (put_user(urb->error_count, &userurb->error_count))
		return -EFAULT;

	if (!(usb_pipeisoc(urb->pipe)))
		return 0;
	if (usb_pipeisoc(urb->pipe)) {
		for (i = 0; i < urb->number_of_packets; i++) {
			if (put_user(urb->iso_frame_desc[i].actual_length,
				     &userurb->iso_frame_desc[i].actual_length))
@@ -1156,6 +1148,7 @@ static int processcompl_compat(struct async *as, void __user * __user *arg)
				     &userurb->iso_frame_desc[i].status))
				return -EFAULT;
		}
	}

	free_async(as);
	if (put_user((u32)(u64)addr, (u32 __user *)arg))
@@ -1177,10 +1170,8 @@ static int proc_reapurbnonblock_compat(struct dev_state *ps, void __user *arg)
{
	struct async *as;

	printk("reapurbnblock\n");
	if (!(as = async_getcompleted(ps)))
		return -EAGAIN;
	printk("reap got as %p\n", as);
	return processcompl_compat(as, (void __user * __user *)arg);
}

@@ -1248,7 +1239,6 @@ static int proc_ioctl (struct dev_state *ps, void __user *arg)
	}

	if (!connected(ps->dev)) {
		if (buf)
		kfree(buf);
		return -ENODEV;
	}
@@ -1311,7 +1301,7 @@ static int proc_ioctl (struct dev_state *ps, void __user *arg)
			&& size > 0
			&& copy_to_user (ctrl.data, buf, size) != 0)
		retval = -EFAULT;
	if (buf != NULL)

	kfree(buf);
	return retval;
}
Loading