Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 1431d2a4 authored by Alan Stern's avatar Alan Stern Committed by Greg Kroah-Hartman
Browse files

USB: get rid of urb->lock



Now that urb->status isn't used, urb->lock doesn't protect anything.
This patch (as980) removes it and replaces it with a private mutex in
the one remaining place it was still used: usb_kill_urb.

Signed-off-by: default avatarAlan Stern <stern@rowland.harvard.edu>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
parent 4a00027d
Loading
Loading
Loading
Loading
+6 −5
Original line number Diff line number Diff line
@@ -39,7 +39,6 @@ void usb_init_urb(struct urb *urb)
	if (urb) {
		memset(urb, 0, sizeof(*urb));
		kref_init(&urb->kref);
		spin_lock_init(&urb->lock);
		INIT_LIST_HEAD(&urb->anchor_list);
	}
}
@@ -541,19 +540,21 @@ int usb_unlink_urb(struct urb *urb)
 */
void usb_kill_urb(struct urb *urb)
{
	static DEFINE_MUTEX(reject_mutex);

	might_sleep();
	if (!(urb && urb->dev && urb->ep))
		return;
	spin_lock_irq(&urb->lock);
	mutex_lock(&reject_mutex);
	++urb->reject;
	spin_unlock_irq(&urb->lock);
	mutex_unlock(&reject_mutex);

	usb_hcd_unlink_urb(urb, -ENOENT);
	wait_event(usb_kill_urb_queue, atomic_read(&urb->use_count) == 0);

	spin_lock_irq(&urb->lock);
	mutex_lock(&reject_mutex);
	--urb->reject;
	spin_unlock_irq(&urb->lock);
	mutex_unlock(&reject_mutex);
}

/**
+0 −4
Original line number Diff line number Diff line
@@ -1241,7 +1241,6 @@ struct urb
{
	/* private: usb core and host controller only fields in the urb */
	struct kref kref;		/* reference count of the URB */
	spinlock_t lock;		/* lock for the URB */
	void *hcpriv;			/* private data for host controller */
	atomic_t use_count;		/* concurrent submissions counter */
	u8 reject;			/* submissions will fail */
@@ -1299,7 +1298,6 @@ static inline void usb_fill_control_urb (struct urb *urb,
					 usb_complete_t complete_fn,
					 void *context)
{
	spin_lock_init(&urb->lock);
	urb->dev = dev;
	urb->pipe = pipe;
	urb->setup_packet = setup_packet;
@@ -1330,7 +1328,6 @@ static inline void usb_fill_bulk_urb (struct urb *urb,
				      usb_complete_t complete_fn,
				      void *context)
{
	spin_lock_init(&urb->lock);
	urb->dev = dev;
	urb->pipe = pipe;
	urb->transfer_buffer = transfer_buffer;
@@ -1366,7 +1363,6 @@ static inline void usb_fill_int_urb (struct urb *urb,
				     void *context,
				     int interval)
{
	spin_lock_init(&urb->lock);
	urb->dev = dev;
	urb->pipe = pipe;
	urb->transfer_buffer = transfer_buffer;