|
418 | 418 |
|
419 | 419 | /* High-level queue structures */
|
420 | 420 | #define ARM_SMMU_POLL_TIMEOUT_US 100
|
421 |
| -#define ARM_SMMU_CMDQ_DRAIN_TIMEOUT_US 1000000 /* 1s! */ |
422 |
| -#define ARM_SMMU_SYNC_TIMEOUT_US 1000000 /* 1s! */ |
| 421 | +#define ARM_SMMU_CMDQ_SYNC_TIMEOUT_US 1000000 /* 1s! */ |
423 | 422 |
|
424 | 423 | #define MSI_IOVA_BASE 0x8000000
|
425 | 424 | #define MSI_IOVA_LENGTH 0x100000
|
@@ -773,17 +772,17 @@ static void queue_inc_prod(struct arm_smmu_queue *q)
|
773 | 772 | * Wait for the SMMU to consume items. If drain is true, wait until the queue
|
774 | 773 | * is empty. Otherwise, wait until there is at least one free slot.
|
775 | 774 | */
|
776 |
| -static int queue_poll_cons(struct arm_smmu_queue *q, bool drain, bool wfe) |
| 775 | +static int queue_poll_cons(struct arm_smmu_queue *q, bool sync, bool wfe) |
777 | 776 | {
|
778 | 777 | ktime_t timeout;
|
779 | 778 | unsigned int delay = 1;
|
780 | 779 |
|
781 |
| - /* Wait longer if it's queue drain */ |
782 |
| - timeout = ktime_add_us(ktime_get(), drain ? |
783 |
| - ARM_SMMU_CMDQ_DRAIN_TIMEOUT_US : |
| 780 | + /* Wait longer if it's a CMD_SYNC */ |
| 781 | + timeout = ktime_add_us(ktime_get(), sync ? |
| 782 | + ARM_SMMU_CMDQ_SYNC_TIMEOUT_US : |
784 | 783 | ARM_SMMU_POLL_TIMEOUT_US);
|
785 | 784 |
|
786 |
| - while (queue_sync_cons(q), (drain ? !queue_empty(q) : queue_full(q))) { |
| 785 | + while (queue_sync_cons(q), (sync ? !queue_empty(q) : queue_full(q))) { |
787 | 786 | if (ktime_compare(ktime_get(), timeout) > 0)
|
788 | 787 | return -ETIMEDOUT;
|
789 | 788 |
|
@@ -992,10 +991,13 @@ static void arm_smmu_cmdq_issue_cmd(struct arm_smmu_device *smmu,
|
992 | 991 | */
|
993 | 992 | static int __arm_smmu_sync_poll_msi(struct arm_smmu_device *smmu, u32 sync_idx)
|
994 | 993 | {
|
995 |
| - ktime_t timeout = ktime_add_us(ktime_get(), ARM_SMMU_SYNC_TIMEOUT_US); |
996 |
| - u32 val = smp_cond_load_acquire(&smmu->sync_count, |
997 |
| - (int)(VAL - sync_idx) >= 0 || |
998 |
| - !ktime_before(ktime_get(), timeout)); |
| 994 | + ktime_t timeout; |
| 995 | + u32 val; |
| 996 | + |
| 997 | + timeout = ktime_add_us(ktime_get(), ARM_SMMU_CMDQ_SYNC_TIMEOUT_US); |
| 998 | + val = smp_cond_load_acquire(&smmu->sync_count, |
| 999 | + (int)(VAL - sync_idx) >= 0 || |
| 1000 | + !ktime_before(ktime_get(), timeout)); |
999 | 1001 |
|
1000 | 1002 | return (int)(val - sync_idx) < 0 ? -ETIMEDOUT : 0;
|
1001 | 1003 | }
|
|
0 commit comments