mbox series

[v4,00/11] Hyper-V: Support PAGE_SIZE larger than 4K

Message ID 20200916034817.30282-1-boqun.feng@gmail.com
Headers show
Series Hyper-V: Support PAGE_SIZE larger than 4K | expand

Message

Boqun Feng Sept. 16, 2020, 3:48 a.m. UTC
This patchset add the necessary changes to support guests whose page
size is larger than 4K. And the main architecture which we develop this
for is ARM64 (also it's the architecture that I use to test this
feature).

Previous version:
v1: https://lore.kernel.org/lkml/20200721014135.84140-1-boqun.feng@gmail.com/
v2: https://lore.kernel.org/lkml/20200902030107.33380-1-boqun.feng@gmail.com
v3: https://lore.kernel.org/lkml/20200910143455.109293-1-boqun.feng@gmail.com/

Changes since v3:

*	Fix a bug that ringbuffer sizes are not page-aligned when
	PAGE_SIZE = 16k. Drop the Acked-by and Reviewed-by tags for
	those patches accordingly.

*	Code improvement as per suggestion from Michael Kelley.

I've done some tests with PAGE_SIZE=64k and PAGE_SIZE=16k configurations
on ARM64 guests (with Michael's patchset[1] for ARM64 Hyper-V guest
support), everything worked fine ;-)

Looking forwards to comments and suggestions!

Regards,
Boqun

[1]: https://lore.kernel.org/lkml/1598287583-71762-1-git-send-email-mikelley@microsoft.com/

Boqun Feng (11):
  Drivers: hv: vmbus: Always use HV_HYP_PAGE_SIZE for gpadl
  Drivers: hv: vmbus: Move __vmbus_open()
  Drivers: hv: vmbus: Introduce types of GPADL
  Drivers: hv: Use HV_HYP_PAGE in hv_synic_enable_regs()
  Drivers: hv: vmbus: Move virt_to_hvpfn() to hyperv header
  hv: hyperv.h: Introduce some hvpfn helper functions
  hv_netvsc: Use HV_HYP_PAGE_SIZE for Hyper-V communication
  Input: hyperv-keyboard: Use VMBUS_RING_SIZE() for ringbuffer sizes
  HID: hyperv: Use VMBUS_RING_SIZE() for ringbuffer sizes
  Driver: hv: util: Use VMBUS_RING_SIZE() for ringbuffer sizes
  scsi: storvsc: Support PAGE_SIZE larger than 4K

 drivers/hid/hid-hyperv.c              |   4 +-
 drivers/hv/channel.c                  | 461 ++++++++++++++++----------
 drivers/hv/hv.c                       |   4 +-
 drivers/hv/hv_util.c                  |  11 +-
 drivers/input/serio/hyperv-keyboard.c |   4 +-
 drivers/net/hyperv/netvsc.c           |   2 +-
 drivers/net/hyperv/netvsc_drv.c       |  46 +--
 drivers/net/hyperv/rndis_filter.c     |  13 +-
 drivers/scsi/storvsc_drv.c            |  56 +++-
 include/linux/hyperv.h                |  68 +++-
 10 files changed, 442 insertions(+), 227 deletions(-)

Comments

