Thread (46 messages) 46 messages, 7 authors, 2020-05-22

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
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help