mbox series

[v4,0/6] hyperv: VMBus implementation

Message ID 20200424123444.3481728-1-arilou@gmail.com
Headers show
Series hyperv: VMBus implementation | expand

Message

Jon Doron April 24, 2020, 12:34 p.m. UTC
This is a rebase of the old patchset from Roman for HyperV VMBus
implementation.

How to use:
-device vmbus-bridge

Later on new paravirtualized devices can be implemented on top of it
(Network/SCSI/etc.)

VMBus is a collection of technologies.  At its lowest layer, it's a message
passing and signaling mechanism, allowing efficient passing of messages to and
from guest VMs.  A layer higher, it's a mechanism for defining channels of
communication, where each channel is tagged with a type (which implies a
protocol) and a instance ID.  A layer higher than that, it's a bus driver,
serving as the basis of device enumeration within a VM, where a channel can
optionally be exposed as a paravirtual device.  When a server-side (paravirtual
back-end) component wishes to offer a channel to a guest VM, it does so by
specifying a channel type, a mode, and an instance ID.  VMBus then exposes this
in the guest.

More information about VMBus can be found in the file
vmbuskernelmodeclientlibapi.h in Microsoft's WDK.

v4:
Decided to ditch the patch that envolves handling of EOM as there is
still a discussion going on with it in the KVM mailing list.

v3:
Fixed an error asan

v2:
Rebased on top of latest patchset from Roman and Maciej

Jon Doron (6):
  hyperv: expose API to determine if synic is enabled
  vmbus: add vmbus protocol definitions
  vmbus: vmbus implementation
  i386:pc: whitelist dynamic vmbus-bridge
  i386: Hyper-V VMBus ACPI DSDT entry
  vmbus: add infrastructure to save/load vmbus requests

 Makefile.objs                    |    1 +
 hw/hyperv/Kconfig                |    5 +
 hw/hyperv/Makefile.objs          |    1 +
 hw/hyperv/hyperv.c               |    8 +
 hw/hyperv/trace-events           |   18 +
 hw/hyperv/vmbus.c                | 2778 ++++++++++++++++++++++++++++++
 hw/i386/acpi-build.c             |   43 +
 hw/i386/pc_piix.c                |    2 +
 hw/i386/pc_q35.c                 |    2 +
 include/hw/hyperv/hyperv.h       |    1 +
 include/hw/hyperv/vmbus-bridge.h |   35 +
 include/hw/hyperv/vmbus-proto.h  |  222 +++
 include/hw/hyperv/vmbus.h        |  230 +++
 13 files changed, 3346 insertions(+)
 create mode 100644 hw/hyperv/trace-events
 create mode 100644 hw/hyperv/vmbus.c
 create mode 100644 include/hw/hyperv/vmbus-bridge.h
 create mode 100644 include/hw/hyperv/vmbus-proto.h
 create mode 100644 include/hw/hyperv/vmbus.h

Comments

Paolo Bonzini May 21, 2020, 4:03 p.m. UTC | #1
On 24/04/20 14:34, Jon Doron wrote:
> This is a rebase of the old patchset from Roman for HyperV VMBus
> implementation.
> 
> How to use:
> -device vmbus-bridge
> 
> Later on new paravirtualized devices can be implemented on top of it
> (Network/SCSI/etc.)
> 
> VMBus is a collection of technologies.  At its lowest layer, it's a message
> passing and signaling mechanism, allowing efficient passing of messages to and
> from guest VMs.  A layer higher, it's a mechanism for defining channels of
> communication, where each channel is tagged with a type (which implies a
> protocol) and a instance ID.  A layer higher than that, it's a bus driver,
> serving as the basis of device enumeration within a VM, where a channel can
> optionally be exposed as a paravirtual device.  When a server-side (paravirtual
> back-end) component wishes to offer a channel to a guest VM, it does so by
> specifying a channel type, a mode, and an instance ID.  VMBus then exposes this
> in the guest.
> 
> More information about VMBus can be found in the file
> vmbuskernelmodeclientlibapi.h in Microsoft's WDK.
> 
> v4:
> Decided to ditch the patch that envolves handling of EOM as there is
> still a discussion going on with it in the KVM mailing list.
> 
> v3:
> Fixed an error asan
> 
> v2:
> Rebased on top of latest patchset from Roman and Maciej
> 
> Jon Doron (6):
>   hyperv: expose API to determine if synic is enabled
>   vmbus: add vmbus protocol definitions
>   vmbus: vmbus implementation
>   i386:pc: whitelist dynamic vmbus-bridge
>   i386: Hyper-V VMBus ACPI DSDT entry
>   vmbus: add infrastructure to save/load vmbus requests
> 
>  Makefile.objs                    |    1 +
>  hw/hyperv/Kconfig                |    5 +
>  hw/hyperv/Makefile.objs          |    1 +
>  hw/hyperv/hyperv.c               |    8 +
>  hw/hyperv/trace-events           |   18 +
>  hw/hyperv/vmbus.c                | 2778 ++++++++++++++++++++++++++++++
>  hw/i386/acpi-build.c             |   43 +
>  hw/i386/pc_piix.c                |    2 +
>  hw/i386/pc_q35.c                 |    2 +
>  include/hw/hyperv/hyperv.h       |    1 +
>  include/hw/hyperv/vmbus-bridge.h |   35 +
>  include/hw/hyperv/vmbus-proto.h  |  222 +++
>  include/hw/hyperv/vmbus.h        |  230 +++
>  13 files changed, 3346 insertions(+)
>  create mode 100644 hw/hyperv/trace-events
>  create mode 100644 hw/hyperv/vmbus.c
>  create mode 100644 include/hw/hyperv/vmbus-bridge.h
>  create mode 100644 include/hw/hyperv/vmbus-proto.h
>  create mode 100644 include/hw/hyperv/vmbus.h
> 

