.. | .. |
---|
162 | 162 | q->cons = Q_OVF(q->cons) | Q_WRP(q, cons) | Q_IDX(q, cons); |
---|
163 | 163 | } |
---|
164 | 164 | |
---|
| 165 | +static void queue_sync_cons_ovf(struct arm_smmu_queue *q) |
---|
| 166 | +{ |
---|
| 167 | + struct arm_smmu_ll_queue *llq = &q->llq; |
---|
| 168 | + |
---|
| 169 | + if (likely(Q_OVF(llq->prod) == Q_OVF(llq->cons))) |
---|
| 170 | + return; |
---|
| 171 | + |
---|
| 172 | + llq->cons = Q_OVF(llq->prod) | Q_WRP(llq, llq->cons) | |
---|
| 173 | + Q_IDX(llq, llq->cons); |
---|
| 174 | + queue_sync_cons_out(q); |
---|
| 175 | +} |
---|
| 176 | + |
---|
165 | 177 | static int queue_sync_prod_in(struct arm_smmu_queue *q) |
---|
166 | 178 | { |
---|
167 | 179 | u32 prod; |
---|
.. | .. |
---|
1380 | 1392 | } while (!queue_empty(llq)); |
---|
1381 | 1393 | |
---|
1382 | 1394 | /* Sync our overflow flag, as we believe we're up to speed */ |
---|
1383 | | - llq->cons = Q_OVF(llq->prod) | Q_WRP(llq, llq->cons) | |
---|
1384 | | - Q_IDX(llq, llq->cons); |
---|
| 1395 | + queue_sync_cons_ovf(q); |
---|
1385 | 1396 | return IRQ_HANDLED; |
---|
1386 | 1397 | } |
---|
1387 | 1398 | |
---|
.. | .. |
---|
1439 | 1450 | } while (!queue_empty(llq)); |
---|
1440 | 1451 | |
---|
1441 | 1452 | /* Sync our overflow flag, as we believe we're up to speed */ |
---|
1442 | | - llq->cons = Q_OVF(llq->prod) | Q_WRP(llq, llq->cons) | |
---|
1443 | | - Q_IDX(llq, llq->cons); |
---|
1444 | | - queue_sync_cons_out(q); |
---|
| 1453 | + queue_sync_cons_ovf(q); |
---|
1445 | 1454 | return IRQ_HANDLED; |
---|
1446 | 1455 | } |
---|
1447 | 1456 | |
---|