On Sat, Mar 14, 2020 at 4:36 PM Michael Kelley <mikelley@xxxxxxxxxxxxx> wrote: > /* > + * Functions for allocating and freeing memory with size and > + * alignment HV_HYP_PAGE_SIZE. These functions are needed because > + * the guest page size may not be the same as the Hyper-V page > + * size. We depend upon kmalloc() aligning power-of-two size > + * allocations to the allocation size boundary, so that the > + * allocated memory appears to Hyper-V as a page of the size > + * it expects. > + * > + * These functions are used by arm64 specific code as well as > + * arch independent Hyper-V drivers. > + */ > + > +void *hv_alloc_hyperv_page(void) > +{ > + BUILD_BUG_ON(PAGE_SIZE < HV_HYP_PAGE_SIZE); > + return kmalloc(HV_HYP_PAGE_SIZE, GFP_KERNEL); > +} > +EXPORT_SYMBOL_GPL(hv_alloc_hyperv_page); I don't think there is any guarantee that kmalloc() returns page-aligned allocations in general. How about using get_free_pages() to implement this? Arnd