return ring->enqueue;
 }
 
+/* @dequeue may be NULL if ring is unallocated or freed */
 static struct qmu_gpd *advance_deq_gpd(struct mtu3_gpd_ring *ring)
 {
        if (ring->dequeue < ring->end)
        dev_dbg(mtu->dev, "%s EP%d, last=%p, current=%p, enq=%p\n",
                __func__, epnum, gpd, gpd_current, ring->enqueue);
 
-       while (gpd != gpd_current && !GET_GPD_HWO(gpd)) {
+       while (gpd && gpd != gpd_current && !GET_GPD_HWO(gpd)) {
 
                mreq = next_request(mep);
 
        dev_dbg(mtu->dev, "%s EP%d, last=%p, current=%p, enq=%p\n",
                __func__, epnum, gpd, gpd_current, ring->enqueue);
 
-       while (gpd != gpd_current && !GET_GPD_HWO(gpd)) {
+       while (gpd && gpd != gpd_current && !GET_GPD_HWO(gpd)) {
 
                mreq = next_request(mep);