2021-09-07 20:09:42

by Vineet Gupta

[permalink] [raw]
Subject: [PATCH] riscv: mm: don't advertise 1 num_asid for 0 asid bits

Even if mmu doesn't support ASID, current code calculates @num_asids=1
which is misleading, so avoid setting any asid related variables in such
a case.

Also while here, print the number of asid bits discovered even for the
disabled case.

Verified this on Hifive Unmatched.

Signed-off-by: Vineet Gupta <[email protected]>
---
arch/riscv/mm/context.c | 8 +++++---
1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/arch/riscv/mm/context.c b/arch/riscv/mm/context.c
index ee3459cb6750..c8c6f8831a3b 100644
--- a/arch/riscv/mm/context.c
+++ b/arch/riscv/mm/context.c
@@ -233,8 +233,10 @@ static int __init asids_init(void)
local_flush_tlb_all();

/* Pre-compute ASID details */
- num_asids = 1 << asid_bits;
- asid_mask = num_asids - 1;
+ if (asid_bits) {
+ num_asids = 1 << asid_bits;
+ asid_mask = num_asids - 1;
+ }

/*
* Use ASID allocator only if number of HW ASIDs are
@@ -255,7 +257,7 @@ static int __init asids_init(void)
pr_info("ASID allocator using %lu bits (%lu entries)\n",
asid_bits, num_asids);
} else {
- pr_info("ASID allocator disabled\n");
+ pr_info("ASID allocator disabled: %lu bits\n", asid_bits);
}

return 0;
--
2.30.2


2021-09-08 08:37:24

by Anup Patel

[permalink] [raw]
Subject: Re: [PATCH] riscv: mm: don't advertise 1 num_asid for 0 asid bits

On Wed, Sep 8, 2021 at 1:33 AM Vineet Gupta <[email protected]> wrote:
>
> Even if mmu doesn't support ASID, current code calculates @num_asids=1
> which is misleading, so avoid setting any asid related variables in such
> a case.
>
> Also while here, print the number of asid bits discovered even for the
> disabled case.
>
> Verified this on Hifive Unmatched.
>
> Signed-off-by: Vineet Gupta <[email protected]>
> ---
> arch/riscv/mm/context.c | 8 +++++---
> 1 file changed, 5 insertions(+), 3 deletions(-)
>
> diff --git a/arch/riscv/mm/context.c b/arch/riscv/mm/context.c
> index ee3459cb6750..c8c6f8831a3b 100644
> --- a/arch/riscv/mm/context.c
> +++ b/arch/riscv/mm/context.c
> @@ -233,8 +233,10 @@ static int __init asids_init(void)
> local_flush_tlb_all();
>
> /* Pre-compute ASID details */
> - num_asids = 1 << asid_bits;
> - asid_mask = num_asids - 1;
> + if (asid_bits) {
> + num_asids = 1 << asid_bits;
> + asid_mask = num_asids - 1;
> + }
>
> /*
> * Use ASID allocator only if number of HW ASIDs are
> @@ -255,7 +257,7 @@ static int __init asids_init(void)
> pr_info("ASID allocator using %lu bits (%lu entries)\n",
> asid_bits, num_asids);
> } else {
> - pr_info("ASID allocator disabled\n");
> + pr_info("ASID allocator disabled: %lu bits\n", asid_bits);

May be use:

pr_info("ASID allocator disabled (%lu bits)\n", asid_bits);

for consistency with the ASID enabled case.

Otherwise, it looks good to me.

Reviewed-by: Anup Patel <[email protected]>

> }
>
> return 0;
> --
> 2.30.2
>
>
> _______________________________________________
> linux-riscv mailing list
> [email protected]
> http://lists.infradead.org/mailman/listinfo/linux-riscv

Regards,
Anup

2021-09-08 17:48:51

by Vineet Gupta

[permalink] [raw]
Subject: [PATCH v2] riscv: mm: don't advertise 1 num_asid for 0 asid bits

Even if mmu doesn't support ASID, current code calculates @num_asids=1
which is misleading, so avoid setting any asid related variables in such
case.

Also while here, print the number of asid bits discovered even for the
disabled case.

Verified this on Hifive Unmatched.

Reviewed-by: Anup Patel <[email protected]>
Signed-off-by: Vineet Gupta <[email protected]>
---
arch/riscv/mm/context.c | 8 +++++---
1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/arch/riscv/mm/context.c b/arch/riscv/mm/context.c
index ee3459cb6750..ea54cc0c9106 100644
--- a/arch/riscv/mm/context.c
+++ b/arch/riscv/mm/context.c
@@ -233,8 +233,10 @@ static int __init asids_init(void)
local_flush_tlb_all();

/* Pre-compute ASID details */
- num_asids = 1 << asid_bits;
- asid_mask = num_asids - 1;
+ if (asid_bits) {
+ num_asids = 1 << asid_bits;
+ asid_mask = num_asids - 1;
+ }

/*
* Use ASID allocator only if number of HW ASIDs are
@@ -255,7 +257,7 @@ static int __init asids_init(void)
pr_info("ASID allocator using %lu bits (%lu entries)\n",
asid_bits, num_asids);
} else {
- pr_info("ASID allocator disabled\n");
+ pr_info("ASID allocator disabled (%lu bits)\n", asid_bits);
}

return 0;
--
2.30.2

2021-10-03 17:14:04

by Palmer Dabbelt

[permalink] [raw]
Subject: Re: [PATCH v2] riscv: mm: don't advertise 1 num_asid for 0 asid bits

On Wed, 08 Sep 2021 10:30:29 PDT (-0700), [email protected] wrote:
> Even if mmu doesn't support ASID, current code calculates @num_asids=1
> which is misleading, so avoid setting any asid related variables in such
> case.
>
> Also while here, print the number of asid bits discovered even for the
> disabled case.
>
> Verified this on Hifive Unmatched.
>
> Reviewed-by: Anup Patel <[email protected]>
> Signed-off-by: Vineet Gupta <[email protected]>
> ---
> arch/riscv/mm/context.c | 8 +++++---
> 1 file changed, 5 insertions(+), 3 deletions(-)
>
> diff --git a/arch/riscv/mm/context.c b/arch/riscv/mm/context.c
> index ee3459cb6750..ea54cc0c9106 100644
> --- a/arch/riscv/mm/context.c
> +++ b/arch/riscv/mm/context.c
> @@ -233,8 +233,10 @@ static int __init asids_init(void)
> local_flush_tlb_all();
>
> /* Pre-compute ASID details */
> - num_asids = 1 << asid_bits;
> - asid_mask = num_asids - 1;
> + if (asid_bits) {
> + num_asids = 1 << asid_bits;
> + asid_mask = num_asids - 1;
> + }
>
> /*
> * Use ASID allocator only if number of HW ASIDs are
> @@ -255,7 +257,7 @@ static int __init asids_init(void)
> pr_info("ASID allocator using %lu bits (%lu entries)\n",
> asid_bits, num_asids);
> } else {
> - pr_info("ASID allocator disabled\n");
> + pr_info("ASID allocator disabled (%lu bits)\n", asid_bits);
> }
>
> return 0;

Thanks, this is on for-next.