diff mbox

KVM: Add Kconfig option to signal cross-endian guests

Message ID 1436428145-29823-1-git-send-email-thuth@redhat.com (mailing list archive)
State New, archived
Headers show

Commit Message

Thomas Huth July 9, 2015, 7:49 a.m. UTC
The option for supporting cross-endianness legacy guests in
the vhost and tun code should only be available on systems
that support cross-endian guests.

Signed-off-by: Thomas Huth <thuth@redhat.com>
---
 arch/arm/kvm/Kconfig     | 1 +
 arch/arm64/kvm/Kconfig   | 1 +
 arch/powerpc/kvm/Kconfig | 1 +
 drivers/net/Kconfig      | 1 +
 drivers/vhost/Kconfig    | 1 +
 virt/kvm/Kconfig         | 3 +++
 6 files changed, 8 insertions(+)

Comments

Laurent Vivier July 9, 2015, 9:48 a.m. UTC | #1
On 09/07/2015 09:49, Thomas Huth wrote:
> The option for supporting cross-endianness legacy guests in
> the vhost and tun code should only be available on systems
> that support cross-endian guests.

I'm sure I misunderstand something, but what happens if we use QEMU with
TCG instead of KVM, i.e. a big endian powerpc kernel guest on x86_64
little endian host ?
Do you forbid the use of vhost in this case ?

> Signed-off-by: Thomas Huth <thuth@redhat.com>
> ---
>  arch/arm/kvm/Kconfig     | 1 +
>  arch/arm64/kvm/Kconfig   | 1 +
>  arch/powerpc/kvm/Kconfig | 1 +
>  drivers/net/Kconfig      | 1 +
>  drivers/vhost/Kconfig    | 1 +
>  virt/kvm/Kconfig         | 3 +++
>  6 files changed, 8 insertions(+)
> 
> diff --git a/arch/arm/kvm/Kconfig b/arch/arm/kvm/Kconfig
> index bfb915d..9d8f363 100644
> --- a/arch/arm/kvm/Kconfig
> +++ b/arch/arm/kvm/Kconfig
> @@ -31,6 +31,7 @@ config KVM
>  	select KVM_VFIO
>  	select HAVE_KVM_EVENTFD
>  	select HAVE_KVM_IRQFD
> +	select KVM_CROSS_ENDIAN_GUESTS
>  	depends on ARM_VIRT_EXT && ARM_LPAE && ARM_ARCH_TIMER
>  	---help---
>  	  Support hosting virtualized guest machines.
> diff --git a/arch/arm64/kvm/Kconfig b/arch/arm64/kvm/Kconfig
> index bfffe8f..9af39fe 100644
> --- a/arch/arm64/kvm/Kconfig
> +++ b/arch/arm64/kvm/Kconfig
> @@ -31,6 +31,7 @@ config KVM
>  	select KVM_VFIO
>  	select HAVE_KVM_EVENTFD
>  	select HAVE_KVM_IRQFD
> +	select KVM_CROSS_ENDIAN_GUESTS
>  	---help---
>  	  Support hosting virtualized guest machines.
>  
> diff --git a/arch/powerpc/kvm/Kconfig b/arch/powerpc/kvm/Kconfig
> index 3caec2c..e028710 100644
> --- a/arch/powerpc/kvm/Kconfig
> +++ b/arch/powerpc/kvm/Kconfig
> @@ -79,6 +79,7 @@ config KVM_BOOK3S_64_HV
>  	select KVM_BOOK3S_HV_POSSIBLE
>  	select MMU_NOTIFIER
>  	select CMA
> +	select KVM_CROSS_ENDIAN_GUESTS
>  	---help---
>  	  Support running unmodified book3s_64 guest kernels in
>  	  virtual machines on POWER7 and PPC970 processors that have
> diff --git a/drivers/net/Kconfig b/drivers/net/Kconfig
> index c18f9e6..0c4ce47 100644
> --- a/drivers/net/Kconfig
> +++ b/drivers/net/Kconfig
> @@ -261,6 +261,7 @@ config TUN
>  config TUN_VNET_CROSS_LE
>  	bool "Support for cross-endian vnet headers on little-endian kernels"
>  	default n
> +	depends on KVM_CROSS_ENDIAN_GUESTS
>  	---help---
>  	  This option allows TUN/TAP and MACVTAP device drivers in a
>  	  little-endian kernel to parse vnet headers that come from a
> diff --git a/drivers/vhost/Kconfig b/drivers/vhost/Kconfig
> index 533eaf0..4d8ae6b 100644
> --- a/drivers/vhost/Kconfig
> +++ b/drivers/vhost/Kconfig
> @@ -35,6 +35,7 @@ config VHOST
>  
>  config VHOST_CROSS_ENDIAN_LEGACY
>  	bool "Cross-endian support for vhost"
> +	depends on KVM_CROSS_ENDIAN_GUESTS
>  	default n
>  	---help---
>  	  This option allows vhost to support guests with a different byte
> diff --git a/virt/kvm/Kconfig b/virt/kvm/Kconfig
> index e2c876d..cc7b28a 100644
> --- a/virt/kvm/Kconfig
> +++ b/virt/kvm/Kconfig
> @@ -47,3 +47,6 @@ config KVM_GENERIC_DIRTYLOG_READ_PROTECT
>  config KVM_COMPAT
>         def_bool y
>         depends on COMPAT && !S390
> +
> +config KVM_CROSS_ENDIAN_GUESTS
> +       bool
>
Christoffer Dall July 9, 2015, 10:02 a.m. UTC | #2
On Thu, Jul 09, 2015 at 09:49:05AM +0200, Thomas Huth wrote:
> The option for supporting cross-endianness legacy guests in
> the vhost and tun code should only be available on systems
> that support cross-endian guests.
> 
> Signed-off-by: Thomas Huth <thuth@redhat.com>

