All other functionality can be implemented in terms of these; doing so (while retaining the same API) will be convenient for subsequent refactors.
Using an edata_t both for hugepages and the allocations within those hugepages was convenient at first, but has outlived its usefulness. Representing hugepages explicitly, with their own data structure, will make future development easier.