That's the problem. UTM reports 16-bit ASIDs to Linux while Parallels only 8-bit ASIDs. Arguably a Linux bug as well as it's writing non-zero RES0 bits in TTBR1_EL1. I'll fix that but it will take time for the fix to trickle down into distro kernels. In the meantime, Parallels can just enable 16-bit ASIDs. For whoever's curious, the Linux patch is something like below:
Code:
diff --git a/arch/arm64/mm/context.c b/arch/arm64/mm/context.c
index e1e0dca01839..d0d9c99c8a0b 100644
--- a/arch/arm64/mm/context.c
+++ b/arch/arm64/mm/context.c
@@ -32,9 +32,9 @@ static unsigned long nr_pinned_asids;
static unsigned long *pinned_asid_map;
#define ASID_MASK (~GENMASK(asid_bits - 1, 0))
-#define ASID_FIRST_VERSION (1UL << asid_bits)
+#define ASID_FIRST_VERSION (1UL << 16)
-#define NUM_USER_ASIDS ASID_FIRST_VERSION
+#define NUM_USER_ASIDS (1UL << asid_bits)
#define ctxid2asid(asid) ((asid) & ~ASID_MASK)
#define asid2ctxid(asid, genid) ((asid) | (genid))