mirror of
https://github.com/torvalds/linux.git
synced 2026-05-24 15:12:13 +02:00
usb: gadget: functionfs: Factorize wait-for-endpoint code
This exact same code was duplicated in two different places. Signed-off-by: Paul Cercueil <paul@crapouillou.net> Link: https://lore.kernel.org/r/20240130122340.54813-3-paul@crapouillou.net Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
99f638dd49
commit
799970a5b1
|
|
@ -934,6 +934,27 @@ static ssize_t __ffs_epfile_read_data(struct ffs_epfile *epfile,
|
|||
return ret;
|
||||
}
|
||||
|
||||
static struct ffs_ep *ffs_epfile_wait_ep(struct file *file)
|
||||
{
|
||||
struct ffs_epfile *epfile = file->private_data;
|
||||
struct ffs_ep *ep;
|
||||
int ret;
|
||||
|
||||
/* Wait for endpoint to be enabled */
|
||||
ep = epfile->ep;
|
||||
if (!ep) {
|
||||
if (file->f_flags & O_NONBLOCK)
|
||||
return ERR_PTR(-EAGAIN);
|
||||
|
||||
ret = wait_event_interruptible(
|
||||
epfile->ffs->wait, (ep = epfile->ep));
|
||||
if (ret)
|
||||
return ERR_PTR(-EINTR);
|
||||
}
|
||||
|
||||
return ep;
|
||||
}
|
||||
|
||||
static ssize_t ffs_epfile_io(struct file *file, struct ffs_io_data *io_data)
|
||||
{
|
||||
struct ffs_epfile *epfile = file->private_data;
|
||||
|
|
@ -947,17 +968,9 @@ static ssize_t ffs_epfile_io(struct file *file, struct ffs_io_data *io_data)
|
|||
if (WARN_ON(epfile->ffs->state != FFS_ACTIVE))
|
||||
return -ENODEV;
|
||||
|
||||
/* Wait for endpoint to be enabled */
|
||||
ep = epfile->ep;
|
||||
if (!ep) {
|
||||
if (file->f_flags & O_NONBLOCK)
|
||||
return -EAGAIN;
|
||||
|
||||
ret = wait_event_interruptible(
|
||||
epfile->ffs->wait, (ep = epfile->ep));
|
||||
if (ret)
|
||||
return -EINTR;
|
||||
}
|
||||
ep = ffs_epfile_wait_ep(file);
|
||||
if (IS_ERR(ep))
|
||||
return PTR_ERR(ep);
|
||||
|
||||
/* Do we halt? */
|
||||
halt = (!io_data->read == !epfile->in);
|
||||
|
|
@ -1280,16 +1293,9 @@ static long ffs_epfile_ioctl(struct file *file, unsigned code,
|
|||
return -ENODEV;
|
||||
|
||||
/* Wait for endpoint to be enabled */
|
||||
ep = epfile->ep;
|
||||
if (!ep) {
|
||||
if (file->f_flags & O_NONBLOCK)
|
||||
return -EAGAIN;
|
||||
|
||||
ret = wait_event_interruptible(
|
||||
epfile->ffs->wait, (ep = epfile->ep));
|
||||
if (ret)
|
||||
return -EINTR;
|
||||
}
|
||||
ep = ffs_epfile_wait_ep(file);
|
||||
if (IS_ERR(ep))
|
||||
return PTR_ERR(ep);
|
||||
|
||||
spin_lock_irq(&epfile->ffs->eps_lock);
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user