Acked-by: Christoffer Dall <christoffer.dall@linaro.org>
Cornelia Huck July 9, 2015, 12:21 p.m. UTC | #3
On Thu,  9 Jul 2015 09:49:05 +0200
Thomas Huth <thuth@redhat.com> wrote:

> The option for supporting cross-endianness legacy guests in

s/cross-endianness/cross-endian/ ?

> the vhost and tun code should only be available on systems
> that support cross-endian guests.
> 
> Signed-off-by: Thomas Huth <thuth@redhat.com>
> ---
>  arch/arm/kvm/Kconfig     | 1 +
>  arch/arm64/kvm/Kconfig   | 1 +
>  arch/powerpc/kvm/Kconfig | 1 +
>  drivers/net/Kconfig      | 1 +
>  drivers/vhost/Kconfig    | 1 +
>  virt/kvm/Kconfig         | 3 +++
>  6 files changed, 8 insertions(+)

Acked-by: Cornelia Huck <cornelia.huck@de.ibm.com>
Paolo Bonzini July 9, 2015, 12:57 p.m. UTC | #4
On 09/07/2015 11:48, Laurent Vivier wrote:
> 
> 
> On 09/07/2015 09:49, Thomas Huth wrote:
>> The option for supporting cross-endianness legacy guests in
>> the vhost and tun code should only be available on systems
>> that support cross-endian guests.
> 
> I'm sure I misunderstand something, but what happens if we use QEMU with
> TCG instead of KVM, i.e. a big endian powerpc kernel guest on x86_64
> little endian host ?

TCG does not yet support irqfd/ioeventfd, so it cannot be used with vhost.

Paolo

