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

Commit 08f37148 authored by Vincent Pelletier's avatar Vincent Pelletier Committed by Felipe Balbi
Browse files

usb: gadget: f_fs: Fix iterations on endpoints.



When zero endpoints are declared for a function, there is no endpoint
to disable, enable or free, so replace do...while loops with while loops.
Change pre-decrement to post-decrement to iterate the same number of times
when there are endpoints to process.

Signed-off-by: default avatarVincent Pelletier <plr.vincent@gmail.com>
Signed-off-by: default avatarFelipe Balbi <felipe.balbi@linux.intel.com>
parent 9383e084
Loading
Loading
Loading
Loading
+6 −6
Original line number Diff line number Diff line
@@ -1806,7 +1806,7 @@ static void ffs_func_eps_disable(struct ffs_function *func)
	unsigned long flags;

	spin_lock_irqsave(&func->ffs->eps_lock, flags);
	do {
	while (count--) {
		/* pending requests get nuked */
		if (likely(ep->ep))
			usb_ep_disable(ep->ep);
@@ -1817,7 +1817,7 @@ static void ffs_func_eps_disable(struct ffs_function *func)
			__ffs_epfile_read_buffer_free(epfile);
			++epfile;
		}
	} while (--count);
	}
	spin_unlock_irqrestore(&func->ffs->eps_lock, flags);
}

@@ -1831,7 +1831,7 @@ static int ffs_func_eps_enable(struct ffs_function *func)
	int ret = 0;

	spin_lock_irqsave(&func->ffs->eps_lock, flags);
	do {
	while(count--) {
		struct usb_endpoint_descriptor *ds;
		int desc_idx;

@@ -1867,7 +1867,7 @@ static int ffs_func_eps_enable(struct ffs_function *func)

		++ep;
		++epfile;
	} while (--count);
	}
	spin_unlock_irqrestore(&func->ffs->eps_lock, flags);

	return ret;
@@ -3448,12 +3448,12 @@ static void ffs_func_unbind(struct usb_configuration *c,

	/* cleanup after autoconfig */
	spin_lock_irqsave(&func->ffs->eps_lock, flags);
	do {
	while (count--) {
		if (ep->ep && ep->req)
			usb_ep_free_request(ep->ep, ep->req);
		ep->req = NULL;
		++ep;
	} while (--count);
	}
	spin_unlock_irqrestore(&func->ffs->eps_lock, flags);
	kfree(func->eps);
	func->eps = NULL;