#endif
 } mm_context_t;
 
-#define cntx2asid(cntx)                ((cntx) & asid_mask)
-#define cntx2version(cntx)     ((cntx) & ~asid_mask)
+#define cntx2asid(cntx)                ((cntx) & SATP_ASID_MASK)
+#define cntx2version(cntx)     ((cntx) & ~SATP_ASID_MASK)
 
 void __init create_pgd_mapping(pgd_t *pgdp, uintptr_t va, phys_addr_t pa,
                               phys_addr_t sz, pgprot_t prot);
 
 #define FLUSH_TLB_NO_ASID       ((unsigned long)-1)
 
 #ifdef CONFIG_MMU
-extern unsigned long asid_mask;
-
 static inline void local_flush_tlb_all(void)
 {
        __asm__ __volatile__ ("sfence.vma" : : : "memory");
 
 
 static unsigned long asid_bits;
 static unsigned long num_asids;
-unsigned long asid_mask;
 
 static atomic_long_t current_version;
 
                goto set_asid;
 
        /* We're out of ASIDs, so increment current_version */
-       ver = atomic_long_add_return_relaxed(num_asids, ¤t_version);
+       ver = atomic_long_add_return_relaxed(BIT(SATP_ASID_BITS), ¤t_version);
 
        /* Flush everything  */
        __flush_context();
        /* Pre-compute ASID details */
        if (asid_bits) {
                num_asids = 1 << asid_bits;
-               asid_mask = num_asids - 1;
        }
 
        /*
         * at-least twice more than CPUs
         */
        if (num_asids > (2 * num_possible_cpus())) {
-               atomic_long_set(¤t_version, num_asids);
+               atomic_long_set(¤t_version, BIT(SATP_ASID_BITS));
 
                context_asid_map = bitmap_zalloc(num_asids, GFP_KERNEL);
                if (!context_asid_map)