I saw earlier that
@mr_roboto had posted a response to my latest message but now I can't see it. :-(
I don't recall everything in it, but there were two things I remember, so I'll answer briefly (and more later if the post reappears).
1) About removing KPTI code from the kernel: Yes, I'm pretty sure you can delete it, and no, I'm not expecting the hardware to do the same job. The whole point of KPTI is to protect the kernel against various speculation attacks. If the kernel and userspace never execute on the same cores, no kernel page will ever be present in the user cores' TLBs. The page tables themselves should never be accessible to userspace, and only the hw table walker will be reading them. Side channels should be completely avoidable.
This is a really gigantic win for I/O and should compensate for some performance loss in other areas, if necessary.
2) Skepticism of my claim that invalidations would never have to be broadcast from a userspace cluster outwards.
Um... that may be justified. My idea works, I think, up until you need a single address space to run across multiple userspace clusters. At that point, I'm not sure it's doable any more. Maybe you could add an aging timer to each entry, and just let them expire naturally, but then you have to randomize the timer to block a new side-channel, and you're trading against extra memory pressure. I'm not at all sure that that is worth doing.
Notably, I think my original scheme would still work in a smaller chip where there's just one OS cluster and one userspace cluster (not realistic) or if Apple decided that on the base Mx chips, no address space could exist simultaneously on the different core clusters. I don't know if that's plausible or not, in terms of performance tradeoffs, and I don't know if the benefit of doing that just for base M chips is worth it. But, hm, all the A chips would presumably use it too. Maybe?