> Do you forbid the use of vhost in this case ?
> 
>> Signed-off-by: Thomas Huth <thuth@redhat.com>
>> ---
>>  arch/arm/kvm/Kconfig     | 1 +
>>  arch/arm64/kvm/Kconfig   | 1 +
>>  arch/powerpc/kvm/Kconfig | 1 +
>>  drivers/net/Kconfig      | 1 +
>>  drivers/vhost/Kconfig    | 1 +
>>  virt/kvm/Kconfig         | 3 +++
>>  6 files changed, 8 insertions(+)
>>
>> diff --git a/arch/arm/kvm/Kconfig b/arch/arm/kvm/Kconfig
>> index bfb915d..9d8f363 100644
>> --- a/arch/arm/kvm/Kconfig
>> +++ b/arch/arm/kvm/Kconfig
>> @@ -31,6 +31,7 @@ config KVM
>>  	select KVM_VFIO
>>  	select HAVE_KVM_EVENTFD
>>  	select HAVE_KVM_IRQFD
>> +	select KVM_CROSS_ENDIAN_GUESTS
>>  	depends on ARM_VIRT_EXT && ARM_LPAE && ARM_ARCH_TIMER
>>  	---help---
>>  	  Support hosting virtualized guest machines.
>> diff --git a/arch/arm64/kvm/Kconfig b/arch/arm64/kvm/Kconfig
>> index bfffe8f..9af39fe 100644
>> --- a/arch/arm64/kvm/Kconfig
>> +++ b/arch/arm64/kvm/Kconfig
>> @@ -31,6 +31,7 @@ config KVM
>>  	select KVM_VFIO
>>  	select HAVE_KVM_EVENTFD
>>  	select HAVE_KVM_IRQFD
>> +	select KVM_CROSS_ENDIAN_GUESTS
>>  	---help---
>>  	  Support hosting virtualized guest machines.
>>  
>> diff --git a/arch/powerpc/kvm/Kconfig b/arch/powerpc/kvm/Kconfig
>> index 3caec2c..e028710 100644
>> --- a/arch/powerpc/kvm/Kconfig
>> +++ b/arch/powerpc/kvm/Kconfig
>> @@ -79,6 +79,7 @@ config KVM_BOOK3S_64_HV
>>  	select KVM_BOOK3S_HV_POSSIBLE
>>  	select MMU_NOTIFIER
>>  	select CMA
>> +	select KVM_CROSS_ENDIAN_GUESTS
>>  	---help---
>>  	  Support running unmodified book3s_64 guest kernels in
>>  	  virtual machines on POWER7 and PPC970 processors that have
>> diff --git a/drivers/net/Kconfig b/drivers/net/Kconfig
>> index c18f9e6..0c4ce47 100644
>> --- a/drivers/net/Kconfig
>> +++ b/drivers/net/Kconfig
>> @@ -261,6 +261,7 @@ config TUN
>>  config TUN_VNET_CROSS_LE
>>  	bool "Support for cross-endian vnet headers on little-endian kernels"
>>  	default n
>> +	depends on KVM_CROSS_ENDIAN_GUESTS
>>  	---help---
>>  	  This option allows TUN/TAP and MACVTAP device drivers in a
>>  	  little-endian kernel to parse vnet headers that come from a
>> diff --git a/drivers/vhost/Kconfig b/drivers/vhost/Kconfig
>> index 533eaf0..4d8ae6b 100644
>> --- a/drivers/vhost/Kconfig
>> +++ b/drivers/vhost/Kconfig
>> @@ -35,6 +35,7 @@ config VHOST
>>  
>>  config VHOST_CROSS_ENDIAN_LEGACY
>>  	bool "Cross-endian support for vhost"
>> +	depends on KVM_CROSS_ENDIAN_GUESTS
>>  	default n
>>  	---help---
>>  	  This option allows vhost to support guests with a different byte
>> diff --git a/virt/kvm/Kconfig b/virt/kvm/Kconfig
>> index e2c876d..cc7b28a 100644
>> --- a/virt/kvm/Kconfig
>> +++ b/virt/kvm/Kconfig
>> @@ -47,3 +47,6 @@ config KVM_GENERIC_DIRTYLOG_READ_PROTECT
>>  config KVM_COMPAT
>>         def_bool y
>>         depends on COMPAT && !S390
>> +
>> +config KVM_CROSS_ENDIAN_GUESTS
>> +       bool
>>
Michael S. Tsirkin July 9, 2015, 1:07 p.m. UTC | #5
On Thu, Jul 09, 2015 at 02:57:33PM +0200, Paolo Bonzini wrote:
> 
> 
> On 09/07/2015 11:48, Laurent Vivier wrote:
> > 
> > 
> > On 09/07/2015 09:49, Thomas Huth wrote:
> >> The option for supporting cross-endianness legacy guests in
> >> the vhost and tun code should only be available on systems
> >> that support cross-endian guests.
> > 
> > I'm sure I misunderstand something, but what happens if we use QEMU with
> > TCG instead of KVM, i.e. a big endian powerpc kernel guest on x86_64
> > little endian host ?
> 
> TCG does not yet support irqfd/ioeventfd, so it cannot be used with vhost.
> 
> Paolo

vhost does not require irqfd anymore.  I think ioeventfd actually works
fine though I didn't try, it would be easy to support.


