RE: [PATCH v6 04/10] arm64: hyperv: Add memory alloc/free functions for Hyper-V size pages
From: Michael Kelley <hidden>
Date: 2020-03-18 00:15:32
Also in:
linux-arch, linux-efi, linux-hyperv, lkml
From: Arnd Bergmann <arnd@arndb.de> Sent: Monday, March 16, 2020 1:33 AM
On Mon, Mar 16, 2020 at 9:30 AM Marc Zyngier [off-list ref] wrote:quoted
On 2020-03-16 08:22, Arnd Bergmann wrote:quoted
On Sat, Mar 14, 2020 at 4:36 PM Michael Kelley [off-list ref] wrote:quoted
/* + * 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.I believe that guarantee came with 59bb47985c1db ("mm, sl[aou]b: guarantee natural alignment for kmalloc(power-of-two)").quoted
How about using get_free_pages() to implement this?This would certainly work, at the expense of a lot of wasted memory when PAGE_SIZE isn't 4k.I'm sure this is the least of your problems when the guest runs with a large base page size, you've already wasted most of your memory otherwise then.
I think there's value in keeping these functions. There are 8 uses in architecture independent code at the moment, which admittedly saves only ~1/2 Mbyte of memory with a 64K page size, but we will have additional uses with more memory savings as we get all of the Hyper-V synthetic drivers to work with 64K page size. Furthermore, there's coming work that will require additional steps to share a page between a guest and the Hyper-V host. These functions are the right place to put the code for the additional sharing steps. Removing them now in favor of a bare kmalloc() and then adding them back doesn't seem worthwhile. Michael _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel