riscv: mm: don't advertise 1 num_asid for 0 asid bits
authorVineet Gupta <vgupta@kernel.org>
Wed, 8 Sep 2021 17:30:29 +0000 (10:30 -0700)
committerPalmer Dabbelt <palmerdabbelt@google.com>
Mon, 4 Oct 2021 21:16:58 +0000 (14:16 -0700)
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 <anup@brainfault.org>
Signed-off-by: Vineet Gupta <vgupta@kernel.org>
Signed-off-by: Palmer Dabbelt <palmerdabbelt@google.com>
arch/riscv/mm/context.c

index ee3459cb6750b40f12ecc9e78aa9d72b4fdecba1..ea54cc0c91068efda8906e92902a5ef13829319d 100644 (file)
@@ -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;