On Wed, Aug 19, 2020 at 08:41:05PM +0800, Chunfeng Yun wrote: > Use readl_poll_timeout_atomic() to simplify code > > Cc: Alan Stern <stern@xxxxxxxxxxxxxxxxxxx> > Cc: Felipe Balbi <balbi@xxxxxxxxxx> > Signed-off-by: Chunfeng Yun <chunfeng.yun@xxxxxxxxxxxx> > --- > drivers/usb/gadget/udc/net2280.c | 21 ++++++++++----------- > 1 file changed, 10 insertions(+), 11 deletions(-) > > diff --git a/drivers/usb/gadget/udc/net2280.c b/drivers/usb/gadget/udc/net2280.c > index 7530bd9..f1a21f4 100644 > --- a/drivers/usb/gadget/udc/net2280.c > +++ b/drivers/usb/gadget/udc/net2280.c > @@ -52,6 +52,7 @@ > #include <linux/usb/gadget.h> > #include <linux/prefetch.h> > #include <linux/io.h> > +#include <linux/iopoll.h> > > #include <asm/byteorder.h> > #include <asm/irq.h> > @@ -360,18 +361,16 @@ static inline void enable_pciirqenb(struct net2280_ep *ep) > static int handshake(u32 __iomem *ptr, u32 mask, u32 done, int usec) > { > u32 result; > + int ret; > > - do { > - result = readl(ptr); > - if (result == ~(u32)0) /* "device unplugged" */ > - return -ENODEV; > - result &= mask; > - if (result == done) > - return 0; > - udelay(1); > - usec--; > - } while (usec > 0); > - return -ETIMEDOUT; > + ret = readl_poll_timeout_atomic(ptr, result, > + ((result & mask) == done || > + result == U32_MAX), > + 1, usec); > + if (result == U32_MAX) /* device unplugged */ > + return -ENODEV; > + > + return ret; > } > > static const struct usb_ep_ops net2280_ep_ops; > -- Acked-by: Alan Stern <stern@xxxxxxxxxxxxxxxxxxx> However, I noticed that the kerneldoc for readl_poll_timeout_atomic() is out of date. Can you fix it up? Alan Stern