UMA_ZONE_VM is only for consumers that are involved in the KVA or page allocation path. Setting this restricts layout and prevents the allocation of pages for buckets. It should be used sparingly. It really doesn't have anything to do with low memory handling. If we're low on pages we already will avoid allocating buckets for any zone.
I would actually like it if all zones were able to allocate buckets from pages. It is almost safe on radix for direct map architectures. I may need a per-thread recursion flag to resolve that.
The split and merge in the name of this function and the function below refer to the llist and rlist, and not to the split of some entry ? It sounds strange to name them vm_map_entry_something.