soc/fsl/qbman: Fix drain_mr_fqni()
authorRoy Pledge <roy.pledge@nxp.com>
Thu, 1 Aug 2019 20:16:59 +0000 (20:16 +0000)
committerLi Yang <leoyang.li@nxp.com>
Thu, 15 Aug 2019 21:41:49 +0000 (16:41 -0500)
The drain_mr_fqni() function may be called fron uninterruptable
context so convert the msleep() to an mdelay().  Also ensure that
the valid bit is updated while polling.

Signed-off-by: Roy Pledge <roy.pledge@nxp.com>
Signed-off-by: Li Yang <leoyang.li@nxp.com>
drivers/soc/fsl/qbman/qman.c

index f10f77d..2989504 100644 (file)
@@ -1164,6 +1164,7 @@ static int drain_mr_fqrni(struct qm_portal *p)
 {
        const union qm_mr_entry *msg;
 loop:
+       qm_mr_pvb_update(p);
        msg = qm_mr_current(p);
        if (!msg) {
                /*
@@ -1180,7 +1181,8 @@ loop:
                 * entries well before the ring has been fully consumed, so
                 * we're being *really* paranoid here.
                 */
-               msleep(1);
+               mdelay(1);
+               qm_mr_pvb_update(p);
                msg = qm_mr_current(p);
                if (!msg)
                        return 0;