Michael Kelley Sept. 27, 2020, 12:11 a.m. UTC | #1
From: Boqun Feng <boqun.feng@gmail.com> Sent: Tuesday, September 15, 2020 8:48 PM
> 
> For a Hyper-V vmbus, the size of the ringbuffer has two requirements:
> 
> 1)	it has to take one PAGE_SIZE for the header
> 
> 2)	it has to be PAGE_SIZE aligned so that double-mapping can work
> 
> VMBUS_RING_SIZE() could calculate a correct ringbuffer size which
> fulfills both requirements, therefore use it to make sure vmbus work
> when PAGE_SIZE != HV_HYP_PAGE_SIZE (4K).
> 
> Note that since the argument for VMBUS_RING_SIZE() is the size of
> payload (data part), so it will be minus 4k (the size of header when
> PAGE_SIZE = 4k) than the original value to keep the ringbuffer total
> size unchanged when PAGE_SIZE = 4k.
> 
> Signed-off-by: Boqun Feng <boqun.feng@gmail.com>
> Cc: Jiri Kosina <jkosina@suse.cz>
> Cc: Michael Kelley <mikelley@microsoft.com>
> ---
> Michael and Jiri,
> 
> I change the code because of a problem I found:
> 
> 	https://lore.kernel.org/lkml/20200914084600.GA45838@debian-boqun.qqnc3lrjykvubdpftowmye0fmh.lx.internal.cloudapp.net/
> 
> , so I drop your Reviewed-by or Acked-by tag. If the update version
> looks good to you, may I add your tag again? Thanks in advance, and
> apologies for the inconvenience.
> 
> Regards,
> Boqun
> 
>  drivers/hid/hid-hyperv.c | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/hid/hid-hyperv.c b/drivers/hid/hid-hyperv.c
> index 0b6ee1dee625..978ee2aab2d4 100644
> --- a/drivers/hid/hid-hyperv.c
> +++ b/drivers/hid/hid-hyperv.c
> @@ -104,8 +104,8 @@ struct synthhid_input_report {
> 
>  #pragma pack(pop)
> 
> -#define INPUTVSC_SEND_RING_BUFFER_SIZE		(40 * 1024)
> -#define INPUTVSC_RECV_RING_BUFFER_SIZE		(40 * 1024)
> +#define INPUTVSC_SEND_RING_BUFFER_SIZE	VMBUS_RING_SIZE(36 * 1024)
> +#define INPUTVSC_RECV_RING_BUFFER_SIZE	VMBUS_RING_SIZE(36 * 1024)
> 
> 
>  enum pipe_prot_msg_type {
> --
> 2.28.0

Reviewed-by:  Michael Kelley <mikelley@microsoft.com>
Wei Liu Sept. 28, 2020, 8:59 a.m. UTC | #2
On Wed, Sep 16, 2020 at 11:48:06AM +0800, Boqun Feng wrote:
> This patchset add the necessary changes to support guests whose page
> size is larger than 4K. And the main architecture which we develop this
> for is ARM64 (also it's the architecture that I use to test this
> feature).
> 
> Previous version:
> v1: https://lore.kernel.org/lkml/20200721014135.84140-1-boqun.feng@gmail.com/
> v2: https://lore.kernel.org/lkml/20200902030107.33380-1-boqun.feng@gmail.com
> v3: https://lore.kernel.org/lkml/20200910143455.109293-1-boqun.feng@gmail.com/
> 
> Changes since v3:
> 
> *	Fix a bug that ringbuffer sizes are not page-aligned when
> 	PAGE_SIZE = 16k. Drop the Acked-by and Reviewed-by tags for
> 	those patches accordingly.
> 
> *	Code improvement as per suggestion from Michael Kelley.
> 
> I've done some tests with PAGE_SIZE=64k and PAGE_SIZE=16k configurations
> on ARM64 guests (with Michael's patchset[1] for ARM64 Hyper-V guest
> support), everything worked fine ;-)
> 
> Looking forwards to comments and suggestions!
> 
> Regards,
> Boqun
> 
> [1]: https://lore.kernel.org/lkml/1598287583-71762-1-git-send-email-mikelley@microsoft.com/
> 
> Boqun Feng (11):
>   Drivers: hv: vmbus: Always use HV_HYP_PAGE_SIZE for gpadl
>   Drivers: hv: vmbus: Move __vmbus_open()
>   Drivers: hv: vmbus: Introduce types of GPADL
>   Drivers: hv: Use HV_HYP_PAGE in hv_synic_enable_regs()
>   Drivers: hv: vmbus: Move virt_to_hvpfn() to hyperv header
>   hv: hyperv.h: Introduce some hvpfn helper functions
>   hv_netvsc: Use HV_HYP_PAGE_SIZE for Hyper-V communication
>   Input: hyperv-keyboard: Use VMBUS_RING_SIZE() for ringbuffer sizes
>   HID: hyperv: Use VMBUS_RING_SIZE() for ringbuffer sizes
>   Driver: hv: util: Use VMBUS_RING_SIZE() for ringbuffer sizes
>   scsi: storvsc: Support PAGE_SIZE larger than 4K

Series applied to hyperv-next.

I also replaced the tabs with spaces in the commit messages of patch 8
through patch 10.

Wei.