> > Do you forbid the use of vhost in this case ?
> > 
> >> Signed-off-by: Thomas Huth <thuth@redhat.com>
> >> ---
> >>  arch/arm/kvm/Kconfig     | 1 +
> >>  arch/arm64/kvm/Kconfig   | 1 +
> >>  arch/powerpc/kvm/Kconfig | 1 +
> >>  drivers/net/Kconfig      | 1 +
> >>  drivers/vhost/Kconfig    | 1 +
> >>  virt/kvm/Kconfig         | 3 +++
> >>  6 files changed, 8 insertions(+)
> >>
> >> diff --git a/arch/arm/kvm/Kconfig b/arch/arm/kvm/Kconfig
> >> index bfb915d..9d8f363 100644
> >> --- a/arch/arm/kvm/Kconfig
> >> +++ b/arch/arm/kvm/Kconfig
> >> @@ -31,6 +31,7 @@ config KVM
> >>  	select KVM_VFIO
> >>  	select HAVE_KVM_EVENTFD
> >>  	select HAVE_KVM_IRQFD
> >> +	select KVM_CROSS_ENDIAN_GUESTS
> >>  	depends on ARM_VIRT_EXT && ARM_LPAE && ARM_ARCH_TIMER
> >>  	---help---
> >>  	  Support hosting virtualized guest machines.
> >> diff --git a/arch/arm64/kvm/Kconfig b/arch/arm64/kvm/Kconfig
> >> index bfffe8f..9af39fe 100644
> >> --- a/arch/arm64/kvm/Kconfig
> >> +++ b/arch/arm64/kvm/Kconfig
> >> @@ -31,6 +31,7 @@ config KVM
> >>  	select KVM_VFIO
> >>  	select HAVE_KVM_EVENTFD
> >>  	select HAVE_KVM_IRQFD
> >> +	select KVM_CROSS_ENDIAN_GUESTS
> >>  	---help---
> >>  	  Support hosting virtualized guest machines.
> >>  
> >> diff --git a/arch/powerpc/kvm/Kconfig b/arch/powerpc/kvm/Kconfig
> >> index 3caec2c..e028710 100644
> >> --- a/arch/powerpc/kvm/Kconfig
> >> +++ b/arch/powerpc/kvm/Kconfig
> >> @@ -79,6 +79,7 @@ config KVM_BOOK3S_64_HV
> >>  	select KVM_BOOK3S_HV_POSSIBLE
> >>  	select MMU_NOTIFIER
> >>  	select CMA
> >> +	select KVM_CROSS_ENDIAN_GUESTS
> >>  	---help---
> >>  	  Support running unmodified book3s_64 guest kernels in
> >>  	  virtual machines on POWER7 and PPC970 processors that have
> >> diff --git a/drivers/net/Kconfig b/drivers/net/Kconfig
> >> index c18f9e6..0c4ce47 100644
> >> --- a/drivers/net/Kconfig
> >> +++ b/drivers/net/Kconfig
> >> @@ -261,6 +261,7 @@ config TUN
> >>  config TUN_VNET_CROSS_LE
> >>  	bool "Support for cross-endian vnet headers on little-endian kernels"
> >>  	default n
> >> +	depends on KVM_CROSS_ENDIAN_GUESTS
> >>  	---help---
> >>  	  This option allows TUN/TAP and MACVTAP device drivers in a
> >>  	  little-endian kernel to parse vnet headers that come from a
> >> diff --git a/drivers/vhost/Kconfig b/drivers/vhost/Kconfig
> >> index 533eaf0..4d8ae6b 100644
> >> --- a/drivers/vhost/Kconfig
> >> +++ b/drivers/vhost/Kconfig
> >> @@ -35,6 +35,7 @@ config VHOST
> >>  
> >>  config VHOST_CROSS_ENDIAN_LEGACY
> >>  	bool "Cross-endian support for vhost"
> >> +	depends on KVM_CROSS_ENDIAN_GUESTS
> >>  	default n
> >>  	---help---
> >>  	  This option allows vhost to support guests with a different byte
> >> diff --git a/virt/kvm/Kconfig b/virt/kvm/Kconfig
> >> index e2c876d..cc7b28a 100644
> >> --- a/virt/kvm/Kconfig
> >> +++ b/virt/kvm/Kconfig
> >> @@ -47,3 +47,6 @@ config KVM_GENERIC_DIRTYLOG_READ_PROTECT
> >>  config KVM_COMPAT
> >>         def_bool y
> >>         depends on COMPAT && !S390
> >> +
> >> +config KVM_CROSS_ENDIAN_GUESTS
> >> +       bool
> >>
Thomas Huth July 9, 2015, 6:59 p.m. UTC | #6
On Thu, 9 Jul 2015 16:07:47 +0300
"Michael S. Tsirkin" <mst@redhat.com> wrote:

> On Thu, Jul 09, 2015 at 02:57:33PM +0200, Paolo Bonzini wrote:
> > 
> > 
> > On 09/07/2015 11:48, Laurent Vivier wrote:
> > > 
> > > 
> > > On 09/07/2015 09:49, Thomas Huth wrote:
> > >> The option for supporting cross-endianness legacy guests in
> > >> the vhost and tun code should only be available on systems
> > >> that support cross-endian guests.
> > > 
> > > I'm sure I misunderstand something, but what happens if we use QEMU with
> > > TCG instead of KVM, i.e. a big endian powerpc kernel guest on x86_64
> > > little endian host ?
> > 
> > TCG does not yet support irqfd/ioeventfd, so it cannot be used with vhost.
> > 
> > Paolo
> 
> vhost does not require irqfd anymore.  I think ioeventfd actually works
> fine though I didn't try, it would be easy to support.

