[PATCH v3 01/12] target/loongarch: Use mmu idx bitmap method when flush TLB

Bibo Mao posted 12 patches 3 days, 5 hours ago
Maintainers: Song Gao <gaosong@loongson.cn>
There is a newer version of this series
[PATCH v3 01/12] target/loongarch: Use mmu idx bitmap method when flush TLB
Posted by Bibo Mao 3 days, 5 hours ago
With API tlb_flush_range_by_mmuidx(), bitmap of mmu idx should be used
rather than itself. Also MMU_KERNEL_IDX and MMU_USER_IDX are used rather
than current running mmu idx when flush TLB.

Signed-off-by: Bibo Mao <maobibo@loongson.cn>
---
 target/loongarch/tcg/tlb_helper.c | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/target/loongarch/tcg/tlb_helper.c b/target/loongarch/tcg/tlb_helper.c
index 9365860c8c..d58f447555 100644
--- a/target/loongarch/tcg/tlb_helper.c
+++ b/target/loongarch/tcg/tlb_helper.c
@@ -101,8 +101,7 @@ static void invalidate_tlb_entry(CPULoongArchState *env, int index)
     target_ulong addr, mask, pagesize;
     uint8_t tlb_ps;
     LoongArchTLB *tlb = &env->tlb[index];
-
-    int mmu_idx = cpu_mmu_index(env_cpu(env), false);
+    int mmu_idx = BIT(MMU_KERNEL_IDX) | BIT(MMU_USER_IDX);
     uint8_t tlb_v0 = FIELD_EX64(tlb->tlb_entry0, TLBENTRY, V);
     uint8_t tlb_v1 = FIELD_EX64(tlb->tlb_entry1, TLBENTRY, V);
     uint64_t tlb_vppn = FIELD_EX64(tlb->tlb_misc, TLB_MISC, VPPN);
-- 
2.39.3
Re: [PATCH v3 01/12] target/loongarch: Use mmu idx bitmap method when flush TLB
Posted by Richard Henderson 3 days, 1 hour ago
On 9/3/25 10:48, Bibo Mao wrote:
> With API tlb_flush_range_by_mmuidx(), bitmap of mmu idx should be used
> rather than itself. Also MMU_KERNEL_IDX and MMU_USER_IDX are used rather
> than current running mmu idx when flush TLB.
> 
> Signed-off-by: Bibo Mao <maobibo@loongson.cn>
> ---
>   target/loongarch/tcg/tlb_helper.c | 3 +--
>   1 file changed, 1 insertion(+), 2 deletions(-)
> 
> diff --git a/target/loongarch/tcg/tlb_helper.c b/target/loongarch/tcg/tlb_helper.c
> index 9365860c8c..d58f447555 100644
> --- a/target/loongarch/tcg/tlb_helper.c
> +++ b/target/loongarch/tcg/tlb_helper.c
> @@ -101,8 +101,7 @@ static void invalidate_tlb_entry(CPULoongArchState *env, int index)
>       target_ulong addr, mask, pagesize;
>       uint8_t tlb_ps;
>       LoongArchTLB *tlb = &env->tlb[index];
> -
> -    int mmu_idx = cpu_mmu_index(env_cpu(env), false);
> +    int mmu_idx = BIT(MMU_KERNEL_IDX) | BIT(MMU_USER_IDX);
>       uint8_t tlb_v0 = FIELD_EX64(tlb->tlb_entry0, TLBENTRY, V);
>       uint8_t tlb_v1 = FIELD_EX64(tlb->tlb_entry1, TLBENTRY, V);
>       uint64_t tlb_vppn = FIELD_EX64(tlb->tlb_misc, TLB_MISC, VPPN);

Better to rename the variable too, since this isn't an mmu_idx.
We have used "idxmap" elsewhere for this purpose.

Otherwise,
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>


r~
Re: [PATCH v3 01/12] target/loongarch: Use mmu idx bitmap method when flush TLB
Posted by Bibo Mao 2 days, 7 hours ago

On 2025/9/3 下午9:02, Richard Henderson wrote:
> On 9/3/25 10:48, Bibo Mao wrote:
>> With API tlb_flush_range_by_mmuidx(), bitmap of mmu idx should be used
>> rather than itself. Also MMU_KERNEL_IDX and MMU_USER_IDX are used rather
>> than current running mmu idx when flush TLB.
>>
>> Signed-off-by: Bibo Mao <maobibo@loongson.cn>
>> ---
>>   target/loongarch/tcg/tlb_helper.c | 3 +--
>>   1 file changed, 1 insertion(+), 2 deletions(-)
>>
>> diff --git a/target/loongarch/tcg/tlb_helper.c 
>> b/target/loongarch/tcg/tlb_helper.c
>> index 9365860c8c..d58f447555 100644
>> --- a/target/loongarch/tcg/tlb_helper.c
>> +++ b/target/loongarch/tcg/tlb_helper.c
>> @@ -101,8 +101,7 @@ static void invalidate_tlb_entry(CPULoongArchState 
>> *env, int index)
>>       target_ulong addr, mask, pagesize;
>>       uint8_t tlb_ps;
>>       LoongArchTLB *tlb = &env->tlb[index];
>> -
>> -    int mmu_idx = cpu_mmu_index(env_cpu(env), false);
>> +    int mmu_idx = BIT(MMU_KERNEL_IDX) | BIT(MMU_USER_IDX);
>>       uint8_t tlb_v0 = FIELD_EX64(tlb->tlb_entry0, TLBENTRY, V);
>>       uint8_t tlb_v1 = FIELD_EX64(tlb->tlb_entry1, TLBENTRY, V);
>>       uint64_t tlb_vppn = FIELD_EX64(tlb->tlb_misc, TLB_MISC, VPPN);
> 
> Better to rename the variable too, since this isn't an mmu_idx.
> We have used "idxmap" elsewhere for this purpose.
sure, will use idxmap in next version.

Regards
Bibo Mao
> 
> Otherwise,
> Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
> 
> 
> r~