diff mbox series

Revert "iommu/arm-smmu-v3: Decrease the queue size of evtq and priq"

Message ID 1638858768-9971-1-git-send-email-wangzhou1@hisilicon.com (mailing list archive)
State New, archived
Headers show
Series Revert "iommu/arm-smmu-v3: Decrease the queue size of evtq and priq" | expand

Commit Message

Zhou Wang Dec. 7, 2021, 6:32 a.m. UTC
The commit f115f3c0d5d8 ("iommu/arm-smmu-v3: Decrease the queue size of
evtq and priq") decreases evtq and priq, which may lead evtq/priq to be
full with fault events, e.g HiSilicon ZIP/SEC/HPRE have maximum 1024 queues
in one device, every queue could be binded with one process and trigger a
fault event. So let's revert f115f3c0d5d8.

In fact, if an implementation of SMMU really does not need so long evtq
and priq, value of IDR1_EVTQS and IDR1_PRIQS can be set to proper ones.

Signed-off-by: Zhou Wang <wangzhou1@hisilicon.com>
---
 drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.h | 5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)

Comments

Will Deacon Dec. 14, 2021, 2:48 p.m. UTC | #1
On Tue, Dec 07, 2021 at 02:32:48PM +0800, Zhou Wang wrote:
> The commit f115f3c0d5d8 ("iommu/arm-smmu-v3: Decrease the queue size of
> evtq and priq") decreases evtq and priq, which may lead evtq/priq to be
> full with fault events, e.g HiSilicon ZIP/SEC/HPRE have maximum 1024 queues
> in one device, every queue could be binded with one process and trigger a
> fault event. So let's revert f115f3c0d5d8.
> 
> In fact, if an implementation of SMMU really does not need so long evtq
> and priq, value of IDR1_EVTQS and IDR1_PRIQS can be set to proper ones.
> 
> Signed-off-by: Zhou Wang <wangzhou1@hisilicon.com>
> ---
>  drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.h | 5 ++---
>  1 file changed, 2 insertions(+), 3 deletions(-)

I'd like an Ack from Zhen Lei on this, as the aim of the original patch
was to reduce memory consumption.

Will
Robin Murphy Dec. 14, 2021, 3:16 p.m. UTC | #2
On 2021-12-14 14:48, Will Deacon wrote:
> On Tue, Dec 07, 2021 at 02:32:48PM +0800, Zhou Wang wrote:
>> The commit f115f3c0d5d8 ("iommu/arm-smmu-v3: Decrease the queue size of
>> evtq and priq") decreases evtq and priq, which may lead evtq/priq to be
>> full with fault events, e.g HiSilicon ZIP/SEC/HPRE have maximum 1024 queues
>> in one device, every queue could be binded with one process and trigger a
>> fault event. So let's revert f115f3c0d5d8.
>>
>> In fact, if an implementation of SMMU really does not need so long evtq
>> and priq, value of IDR1_EVTQS and IDR1_PRIQS can be set to proper ones.
>>
>> Signed-off-by: Zhou Wang <wangzhou1@hisilicon.com>
>> ---
>>   drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.h | 5 ++---
>>   1 file changed, 2 insertions(+), 3 deletions(-)
> 
> I'd like an Ack from Zhen Lei on this, as the aim of the original patch
> was to reduce memory consumption.

I wonder if it's time to start trying to be a bit cleverer than just 
allocating the smallest/largest possible queues, and try to scale them 
to some heuristic of the "size" of the system? Certainly a module 
parameter so that users can manually tune for their system/workload 
might be a reasonable compromise.

I'm also tempted by the idea of trying to dynamically reallocate larger 
queues if they fill up, but I guess that depends on whether it's already 
game over if events or PRI requests are lost...

Robin.
Leizhen (ThunderTown) Dec. 15, 2021, 1:59 a.m. UTC | #3
On 2021/12/14 22:48, Will Deacon wrote:
> On Tue, Dec 07, 2021 at 02:32:48PM +0800, Zhou Wang wrote:
>> The commit f115f3c0d5d8 ("iommu/arm-smmu-v3: Decrease the queue size of
>> evtq and priq") decreases evtq and priq, which may lead evtq/priq to be
>> full with fault events, e.g HiSilicon ZIP/SEC/HPRE have maximum 1024 queues
>> in one device, every queue could be binded with one process and trigger a
>> fault event. So let's revert f115f3c0d5d8.
>>
>> In fact, if an implementation of SMMU really does not need so long evtq
>> and priq, value of IDR1_EVTQS and IDR1_PRIQS can be set to proper ones.
>>
>> Signed-off-by: Zhou Wang <wangzhou1@hisilicon.com>
>> ---
>>  drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.h | 5 ++---
>>  1 file changed, 2 insertions(+), 3 deletions(-)
> 
> I'd like an Ack from Zhen Lei on this, as the aim of the original patch
> was to reduce memory consumption.

I did it for the purpose of saving memory. At the time, I didn't think it would
have accumulated so many events. Now there is such a practical situation. Ensuring
functionality stability is more important than saving a little memory. So I have
no objection to reverting my patch.

Acked-by: Zhen Lei <thunder.leizhen@huawei.com>

> 
> Will
> .
>
Will Deacon Dec. 15, 2021, 10:49 a.m. UTC | #4
On Tue, 7 Dec 2021 14:32:48 +0800, Zhou Wang wrote:
> The commit f115f3c0d5d8 ("iommu/arm-smmu-v3: Decrease the queue size of
> evtq and priq") decreases evtq and priq, which may lead evtq/priq to be
> full with fault events, e.g HiSilicon ZIP/SEC/HPRE have maximum 1024 queues
> in one device, every queue could be binded with one process and trigger a
> fault event. So let's revert f115f3c0d5d8.
> 
> In fact, if an implementation of SMMU really does not need so long evtq
> and priq, value of IDR1_EVTQS and IDR1_PRIQS can be set to proper ones.
> 
> [...]

Applied to will (for-joerg/arm-smmu/updates), thanks!

[1/1] Revert "iommu/arm-smmu-v3: Decrease the queue size of evtq and priq"
      https://git.kernel.org/will/c/477436699e78

Cheers,
diff mbox series

Patch

diff --git a/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.h b/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.h
index 4cb136f..cd48590 100644
--- a/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.h
+++ b/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.h
@@ -184,7 +184,6 @@ 
 #else
 #define Q_MAX_SZ_SHIFT			(PAGE_SHIFT + MAX_ORDER - 1)
 #endif
-#define Q_MIN_SZ_SHIFT			(PAGE_SHIFT)
 
 /*
  * Stream table.
@@ -374,7 +373,7 @@ 
 /* Event queue */
 #define EVTQ_ENT_SZ_SHIFT		5
 #define EVTQ_ENT_DWORDS			((1 << EVTQ_ENT_SZ_SHIFT) >> 3)
-#define EVTQ_MAX_SZ_SHIFT		(Q_MIN_SZ_SHIFT - EVTQ_ENT_SZ_SHIFT)
+#define EVTQ_MAX_SZ_SHIFT		(Q_MAX_SZ_SHIFT - EVTQ_ENT_SZ_SHIFT)
 
 #define EVTQ_0_ID			GENMASK_ULL(7, 0)
 
@@ -400,7 +399,7 @@ 
 /* PRI queue */
 #define PRIQ_ENT_SZ_SHIFT		4
 #define PRIQ_ENT_DWORDS			((1 << PRIQ_ENT_SZ_SHIFT) >> 3)
-#define PRIQ_MAX_SZ_SHIFT		(Q_MIN_SZ_SHIFT - PRIQ_ENT_SZ_SHIFT)
+#define PRIQ_MAX_SZ_SHIFT		(Q_MAX_SZ_SHIFT - PRIQ_ENT_SZ_SHIFT)
 
 #define PRIQ_0_SID			GENMASK_ULL(31, 0)
 #define PRIQ_0_SSID			GENMASK_ULL(51, 32)