|
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
|
@@ -767,17 +766,17 @@ static void queue_inc_prod(struct arm_smmu_queue *q)
|
767 | 766 | * Wait for the SMMU to consume items. If drain is true, wait until the queue
|
768 | 767 | * is empty. Otherwise, wait until there is at least one free slot.
|
769 | 768 | */
|
770 |
| -static int queue_poll_cons(struct arm_smmu_queue *q, bool drain, bool wfe) |
| 769 | +static int queue_poll_cons(struct arm_smmu_queue *q, bool sync, bool wfe) |
771 | 770 | {
|
772 | 771 | ktime_t timeout;
|
773 | 772 | unsigned int delay = 1;
|
774 | 773 |
|
775 |
| - /* Wait longer if it's queue drain */ |
776 |
| - timeout = ktime_add_us(ktime_get(), drain ? |
777 |
| - ARM_SMMU_CMDQ_DRAIN_TIMEOUT_US : |
| 774 | + /* Wait longer if it's a CMD_SYNC */ |
| 775 | + timeout = ktime_add_us(ktime_get(), sync ? |
| 776 | + ARM_SMMU_CMDQ_SYNC_TIMEOUT_US : |
778 | 777 | ARM_SMMU_POLL_TIMEOUT_US);
|
779 | 778 |
|
780 |
| - while (queue_sync_cons(q), (drain ? !queue_empty(q) : queue_full(q))) { |
| 779 | + while (queue_sync_cons(q), (sync ? !queue_empty(q) : queue_full(q))) { |
781 | 780 | if (ktime_compare(ktime_get(), timeout) > 0)
|
782 | 781 | return -ETIMEDOUT;
|
783 | 782 |
|
@@ -986,10 +985,13 @@ static void arm_smmu_cmdq_issue_cmd(struct arm_smmu_device *smmu,
|
986 | 985 | */
|
987 | 986 | static int __arm_smmu_sync_poll_msi(struct arm_smmu_device *smmu, u32 sync_idx)
|
988 | 987 | {
|
989 |
| - ktime_t timeout = ktime_add_us(ktime_get(), ARM_SMMU_SYNC_TIMEOUT_US); |
990 |
| - u32 val = smp_cond_load_acquire(&smmu->sync_count, |
991 |
| - (int)(VAL - sync_idx) >= 0 || |
992 |
| - !ktime_before(ktime_get(), timeout)); |
| 988 | + ktime_t timeout; |
| 989 | + u32 val; |
| 990 | + |
| 991 | + timeout = ktime_add_us(ktime_get(), ARM_SMMU_CMDQ_SYNC_TIMEOUT_US); |
| 992 | + val = smp_cond_load_acquire(&smmu->sync_count, |
| 993 | + (int)(VAL - sync_idx) >= 0 || |
| 994 | + !ktime_before(ktime_get(), timeout)); |
993 | 995 |
|
994 | 996 | return (int)(val - sync_idx) < 0 ? -ETIMEDOUT : 0;
|
995 | 997 | }
|
|
0 commit comments