I got a bit sick of sending constant emails on this one and just decided to hack it together myself. Here's roughly what I came up with. Completely untested. Changelogs are bare. Barely compiles:
https://git.kernel.org/pub/scm/linux/kernel/git/daveh/devel.git/log/?h=kpte
I also didn't actually hook up the IOMMU flush yet.
The biggest single chunk of code is defining ptdesc_*_kernel(). The rest of it is painfully simple.
I'm pretty sure this hits the vmalloc() case that we all care about. It needs some more time with folks staring at it to make sure it didn't miss some of the other cases.
I'll wrangle this into a real series and send it via another thread unless someone beats me to it. If anyone sees anything in there they can't live with, please scream sooner rather than later.