That's an interesting issue, thanks for pointing this out, Laurent! So
do we now rather want to leave everything as it currently is, in case
somebody wants to use vhost-net with a cross-endian TCG guest one day?

Or do we assume that either
a) TCG is so slow anyway that nobody wants to accelerate it with vhost
or
b) TCG vhost likely won't happen that soon so we hope that everybody
will already be using virtio 1.0 at that point in time (with a fixed
endianness) 
?
... then I think we should go on and include this patch.

 Thomas
Greg Kurz July 13, 2015, 9:24 a.m. UTC | #7
On Thu,  9 Jul 2015 09:49:05 +0200
Thomas Huth <thuth@redhat.com> wrote:

> The option for supporting cross-endianness legacy guests in
> the vhost and tun code should only be available on systems
> that support cross-endian guests.
> 
> Signed-off-by: Thomas Huth <thuth@redhat.com>

Acked-by: Greg Kurz <gkurz@linux.vnet.ibm.com>
diff mbox

Patch

diff --git a/arch/arm/kvm/Kconfig b/arch/arm/kvm/Kconfig
index bfb915d..9d8f363 100644
--- a/arch/arm/kvm/Kconfig
+++ b/arch/arm/kvm/Kconfig
@@ -31,6 +31,7 @@  config KVM
 	select KVM_VFIO
 	select HAVE_KVM_EVENTFD
 	select HAVE_KVM_IRQFD
+	select KVM_CROSS_ENDIAN_GUESTS
 	depends on ARM_VIRT_EXT && ARM_LPAE && ARM_ARCH_TIMER
 	---help---
 	  Support hosting virtualized guest machines.
diff --git a/arch/arm64/kvm/Kconfig b/arch/arm64/kvm/Kconfig
index bfffe8f..9af39fe 100644
--- a/arch/arm64/kvm/Kconfig
+++ b/arch/arm64/kvm/Kconfig
@@ -31,6 +31,7 @@  config KVM
 	select KVM_VFIO
 	select HAVE_KVM_EVENTFD
 	select HAVE_KVM_IRQFD
+	select KVM_CROSS_ENDIAN_GUESTS
 	---help---
 	  Support hosting virtualized guest machines.
 
diff --git a/arch/powerpc/kvm/Kconfig b/arch/powerpc/kvm/Kconfig
index 3caec2c..e028710 100644
--- a/arch/powerpc/kvm/Kconfig
+++ b/arch/powerpc/kvm/Kconfig
@@ -79,6 +79,7 @@  config KVM_BOOK3S_64_HV
 	select KVM_BOOK3S_HV_POSSIBLE
 	select MMU_NOTIFIER
 	select CMA
+	select KVM_CROSS_ENDIAN_GUESTS
 	---help---
 	  Support running unmodified book3s_64 guest kernels in
 	  virtual machines on POWER7 and PPC970 processors that have
diff --git a/drivers/net/Kconfig b/drivers/net/Kconfig
index c18f9e6..0c4ce47 100644
--- a/drivers/net/Kconfig
+++ b/drivers/net/Kconfig
@@ -261,6 +261,7 @@  config TUN
 config TUN_VNET_CROSS_LE
 	bool "Support for cross-endian vnet headers on little-endian kernels"
 	default n
+	depends on KVM_CROSS_ENDIAN_GUESTS
 	---help---
 	  This option allows TUN/TAP and MACVTAP device drivers in a
 	  little-endian kernel to parse vnet headers that come from a
diff --git a/drivers/vhost/Kconfig b/drivers/vhost/Kconfig
index 533eaf0..4d8ae6b 100644
--- a/drivers/vhost/Kconfig
+++ b/drivers/vhost/Kconfig
@@ -35,6 +35,7 @@  config VHOST
 
 config VHOST_CROSS_ENDIAN_LEGACY
 	bool "Cross-endian support for vhost"
+	depends on KVM_CROSS_ENDIAN_GUESTS
 	default n
 	---help---
 	  This option allows vhost to support guests with a different byte
diff --git a/virt/kvm/Kconfig b/virt/kvm/Kconfig
index e2c876d..cc7b28a 100644
--- a/virt/kvm/Kconfig
+++ b/virt/kvm/Kconfig
@@ -47,3 +47,6 @@  config KVM_GENERIC_DIRTYLOG_READ_PROTECT
 config KVM_COMPAT
        def_bool y
        depends on COMPAT && !S390
+
+config KVM_CROSS_ENDIAN_GUESTS
+       bool