From: Boqun Feng <boqun.feng@xxxxxxxxx> Sent: Thursday, September 10, 2020 7:35 AM > > This patch introduces two types of GPADL: HV_GPADL_{BUFFER, RING}. The > types of GPADL are purely the concept in the guest, IOW the hypervisor > treat them as the same. > > The reason of introducing the types for GPADL is to support guests whose > page size is not 4k (the page size of Hyper-V hypervisor). In these > guests, both the headers and the data parts of the ringbuffers need to > be aligned to the PAGE_SIZE, because 1) some of the ringbuffers will be > mapped into userspace and 2) we use "double mapping" mechanism to > support fast wrap-around, and "double mapping" relies on ringbuffers > being page-aligned. However, the Hyper-V hypervisor only uses 4k > (HV_HYP_PAGE_SIZE) headers. Our solution to this is that we always make > the headers of ringbuffers take one guest page and when GPADL is > established between the guest and hypervisor, the only first 4k of > header is used. To handle this special case, we need the types of GPADL > to differ different guest memory usage for GPADL. > > Type enum is introduced along with several general interfaces to > describe the differences between normal buffer GPADL and ringbuffer > GPADL. > > Signed-off-by: Boqun Feng <boqun.feng@xxxxxxxxx> > --- > drivers/hv/channel.c | 160 +++++++++++++++++++++++++++++++++++------ > include/linux/hyperv.h | 44 +++++++++++- > 2 files changed, 183 insertions(+), 21 deletions(-) > Reviewed-by: Michael Kelley <mikelley@xxxxxxxxxxxxx>