Queued, thanks.  I'll take a look at the EOM handling threads next.

Paolo
Jon Doron May 22, 2020, 2:53 a.m. UTC | #2
On 21/05/2020, Paolo Bonzini wrote:
>On 24/04/20 14:34, Jon Doron wrote:
>> This is a rebase of the old patchset from Roman for HyperV VMBus
>> implementation.
>>
>> How to use:
>> -device vmbus-bridge
>>
>> Later on new paravirtualized devices can be implemented on top of it
>> (Network/SCSI/etc.)
>>
>> VMBus is a collection of technologies.  At its lowest layer, it's a message
>> passing and signaling mechanism, allowing efficient passing of messages to and
>> from guest VMs.  A layer higher, it's a mechanism for defining channels of
>> communication, where each channel is tagged with a type (which implies a
>> protocol) and a instance ID.  A layer higher than that, it's a bus driver,
>> serving as the basis of device enumeration within a VM, where a channel can
>> optionally be exposed as a paravirtual device.  When a server-side (paravirtual
>> back-end) component wishes to offer a channel to a guest VM, it does so by
>> specifying a channel type, a mode, and an instance ID.  VMBus then exposes this
>> in the guest.
>>
>> More information about VMBus can be found in the file
>> vmbuskernelmodeclientlibapi.h in Microsoft's WDK.
>>
>> v4:
>> Decided to ditch the patch that envolves handling of EOM as there is
>> still a discussion going on with it in the KVM mailing list.
>>
>> v3:
>> Fixed an error asan
>>
>> v2:
>> Rebased on top of latest patchset from Roman and Maciej
>>
>> Jon Doron (6):
>>   hyperv: expose API to determine if synic is enabled
>>   vmbus: add vmbus protocol definitions
>>   vmbus: vmbus implementation
>>   i386:pc: whitelist dynamic vmbus-bridge
>>   i386: Hyper-V VMBus ACPI DSDT entry
>>   vmbus: add infrastructure to save/load vmbus requests
>>
>>  Makefile.objs                    |    1 +
>>  hw/hyperv/Kconfig                |    5 +
>>  hw/hyperv/Makefile.objs          |    1 +
>>  hw/hyperv/hyperv.c               |    8 +
>>  hw/hyperv/trace-events           |   18 +
>>  hw/hyperv/vmbus.c                | 2778 ++++++++++++++++++++++++++++++
>>  hw/i386/acpi-build.c             |   43 +
>>  hw/i386/pc_piix.c                |    2 +
>>  hw/i386/pc_q35.c                 |    2 +
>>  include/hw/hyperv/hyperv.h       |    1 +
>>  include/hw/hyperv/vmbus-bridge.h |   35 +
>>  include/hw/hyperv/vmbus-proto.h  |  222 +++
>>  include/hw/hyperv/vmbus.h        |  230 +++
>>  13 files changed, 3346 insertions(+)
>>  create mode 100644 hw/hyperv/trace-events
>>  create mode 100644 hw/hyperv/vmbus.c
>>  create mode 100644 include/hw/hyperv/vmbus-bridge.h
>>  create mode 100644 include/hw/hyperv/vmbus-proto.h
>>  create mode 100644 include/hw/hyperv/vmbus.h
>>
>
>Queued, thanks.  I'll take a look at the EOM handling threads next.
>
>Paolo
>

Hi Paolo, there is no need to look at the EOM, we have scraped it as you 
can see in v4 :)
Paolo Bonzini May 22, 2020, 7:19 a.m. UTC | #3
On 22/05/20 04:53, Jon Doron wrote:
>>>
>>>
>>
>> Queued, thanks.  I'll take a look at the EOM handling threads next.
>>
>> Paolo
>>
> 
> Hi Paolo, there is no need to look at the EOM, we have scraped it as you
> can see in v4 :)

I mean in order to un-scrape it. :)

Paolo