Replace kmem_free()'s arena parameter with a flag.
This revision has one sort of functional change. The hyperv driver was allocating memory with the newish flag M_EXEC, but passing the wrong arena to both kmem_malloc() and kmem_free(). Passing the wrong arena to kmem_malloc() was harmless because the argument was ignored. However, the arena argument is currently used by kmem_free() as essentially a flag to distinguish executable from non-executable memory. I said, "sort of," because I suspect that the kmem_free() call would only occur if the driver were unloaded or failed during initialization, which seems unlikely for a virtualization driver.
That said, I really wish that the flags parameter did not exist, because it still allows for mistakes like we see in the hyperv driver. Alternatively, we could set a flag in the vm_page structure, indicating that the page was specially mapped for execute access, and have _kmem_unback() return the appropriate arena rather than a domain number. Lastly, kmem_back_domain() would have to set this flag when mapping a page for execute access. Thoughts?