[V9,1/9] vhost: refine vhost and vringh kconfig
diff mbox series

Message ID 20200326140125.19794-2-jasowang@redhat.com
State New
Headers show
Series
  • vDPA support
Related show

Commit Message

Jason Wang March 26, 2020, 2:01 p.m. UTC
Currently, CONFIG_VHOST depends on CONFIG_VIRTUALIZATION. But vhost is
not necessarily for VM since it's a generic userspace and kernel
communication protocol. Such dependency may prevent archs without
virtualization support from using vhost.

To solve this, a dedicated vhost menu is created under drivers so
CONIFG_VHOST can be decoupled out of CONFIG_VIRTUALIZATION.

While at it, also squash Kconfig.vringh into vhost Kconfig file. This
avoids the trick of conditional inclusion from VOP or CAIF. Then it
will be easier to introduce new vringh users and common dependency for
both vringh and vhost.

Signed-off-by: Jason Wang <jasowang@redhat.com>
---
 arch/arm/kvm/Kconfig         |  2 --
 arch/arm64/kvm/Kconfig       |  2 --
 arch/mips/kvm/Kconfig        |  2 --
 arch/powerpc/kvm/Kconfig     |  2 --
 arch/s390/kvm/Kconfig        |  4 ----
 arch/x86/kvm/Kconfig         |  4 ----
 drivers/Kconfig              |  2 ++
 drivers/misc/mic/Kconfig     |  4 ----
 drivers/net/caif/Kconfig     |  4 ----
 drivers/vhost/Kconfig        | 23 ++++++++++++++---------
 drivers/vhost/Kconfig.vringh |  6 ------
 11 files changed, 16 insertions(+), 39 deletions(-)
 delete mode 100644 drivers/vhost/Kconfig.vringh

Comments

Christian Borntraeger April 1, 2020, 11:21 a.m. UTC | #1
On 26.03.20 15:01, Jason Wang wrote:
> Currently, CONFIG_VHOST depends on CONFIG_VIRTUALIZATION. But vhost is
> not necessarily for VM since it's a generic userspace and kernel
> communication protocol. Such dependency may prevent archs without
> virtualization support from using vhost.
> 
> To solve this, a dedicated vhost menu is created under drivers so
> CONIFG_VHOST can be decoupled out of CONFIG_VIRTUALIZATION.


FWIW, this now results in vhost not being build with defconfig kernels (in todays
linux-next). 

> 
> While at it, also squash Kconfig.vringh into vhost Kconfig file. This
> avoids the trick of conditional inclusion from VOP or CAIF. Then it
> will be easier to introduce new vringh users and common dependency for
> both vringh and vhost.
> 
> Signed-off-by: Jason Wang <jasowang@redhat.com>
> ---
>  arch/arm/kvm/Kconfig         |  2 --
>  arch/arm64/kvm/Kconfig       |  2 --
>  arch/mips/kvm/Kconfig        |  2 --
>  arch/powerpc/kvm/Kconfig     |  2 --
>  arch/s390/kvm/Kconfig        |  4 ----
>  arch/x86/kvm/Kconfig         |  4 ----
>  drivers/Kconfig              |  2 ++
>  drivers/misc/mic/Kconfig     |  4 ----
>  drivers/net/caif/Kconfig     |  4 ----
>  drivers/vhost/Kconfig        | 23 ++++++++++++++---------
>  drivers/vhost/Kconfig.vringh |  6 ------
>  11 files changed, 16 insertions(+), 39 deletions(-)
>  delete mode 100644 drivers/vhost/Kconfig.vringh
> 
> diff --git a/arch/arm/kvm/Kconfig b/arch/arm/kvm/Kconfig
> index f591026347a5..be97393761bf 100644
> --- a/arch/arm/kvm/Kconfig
> +++ b/arch/arm/kvm/Kconfig
> @@ -54,6 +54,4 @@ config KVM_ARM_HOST
>  	---help---
>  	  Provides host support for ARM processors.
>  
> -source "drivers/vhost/Kconfig"
> -
>  endif # VIRTUALIZATION
> diff --git a/arch/arm64/kvm/Kconfig b/arch/arm64/kvm/Kconfig
> index a475c68cbfec..449386d76441 100644
> --- a/arch/arm64/kvm/Kconfig
> +++ b/arch/arm64/kvm/Kconfig
> @@ -64,6 +64,4 @@ config KVM_ARM_PMU
>  config KVM_INDIRECT_VECTORS
>         def_bool KVM && (HARDEN_BRANCH_PREDICTOR || HARDEN_EL2_VECTORS)
>  
> -source "drivers/vhost/Kconfig"
> -
>  endif # VIRTUALIZATION
> diff --git a/arch/mips/kvm/Kconfig b/arch/mips/kvm/Kconfig
> index eac25aef21e0..b91d145aa2d5 100644
> --- a/arch/mips/kvm/Kconfig
> +++ b/arch/mips/kvm/Kconfig
> @@ -72,6 +72,4 @@ config KVM_MIPS_DEBUG_COP0_COUNTERS
>  
>  	  If unsure, say N.
>  
> -source "drivers/vhost/Kconfig"
> -
>  endif # VIRTUALIZATION
> diff --git a/arch/powerpc/kvm/Kconfig b/arch/powerpc/kvm/Kconfig
> index 711fca9bc6f0..12885eda324e 100644
> --- a/arch/powerpc/kvm/Kconfig
> +++ b/arch/powerpc/kvm/Kconfig
> @@ -204,6 +204,4 @@ config KVM_XIVE
>  	default y
>  	depends on KVM_XICS && PPC_XIVE_NATIVE && KVM_BOOK3S_HV_POSSIBLE
>  
> -source "drivers/vhost/Kconfig"
> -
>  endif # VIRTUALIZATION
> diff --git a/arch/s390/kvm/Kconfig b/arch/s390/kvm/Kconfig
> index d3db3d7ed077..def3b60f1fe8 100644
> --- a/arch/s390/kvm/Kconfig
> +++ b/arch/s390/kvm/Kconfig
> @@ -55,8 +55,4 @@ config KVM_S390_UCONTROL
>  
>  	  If unsure, say N.
>  
> -# OK, it's a little counter-intuitive to do this, but it puts it neatly under
> -# the virtualization menu.
> -source "drivers/vhost/Kconfig"
> -
>  endif # VIRTUALIZATION
> diff --git a/arch/x86/kvm/Kconfig b/arch/x86/kvm/Kconfig
> index 991019d5eee1..0dfe70e17af9 100644
> --- a/arch/x86/kvm/Kconfig
> +++ b/arch/x86/kvm/Kconfig
> @@ -94,8 +94,4 @@ config KVM_MMU_AUDIT
>  	 This option adds a R/W kVM module parameter 'mmu_audit', which allows
>  	 auditing of KVM MMU events at runtime.
>  
> -# OK, it's a little counter-intuitive to do this, but it puts it neatly under
> -# the virtualization menu.
> -source "drivers/vhost/Kconfig"
> -
>  endif # VIRTUALIZATION
> diff --git a/drivers/Kconfig b/drivers/Kconfig
> index 8befa53f43be..7a6d8b2b68b4 100644
> --- a/drivers/Kconfig
> +++ b/drivers/Kconfig
> @@ -138,6 +138,8 @@ source "drivers/virt/Kconfig"
>  
>  source "drivers/virtio/Kconfig"
>  
> +source "drivers/vhost/Kconfig"
> +
>  source "drivers/hv/Kconfig"
>  
>  source "drivers/xen/Kconfig"
> diff --git a/drivers/misc/mic/Kconfig b/drivers/misc/mic/Kconfig
> index b6841ba6d922..8f201d019f5a 100644
> --- a/drivers/misc/mic/Kconfig
> +++ b/drivers/misc/mic/Kconfig
> @@ -133,8 +133,4 @@ config VOP
>  	  OS and tools for MIC to use with this driver are available from
>  	  <http://software.intel.com/en-us/mic-developer>.
>  
> -if VOP
> -source "drivers/vhost/Kconfig.vringh"
> -endif
> -
>  endmenu
> diff --git a/drivers/net/caif/Kconfig b/drivers/net/caif/Kconfig
> index e74e2bb61236..9db0570c5beb 100644
> --- a/drivers/net/caif/Kconfig
> +++ b/drivers/net/caif/Kconfig
> @@ -58,8 +58,4 @@ config CAIF_VIRTIO
>  	---help---
>  	  The CAIF driver for CAIF over Virtio.
>  
> -if CAIF_VIRTIO
> -source "drivers/vhost/Kconfig.vringh"
> -endif
> -
>  endif # CAIF_DRIVERS
> diff --git a/drivers/vhost/Kconfig b/drivers/vhost/Kconfig
> index 3d03ccbd1adc..4aef10a54cd1 100644
> --- a/drivers/vhost/Kconfig
> +++ b/drivers/vhost/Kconfig
> @@ -1,8 +1,20 @@
>  # SPDX-License-Identifier: GPL-2.0-only
> +config VHOST_RING
> +	tristate
> +	help
> +	  This option is selected by any driver which needs to access
> +	  the host side of a virtio ring.
> +
> +menuconfig VHOST
> +	tristate "Host kernel accelerator for virtio (VHOST)"
> +	help
> +	  This option is selected by any driver which needs to access
> +	  the core of vhost.
> +if VHOST
> +
>  config VHOST_NET
>  	tristate "Host kernel accelerator for virtio net"
>  	depends on NET && EVENTFD && (TUN || !TUN) && (TAP || !TAP)
> -	select VHOST
>  	---help---
>  	  This kernel module can be loaded in host kernel to accelerate
>  	  guest networking with virtio_net. Not to be confused with virtio_net
> @@ -14,7 +26,6 @@ config VHOST_NET
>  config VHOST_SCSI
>  	tristate "VHOST_SCSI TCM fabric driver"
>  	depends on TARGET_CORE && EVENTFD
> -	select VHOST
>  	default n
>  	---help---
>  	Say M here to enable the vhost_scsi TCM fabric module
> @@ -24,7 +35,6 @@ config VHOST_VSOCK
>  	tristate "vhost virtio-vsock driver"
>  	depends on VSOCKETS && EVENTFD
>  	select VIRTIO_VSOCKETS_COMMON
> -	select VHOST
>  	default n
>  	---help---
>  	This kernel module can be loaded in the host kernel to provide AF_VSOCK
> @@ -34,12 +44,6 @@ config VHOST_VSOCK
>  	To compile this driver as a module, choose M here: the module will be called
>  	vhost_vsock.
>  
> -config VHOST
> -	tristate
> -	---help---
> -	  This option is selected by any driver which needs to access
> -	  the core of vhost.
> -
>  config VHOST_CROSS_ENDIAN_LEGACY
>  	bool "Cross-endian support for vhost"
>  	default n
> @@ -54,3 +58,4 @@ config VHOST_CROSS_ENDIAN_LEGACY
>  	  adds some overhead, it is disabled by default.
>  
>  	  If unsure, say "N".
> +endif
> diff --git a/drivers/vhost/Kconfig.vringh b/drivers/vhost/Kconfig.vringh
> deleted file mode 100644
> index c1fe36a9b8d4..000000000000
> --- a/drivers/vhost/Kconfig.vringh
> +++ /dev/null
> @@ -1,6 +0,0 @@
> -# SPDX-License-Identifier: GPL-2.0-only
> -config VHOST_RING
> -	tristate
> -	---help---
> -	  This option is selected by any driver which needs to access
> -	  the host side of a virtio ring.
>
Jason Wang April 1, 2020, 12:50 p.m. UTC | #2
On 2020/4/1 下午7:21, Christian Borntraeger wrote:
> On 26.03.20 15:01, Jason Wang wrote:
>> Currently, CONFIG_VHOST depends on CONFIG_VIRTUALIZATION. But vhost is
>> not necessarily for VM since it's a generic userspace and kernel
>> communication protocol. Such dependency may prevent archs without
>> virtualization support from using vhost.
>>
>> To solve this, a dedicated vhost menu is created under drivers so
>> CONIFG_VHOST can be decoupled out of CONFIG_VIRTUALIZATION.
> FWIW, this now results in vhost not being build with defconfig kernels (in todays
> linux-next).
>

Hi Christian:

Did you meet it even with this 
commit https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git/commit/?id=a4be40cbcedba9b5b714f3c95182e8a45176e42d?

If yes, what's your build config looks like?

Thanks
Christian Borntraeger April 1, 2020, 12:56 p.m. UTC | #3
On 01.04.20 14:50, Jason Wang wrote:
> 
> On 2020/4/1 下午7:21, Christian Borntraeger wrote:
>> On 26.03.20 15:01, Jason Wang wrote:
>>> Currently, CONFIG_VHOST depends on CONFIG_VIRTUALIZATION. But vhost is
>>> not necessarily for VM since it's a generic userspace and kernel
>>> communication protocol. Such dependency may prevent archs without
>>> virtualization support from using vhost.
>>>
>>> To solve this, a dedicated vhost menu is created under drivers so
>>> CONIFG_VHOST can be decoupled out of CONFIG_VIRTUALIZATION.
>> FWIW, this now results in vhost not being build with defconfig kernels (in todays
>> linux-next).
>>
> 
> Hi Christian:
> 
> Did you meet it even with this commit https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git/commit/?id=a4be40cbcedba9b5b714f3c95182e8a45176e42d?

I simply used linux-next. The defconfig does NOT contain CONFIG_VHOST and therefore CONFIG_VHOST_NET and friends
can not be selected.

$ git checkout next-20200401
$ make defconfig
  HOSTCC  scripts/basic/fixdep
  HOSTCC  scripts/kconfig/conf.o
  HOSTCC  scripts/kconfig/confdata.o
  HOSTCC  scripts/kconfig/expr.o
  LEX     scripts/kconfig/lexer.lex.c
  YACC    scripts/kconfig/parser.tab.[ch]
  HOSTCC  scripts/kconfig/lexer.lex.o
  HOSTCC  scripts/kconfig/parser.tab.o
  HOSTCC  scripts/kconfig/preprocess.o
  HOSTCC  scripts/kconfig/symbol.o
  HOSTCC  scripts/kconfig/util.o
  HOSTLD  scripts/kconfig/conf
*** Default configuration is based on 'x86_64_defconfig'
#
# configuration written to .config
#

$ grep VHOST .config
# CONFIG_VHOST is not set

 
> If yes, what's your build config looks like?
> 
> Thanks
>
Christian Borntraeger April 1, 2020, 1:02 p.m. UTC | #4
On 01.04.20 14:56, Christian Borntraeger wrote:
> 
> On 01.04.20 14:50, Jason Wang wrote:
>>
>> On 2020/4/1 下午7:21, Christian Borntraeger wrote:
>>> On 26.03.20 15:01, Jason Wang wrote:
>>>> Currently, CONFIG_VHOST depends on CONFIG_VIRTUALIZATION. But vhost is
>>>> not necessarily for VM since it's a generic userspace and kernel
>>>> communication protocol. Such dependency may prevent archs without
>>>> virtualization support from using vhost.
>>>>
>>>> To solve this, a dedicated vhost menu is created under drivers so
>>>> CONIFG_VHOST can be decoupled out of CONFIG_VIRTUALIZATION.
>>> FWIW, this now results in vhost not being build with defconfig kernels (in todays
>>> linux-next).
>>>
>>
>> Hi Christian:
>>
>> Did you meet it even with this commit https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git/commit/?id=a4be40cbcedba9b5b714f3c95182e8a45176e42d?
> 
> I simply used linux-next. The defconfig does NOT contain CONFIG_VHOST and therefore CONFIG_VHOST_NET and friends
> can not be selected.
> 
> $ git checkout next-20200401
> $ make defconfig
>   HOSTCC  scripts/basic/fixdep
>   HOSTCC  scripts/kconfig/conf.o
>   HOSTCC  scripts/kconfig/confdata.o
>   HOSTCC  scripts/kconfig/expr.o
>   LEX     scripts/kconfig/lexer.lex.c
>   YACC    scripts/kconfig/parser.tab.[ch]
>   HOSTCC  scripts/kconfig/lexer.lex.o
>   HOSTCC  scripts/kconfig/parser.tab.o
>   HOSTCC  scripts/kconfig/preprocess.o
>   HOSTCC  scripts/kconfig/symbol.o
>   HOSTCC  scripts/kconfig/util.o
>   HOSTLD  scripts/kconfig/conf
> *** Default configuration is based on 'x86_64_defconfig'
> #
> # configuration written to .config
> #
> 
> $ grep VHOST .config
> # CONFIG_VHOST is not set
> 
>  
>> If yes, what's your build config looks like?
>>
>> Thanks

This was x86. Not sure if that did work before.
On s390 this is definitely a regression as the defconfig files 
for s390 do select VHOST_NET

grep VHOST arch/s390/configs/*
arch/s390/configs/debug_defconfig:CONFIG_VHOST_NET=m
arch/s390/configs/debug_defconfig:CONFIG_VHOST_VSOCK=m
arch/s390/configs/defconfig:CONFIG_VHOST_NET=m
arch/s390/configs/defconfig:CONFIG_VHOST_VSOCK=m

and this worked with 5.6, but does not work with next. Just adding
CONFIG_VHOST=m to the defconfig solves the issue, something like

---
 arch/s390/configs/debug_defconfig | 5 +++--
 arch/s390/configs/defconfig       | 5 +++--
 2 files changed, 6 insertions(+), 4 deletions(-)

diff --git a/arch/s390/configs/debug_defconfig b/arch/s390/configs/debug_defconfig
index 46038bc58c9e..0b83274341ce 100644
--- a/arch/s390/configs/debug_defconfig
+++ b/arch/s390/configs/debug_defconfig
@@ -57,8 +57,6 @@ CONFIG_PROTECTED_VIRTUALIZATION_GUEST=y
 CONFIG_CMM=m
 CONFIG_APPLDATA_BASE=y
 CONFIG_KVM=m
-CONFIG_VHOST_NET=m
-CONFIG_VHOST_VSOCK=m
 CONFIG_OPROFILE=m
 CONFIG_KPROBES=y
 CONFIG_JUMP_LABEL=y
@@ -561,6 +559,9 @@ CONFIG_VFIO_MDEV_DEVICE=m
 CONFIG_VIRTIO_PCI=m
 CONFIG_VIRTIO_BALLOON=m
 CONFIG_VIRTIO_INPUT=y
+CONFIG_VHOST=m
+CONFIG_VHOST_NET=m
+CONFIG_VHOST_VSOCK=m
 CONFIG_S390_CCW_IOMMU=y
 CONFIG_S390_AP_IOMMU=y
 CONFIG_EXT4_FS=y
diff --git a/arch/s390/configs/defconfig b/arch/s390/configs/defconfig
index 7cd0648c1f4e..39e69c4e8cf7 100644
--- a/arch/s390/configs/defconfig
+++ b/arch/s390/configs/defconfig
@@ -57,8 +57,6 @@ CONFIG_PROTECTED_VIRTUALIZATION_GUEST=y
 CONFIG_CMM=m
 CONFIG_APPLDATA_BASE=y
 CONFIG_KVM=m
-CONFIG_VHOST_NET=m
-CONFIG_VHOST_VSOCK=m
 CONFIG_OPROFILE=m
 CONFIG_KPROBES=y
 CONFIG_JUMP_LABEL=y
@@ -557,6 +555,9 @@ CONFIG_VFIO_MDEV_DEVICE=m
 CONFIG_VIRTIO_PCI=m
 CONFIG_VIRTIO_BALLOON=m
 CONFIG_VIRTIO_INPUT=y
+CONFIG_VHOST=m
+CONFIG_VHOST_NET=m
+CONFIG_VHOST_VSOCK=m
 CONFIG_S390_CCW_IOMMU=y
 CONFIG_S390_AP_IOMMU=y
 CONFIG_EXT4_FS=y
Michael S. Tsirkin April 1, 2020, 1:22 p.m. UTC | #5
On Thu, Mar 26, 2020 at 10:01:17PM +0800, Jason Wang wrote:
> Currently, CONFIG_VHOST depends on CONFIG_VIRTUALIZATION. But vhost is
> not necessarily for VM since it's a generic userspace and kernel
> communication protocol. Such dependency may prevent archs without
> virtualization support from using vhost.
> 
> To solve this, a dedicated vhost menu is created under drivers so
> CONIFG_VHOST can be decoupled out of CONFIG_VIRTUALIZATION.
> 
> While at it, also squash Kconfig.vringh into vhost Kconfig file. This
> avoids the trick of conditional inclusion from VOP or CAIF. Then it
> will be easier to introduce new vringh users and common dependency for
> both vringh and vhost.
> 
> Signed-off-by: Jason Wang <jasowang@redhat.com>

Is this just so we can drop the dependency on CONFIG_VIRTUALIZATION?
If yes what happens if we drop this patch?
Given the impact it had I'd like to defer it till next release if
possible.


> ---
>  arch/arm/kvm/Kconfig         |  2 --
>  arch/arm64/kvm/Kconfig       |  2 --
>  arch/mips/kvm/Kconfig        |  2 --
>  arch/powerpc/kvm/Kconfig     |  2 --
>  arch/s390/kvm/Kconfig        |  4 ----
>  arch/x86/kvm/Kconfig         |  4 ----
>  drivers/Kconfig              |  2 ++
>  drivers/misc/mic/Kconfig     |  4 ----
>  drivers/net/caif/Kconfig     |  4 ----
>  drivers/vhost/Kconfig        | 23 ++++++++++++++---------
>  drivers/vhost/Kconfig.vringh |  6 ------
>  11 files changed, 16 insertions(+), 39 deletions(-)
>  delete mode 100644 drivers/vhost/Kconfig.vringh
> 
> diff --git a/arch/arm/kvm/Kconfig b/arch/arm/kvm/Kconfig
> index f591026347a5..be97393761bf 100644
> --- a/arch/arm/kvm/Kconfig
> +++ b/arch/arm/kvm/Kconfig
> @@ -54,6 +54,4 @@ config KVM_ARM_HOST
>  	---help---
>  	  Provides host support for ARM processors.
>  
> -source "drivers/vhost/Kconfig"
> -
>  endif # VIRTUALIZATION
> diff --git a/arch/arm64/kvm/Kconfig b/arch/arm64/kvm/Kconfig
> index a475c68cbfec..449386d76441 100644
> --- a/arch/arm64/kvm/Kconfig
> +++ b/arch/arm64/kvm/Kconfig
> @@ -64,6 +64,4 @@ config KVM_ARM_PMU
>  config KVM_INDIRECT_VECTORS
>         def_bool KVM && (HARDEN_BRANCH_PREDICTOR || HARDEN_EL2_VECTORS)
>  
> -source "drivers/vhost/Kconfig"
> -
>  endif # VIRTUALIZATION
> diff --git a/arch/mips/kvm/Kconfig b/arch/mips/kvm/Kconfig
> index eac25aef21e0..b91d145aa2d5 100644
> --- a/arch/mips/kvm/Kconfig
> +++ b/arch/mips/kvm/Kconfig
> @@ -72,6 +72,4 @@ config KVM_MIPS_DEBUG_COP0_COUNTERS
>  
>  	  If unsure, say N.
>  
> -source "drivers/vhost/Kconfig"
> -
>  endif # VIRTUALIZATION
> diff --git a/arch/powerpc/kvm/Kconfig b/arch/powerpc/kvm/Kconfig
> index 711fca9bc6f0..12885eda324e 100644
> --- a/arch/powerpc/kvm/Kconfig
> +++ b/arch/powerpc/kvm/Kconfig
> @@ -204,6 +204,4 @@ config KVM_XIVE
>  	default y
>  	depends on KVM_XICS && PPC_XIVE_NATIVE && KVM_BOOK3S_HV_POSSIBLE
>  
> -source "drivers/vhost/Kconfig"
> -
>  endif # VIRTUALIZATION
> diff --git a/arch/s390/kvm/Kconfig b/arch/s390/kvm/Kconfig
> index d3db3d7ed077..def3b60f1fe8 100644
> --- a/arch/s390/kvm/Kconfig
> +++ b/arch/s390/kvm/Kconfig
> @@ -55,8 +55,4 @@ config KVM_S390_UCONTROL
>  
>  	  If unsure, say N.
>  
> -# OK, it's a little counter-intuitive to do this, but it puts it neatly under
> -# the virtualization menu.
> -source "drivers/vhost/Kconfig"
> -
>  endif # VIRTUALIZATION
> diff --git a/arch/x86/kvm/Kconfig b/arch/x86/kvm/Kconfig
> index 991019d5eee1..0dfe70e17af9 100644
> --- a/arch/x86/kvm/Kconfig
> +++ b/arch/x86/kvm/Kconfig
> @@ -94,8 +94,4 @@ config KVM_MMU_AUDIT
>  	 This option adds a R/W kVM module parameter 'mmu_audit', which allows
>  	 auditing of KVM MMU events at runtime.
>  
> -# OK, it's a little counter-intuitive to do this, but it puts it neatly under
> -# the virtualization menu.
> -source "drivers/vhost/Kconfig"
> -
>  endif # VIRTUALIZATION
> diff --git a/drivers/Kconfig b/drivers/Kconfig
> index 8befa53f43be..7a6d8b2b68b4 100644
> --- a/drivers/Kconfig
> +++ b/drivers/Kconfig
> @@ -138,6 +138,8 @@ source "drivers/virt/Kconfig"
>  
>  source "drivers/virtio/Kconfig"
>  
> +source "drivers/vhost/Kconfig"
> +
>  source "drivers/hv/Kconfig"
>  
>  source "drivers/xen/Kconfig"
> diff --git a/drivers/misc/mic/Kconfig b/drivers/misc/mic/Kconfig
> index b6841ba6d922..8f201d019f5a 100644
> --- a/drivers/misc/mic/Kconfig
> +++ b/drivers/misc/mic/Kconfig
> @@ -133,8 +133,4 @@ config VOP
>  	  OS and tools for MIC to use with this driver are available from
>  	  <http://software.intel.com/en-us/mic-developer>.
>  
> -if VOP
> -source "drivers/vhost/Kconfig.vringh"
> -endif
> -
>  endmenu
> diff --git a/drivers/net/caif/Kconfig b/drivers/net/caif/Kconfig
> index e74e2bb61236..9db0570c5beb 100644
> --- a/drivers/net/caif/Kconfig
> +++ b/drivers/net/caif/Kconfig
> @@ -58,8 +58,4 @@ config CAIF_VIRTIO
>  	---help---
>  	  The CAIF driver for CAIF over Virtio.
>  
> -if CAIF_VIRTIO
> -source "drivers/vhost/Kconfig.vringh"
> -endif
> -
>  endif # CAIF_DRIVERS
> diff --git a/drivers/vhost/Kconfig b/drivers/vhost/Kconfig
> index 3d03ccbd1adc..4aef10a54cd1 100644
> --- a/drivers/vhost/Kconfig
> +++ b/drivers/vhost/Kconfig
> @@ -1,8 +1,20 @@
>  # SPDX-License-Identifier: GPL-2.0-only
> +config VHOST_RING
> +	tristate
> +	help
> +	  This option is selected by any driver which needs to access
> +	  the host side of a virtio ring.
> +
> +menuconfig VHOST
> +	tristate "Host kernel accelerator for virtio (VHOST)"
> +	help
> +	  This option is selected by any driver which needs to access
> +	  the core of vhost.
> +if VHOST
> +

The description here is wrong, isn't it?
VHOST and VHOST_RING are no longer selected, right?


>  config VHOST_NET
>  	tristate "Host kernel accelerator for virtio net"
>  	depends on NET && EVENTFD && (TUN || !TUN) && (TAP || !TAP)
> -	select VHOST
>  	---help---
>  	  This kernel module can be loaded in host kernel to accelerate
>  	  guest networking with virtio_net. Not to be confused with virtio_net
> @@ -14,7 +26,6 @@ config VHOST_NET
>  config VHOST_SCSI
>  	tristate "VHOST_SCSI TCM fabric driver"
>  	depends on TARGET_CORE && EVENTFD
> -	select VHOST
>  	default n
>  	---help---
>  	Say M here to enable the vhost_scsi TCM fabric module
> @@ -24,7 +35,6 @@ config VHOST_VSOCK
>  	tristate "vhost virtio-vsock driver"
>  	depends on VSOCKETS && EVENTFD
>  	select VIRTIO_VSOCKETS_COMMON
> -	select VHOST
>  	default n
>  	---help---
>  	This kernel module can be loaded in the host kernel to provide AF_VSOCK
> @@ -34,12 +44,6 @@ config VHOST_VSOCK
>  	To compile this driver as a module, choose M here: the module will be called
>  	vhost_vsock.
>  
> -config VHOST
> -	tristate
> -	---help---
> -	  This option is selected by any driver which needs to access
> -	  the core of vhost.
> -
>  config VHOST_CROSS_ENDIAN_LEGACY
>  	bool "Cross-endian support for vhost"
>  	default n
> @@ -54,3 +58,4 @@ config VHOST_CROSS_ENDIAN_LEGACY
>  	  adds some overhead, it is disabled by default.
>  
>  	  If unsure, say "N".
> +endif
> diff --git a/drivers/vhost/Kconfig.vringh b/drivers/vhost/Kconfig.vringh
> deleted file mode 100644
> index c1fe36a9b8d4..000000000000
> --- a/drivers/vhost/Kconfig.vringh
> +++ /dev/null
> @@ -1,6 +0,0 @@
> -# SPDX-License-Identifier: GPL-2.0-only
> -config VHOST_RING
> -	tristate
> -	---help---
> -	  This option is selected by any driver which needs to access
> -	  the host side of a virtio ring.
> -- 
> 2.20.1
Michael S. Tsirkin April 1, 2020, 2:01 p.m. UTC | #6
On Wed, Apr 01, 2020 at 03:02:00PM +0200, Christian Borntraeger wrote:
> 
> 
> On 01.04.20 14:56, Christian Borntraeger wrote:
> > 
> > On 01.04.20 14:50, Jason Wang wrote:
> >>
> >> On 2020/4/1 下午7:21, Christian Borntraeger wrote:
> >>> On 26.03.20 15:01, Jason Wang wrote:
> >>>> Currently, CONFIG_VHOST depends on CONFIG_VIRTUALIZATION. But vhost is
> >>>> not necessarily for VM since it's a generic userspace and kernel
> >>>> communication protocol. Such dependency may prevent archs without
> >>>> virtualization support from using vhost.
> >>>>
> >>>> To solve this, a dedicated vhost menu is created under drivers so
> >>>> CONIFG_VHOST can be decoupled out of CONFIG_VIRTUALIZATION.
> >>> FWIW, this now results in vhost not being build with defconfig kernels (in todays
> >>> linux-next).
> >>>
> >>
> >> Hi Christian:
> >>
> >> Did you meet it even with this commit https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git/commit/?id=a4be40cbcedba9b5b714f3c95182e8a45176e42d?
> > 
> > I simply used linux-next. The defconfig does NOT contain CONFIG_VHOST and therefore CONFIG_VHOST_NET and friends
> > can not be selected.
> > 
> > $ git checkout next-20200401
> > $ make defconfig
> >   HOSTCC  scripts/basic/fixdep
> >   HOSTCC  scripts/kconfig/conf.o
> >   HOSTCC  scripts/kconfig/confdata.o
> >   HOSTCC  scripts/kconfig/expr.o
> >   LEX     scripts/kconfig/lexer.lex.c
> >   YACC    scripts/kconfig/parser.tab.[ch]
> >   HOSTCC  scripts/kconfig/lexer.lex.o
> >   HOSTCC  scripts/kconfig/parser.tab.o
> >   HOSTCC  scripts/kconfig/preprocess.o
> >   HOSTCC  scripts/kconfig/symbol.o
> >   HOSTCC  scripts/kconfig/util.o
> >   HOSTLD  scripts/kconfig/conf
> > *** Default configuration is based on 'x86_64_defconfig'
> > #
> > # configuration written to .config
> > #
> > 
> > $ grep VHOST .config
> > # CONFIG_VHOST is not set
> > 
> >  
> >> If yes, what's your build config looks like?
> >>
> >> Thanks
> 
> This was x86. Not sure if that did work before.
> On s390 this is definitely a regression as the defconfig files 
> for s390 do select VHOST_NET
> 
> grep VHOST arch/s390/configs/*
> arch/s390/configs/debug_defconfig:CONFIG_VHOST_NET=m
> arch/s390/configs/debug_defconfig:CONFIG_VHOST_VSOCK=m
> arch/s390/configs/defconfig:CONFIG_VHOST_NET=m
> arch/s390/configs/defconfig:CONFIG_VHOST_VSOCK=m
> 
> and this worked with 5.6, but does not work with next. Just adding
> CONFIG_VHOST=m to the defconfig solves the issue, something like

And a bunch of other places I guess... and I guess we need to
select VHOST_RING too?
Also Jason, I just noticed that you added:

config VHOST_RING
        tristate
+        select VHOST_IOTLB
        help
          This option is selected by any driver which needs to access
          the host side of a virtio ring.

but are you sure this will do the right thing if VHOST_RING itself
selected?


> ---
>  arch/s390/configs/debug_defconfig | 5 +++--
>  arch/s390/configs/defconfig       | 5 +++--
>  2 files changed, 6 insertions(+), 4 deletions(-)
> 
> diff --git a/arch/s390/configs/debug_defconfig b/arch/s390/configs/debug_defconfig
> index 46038bc58c9e..0b83274341ce 100644
> --- a/arch/s390/configs/debug_defconfig
> +++ b/arch/s390/configs/debug_defconfig
> @@ -57,8 +57,6 @@ CONFIG_PROTECTED_VIRTUALIZATION_GUEST=y
>  CONFIG_CMM=m
>  CONFIG_APPLDATA_BASE=y
>  CONFIG_KVM=m
> -CONFIG_VHOST_NET=m
> -CONFIG_VHOST_VSOCK=m
>  CONFIG_OPROFILE=m
>  CONFIG_KPROBES=y
>  CONFIG_JUMP_LABEL=y
> @@ -561,6 +559,9 @@ CONFIG_VFIO_MDEV_DEVICE=m
>  CONFIG_VIRTIO_PCI=m
>  CONFIG_VIRTIO_BALLOON=m
>  CONFIG_VIRTIO_INPUT=y
> +CONFIG_VHOST=m
> +CONFIG_VHOST_NET=m
> +CONFIG_VHOST_VSOCK=m
>  CONFIG_S390_CCW_IOMMU=y
>  CONFIG_S390_AP_IOMMU=y
>  CONFIG_EXT4_FS=y
> diff --git a/arch/s390/configs/defconfig b/arch/s390/configs/defconfig
> index 7cd0648c1f4e..39e69c4e8cf7 100644
> --- a/arch/s390/configs/defconfig
> +++ b/arch/s390/configs/defconfig
> @@ -57,8 +57,6 @@ CONFIG_PROTECTED_VIRTUALIZATION_GUEST=y
>  CONFIG_CMM=m
>  CONFIG_APPLDATA_BASE=y
>  CONFIG_KVM=m
> -CONFIG_VHOST_NET=m
> -CONFIG_VHOST_VSOCK=m
>  CONFIG_OPROFILE=m
>  CONFIG_KPROBES=y
>  CONFIG_JUMP_LABEL=y
> @@ -557,6 +555,9 @@ CONFIG_VFIO_MDEV_DEVICE=m
>  CONFIG_VIRTIO_PCI=m
>  CONFIG_VIRTIO_BALLOON=m
>  CONFIG_VIRTIO_INPUT=y
> +CONFIG_VHOST=m
> +CONFIG_VHOST_NET=m
> +CONFIG_VHOST_VSOCK=m
>  CONFIG_S390_CCW_IOMMU=y
>  CONFIG_S390_AP_IOMMU=y
>  CONFIG_EXT4_FS=y
> -- 
> 2.25.1
Jason Wang April 1, 2020, 2:08 p.m. UTC | #7
On 2020/4/1 下午9:22, Michael S. Tsirkin wrote:
> On Thu, Mar 26, 2020 at 10:01:17PM +0800, Jason Wang wrote:
>> Currently, CONFIG_VHOST depends on CONFIG_VIRTUALIZATION. But vhost is
>> not necessarily for VM since it's a generic userspace and kernel
>> communication protocol. Such dependency may prevent archs without
>> virtualization support from using vhost.
>>
>> To solve this, a dedicated vhost menu is created under drivers so
>> CONIFG_VHOST can be decoupled out of CONFIG_VIRTUALIZATION.
>>
>> While at it, also squash Kconfig.vringh into vhost Kconfig file. This
>> avoids the trick of conditional inclusion from VOP or CAIF. Then it
>> will be easier to introduce new vringh users and common dependency for
>> both vringh and vhost.
>>
>> Signed-off-by: Jason Wang <jasowang@redhat.com>
> Is this just so we can drop the dependency on CONFIG_VIRTUALIZATION?
> If yes what happens if we drop this patch?


The problem is that then VHOST_RING must depend on CONFIG_VIRTUALIZATION 
(which enable VHOST_IOTLB) to work.

But it looks to me CAIF and VOP doesn't requires CONFIG_VIRTUALIZATION.


> Given the impact it had I'd like to defer it till next release if
> possible.
>
>
>> ---
>>   arch/arm/kvm/Kconfig         |  2 --
>>   arch/arm64/kvm/Kconfig       |  2 --
>>   arch/mips/kvm/Kconfig        |  2 --
>>   arch/powerpc/kvm/Kconfig     |  2 --
>>   arch/s390/kvm/Kconfig        |  4 ----
>>   arch/x86/kvm/Kconfig         |  4 ----
>>   drivers/Kconfig              |  2 ++
>>   drivers/misc/mic/Kconfig     |  4 ----
>>   drivers/net/caif/Kconfig     |  4 ----
>>   drivers/vhost/Kconfig        | 23 ++++++++++++++---------
>>   drivers/vhost/Kconfig.vringh |  6 ------
>>   11 files changed, 16 insertions(+), 39 deletions(-)
>>   delete mode 100644 drivers/vhost/Kconfig.vringh
>>
>> diff --git a/arch/arm/kvm/Kconfig b/arch/arm/kvm/Kconfig
>> index f591026347a5..be97393761bf 100644
>> --- a/arch/arm/kvm/Kconfig
>> +++ b/arch/arm/kvm/Kconfig
>> @@ -54,6 +54,4 @@ config KVM_ARM_HOST
>>   	---help---
>>   	  Provides host support for ARM processors.
>>   
>> -source "drivers/vhost/Kconfig"
>> -
>>   endif # VIRTUALIZATION
>> diff --git a/arch/arm64/kvm/Kconfig b/arch/arm64/kvm/Kconfig
>> index a475c68cbfec..449386d76441 100644
>> --- a/arch/arm64/kvm/Kconfig
>> +++ b/arch/arm64/kvm/Kconfig
>> @@ -64,6 +64,4 @@ config KVM_ARM_PMU
>>   config KVM_INDIRECT_VECTORS
>>          def_bool KVM && (HARDEN_BRANCH_PREDICTOR || HARDEN_EL2_VECTORS)
>>   
>> -source "drivers/vhost/Kconfig"
>> -
>>   endif # VIRTUALIZATION
>> diff --git a/arch/mips/kvm/Kconfig b/arch/mips/kvm/Kconfig
>> index eac25aef21e0..b91d145aa2d5 100644
>> --- a/arch/mips/kvm/Kconfig
>> +++ b/arch/mips/kvm/Kconfig
>> @@ -72,6 +72,4 @@ config KVM_MIPS_DEBUG_COP0_COUNTERS
>>   
>>   	  If unsure, say N.
>>   
>> -source "drivers/vhost/Kconfig"
>> -
>>   endif # VIRTUALIZATION
>> diff --git a/arch/powerpc/kvm/Kconfig b/arch/powerpc/kvm/Kconfig
>> index 711fca9bc6f0..12885eda324e 100644
>> --- a/arch/powerpc/kvm/Kconfig
>> +++ b/arch/powerpc/kvm/Kconfig
>> @@ -204,6 +204,4 @@ config KVM_XIVE
>>   	default y
>>   	depends on KVM_XICS && PPC_XIVE_NATIVE && KVM_BOOK3S_HV_POSSIBLE
>>   
>> -source "drivers/vhost/Kconfig"
>> -
>>   endif # VIRTUALIZATION
>> diff --git a/arch/s390/kvm/Kconfig b/arch/s390/kvm/Kconfig
>> index d3db3d7ed077..def3b60f1fe8 100644
>> --- a/arch/s390/kvm/Kconfig
>> +++ b/arch/s390/kvm/Kconfig
>> @@ -55,8 +55,4 @@ config KVM_S390_UCONTROL
>>   
>>   	  If unsure, say N.
>>   
>> -# OK, it's a little counter-intuitive to do this, but it puts it neatly under
>> -# the virtualization menu.
>> -source "drivers/vhost/Kconfig"
>> -
>>   endif # VIRTUALIZATION
>> diff --git a/arch/x86/kvm/Kconfig b/arch/x86/kvm/Kconfig
>> index 991019d5eee1..0dfe70e17af9 100644
>> --- a/arch/x86/kvm/Kconfig
>> +++ b/arch/x86/kvm/Kconfig
>> @@ -94,8 +94,4 @@ config KVM_MMU_AUDIT
>>   	 This option adds a R/W kVM module parameter 'mmu_audit', which allows
>>   	 auditing of KVM MMU events at runtime.
>>   
>> -# OK, it's a little counter-intuitive to do this, but it puts it neatly under
>> -# the virtualization menu.
>> -source "drivers/vhost/Kconfig"
>> -
>>   endif # VIRTUALIZATION
>> diff --git a/drivers/Kconfig b/drivers/Kconfig
>> index 8befa53f43be..7a6d8b2b68b4 100644
>> --- a/drivers/Kconfig
>> +++ b/drivers/Kconfig
>> @@ -138,6 +138,8 @@ source "drivers/virt/Kconfig"
>>   
>>   source "drivers/virtio/Kconfig"
>>   
>> +source "drivers/vhost/Kconfig"
>> +
>>   source "drivers/hv/Kconfig"
>>   
>>   source "drivers/xen/Kconfig"
>> diff --git a/drivers/misc/mic/Kconfig b/drivers/misc/mic/Kconfig
>> index b6841ba6d922..8f201d019f5a 100644
>> --- a/drivers/misc/mic/Kconfig
>> +++ b/drivers/misc/mic/Kconfig
>> @@ -133,8 +133,4 @@ config VOP
>>   	  OS and tools for MIC to use with this driver are available from
>>   	  <http://software.intel.com/en-us/mic-developer>.
>>   
>> -if VOP
>> -source "drivers/vhost/Kconfig.vringh"
>> -endif
>> -
>>   endmenu
>> diff --git a/drivers/net/caif/Kconfig b/drivers/net/caif/Kconfig
>> index e74e2bb61236..9db0570c5beb 100644
>> --- a/drivers/net/caif/Kconfig
>> +++ b/drivers/net/caif/Kconfig
>> @@ -58,8 +58,4 @@ config CAIF_VIRTIO
>>   	---help---
>>   	  The CAIF driver for CAIF over Virtio.
>>   
>> -if CAIF_VIRTIO
>> -source "drivers/vhost/Kconfig.vringh"
>> -endif
>> -
>>   endif # CAIF_DRIVERS
>> diff --git a/drivers/vhost/Kconfig b/drivers/vhost/Kconfig
>> index 3d03ccbd1adc..4aef10a54cd1 100644
>> --- a/drivers/vhost/Kconfig
>> +++ b/drivers/vhost/Kconfig
>> @@ -1,8 +1,20 @@
>>   # SPDX-License-Identifier: GPL-2.0-only
>> +config VHOST_RING
>> +	tristate
>> +	help
>> +	  This option is selected by any driver which needs to access
>> +	  the host side of a virtio ring.
>> +
>> +menuconfig VHOST
>> +	tristate "Host kernel accelerator for virtio (VHOST)"
>> +	help
>> +	  This option is selected by any driver which needs to access
>> +	  the core of vhost.
>> +if VHOST
>> +
> The description here is wrong, isn't it?
> VHOST and VHOST_RING are no longer selected, right?


For VHOST not currently.

For VHOST_RING, it was selected by CAIF, VOP and VDPASIM.

Thanks


>
>
>>   config VHOST_NET
>>   	tristate "Host kernel accelerator for virtio net"
>>   	depends on NET && EVENTFD && (TUN || !TUN) && (TAP || !TAP)
>> -	select VHOST
>>   	---help---
>>   	  This kernel module can be loaded in host kernel to accelerate
>>   	  guest networking with virtio_net. Not to be confused with virtio_net
>> @@ -14,7 +26,6 @@ config VHOST_NET
>>   config VHOST_SCSI
>>   	tristate "VHOST_SCSI TCM fabric driver"
>>   	depends on TARGET_CORE && EVENTFD
>> -	select VHOST
>>   	default n
>>   	---help---
>>   	Say M here to enable the vhost_scsi TCM fabric module
>> @@ -24,7 +35,6 @@ config VHOST_VSOCK
>>   	tristate "vhost virtio-vsock driver"
>>   	depends on VSOCKETS && EVENTFD
>>   	select VIRTIO_VSOCKETS_COMMON
>> -	select VHOST
>>   	default n
>>   	---help---
>>   	This kernel module can be loaded in the host kernel to provide AF_VSOCK
>> @@ -34,12 +44,6 @@ config VHOST_VSOCK
>>   	To compile this driver as a module, choose M here: the module will be called
>>   	vhost_vsock.
>>   
>> -config VHOST
>> -	tristate
>> -	---help---
>> -	  This option is selected by any driver which needs to access
>> -	  the core of vhost.
>> -
>>   config VHOST_CROSS_ENDIAN_LEGACY
>>   	bool "Cross-endian support for vhost"
>>   	default n
>> @@ -54,3 +58,4 @@ config VHOST_CROSS_ENDIAN_LEGACY
>>   	  adds some overhead, it is disabled by default.
>>   
>>   	  If unsure, say "N".
>> +endif
>> diff --git a/drivers/vhost/Kconfig.vringh b/drivers/vhost/Kconfig.vringh
>> deleted file mode 100644
>> index c1fe36a9b8d4..000000000000
>> --- a/drivers/vhost/Kconfig.vringh
>> +++ /dev/null
>> @@ -1,6 +0,0 @@
>> -# SPDX-License-Identifier: GPL-2.0-only
>> -config VHOST_RING
>> -	tristate
>> -	---help---
>> -	  This option is selected by any driver which needs to access
>> -	  the host side of a virtio ring.
>> -- 
>> 2.20.1
Michael S. Tsirkin April 1, 2020, 2:13 p.m. UTC | #8
On Wed, Apr 01, 2020 at 10:08:59PM +0800, Jason Wang wrote:
> 
> On 2020/4/1 下午9:22, Michael S. Tsirkin wrote:
> > On Thu, Mar 26, 2020 at 10:01:17PM +0800, Jason Wang wrote:
> > > Currently, CONFIG_VHOST depends on CONFIG_VIRTUALIZATION. But vhost is
> > > not necessarily for VM since it's a generic userspace and kernel
> > > communication protocol. Such dependency may prevent archs without
> > > virtualization support from using vhost.
> > > 
> > > To solve this, a dedicated vhost menu is created under drivers so
> > > CONIFG_VHOST can be decoupled out of CONFIG_VIRTUALIZATION.
> > > 
> > > While at it, also squash Kconfig.vringh into vhost Kconfig file. This
> > > avoids the trick of conditional inclusion from VOP or CAIF. Then it
> > > will be easier to introduce new vringh users and common dependency for
> > > both vringh and vhost.
> > > 
> > > Signed-off-by: Jason Wang <jasowang@redhat.com>
> > Is this just so we can drop the dependency on CONFIG_VIRTUALIZATION?
> > If yes what happens if we drop this patch?
> 
> 
> The problem is that then VHOST_RING must depend on CONFIG_VIRTUALIZATION
> (which enable VHOST_IOTLB) to work.
> 
> But it looks to me CAIF and VOP doesn't requires CONFIG_VIRTUALIZATION.

How about stubs for IOTLB so VHOST_RING does not depend on VHOST_IOTLB?
I'm pretty sure neither user of vringh can actually use IOTLB, it's a
software only thing.

> 
> > Given the impact it had I'd like to defer it till next release if
> > possible.
> > 
> > 
> > > ---
> > >   arch/arm/kvm/Kconfig         |  2 --
> > >   arch/arm64/kvm/Kconfig       |  2 --
> > >   arch/mips/kvm/Kconfig        |  2 --
> > >   arch/powerpc/kvm/Kconfig     |  2 --
> > >   arch/s390/kvm/Kconfig        |  4 ----
> > >   arch/x86/kvm/Kconfig         |  4 ----
> > >   drivers/Kconfig              |  2 ++
> > >   drivers/misc/mic/Kconfig     |  4 ----
> > >   drivers/net/caif/Kconfig     |  4 ----
> > >   drivers/vhost/Kconfig        | 23 ++++++++++++++---------
> > >   drivers/vhost/Kconfig.vringh |  6 ------
> > >   11 files changed, 16 insertions(+), 39 deletions(-)
> > >   delete mode 100644 drivers/vhost/Kconfig.vringh
> > > 
> > > diff --git a/arch/arm/kvm/Kconfig b/arch/arm/kvm/Kconfig
> > > index f591026347a5..be97393761bf 100644
> > > --- a/arch/arm/kvm/Kconfig
> > > +++ b/arch/arm/kvm/Kconfig
> > > @@ -54,6 +54,4 @@ config KVM_ARM_HOST
> > >   	---help---
> > >   	  Provides host support for ARM processors.
> > > -source "drivers/vhost/Kconfig"
> > > -
> > >   endif # VIRTUALIZATION
> > > diff --git a/arch/arm64/kvm/Kconfig b/arch/arm64/kvm/Kconfig
> > > index a475c68cbfec..449386d76441 100644
> > > --- a/arch/arm64/kvm/Kconfig
> > > +++ b/arch/arm64/kvm/Kconfig
> > > @@ -64,6 +64,4 @@ config KVM_ARM_PMU
> > >   config KVM_INDIRECT_VECTORS
> > >          def_bool KVM && (HARDEN_BRANCH_PREDICTOR || HARDEN_EL2_VECTORS)
> > > -source "drivers/vhost/Kconfig"
> > > -
> > >   endif # VIRTUALIZATION
> > > diff --git a/arch/mips/kvm/Kconfig b/arch/mips/kvm/Kconfig
> > > index eac25aef21e0..b91d145aa2d5 100644
> > > --- a/arch/mips/kvm/Kconfig
> > > +++ b/arch/mips/kvm/Kconfig
> > > @@ -72,6 +72,4 @@ config KVM_MIPS_DEBUG_COP0_COUNTERS
> > >   	  If unsure, say N.
> > > -source "drivers/vhost/Kconfig"
> > > -
> > >   endif # VIRTUALIZATION
> > > diff --git a/arch/powerpc/kvm/Kconfig b/arch/powerpc/kvm/Kconfig
> > > index 711fca9bc6f0..12885eda324e 100644
> > > --- a/arch/powerpc/kvm/Kconfig
> > > +++ b/arch/powerpc/kvm/Kconfig
> > > @@ -204,6 +204,4 @@ config KVM_XIVE
> > >   	default y
> > >   	depends on KVM_XICS && PPC_XIVE_NATIVE && KVM_BOOK3S_HV_POSSIBLE
> > > -source "drivers/vhost/Kconfig"
> > > -
> > >   endif # VIRTUALIZATION
> > > diff --git a/arch/s390/kvm/Kconfig b/arch/s390/kvm/Kconfig
> > > index d3db3d7ed077..def3b60f1fe8 100644
> > > --- a/arch/s390/kvm/Kconfig
> > > +++ b/arch/s390/kvm/Kconfig
> > > @@ -55,8 +55,4 @@ config KVM_S390_UCONTROL
> > >   	  If unsure, say N.
> > > -# OK, it's a little counter-intuitive to do this, but it puts it neatly under
> > > -# the virtualization menu.
> > > -source "drivers/vhost/Kconfig"
> > > -
> > >   endif # VIRTUALIZATION
> > > diff --git a/arch/x86/kvm/Kconfig b/arch/x86/kvm/Kconfig
> > > index 991019d5eee1..0dfe70e17af9 100644
> > > --- a/arch/x86/kvm/Kconfig
> > > +++ b/arch/x86/kvm/Kconfig
> > > @@ -94,8 +94,4 @@ config KVM_MMU_AUDIT
> > >   	 This option adds a R/W kVM module parameter 'mmu_audit', which allows
> > >   	 auditing of KVM MMU events at runtime.
> > > -# OK, it's a little counter-intuitive to do this, but it puts it neatly under
> > > -# the virtualization menu.
> > > -source "drivers/vhost/Kconfig"
> > > -
> > >   endif # VIRTUALIZATION
> > > diff --git a/drivers/Kconfig b/drivers/Kconfig
> > > index 8befa53f43be..7a6d8b2b68b4 100644
> > > --- a/drivers/Kconfig
> > > +++ b/drivers/Kconfig
> > > @@ -138,6 +138,8 @@ source "drivers/virt/Kconfig"
> > >   source "drivers/virtio/Kconfig"
> > > +source "drivers/vhost/Kconfig"
> > > +
> > >   source "drivers/hv/Kconfig"
> > >   source "drivers/xen/Kconfig"
> > > diff --git a/drivers/misc/mic/Kconfig b/drivers/misc/mic/Kconfig
> > > index b6841ba6d922..8f201d019f5a 100644
> > > --- a/drivers/misc/mic/Kconfig
> > > +++ b/drivers/misc/mic/Kconfig
> > > @@ -133,8 +133,4 @@ config VOP
> > >   	  OS and tools for MIC to use with this driver are available from
> > >   	  <http://software.intel.com/en-us/mic-developer>.
> > > -if VOP
> > > -source "drivers/vhost/Kconfig.vringh"
> > > -endif
> > > -
> > >   endmenu
> > > diff --git a/drivers/net/caif/Kconfig b/drivers/net/caif/Kconfig
> > > index e74e2bb61236..9db0570c5beb 100644
> > > --- a/drivers/net/caif/Kconfig
> > > +++ b/drivers/net/caif/Kconfig
> > > @@ -58,8 +58,4 @@ config CAIF_VIRTIO
> > >   	---help---
> > >   	  The CAIF driver for CAIF over Virtio.
> > > -if CAIF_VIRTIO
> > > -source "drivers/vhost/Kconfig.vringh"
> > > -endif
> > > -
> > >   endif # CAIF_DRIVERS
> > > diff --git a/drivers/vhost/Kconfig b/drivers/vhost/Kconfig
> > > index 3d03ccbd1adc..4aef10a54cd1 100644
> > > --- a/drivers/vhost/Kconfig
> > > +++ b/drivers/vhost/Kconfig
> > > @@ -1,8 +1,20 @@
> > >   # SPDX-License-Identifier: GPL-2.0-only
> > > +config VHOST_RING
> > > +	tristate
> > > +	help
> > > +	  This option is selected by any driver which needs to access
> > > +	  the host side of a virtio ring.
> > > +
> > > +menuconfig VHOST
> > > +	tristate "Host kernel accelerator for virtio (VHOST)"
> > > +	help
> > > +	  This option is selected by any driver which needs to access
> > > +	  the core of vhost.
> > > +if VHOST
> > > +
> > The description here is wrong, isn't it?
> > VHOST and VHOST_RING are no longer selected, right?
> 
> 
> For VHOST not currently.

Can we just bring it back and select it?

> For VHOST_RING, it was selected by CAIF, VOP and VDPASIM.
> 
> Thanks
> 
> 
> > 
> > 
> > >   config VHOST_NET
> > >   	tristate "Host kernel accelerator for virtio net"
> > >   	depends on NET && EVENTFD && (TUN || !TUN) && (TAP || !TAP)
> > > -	select VHOST
> > >   	---help---
> > >   	  This kernel module can be loaded in host kernel to accelerate
> > >   	  guest networking with virtio_net. Not to be confused with virtio_net
> > > @@ -14,7 +26,6 @@ config VHOST_NET
> > >   config VHOST_SCSI
> > >   	tristate "VHOST_SCSI TCM fabric driver"
> > >   	depends on TARGET_CORE && EVENTFD
> > > -	select VHOST
> > >   	default n
> > >   	---help---
> > >   	Say M here to enable the vhost_scsi TCM fabric module
> > > @@ -24,7 +35,6 @@ config VHOST_VSOCK
> > >   	tristate "vhost virtio-vsock driver"
> > >   	depends on VSOCKETS && EVENTFD
> > >   	select VIRTIO_VSOCKETS_COMMON
> > > -	select VHOST
> > >   	default n
> > >   	---help---
> > >   	This kernel module can be loaded in the host kernel to provide AF_VSOCK
> > > @@ -34,12 +44,6 @@ config VHOST_VSOCK
> > >   	To compile this driver as a module, choose M here: the module will be called
> > >   	vhost_vsock.
> > > -config VHOST
> > > -	tristate
> > > -	---help---
> > > -	  This option is selected by any driver which needs to access
> > > -	  the core of vhost.
> > > -
> > >   config VHOST_CROSS_ENDIAN_LEGACY
> > >   	bool "Cross-endian support for vhost"
> > >   	default n
> > > @@ -54,3 +58,4 @@ config VHOST_CROSS_ENDIAN_LEGACY
> > >   	  adds some overhead, it is disabled by default.
> > >   	  If unsure, say "N".
> > > +endif
> > > diff --git a/drivers/vhost/Kconfig.vringh b/drivers/vhost/Kconfig.vringh
> > > deleted file mode 100644
> > > index c1fe36a9b8d4..000000000000
> > > --- a/drivers/vhost/Kconfig.vringh
> > > +++ /dev/null
> > > @@ -1,6 +0,0 @@
> > > -# SPDX-License-Identifier: GPL-2.0-only
> > > -config VHOST_RING
> > > -	tristate
> > > -	---help---
> > > -	  This option is selected by any driver which needs to access
> > > -	  the host side of a virtio ring.
> > > -- 
> > > 2.20.1
Jason Wang April 1, 2020, 2:13 p.m. UTC | #9
On 2020/4/1 下午9:02, Christian Borntraeger wrote:
>
> On 01.04.20 14:56, Christian Borntraeger wrote:
>> On 01.04.20 14:50, Jason Wang wrote:
>>> On 2020/4/1 下午7:21, Christian Borntraeger wrote:
>>>> On 26.03.20 15:01, Jason Wang wrote:
>>>>> Currently, CONFIG_VHOST depends on CONFIG_VIRTUALIZATION. But vhost is
>>>>> not necessarily for VM since it's a generic userspace and kernel
>>>>> communication protocol. Such dependency may prevent archs without
>>>>> virtualization support from using vhost.
>>>>>
>>>>> To solve this, a dedicated vhost menu is created under drivers so
>>>>> CONIFG_VHOST can be decoupled out of CONFIG_VIRTUALIZATION.
>>>> FWIW, this now results in vhost not being build with defconfig kernels (in todays
>>>> linux-next).
>>>>
>>> Hi Christian:
>>>
>>> Did you meet it even with this commit https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git/commit/?id=a4be40cbcedba9b5b714f3c95182e8a45176e42d?
>> I simply used linux-next. The defconfig does NOT contain CONFIG_VHOST and therefore CONFIG_VHOST_NET and friends
>> can not be selected.
>>
>> $ git checkout next-20200401
>> $ make defconfig
>>    HOSTCC  scripts/basic/fixdep
>>    HOSTCC  scripts/kconfig/conf.o
>>    HOSTCC  scripts/kconfig/confdata.o
>>    HOSTCC  scripts/kconfig/expr.o
>>    LEX     scripts/kconfig/lexer.lex.c
>>    YACC    scripts/kconfig/parser.tab.[ch]
>>    HOSTCC  scripts/kconfig/lexer.lex.o
>>    HOSTCC  scripts/kconfig/parser.tab.o
>>    HOSTCC  scripts/kconfig/preprocess.o
>>    HOSTCC  scripts/kconfig/symbol.o
>>    HOSTCC  scripts/kconfig/util.o
>>    HOSTLD  scripts/kconfig/conf
>> *** Default configuration is based on 'x86_64_defconfig'
>> #
>> # configuration written to .config
>> #
>>
>> $ grep VHOST .config
>> # CONFIG_VHOST is not set
>>
>>   
>>> If yes, what's your build config looks like?
>>>
>>> Thanks
> This was x86. Not sure if that did work before.
> On s390 this is definitely a regression as the defconfig files
> for s390 do select VHOST_NET
>
> grep VHOST arch/s390/configs/*
> arch/s390/configs/debug_defconfig:CONFIG_VHOST_NET=m
> arch/s390/configs/debug_defconfig:CONFIG_VHOST_VSOCK=m
> arch/s390/configs/defconfig:CONFIG_VHOST_NET=m
> arch/s390/configs/defconfig:CONFIG_VHOST_VSOCK=m
>
> and this worked with 5.6, but does not work with next. Just adding
> CONFIG_VHOST=m to the defconfig solves the issue, something like


Right, I think we probably need

1) add CONFIG_VHOST=m to all defconfigs that enables 
CONFIG_VHOST_NET/VSOCK/SCSI.

or

2) don't use menuconfig for CONFIG_VHOST, let NET/SCSI/VDPA just select it.

Thanks


>
> ---
>   arch/s390/configs/debug_defconfig | 5 +++--
>   arch/s390/configs/defconfig       | 5 +++--
>   2 files changed, 6 insertions(+), 4 deletions(-)
>
> diff --git a/arch/s390/configs/debug_defconfig b/arch/s390/configs/debug_defconfig
> index 46038bc58c9e..0b83274341ce 100644
> --- a/arch/s390/configs/debug_defconfig
> +++ b/arch/s390/configs/debug_defconfig
> @@ -57,8 +57,6 @@ CONFIG_PROTECTED_VIRTUALIZATION_GUEST=y
>   CONFIG_CMM=m
>   CONFIG_APPLDATA_BASE=y
>   CONFIG_KVM=m
> -CONFIG_VHOST_NET=m
> -CONFIG_VHOST_VSOCK=m
>   CONFIG_OPROFILE=m
>   CONFIG_KPROBES=y
>   CONFIG_JUMP_LABEL=y
> @@ -561,6 +559,9 @@ CONFIG_VFIO_MDEV_DEVICE=m
>   CONFIG_VIRTIO_PCI=m
>   CONFIG_VIRTIO_BALLOON=m
>   CONFIG_VIRTIO_INPUT=y
> +CONFIG_VHOST=m
> +CONFIG_VHOST_NET=m
> +CONFIG_VHOST_VSOCK=m
>   CONFIG_S390_CCW_IOMMU=y
>   CONFIG_S390_AP_IOMMU=y
>   CONFIG_EXT4_FS=y
> diff --git a/arch/s390/configs/defconfig b/arch/s390/configs/defconfig
> index 7cd0648c1f4e..39e69c4e8cf7 100644
> --- a/arch/s390/configs/defconfig
> +++ b/arch/s390/configs/defconfig
> @@ -57,8 +57,6 @@ CONFIG_PROTECTED_VIRTUALIZATION_GUEST=y
>   CONFIG_CMM=m
>   CONFIG_APPLDATA_BASE=y
>   CONFIG_KVM=m
> -CONFIG_VHOST_NET=m
> -CONFIG_VHOST_VSOCK=m
>   CONFIG_OPROFILE=m
>   CONFIG_KPROBES=y
>   CONFIG_JUMP_LABEL=y
> @@ -557,6 +555,9 @@ CONFIG_VFIO_MDEV_DEVICE=m
>   CONFIG_VIRTIO_PCI=m
>   CONFIG_VIRTIO_BALLOON=m
>   CONFIG_VIRTIO_INPUT=y
> +CONFIG_VHOST=m
> +CONFIG_VHOST_NET=m
> +CONFIG_VHOST_VSOCK=m
>   CONFIG_S390_CCW_IOMMU=y
>   CONFIG_S390_AP_IOMMU=y
>   CONFIG_EXT4_FS=y
Michael S. Tsirkin April 1, 2020, 2:18 p.m. UTC | #10
On Wed, Apr 01, 2020 at 10:13:29PM +0800, Jason Wang wrote:
> 
> On 2020/4/1 下午9:02, Christian Borntraeger wrote:
> > 
> > On 01.04.20 14:56, Christian Borntraeger wrote:
> > > On 01.04.20 14:50, Jason Wang wrote:
> > > > On 2020/4/1 下午7:21, Christian Borntraeger wrote:
> > > > > On 26.03.20 15:01, Jason Wang wrote:
> > > > > > Currently, CONFIG_VHOST depends on CONFIG_VIRTUALIZATION. But vhost is
> > > > > > not necessarily for VM since it's a generic userspace and kernel
> > > > > > communication protocol. Such dependency may prevent archs without
> > > > > > virtualization support from using vhost.
> > > > > > 
> > > > > > To solve this, a dedicated vhost menu is created under drivers so
> > > > > > CONIFG_VHOST can be decoupled out of CONFIG_VIRTUALIZATION.
> > > > > FWIW, this now results in vhost not being build with defconfig kernels (in todays
> > > > > linux-next).
> > > > > 
> > > > Hi Christian:
> > > > 
> > > > Did you meet it even with this commit https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git/commit/?id=a4be40cbcedba9b5b714f3c95182e8a45176e42d?
> > > I simply used linux-next. The defconfig does NOT contain CONFIG_VHOST and therefore CONFIG_VHOST_NET and friends
> > > can not be selected.
> > > 
> > > $ git checkout next-20200401
> > > $ make defconfig
> > >    HOSTCC  scripts/basic/fixdep
> > >    HOSTCC  scripts/kconfig/conf.o
> > >    HOSTCC  scripts/kconfig/confdata.o
> > >    HOSTCC  scripts/kconfig/expr.o
> > >    LEX     scripts/kconfig/lexer.lex.c
> > >    YACC    scripts/kconfig/parser.tab.[ch]
> > >    HOSTCC  scripts/kconfig/lexer.lex.o
> > >    HOSTCC  scripts/kconfig/parser.tab.o
> > >    HOSTCC  scripts/kconfig/preprocess.o
> > >    HOSTCC  scripts/kconfig/symbol.o
> > >    HOSTCC  scripts/kconfig/util.o
> > >    HOSTLD  scripts/kconfig/conf
> > > *** Default configuration is based on 'x86_64_defconfig'
> > > #
> > > # configuration written to .config
> > > #
> > > 
> > > $ grep VHOST .config
> > > # CONFIG_VHOST is not set
> > > 
> > > > If yes, what's your build config looks like?
> > > > 
> > > > Thanks
> > This was x86. Not sure if that did work before.
> > On s390 this is definitely a regression as the defconfig files
> > for s390 do select VHOST_NET
> > 
> > grep VHOST arch/s390/configs/*
> > arch/s390/configs/debug_defconfig:CONFIG_VHOST_NET=m
> > arch/s390/configs/debug_defconfig:CONFIG_VHOST_VSOCK=m
> > arch/s390/configs/defconfig:CONFIG_VHOST_NET=m
> > arch/s390/configs/defconfig:CONFIG_VHOST_VSOCK=m
> > 
> > and this worked with 5.6, but does not work with next. Just adding
> > CONFIG_VHOST=m to the defconfig solves the issue, something like
> 
> 
> Right, I think we probably need
> 
> 1) add CONFIG_VHOST=m to all defconfigs that enables
> CONFIG_VHOST_NET/VSOCK/SCSI.
> 
> or
> 
> 2) don't use menuconfig for CONFIG_VHOST, let NET/SCSI/VDPA just select it.
> 
> Thanks

I think I prefer 2, but does it auto-select VHOST_IOTLB then?
Generally what was the reason to drop select VHOST from devices?


> 
> > 
> > ---
> >   arch/s390/configs/debug_defconfig | 5 +++--
> >   arch/s390/configs/defconfig       | 5 +++--
> >   2 files changed, 6 insertions(+), 4 deletions(-)
> > 
> > diff --git a/arch/s390/configs/debug_defconfig b/arch/s390/configs/debug_defconfig
> > index 46038bc58c9e..0b83274341ce 100644
> > --- a/arch/s390/configs/debug_defconfig
> > +++ b/arch/s390/configs/debug_defconfig
> > @@ -57,8 +57,6 @@ CONFIG_PROTECTED_VIRTUALIZATION_GUEST=y
> >   CONFIG_CMM=m
> >   CONFIG_APPLDATA_BASE=y
> >   CONFIG_KVM=m
> > -CONFIG_VHOST_NET=m
> > -CONFIG_VHOST_VSOCK=m
> >   CONFIG_OPROFILE=m
> >   CONFIG_KPROBES=y
> >   CONFIG_JUMP_LABEL=y
> > @@ -561,6 +559,9 @@ CONFIG_VFIO_MDEV_DEVICE=m
> >   CONFIG_VIRTIO_PCI=m
> >   CONFIG_VIRTIO_BALLOON=m
> >   CONFIG_VIRTIO_INPUT=y
> > +CONFIG_VHOST=m
> > +CONFIG_VHOST_NET=m
> > +CONFIG_VHOST_VSOCK=m
> >   CONFIG_S390_CCW_IOMMU=y
> >   CONFIG_S390_AP_IOMMU=y
> >   CONFIG_EXT4_FS=y
> > diff --git a/arch/s390/configs/defconfig b/arch/s390/configs/defconfig
> > index 7cd0648c1f4e..39e69c4e8cf7 100644
> > --- a/arch/s390/configs/defconfig
> > +++ b/arch/s390/configs/defconfig
> > @@ -57,8 +57,6 @@ CONFIG_PROTECTED_VIRTUALIZATION_GUEST=y
> >   CONFIG_CMM=m
> >   CONFIG_APPLDATA_BASE=y
> >   CONFIG_KVM=m
> > -CONFIG_VHOST_NET=m
> > -CONFIG_VHOST_VSOCK=m
> >   CONFIG_OPROFILE=m
> >   CONFIG_KPROBES=y
> >   CONFIG_JUMP_LABEL=y
> > @@ -557,6 +555,9 @@ CONFIG_VFIO_MDEV_DEVICE=m
> >   CONFIG_VIRTIO_PCI=m
> >   CONFIG_VIRTIO_BALLOON=m
> >   CONFIG_VIRTIO_INPUT=y
> > +CONFIG_VHOST=m
> > +CONFIG_VHOST_NET=m
> > +CONFIG_VHOST_VSOCK=m
> >   CONFIG_S390_CCW_IOMMU=y
> >   CONFIG_S390_AP_IOMMU=y
> >   CONFIG_EXT4_FS=y
Michael S. Tsirkin April 1, 2020, 2:27 p.m. UTC | #11
On Wed, Apr 01, 2020 at 10:13:29PM +0800, Jason Wang wrote:
> 
> On 2020/4/1 下午9:02, Christian Borntraeger wrote:
> > 
> > On 01.04.20 14:56, Christian Borntraeger wrote:
> > > On 01.04.20 14:50, Jason Wang wrote:
> > > > On 2020/4/1 下午7:21, Christian Borntraeger wrote:
> > > > > On 26.03.20 15:01, Jason Wang wrote:
> > > > > > Currently, CONFIG_VHOST depends on CONFIG_VIRTUALIZATION. But vhost is
> > > > > > not necessarily for VM since it's a generic userspace and kernel
> > > > > > communication protocol. Such dependency may prevent archs without
> > > > > > virtualization support from using vhost.
> > > > > > 
> > > > > > To solve this, a dedicated vhost menu is created under drivers so
> > > > > > CONIFG_VHOST can be decoupled out of CONFIG_VIRTUALIZATION.
> > > > > FWIW, this now results in vhost not being build with defconfig kernels (in todays
> > > > > linux-next).
> > > > > 
> > > > Hi Christian:
> > > > 
> > > > Did you meet it even with this commit https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git/commit/?id=a4be40cbcedba9b5b714f3c95182e8a45176e42d?
> > > I simply used linux-next. The defconfig does NOT contain CONFIG_VHOST and therefore CONFIG_VHOST_NET and friends
> > > can not be selected.
> > > 
> > > $ git checkout next-20200401
> > > $ make defconfig
> > >    HOSTCC  scripts/basic/fixdep
> > >    HOSTCC  scripts/kconfig/conf.o
> > >    HOSTCC  scripts/kconfig/confdata.o
> > >    HOSTCC  scripts/kconfig/expr.o
> > >    LEX     scripts/kconfig/lexer.lex.c
> > >    YACC    scripts/kconfig/parser.tab.[ch]
> > >    HOSTCC  scripts/kconfig/lexer.lex.o
> > >    HOSTCC  scripts/kconfig/parser.tab.o
> > >    HOSTCC  scripts/kconfig/preprocess.o
> > >    HOSTCC  scripts/kconfig/symbol.o
> > >    HOSTCC  scripts/kconfig/util.o
> > >    HOSTLD  scripts/kconfig/conf
> > > *** Default configuration is based on 'x86_64_defconfig'
> > > #
> > > # configuration written to .config
> > > #
> > > 
> > > $ grep VHOST .config
> > > # CONFIG_VHOST is not set
> > > 
> > > > If yes, what's your build config looks like?
> > > > 
> > > > Thanks
> > This was x86. Not sure if that did work before.
> > On s390 this is definitely a regression as the defconfig files
> > for s390 do select VHOST_NET
> > 
> > grep VHOST arch/s390/configs/*
> > arch/s390/configs/debug_defconfig:CONFIG_VHOST_NET=m
> > arch/s390/configs/debug_defconfig:CONFIG_VHOST_VSOCK=m
> > arch/s390/configs/defconfig:CONFIG_VHOST_NET=m
> > arch/s390/configs/defconfig:CONFIG_VHOST_VSOCK=m
> > 
> > and this worked with 5.6, but does not work with next. Just adding
> > CONFIG_VHOST=m to the defconfig solves the issue, something like
> 
> 
> Right, I think we probably need
> 
> 1) add CONFIG_VHOST=m to all defconfigs that enables
> CONFIG_VHOST_NET/VSOCK/SCSI.
> 
> or
> 
> 2) don't use menuconfig for CONFIG_VHOST, let NET/SCSI/VDPA just select it.
> 
> Thanks

OK I tried this:

diff --git a/drivers/vhost/Kconfig b/drivers/vhost/Kconfig
index 2523a1d4290a..a314b900d479 100644
--- a/drivers/vhost/Kconfig
+++ b/drivers/vhost/Kconfig
@@ -19,11 +19,10 @@ menuconfig VHOST
 	  This option is selected by any driver which needs to access
 	  the core of vhost.
 
-if VHOST
-
 config VHOST_NET
 	tristate "Host kernel accelerator for virtio net"
 	depends on NET && EVENTFD && (TUN || !TUN) && (TAP || !TAP)
+	select VHOST
 	---help---
 	  This kernel module can be loaded in host kernel to accelerate
 	  guest networking with virtio_net. Not to be confused with virtio_net
@@ -35,6 +34,7 @@ config VHOST_NET
 config VHOST_SCSI
 	tristate "VHOST_SCSI TCM fabric driver"
 	depends on TARGET_CORE && EVENTFD
+	select VHOST
 	default n
 	---help---
 	Say M here to enable the vhost_scsi TCM fabric module
@@ -44,6 +44,7 @@ config VHOST_VSOCK
 	tristate "vhost virtio-vsock driver"
 	depends on VSOCKETS && EVENTFD
 	select VIRTIO_VSOCKETS_COMMON
+	select VHOST
 	default n
 	---help---
 	This kernel module can be loaded in the host kernel to provide AF_VSOCK
@@ -57,6 +58,7 @@ config VHOST_VDPA
 	tristate "Vhost driver for vDPA-based backend"
 	depends on EVENTFD
 	select VDPA
+	select VHOST
 	help
 	  This kernel module can be loaded in host kernel to accelerate
 	  guest virtio devices with the vDPA-based backends.
@@ -78,5 +80,3 @@ config VHOST_CROSS_ENDIAN_LEGACY
 	  adds some overhead, it is disabled by default.
 
 	  If unsure, say "N".
-
-endif


But now CONFIG_VHOST is always "y", never "m".
Which I think will make it a built-in.
Didn't figure out why yet.
Jason Wang April 1, 2020, 2:29 p.m. UTC | #12
On 2020/4/1 下午10:13, Michael S. Tsirkin wrote:
> On Wed, Apr 01, 2020 at 10:08:59PM +0800, Jason Wang wrote:
>> On 2020/4/1 下午9:22, Michael S. Tsirkin wrote:
>>> On Thu, Mar 26, 2020 at 10:01:17PM +0800, Jason Wang wrote:
>>>> Currently, CONFIG_VHOST depends on CONFIG_VIRTUALIZATION. But vhost is
>>>> not necessarily for VM since it's a generic userspace and kernel
>>>> communication protocol. Such dependency may prevent archs without
>>>> virtualization support from using vhost.
>>>>
>>>> To solve this, a dedicated vhost menu is created under drivers so
>>>> CONIFG_VHOST can be decoupled out of CONFIG_VIRTUALIZATION.
>>>>
>>>> While at it, also squash Kconfig.vringh into vhost Kconfig file. This
>>>> avoids the trick of conditional inclusion from VOP or CAIF. Then it
>>>> will be easier to introduce new vringh users and common dependency for
>>>> both vringh and vhost.
>>>>
>>>> Signed-off-by: Jason Wang <jasowang@redhat.com>
>>> Is this just so we can drop the dependency on CONFIG_VIRTUALIZATION?
>>> If yes what happens if we drop this patch?
>>
>> The problem is that then VHOST_RING must depend on CONFIG_VIRTUALIZATION
>> (which enable VHOST_IOTLB) to work.
>>
>> But it looks to me CAIF and VOP doesn't requires CONFIG_VIRTUALIZATION.
> How about stubs for IOTLB so VHOST_RING does not depend on VHOST_IOTLB?


That could work.


> I'm pretty sure neither user of vringh can actually use IOTLB, it's a
> software only thing.


Right.


>
>>> Given the impact it had I'd like to defer it till next release if
>>> possible.
>>>
>>>
>>>> ---
>>>>    arch/arm/kvm/Kconfig         |  2 --
>>>>    arch/arm64/kvm/Kconfig       |  2 --
>>>>    arch/mips/kvm/Kconfig        |  2 --
>>>>    arch/powerpc/kvm/Kconfig     |  2 --
>>>>    arch/s390/kvm/Kconfig        |  4 ----
>>>>    arch/x86/kvm/Kconfig         |  4 ----
>>>>    drivers/Kconfig              |  2 ++
>>>>    drivers/misc/mic/Kconfig     |  4 ----
>>>>    drivers/net/caif/Kconfig     |  4 ----
>>>>    drivers/vhost/Kconfig        | 23 ++++++++++++++---------
>>>>    drivers/vhost/Kconfig.vringh |  6 ------
>>>>    11 files changed, 16 insertions(+), 39 deletions(-)
>>>>    delete mode 100644 drivers/vhost/Kconfig.vringh
>>>>
>>>> diff --git a/arch/arm/kvm/Kconfig b/arch/arm/kvm/Kconfig
>>>> index f591026347a5..be97393761bf 100644
>>>> --- a/arch/arm/kvm/Kconfig
>>>> +++ b/arch/arm/kvm/Kconfig
>>>> @@ -54,6 +54,4 @@ config KVM_ARM_HOST
>>>>    	---help---
>>>>    	  Provides host support for ARM processors.
>>>> -source "drivers/vhost/Kconfig"
>>>> -
>>>>    endif # VIRTUALIZATION
>>>> diff --git a/arch/arm64/kvm/Kconfig b/arch/arm64/kvm/Kconfig
>>>> index a475c68cbfec..449386d76441 100644
>>>> --- a/arch/arm64/kvm/Kconfig
>>>> +++ b/arch/arm64/kvm/Kconfig
>>>> @@ -64,6 +64,4 @@ config KVM_ARM_PMU
>>>>    config KVM_INDIRECT_VECTORS
>>>>           def_bool KVM && (HARDEN_BRANCH_PREDICTOR || HARDEN_EL2_VECTORS)
>>>> -source "drivers/vhost/Kconfig"
>>>> -
>>>>    endif # VIRTUALIZATION
>>>> diff --git a/arch/mips/kvm/Kconfig b/arch/mips/kvm/Kconfig
>>>> index eac25aef21e0..b91d145aa2d5 100644
>>>> --- a/arch/mips/kvm/Kconfig
>>>> +++ b/arch/mips/kvm/Kconfig
>>>> @@ -72,6 +72,4 @@ config KVM_MIPS_DEBUG_COP0_COUNTERS
>>>>    	  If unsure, say N.
>>>> -source "drivers/vhost/Kconfig"
>>>> -
>>>>    endif # VIRTUALIZATION
>>>> diff --git a/arch/powerpc/kvm/Kconfig b/arch/powerpc/kvm/Kconfig
>>>> index 711fca9bc6f0..12885eda324e 100644
>>>> --- a/arch/powerpc/kvm/Kconfig
>>>> +++ b/arch/powerpc/kvm/Kconfig
>>>> @@ -204,6 +204,4 @@ config KVM_XIVE
>>>>    	default y
>>>>    	depends on KVM_XICS && PPC_XIVE_NATIVE && KVM_BOOK3S_HV_POSSIBLE
>>>> -source "drivers/vhost/Kconfig"
>>>> -
>>>>    endif # VIRTUALIZATION
>>>> diff --git a/arch/s390/kvm/Kconfig b/arch/s390/kvm/Kconfig
>>>> index d3db3d7ed077..def3b60f1fe8 100644
>>>> --- a/arch/s390/kvm/Kconfig
>>>> +++ b/arch/s390/kvm/Kconfig
>>>> @@ -55,8 +55,4 @@ config KVM_S390_UCONTROL
>>>>    	  If unsure, say N.
>>>> -# OK, it's a little counter-intuitive to do this, but it puts it neatly under
>>>> -# the virtualization menu.
>>>> -source "drivers/vhost/Kconfig"
>>>> -
>>>>    endif # VIRTUALIZATION
>>>> diff --git a/arch/x86/kvm/Kconfig b/arch/x86/kvm/Kconfig
>>>> index 991019d5eee1..0dfe70e17af9 100644
>>>> --- a/arch/x86/kvm/Kconfig
>>>> +++ b/arch/x86/kvm/Kconfig
>>>> @@ -94,8 +94,4 @@ config KVM_MMU_AUDIT
>>>>    	 This option adds a R/W kVM module parameter 'mmu_audit', which allows
>>>>    	 auditing of KVM MMU events at runtime.
>>>> -# OK, it's a little counter-intuitive to do this, but it puts it neatly under
>>>> -# the virtualization menu.
>>>> -source "drivers/vhost/Kconfig"
>>>> -
>>>>    endif # VIRTUALIZATION
>>>> diff --git a/drivers/Kconfig b/drivers/Kconfig
>>>> index 8befa53f43be..7a6d8b2b68b4 100644
>>>> --- a/drivers/Kconfig
>>>> +++ b/drivers/Kconfig
>>>> @@ -138,6 +138,8 @@ source "drivers/virt/Kconfig"
>>>>    source "drivers/virtio/Kconfig"
>>>> +source "drivers/vhost/Kconfig"
>>>> +
>>>>    source "drivers/hv/Kconfig"
>>>>    source "drivers/xen/Kconfig"
>>>> diff --git a/drivers/misc/mic/Kconfig b/drivers/misc/mic/Kconfig
>>>> index b6841ba6d922..8f201d019f5a 100644
>>>> --- a/drivers/misc/mic/Kconfig
>>>> +++ b/drivers/misc/mic/Kconfig
>>>> @@ -133,8 +133,4 @@ config VOP
>>>>    	  OS and tools for MIC to use with this driver are available from
>>>>    	  <http://software.intel.com/en-us/mic-developer>.
>>>> -if VOP
>>>> -source "drivers/vhost/Kconfig.vringh"
>>>> -endif
>>>> -
>>>>    endmenu
>>>> diff --git a/drivers/net/caif/Kconfig b/drivers/net/caif/Kconfig
>>>> index e74e2bb61236..9db0570c5beb 100644
>>>> --- a/drivers/net/caif/Kconfig
>>>> +++ b/drivers/net/caif/Kconfig
>>>> @@ -58,8 +58,4 @@ config CAIF_VIRTIO
>>>>    	---help---
>>>>    	  The CAIF driver for CAIF over Virtio.
>>>> -if CAIF_VIRTIO
>>>> -source "drivers/vhost/Kconfig.vringh"
>>>> -endif
>>>> -
>>>>    endif # CAIF_DRIVERS
>>>> diff --git a/drivers/vhost/Kconfig b/drivers/vhost/Kconfig
>>>> index 3d03ccbd1adc..4aef10a54cd1 100644
>>>> --- a/drivers/vhost/Kconfig
>>>> +++ b/drivers/vhost/Kconfig
>>>> @@ -1,8 +1,20 @@
>>>>    # SPDX-License-Identifier: GPL-2.0-only
>>>> +config VHOST_RING
>>>> +	tristate
>>>> +	help
>>>> +	  This option is selected by any driver which needs to access
>>>> +	  the host side of a virtio ring.
>>>> +
>>>> +menuconfig VHOST
>>>> +	tristate "Host kernel accelerator for virtio (VHOST)"
>>>> +	help
>>>> +	  This option is selected by any driver which needs to access
>>>> +	  the core of vhost.
>>>> +if VHOST
>>>> +
>>> The description here is wrong, isn't it?
>>> VHOST and VHOST_RING are no longer selected, right?
>>
>> For VHOST not currently.
> Can we just bring it back and select it?


Right, so if bring it back, we don't even need the stub.

How about something like attached?

Thanks


>
>> For VHOST_RING, it was selected by CAIF, VOP and VDPASIM.
>>
>> Thanks
>>
>>
>>>
>>>>    config VHOST_NET
>>>>    	tristate "Host kernel accelerator for virtio net"
>>>>    	depends on NET && EVENTFD && (TUN || !TUN) && (TAP || !TAP)
>>>> -	select VHOST
>>>>    	---help---
>>>>    	  This kernel module can be loaded in host kernel to accelerate
>>>>    	  guest networking with virtio_net. Not to be confused with virtio_net
>>>> @@ -14,7 +26,6 @@ config VHOST_NET
>>>>    config VHOST_SCSI
>>>>    	tristate "VHOST_SCSI TCM fabric driver"
>>>>    	depends on TARGET_CORE && EVENTFD
>>>> -	select VHOST
>>>>    	default n
>>>>    	---help---
>>>>    	Say M here to enable the vhost_scsi TCM fabric module
>>>> @@ -24,7 +35,6 @@ config VHOST_VSOCK
>>>>    	tristate "vhost virtio-vsock driver"
>>>>    	depends on VSOCKETS && EVENTFD
>>>>    	select VIRTIO_VSOCKETS_COMMON
>>>> -	select VHOST
>>>>    	default n
>>>>    	---help---
>>>>    	This kernel module can be loaded in the host kernel to provide AF_VSOCK
>>>> @@ -34,12 +44,6 @@ config VHOST_VSOCK
>>>>    	To compile this driver as a module, choose M here: the module will be called
>>>>    	vhost_vsock.
>>>> -config VHOST
>>>> -	tristate
>>>> -	---help---
>>>> -	  This option is selected by any driver which needs to access
>>>> -	  the core of vhost.
>>>> -
>>>>    config VHOST_CROSS_ENDIAN_LEGACY
>>>>    	bool "Cross-endian support for vhost"
>>>>    	default n
>>>> @@ -54,3 +58,4 @@ config VHOST_CROSS_ENDIAN_LEGACY
>>>>    	  adds some overhead, it is disabled by default.
>>>>    	  If unsure, say "N".
>>>> +endif
>>>> diff --git a/drivers/vhost/Kconfig.vringh b/drivers/vhost/Kconfig.vringh
>>>> deleted file mode 100644
>>>> index c1fe36a9b8d4..000000000000
>>>> --- a/drivers/vhost/Kconfig.vringh
>>>> +++ /dev/null
>>>> @@ -1,6 +0,0 @@
>>>> -# SPDX-License-Identifier: GPL-2.0-only
>>>> -config VHOST_RING
>>>> -	tristate
>>>> -	---help---
>>>> -	  This option is selected by any driver which needs to access
>>>> -	  the host side of a virtio ring.
>>>> -- 
>>>> 2.20.1
Michael S. Tsirkin April 1, 2020, 2:35 p.m. UTC | #13
On Wed, Apr 01, 2020 at 10:29:32PM +0800, Jason Wang wrote:
> 
> On 2020/4/1 下午10:13, Michael S. Tsirkin wrote:
> > On Wed, Apr 01, 2020 at 10:08:59PM +0800, Jason Wang wrote:
> > > On 2020/4/1 下午9:22, Michael S. Tsirkin wrote:
> > > > On Thu, Mar 26, 2020 at 10:01:17PM +0800, Jason Wang wrote:
> > > > > Currently, CONFIG_VHOST depends on CONFIG_VIRTUALIZATION. But vhost is
> > > > > not necessarily for VM since it's a generic userspace and kernel
> > > > > communication protocol. Such dependency may prevent archs without
> > > > > virtualization support from using vhost.
> > > > > 
> > > > > To solve this, a dedicated vhost menu is created under drivers so
> > > > > CONIFG_VHOST can be decoupled out of CONFIG_VIRTUALIZATION.
> > > > > 
> > > > > While at it, also squash Kconfig.vringh into vhost Kconfig file. This
> > > > > avoids the trick of conditional inclusion from VOP or CAIF. Then it
> > > > > will be easier to introduce new vringh users and common dependency for
> > > > > both vringh and vhost.
> > > > > 
> > > > > Signed-off-by: Jason Wang <jasowang@redhat.com>
> > > > Is this just so we can drop the dependency on CONFIG_VIRTUALIZATION?
> > > > If yes what happens if we drop this patch?
> > > 
> > > The problem is that then VHOST_RING must depend on CONFIG_VIRTUALIZATION
> > > (which enable VHOST_IOTLB) to work.
> > > 
> > > But it looks to me CAIF and VOP doesn't requires CONFIG_VIRTUALIZATION.
> > How about stubs for IOTLB so VHOST_RING does not depend on VHOST_IOTLB?
> 
> 
> That could work.
> 
> 
> > I'm pretty sure neither user of vringh can actually use IOTLB, it's a
> > software only thing.
> 
> 
> Right.
> 
> 
> > 
> > > > Given the impact it had I'd like to defer it till next release if
> > > > possible.
> > > > 
> > > > 
> > > > > ---
> > > > >    arch/arm/kvm/Kconfig         |  2 --
> > > > >    arch/arm64/kvm/Kconfig       |  2 --
> > > > >    arch/mips/kvm/Kconfig        |  2 --
> > > > >    arch/powerpc/kvm/Kconfig     |  2 --
> > > > >    arch/s390/kvm/Kconfig        |  4 ----
> > > > >    arch/x86/kvm/Kconfig         |  4 ----
> > > > >    drivers/Kconfig              |  2 ++
> > > > >    drivers/misc/mic/Kconfig     |  4 ----
> > > > >    drivers/net/caif/Kconfig     |  4 ----
> > > > >    drivers/vhost/Kconfig        | 23 ++++++++++++++---------
> > > > >    drivers/vhost/Kconfig.vringh |  6 ------
> > > > >    11 files changed, 16 insertions(+), 39 deletions(-)
> > > > >    delete mode 100644 drivers/vhost/Kconfig.vringh
> > > > > 
> > > > > diff --git a/arch/arm/kvm/Kconfig b/arch/arm/kvm/Kconfig
> > > > > index f591026347a5..be97393761bf 100644
> > > > > --- a/arch/arm/kvm/Kconfig
> > > > > +++ b/arch/arm/kvm/Kconfig
> > > > > @@ -54,6 +54,4 @@ config KVM_ARM_HOST
> > > > >    	---help---
> > > > >    	  Provides host support for ARM processors.
> > > > > -source "drivers/vhost/Kconfig"
> > > > > -
> > > > >    endif # VIRTUALIZATION
> > > > > diff --git a/arch/arm64/kvm/Kconfig b/arch/arm64/kvm/Kconfig
> > > > > index a475c68cbfec..449386d76441 100644
> > > > > --- a/arch/arm64/kvm/Kconfig
> > > > > +++ b/arch/arm64/kvm/Kconfig
> > > > > @@ -64,6 +64,4 @@ config KVM_ARM_PMU
> > > > >    config KVM_INDIRECT_VECTORS
> > > > >           def_bool KVM && (HARDEN_BRANCH_PREDICTOR || HARDEN_EL2_VECTORS)
> > > > > -source "drivers/vhost/Kconfig"
> > > > > -
> > > > >    endif # VIRTUALIZATION
> > > > > diff --git a/arch/mips/kvm/Kconfig b/arch/mips/kvm/Kconfig
> > > > > index eac25aef21e0..b91d145aa2d5 100644
> > > > > --- a/arch/mips/kvm/Kconfig
> > > > > +++ b/arch/mips/kvm/Kconfig
> > > > > @@ -72,6 +72,4 @@ config KVM_MIPS_DEBUG_COP0_COUNTERS
> > > > >    	  If unsure, say N.
> > > > > -source "drivers/vhost/Kconfig"
> > > > > -
> > > > >    endif # VIRTUALIZATION
> > > > > diff --git a/arch/powerpc/kvm/Kconfig b/arch/powerpc/kvm/Kconfig
> > > > > index 711fca9bc6f0..12885eda324e 100644
> > > > > --- a/arch/powerpc/kvm/Kconfig
> > > > > +++ b/arch/powerpc/kvm/Kconfig
> > > > > @@ -204,6 +204,4 @@ config KVM_XIVE
> > > > >    	default y
> > > > >    	depends on KVM_XICS && PPC_XIVE_NATIVE && KVM_BOOK3S_HV_POSSIBLE
> > > > > -source "drivers/vhost/Kconfig"
> > > > > -
> > > > >    endif # VIRTUALIZATION
> > > > > diff --git a/arch/s390/kvm/Kconfig b/arch/s390/kvm/Kconfig
> > > > > index d3db3d7ed077..def3b60f1fe8 100644
> > > > > --- a/arch/s390/kvm/Kconfig
> > > > > +++ b/arch/s390/kvm/Kconfig
> > > > > @@ -55,8 +55,4 @@ config KVM_S390_UCONTROL
> > > > >    	  If unsure, say N.
> > > > > -# OK, it's a little counter-intuitive to do this, but it puts it neatly under
> > > > > -# the virtualization menu.
> > > > > -source "drivers/vhost/Kconfig"
> > > > > -
> > > > >    endif # VIRTUALIZATION
> > > > > diff --git a/arch/x86/kvm/Kconfig b/arch/x86/kvm/Kconfig
> > > > > index 991019d5eee1..0dfe70e17af9 100644
> > > > > --- a/arch/x86/kvm/Kconfig
> > > > > +++ b/arch/x86/kvm/Kconfig
> > > > > @@ -94,8 +94,4 @@ config KVM_MMU_AUDIT
> > > > >    	 This option adds a R/W kVM module parameter 'mmu_audit', which allows
> > > > >    	 auditing of KVM MMU events at runtime.
> > > > > -# OK, it's a little counter-intuitive to do this, but it puts it neatly under
> > > > > -# the virtualization menu.
> > > > > -source "drivers/vhost/Kconfig"
> > > > > -
> > > > >    endif # VIRTUALIZATION
> > > > > diff --git a/drivers/Kconfig b/drivers/Kconfig
> > > > > index 8befa53f43be..7a6d8b2b68b4 100644
> > > > > --- a/drivers/Kconfig
> > > > > +++ b/drivers/Kconfig
> > > > > @@ -138,6 +138,8 @@ source "drivers/virt/Kconfig"
> > > > >    source "drivers/virtio/Kconfig"
> > > > > +source "drivers/vhost/Kconfig"
> > > > > +
> > > > >    source "drivers/hv/Kconfig"
> > > > >    source "drivers/xen/Kconfig"
> > > > > diff --git a/drivers/misc/mic/Kconfig b/drivers/misc/mic/Kconfig
> > > > > index b6841ba6d922..8f201d019f5a 100644
> > > > > --- a/drivers/misc/mic/Kconfig
> > > > > +++ b/drivers/misc/mic/Kconfig
> > > > > @@ -133,8 +133,4 @@ config VOP
> > > > >    	  OS and tools for MIC to use with this driver are available from
> > > > >    	  <http://software.intel.com/en-us/mic-developer>.
> > > > > -if VOP
> > > > > -source "drivers/vhost/Kconfig.vringh"
> > > > > -endif
> > > > > -
> > > > >    endmenu
> > > > > diff --git a/drivers/net/caif/Kconfig b/drivers/net/caif/Kconfig
> > > > > index e74e2bb61236..9db0570c5beb 100644
> > > > > --- a/drivers/net/caif/Kconfig
> > > > > +++ b/drivers/net/caif/Kconfig
> > > > > @@ -58,8 +58,4 @@ config CAIF_VIRTIO
> > > > >    	---help---
> > > > >    	  The CAIF driver for CAIF over Virtio.
> > > > > -if CAIF_VIRTIO
> > > > > -source "drivers/vhost/Kconfig.vringh"
> > > > > -endif
> > > > > -
> > > > >    endif # CAIF_DRIVERS
> > > > > diff --git a/drivers/vhost/Kconfig b/drivers/vhost/Kconfig
> > > > > index 3d03ccbd1adc..4aef10a54cd1 100644
> > > > > --- a/drivers/vhost/Kconfig
> > > > > +++ b/drivers/vhost/Kconfig
> > > > > @@ -1,8 +1,20 @@
> > > > >    # SPDX-License-Identifier: GPL-2.0-only
> > > > > +config VHOST_RING
> > > > > +	tristate
> > > > > +	help
> > > > > +	  This option is selected by any driver which needs to access
> > > > > +	  the host side of a virtio ring.
> > > > > +
> > > > > +menuconfig VHOST
> > > > > +	tristate "Host kernel accelerator for virtio (VHOST)"
> > > > > +	help
> > > > > +	  This option is selected by any driver which needs to access
> > > > > +	  the core of vhost.
> > > > > +if VHOST
> > > > > +
> > > > The description here is wrong, isn't it?
> > > > VHOST and VHOST_RING are no longer selected, right?
> > > 
> > > For VHOST not currently.
> > Can we just bring it back and select it?
> 
> 
> Right, so if bring it back, we don't even need the stub.
> 
> How about something like attached?
> 
> Thanks
> 
> > 
> > > For VHOST_RING, it was selected by CAIF, VOP and VDPASIM.
> > > 
> > > Thanks
> > > 
> > > 
> > > > 
> > > > >    config VHOST_NET
> > > > >    	tristate "Host kernel accelerator for virtio net"
> > > > >    	depends on NET && EVENTFD && (TUN || !TUN) && (TAP || !TAP)
> > > > > -	select VHOST
> > > > >    	---help---
> > > > >    	  This kernel module can be loaded in host kernel to accelerate
> > > > >    	  guest networking with virtio_net. Not to be confused with virtio_net
> > > > > @@ -14,7 +26,6 @@ config VHOST_NET
> > > > >    config VHOST_SCSI
> > > > >    	tristate "VHOST_SCSI TCM fabric driver"
> > > > >    	depends on TARGET_CORE && EVENTFD
> > > > > -	select VHOST
> > > > >    	default n
> > > > >    	---help---
> > > > >    	Say M here to enable the vhost_scsi TCM fabric module
> > > > > @@ -24,7 +35,6 @@ config VHOST_VSOCK
> > > > >    	tristate "vhost virtio-vsock driver"
> > > > >    	depends on VSOCKETS && EVENTFD
> > > > >    	select VIRTIO_VSOCKETS_COMMON
> > > > > -	select VHOST
> > > > >    	default n
> > > > >    	---help---
> > > > >    	This kernel module can be loaded in the host kernel to provide AF_VSOCK
> > > > > @@ -34,12 +44,6 @@ config VHOST_VSOCK
> > > > >    	To compile this driver as a module, choose M here: the module will be called
> > > > >    	vhost_vsock.
> > > > > -config VHOST
> > > > > -	tristate
> > > > > -	---help---
> > > > > -	  This option is selected by any driver which needs to access
> > > > > -	  the core of vhost.
> > > > > -
> > > > >    config VHOST_CROSS_ENDIAN_LEGACY
> > > > >    	bool "Cross-endian support for vhost"
> > > > >    	default n
> > > > > @@ -54,3 +58,4 @@ config VHOST_CROSS_ENDIAN_LEGACY
> > > > >    	  adds some overhead, it is disabled by default.
> > > > >    	  If unsure, say "N".
> > > > > +endif
> > > > > diff --git a/drivers/vhost/Kconfig.vringh b/drivers/vhost/Kconfig.vringh
> > > > > deleted file mode 100644
> > > > > index c1fe36a9b8d4..000000000000
> > > > > --- a/drivers/vhost/Kconfig.vringh
> > > > > +++ /dev/null
> > > > > @@ -1,6 +0,0 @@
> > > > > -# SPDX-License-Identifier: GPL-2.0-only
> > > > > -config VHOST_RING
> > > > > -	tristate
> > > > > -	---help---
> > > > > -	  This option is selected by any driver which needs to access
> > > > > -	  the host side of a virtio ring.
> > > > > -- 
> > > > > 2.20.1

> >From 9b3a5d23b8bf6b0a11e65e688335d782f8e6aa5c Mon Sep 17 00:00:00 2001
> From: Jason Wang <jasowang@redhat.com>
> Date: Wed, 1 Apr 2020 22:17:27 +0800
> Subject: [PATCH] vhost: let CONFIG_VHOST to be selected by drivers
> 
> The defconfig on some archs enable vhost_net or vhost_vsock by
> default. So instead of adding CONFIG_VHOST=m to all of those files,
> simply letting CONFIG_VHOST to be selected by all of the vhost
> drivers. This fixes the build on the archs with CONFIG_VHOST_NET=m in
> their defconfig.
> 
> Signed-off-by: Jason Wang <jasowang@redhat.com>
> ---
>  drivers/vhost/Kconfig | 15 +++++++++++----
>  1 file changed, 11 insertions(+), 4 deletions(-)
> 
> diff --git a/drivers/vhost/Kconfig b/drivers/vhost/Kconfig
> index 2523a1d4290a..362b832f5338 100644
> --- a/drivers/vhost/Kconfig
> +++ b/drivers/vhost/Kconfig
> @@ -11,19 +11,23 @@ config VHOST_RING
>  	  This option is selected by any driver which needs to access
>  	  the host side of a virtio ring.
>  
> -menuconfig VHOST
> -	tristate "Host kernel accelerator for virtio (VHOST)"
> -	depends on EVENTFD
> +config VHOST
> +	tristate
>  	select VHOST_IOTLB
>  	help
>  	  This option is selected by any driver which needs to access
>  	  the core of vhost.
>  
> -if VHOST
> +menuconfig VHOST_MENU
> +	bool "VHOST drivers"
> +	default y
> +
> +if VHOST_MENU

Will this not still have the problem with defconfigs? They don't set
VHOST_MENU ...

>  
>  config VHOST_NET
>  	tristate "Host kernel accelerator for virtio net"
>  	depends on NET && EVENTFD && (TUN || !TUN) && (TAP || !TAP)
> +	select VHOST
>  	---help---
>  	  This kernel module can be loaded in host kernel to accelerate
>  	  guest networking with virtio_net. Not to be confused with virtio_net
> @@ -35,6 +39,7 @@ config VHOST_NET
>  config VHOST_SCSI
>  	tristate "VHOST_SCSI TCM fabric driver"
>  	depends on TARGET_CORE && EVENTFD
> +	select VHOST
>  	default n
>  	---help---
>  	Say M here to enable the vhost_scsi TCM fabric module
> @@ -43,6 +48,7 @@ config VHOST_SCSI
>  config VHOST_VSOCK
>  	tristate "vhost virtio-vsock driver"
>  	depends on VSOCKETS && EVENTFD
> +	select VHOST
>  	select VIRTIO_VSOCKETS_COMMON
>  	default n
>  	---help---
> @@ -56,6 +62,7 @@ config VHOST_VSOCK
>  config VHOST_VDPA
>  	tristate "Vhost driver for vDPA-based backend"
>  	depends on EVENTFD
> +	select VHOST
>  	select VDPA
>  	help
>  	  This kernel module can be loaded in host kernel to accelerate
> -- 
> 2.20.1
>
Jason Wang April 1, 2020, 2:36 p.m. UTC | #14
On 2020/4/1 下午10:18, Michael S. Tsirkin wrote:
> On Wed, Apr 01, 2020 at 10:13:29PM +0800, Jason Wang wrote:
>> On 2020/4/1 下午9:02, Christian Borntraeger wrote:
>>> On 01.04.20 14:56, Christian Borntraeger wrote:
>>>> On 01.04.20 14:50, Jason Wang wrote:
>>>>> On 2020/4/1 下午7:21, Christian Borntraeger wrote:
>>>>>> On 26.03.20 15:01, Jason Wang wrote:
>>>>>>> Currently, CONFIG_VHOST depends on CONFIG_VIRTUALIZATION. But vhost is
>>>>>>> not necessarily for VM since it's a generic userspace and kernel
>>>>>>> communication protocol. Such dependency may prevent archs without
>>>>>>> virtualization support from using vhost.
>>>>>>>
>>>>>>> To solve this, a dedicated vhost menu is created under drivers so
>>>>>>> CONIFG_VHOST can be decoupled out of CONFIG_VIRTUALIZATION.
>>>>>> FWIW, this now results in vhost not being build with defconfig kernels (in todays
>>>>>> linux-next).
>>>>>>
>>>>> Hi Christian:
>>>>>
>>>>> Did you meet it even with this commithttps://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git/commit/?id=a4be40cbcedba9b5b714f3c95182e8a45176e42d?
>>>> I simply used linux-next. The defconfig does NOT contain CONFIG_VHOST and therefore CONFIG_VHOST_NET and friends
>>>> can not be selected.
>>>>
>>>> $ git checkout next-20200401
>>>> $ make defconfig
>>>>     HOSTCC  scripts/basic/fixdep
>>>>     HOSTCC  scripts/kconfig/conf.o
>>>>     HOSTCC  scripts/kconfig/confdata.o
>>>>     HOSTCC  scripts/kconfig/expr.o
>>>>     LEX     scripts/kconfig/lexer.lex.c
>>>>     YACC    scripts/kconfig/parser.tab.[ch]
>>>>     HOSTCC  scripts/kconfig/lexer.lex.o
>>>>     HOSTCC  scripts/kconfig/parser.tab.o
>>>>     HOSTCC  scripts/kconfig/preprocess.o
>>>>     HOSTCC  scripts/kconfig/symbol.o
>>>>     HOSTCC  scripts/kconfig/util.o
>>>>     HOSTLD  scripts/kconfig/conf
>>>> *** Default configuration is based on 'x86_64_defconfig'
>>>> #
>>>> # configuration written to .config
>>>> #
>>>>
>>>> $ grep VHOST .config
>>>> # CONFIG_VHOST is not set
>>>>
>>>>> If yes, what's your build config looks like?
>>>>>
>>>>> Thanks
>>> This was x86. Not sure if that did work before.
>>> On s390 this is definitely a regression as the defconfig files
>>> for s390 do select VHOST_NET
>>>
>>> grep VHOST arch/s390/configs/*
>>> arch/s390/configs/debug_defconfig:CONFIG_VHOST_NET=m
>>> arch/s390/configs/debug_defconfig:CONFIG_VHOST_VSOCK=m
>>> arch/s390/configs/defconfig:CONFIG_VHOST_NET=m
>>> arch/s390/configs/defconfig:CONFIG_VHOST_VSOCK=m
>>>
>>> and this worked with 5.6, but does not work with next. Just adding
>>> CONFIG_VHOST=m to the defconfig solves the issue, something like
>> Right, I think we probably need
>>
>> 1) add CONFIG_VHOST=m to all defconfigs that enables
>> CONFIG_VHOST_NET/VSOCK/SCSI.
>>
>> or
>>
>> 2) don't use menuconfig for CONFIG_VHOST, let NET/SCSI/VDPA just select it.
>>
>> Thanks
> I think I prefer 2, but does it auto-select VHOST_IOTLB then?


I think so. E.g VHOST_NET will select VHOST,  and VHOST will select 
VHOST_IOTLB.


> Generally what was the reason to drop select VHOST from devices?
>
>

The reason is a sub menu is needed for VHOST devices, then I use 
menuconfig for CONFIG_VHOST.

Then select is not necessary anymore.

Thanks
Michael S. Tsirkin April 1, 2020, 2:39 p.m. UTC | #15
On Wed, Apr 01, 2020 at 10:29:32PM +0800, Jason Wang wrote:
> 
> On 2020/4/1 下午10:13, Michael S. Tsirkin wrote:
> > On Wed, Apr 01, 2020 at 10:08:59PM +0800, Jason Wang wrote:
> > > On 2020/4/1 下午9:22, Michael S. Tsirkin wrote:
> > > > On Thu, Mar 26, 2020 at 10:01:17PM +0800, Jason Wang wrote:
> > > > > Currently, CONFIG_VHOST depends on CONFIG_VIRTUALIZATION. But vhost is
> > > > > not necessarily for VM since it's a generic userspace and kernel
> > > > > communication protocol. Such dependency may prevent archs without
> > > > > virtualization support from using vhost.
> > > > > 
> > > > > To solve this, a dedicated vhost menu is created under drivers so
> > > > > CONIFG_VHOST can be decoupled out of CONFIG_VIRTUALIZATION.
> > > > > 
> > > > > While at it, also squash Kconfig.vringh into vhost Kconfig file. This
> > > > > avoids the trick of conditional inclusion from VOP or CAIF. Then it
> > > > > will be easier to introduce new vringh users and common dependency for
> > > > > both vringh and vhost.
> > > > > 
> > > > > Signed-off-by: Jason Wang <jasowang@redhat.com>
> > > > Is this just so we can drop the dependency on CONFIG_VIRTUALIZATION?
> > > > If yes what happens if we drop this patch?
> > > 
> > > The problem is that then VHOST_RING must depend on CONFIG_VIRTUALIZATION
> > > (which enable VHOST_IOTLB) to work.
> > > 
> > > But it looks to me CAIF and VOP doesn't requires CONFIG_VIRTUALIZATION.
> > How about stubs for IOTLB so VHOST_RING does not depend on VHOST_IOTLB?
> 
> 
> That could work.
> 
> 
> > I'm pretty sure neither user of vringh can actually use IOTLB, it's a
> > software only thing.
> 
> 
> Right.
> 
> 
> > 
> > > > Given the impact it had I'd like to defer it till next release if
> > > > possible.
> > > > 
> > > > 
> > > > > ---
> > > > >    arch/arm/kvm/Kconfig         |  2 --
> > > > >    arch/arm64/kvm/Kconfig       |  2 --
> > > > >    arch/mips/kvm/Kconfig        |  2 --
> > > > >    arch/powerpc/kvm/Kconfig     |  2 --
> > > > >    arch/s390/kvm/Kconfig        |  4 ----
> > > > >    arch/x86/kvm/Kconfig         |  4 ----
> > > > >    drivers/Kconfig              |  2 ++
> > > > >    drivers/misc/mic/Kconfig     |  4 ----
> > > > >    drivers/net/caif/Kconfig     |  4 ----
> > > > >    drivers/vhost/Kconfig        | 23 ++++++++++++++---------
> > > > >    drivers/vhost/Kconfig.vringh |  6 ------
> > > > >    11 files changed, 16 insertions(+), 39 deletions(-)
> > > > >    delete mode 100644 drivers/vhost/Kconfig.vringh
> > > > > 
> > > > > diff --git a/arch/arm/kvm/Kconfig b/arch/arm/kvm/Kconfig
> > > > > index f591026347a5..be97393761bf 100644
> > > > > --- a/arch/arm/kvm/Kconfig
> > > > > +++ b/arch/arm/kvm/Kconfig
> > > > > @@ -54,6 +54,4 @@ config KVM_ARM_HOST
> > > > >    	---help---
> > > > >    	  Provides host support for ARM processors.
> > > > > -source "drivers/vhost/Kconfig"
> > > > > -
> > > > >    endif # VIRTUALIZATION
> > > > > diff --git a/arch/arm64/kvm/Kconfig b/arch/arm64/kvm/Kconfig
> > > > > index a475c68cbfec..449386d76441 100644
> > > > > --- a/arch/arm64/kvm/Kconfig
> > > > > +++ b/arch/arm64/kvm/Kconfig
> > > > > @@ -64,6 +64,4 @@ config KVM_ARM_PMU
> > > > >    config KVM_INDIRECT_VECTORS
> > > > >           def_bool KVM && (HARDEN_BRANCH_PREDICTOR || HARDEN_EL2_VECTORS)
> > > > > -source "drivers/vhost/Kconfig"
> > > > > -
> > > > >    endif # VIRTUALIZATION
> > > > > diff --git a/arch/mips/kvm/Kconfig b/arch/mips/kvm/Kconfig
> > > > > index eac25aef21e0..b91d145aa2d5 100644
> > > > > --- a/arch/mips/kvm/Kconfig
> > > > > +++ b/arch/mips/kvm/Kconfig
> > > > > @@ -72,6 +72,4 @@ config KVM_MIPS_DEBUG_COP0_COUNTERS
> > > > >    	  If unsure, say N.
> > > > > -source "drivers/vhost/Kconfig"
> > > > > -
> > > > >    endif # VIRTUALIZATION
> > > > > diff --git a/arch/powerpc/kvm/Kconfig b/arch/powerpc/kvm/Kconfig
> > > > > index 711fca9bc6f0..12885eda324e 100644
> > > > > --- a/arch/powerpc/kvm/Kconfig
> > > > > +++ b/arch/powerpc/kvm/Kconfig
> > > > > @@ -204,6 +204,4 @@ config KVM_XIVE
> > > > >    	default y
> > > > >    	depends on KVM_XICS && PPC_XIVE_NATIVE && KVM_BOOK3S_HV_POSSIBLE
> > > > > -source "drivers/vhost/Kconfig"
> > > > > -
> > > > >    endif # VIRTUALIZATION
> > > > > diff --git a/arch/s390/kvm/Kconfig b/arch/s390/kvm/Kconfig
> > > > > index d3db3d7ed077..def3b60f1fe8 100644
> > > > > --- a/arch/s390/kvm/Kconfig
> > > > > +++ b/arch/s390/kvm/Kconfig
> > > > > @@ -55,8 +55,4 @@ config KVM_S390_UCONTROL
> > > > >    	  If unsure, say N.
> > > > > -# OK, it's a little counter-intuitive to do this, but it puts it neatly under
> > > > > -# the virtualization menu.
> > > > > -source "drivers/vhost/Kconfig"
> > > > > -
> > > > >    endif # VIRTUALIZATION
> > > > > diff --git a/arch/x86/kvm/Kconfig b/arch/x86/kvm/Kconfig
> > > > > index 991019d5eee1..0dfe70e17af9 100644
> > > > > --- a/arch/x86/kvm/Kconfig
> > > > > +++ b/arch/x86/kvm/Kconfig
> > > > > @@ -94,8 +94,4 @@ config KVM_MMU_AUDIT
> > > > >    	 This option adds a R/W kVM module parameter 'mmu_audit', which allows
> > > > >    	 auditing of KVM MMU events at runtime.
> > > > > -# OK, it's a little counter-intuitive to do this, but it puts it neatly under
> > > > > -# the virtualization menu.
> > > > > -source "drivers/vhost/Kconfig"
> > > > > -
> > > > >    endif # VIRTUALIZATION
> > > > > diff --git a/drivers/Kconfig b/drivers/Kconfig
> > > > > index 8befa53f43be..7a6d8b2b68b4 100644
> > > > > --- a/drivers/Kconfig
> > > > > +++ b/drivers/Kconfig
> > > > > @@ -138,6 +138,8 @@ source "drivers/virt/Kconfig"
> > > > >    source "drivers/virtio/Kconfig"
> > > > > +source "drivers/vhost/Kconfig"
> > > > > +
> > > > >    source "drivers/hv/Kconfig"
> > > > >    source "drivers/xen/Kconfig"
> > > > > diff --git a/drivers/misc/mic/Kconfig b/drivers/misc/mic/Kconfig
> > > > > index b6841ba6d922..8f201d019f5a 100644
> > > > > --- a/drivers/misc/mic/Kconfig
> > > > > +++ b/drivers/misc/mic/Kconfig
> > > > > @@ -133,8 +133,4 @@ config VOP
> > > > >    	  OS and tools for MIC to use with this driver are available from
> > > > >    	  <http://software.intel.com/en-us/mic-developer>.
> > > > > -if VOP
> > > > > -source "drivers/vhost/Kconfig.vringh"
> > > > > -endif
> > > > > -
> > > > >    endmenu
> > > > > diff --git a/drivers/net/caif/Kconfig b/drivers/net/caif/Kconfig
> > > > > index e74e2bb61236..9db0570c5beb 100644
> > > > > --- a/drivers/net/caif/Kconfig
> > > > > +++ b/drivers/net/caif/Kconfig
> > > > > @@ -58,8 +58,4 @@ config CAIF_VIRTIO
> > > > >    	---help---
> > > > >    	  The CAIF driver for CAIF over Virtio.
> > > > > -if CAIF_VIRTIO
> > > > > -source "drivers/vhost/Kconfig.vringh"
> > > > > -endif
> > > > > -
> > > > >    endif # CAIF_DRIVERS
> > > > > diff --git a/drivers/vhost/Kconfig b/drivers/vhost/Kconfig
> > > > > index 3d03ccbd1adc..4aef10a54cd1 100644
> > > > > --- a/drivers/vhost/Kconfig
> > > > > +++ b/drivers/vhost/Kconfig
> > > > > @@ -1,8 +1,20 @@
> > > > >    # SPDX-License-Identifier: GPL-2.0-only
> > > > > +config VHOST_RING
> > > > > +	tristate
> > > > > +	help
> > > > > +	  This option is selected by any driver which needs to access
> > > > > +	  the host side of a virtio ring.
> > > > > +
> > > > > +menuconfig VHOST
> > > > > +	tristate "Host kernel accelerator for virtio (VHOST)"
> > > > > +	help
> > > > > +	  This option is selected by any driver which needs to access
> > > > > +	  the core of vhost.
> > > > > +if VHOST
> > > > > +
> > > > The description here is wrong, isn't it?
> > > > VHOST and VHOST_RING are no longer selected, right?
> > > 
> > > For VHOST not currently.
> > Can we just bring it back and select it?
> 
> 
> Right, so if bring it back, we don't even need the stub.
> 
> How about something like attached?
> 
> Thanks
> 
> 
> > 
> > > For VHOST_RING, it was selected by CAIF, VOP and VDPASIM.
> > > 
> > > Thanks
> > > 
> > > 
> > > > 
> > > > >    config VHOST_NET
> > > > >    	tristate "Host kernel accelerator for virtio net"
> > > > >    	depends on NET && EVENTFD && (TUN || !TUN) && (TAP || !TAP)
> > > > > -	select VHOST
> > > > >    	---help---
> > > > >    	  This kernel module can be loaded in host kernel to accelerate
> > > > >    	  guest networking with virtio_net. Not to be confused with virtio_net
> > > > > @@ -14,7 +26,6 @@ config VHOST_NET
> > > > >    config VHOST_SCSI
> > > > >    	tristate "VHOST_SCSI TCM fabric driver"
> > > > >    	depends on TARGET_CORE && EVENTFD
> > > > > -	select VHOST
> > > > >    	default n
> > > > >    	---help---
> > > > >    	Say M here to enable the vhost_scsi TCM fabric module
> > > > > @@ -24,7 +35,6 @@ config VHOST_VSOCK
> > > > >    	tristate "vhost virtio-vsock driver"
> > > > >    	depends on VSOCKETS && EVENTFD
> > > > >    	select VIRTIO_VSOCKETS_COMMON
> > > > > -	select VHOST
> > > > >    	default n
> > > > >    	---help---
> > > > >    	This kernel module can be loaded in the host kernel to provide AF_VSOCK
> > > > > @@ -34,12 +44,6 @@ config VHOST_VSOCK
> > > > >    	To compile this driver as a module, choose M here: the module will be called
> > > > >    	vhost_vsock.
> > > > > -config VHOST
> > > > > -	tristate
> > > > > -	---help---
> > > > > -	  This option is selected by any driver which needs to access
> > > > > -	  the core of vhost.
> > > > > -
> > > > >    config VHOST_CROSS_ENDIAN_LEGACY
> > > > >    	bool "Cross-endian support for vhost"
> > > > >    	default n
> > > > > @@ -54,3 +58,4 @@ config VHOST_CROSS_ENDIAN_LEGACY
> > > > >    	  adds some overhead, it is disabled by default.
> > > > >    	  If unsure, say "N".
> > > > > +endif
> > > > > diff --git a/drivers/vhost/Kconfig.vringh b/drivers/vhost/Kconfig.vringh
> > > > > deleted file mode 100644
> > > > > index c1fe36a9b8d4..000000000000
> > > > > --- a/drivers/vhost/Kconfig.vringh
> > > > > +++ /dev/null
> > > > > @@ -1,6 +0,0 @@
> > > > > -# SPDX-License-Identifier: GPL-2.0-only
> > > > > -config VHOST_RING
> > > > > -	tristate
> > > > > -	---help---
> > > > > -	  This option is selected by any driver which needs to access
> > > > > -	  the host side of a virtio ring.
> > > > > -- 
> > > > > 2.20.1

> >From 9b3a5d23b8bf6b0a11e65e688335d782f8e6aa5c Mon Sep 17 00:00:00 2001
> From: Jason Wang <jasowang@redhat.com>
> Date: Wed, 1 Apr 2020 22:17:27 +0800
> Subject: [PATCH] vhost: let CONFIG_VHOST to be selected by drivers
> 
> The defconfig on some archs enable vhost_net or vhost_vsock by
> default. So instead of adding CONFIG_VHOST=m to all of those files,
> simply letting CONFIG_VHOST to be selected by all of the vhost
> drivers. This fixes the build on the archs with CONFIG_VHOST_NET=m in
> their defconfig.
> 
> Signed-off-by: Jason Wang <jasowang@redhat.com>
> ---
>  drivers/vhost/Kconfig | 15 +++++++++++----
>  1 file changed, 11 insertions(+), 4 deletions(-)
> 
> diff --git a/drivers/vhost/Kconfig b/drivers/vhost/Kconfig
> index 2523a1d4290a..362b832f5338 100644
> --- a/drivers/vhost/Kconfig
> +++ b/drivers/vhost/Kconfig
> @@ -11,19 +11,23 @@ config VHOST_RING
>  	  This option is selected by any driver which needs to access
>  	  the host side of a virtio ring.
>  
> -menuconfig VHOST
> -	tristate "Host kernel accelerator for virtio (VHOST)"
> -	depends on EVENTFD
> +config VHOST
> +	tristate
>  	select VHOST_IOTLB
>  	help
>  	  This option is selected by any driver which needs to access
>  	  the core of vhost.
>  
> -if VHOST
> +menuconfig VHOST_MENU
> +	bool "VHOST drivers"
> +	default y
> +
> +if VHOST_MENU

In fact this is similar to VIRTIO, and I wonder whether VIRTIO has also
been broken by
	commit 7b95fec6d2ffa53f4a8d637b0f223644d458ea4e
	Author: Vincent Legoll <vincent.legoll@gmail.com>
	Date:   Sun Jan 7 12:33:56 2018 +0100

	    virtio: make VIRTIO a menuconfig to ease disabling it all

I see lots of defconfigs set VIRTIO_PCI but not VIRTIO_MENU ...
Jason Wang April 1, 2020, 2:39 p.m. UTC | #16
On 2020/4/1 下午10:35, Michael S. Tsirkin wrote:
>> diff --git a/drivers/vhost/Kconfig b/drivers/vhost/Kconfig
>> index 2523a1d4290a..362b832f5338 100644
>> --- a/drivers/vhost/Kconfig
>> +++ b/drivers/vhost/Kconfig
>> @@ -11,19 +11,23 @@ config VHOST_RING
>>   	  This option is selected by any driver which needs to access
>>   	  the host side of a virtio ring.
>>   
>> -menuconfig VHOST
>> -	tristate "Host kernel accelerator for virtio (VHOST)"
>> -	depends on EVENTFD
>> +config VHOST
>> +	tristate
>>   	select VHOST_IOTLB
>>   	help
>>   	  This option is selected by any driver which needs to access
>>   	  the core of vhost.
>>   
>> -if VHOST
>> +menuconfig VHOST_MENU
>> +	bool "VHOST drivers"
>> +	default y
>> +
>> +if VHOST_MENU
> Will this not still have the problem with defconfigs? They don't set
> VHOST_MENU ...


Looks not, since it was enabled by default.

I tested this on s390/ppc defconfigs:

# make ARCH=s390 defconfig
*** Default configuration is based on 'defconfig'
#
# No change to .config
#
# grep CONFIG_VHOST .config
CONFIG_VHOST_IOTLB=m
CONFIG_VHOST=m
CONFIG_VHOST_MENU=y
CONFIG_VHOST_NET=m
CONFIG_VHOST_VSOCK=m
# CONFIG_VHOST_VDPA is not set
# CONFIG_VHOST_CROSS_ENDIAN_LEGACY is not set

Thanks
Jason Wang April 1, 2020, 2:43 p.m. UTC | #17
On 2020/4/1 下午10:39, Michael S. Tsirkin wrote:
>> >From 9b3a5d23b8bf6b0a11e65e688335d782f8e6aa5c Mon Sep 17 00:00:00 2001
>> From: Jason Wang<jasowang@redhat.com>
>> Date: Wed, 1 Apr 2020 22:17:27 +0800
>> Subject: [PATCH] vhost: let CONFIG_VHOST to be selected by drivers
>>
>> The defconfig on some archs enable vhost_net or vhost_vsock by
>> default. So instead of adding CONFIG_VHOST=m to all of those files,
>> simply letting CONFIG_VHOST to be selected by all of the vhost
>> drivers. This fixes the build on the archs with CONFIG_VHOST_NET=m in
>> their defconfig.
>>
>> Signed-off-by: Jason Wang<jasowang@redhat.com>
>> ---
>>   drivers/vhost/Kconfig | 15 +++++++++++----
>>   1 file changed, 11 insertions(+), 4 deletions(-)
>>
>> diff --git a/drivers/vhost/Kconfig b/drivers/vhost/Kconfig
>> index 2523a1d4290a..362b832f5338 100644
>> --- a/drivers/vhost/Kconfig
>> +++ b/drivers/vhost/Kconfig
>> @@ -11,19 +11,23 @@ config VHOST_RING
>>   	  This option is selected by any driver which needs to access
>>   	  the host side of a virtio ring.
>>   
>> -menuconfig VHOST
>> -	tristate "Host kernel accelerator for virtio (VHOST)"
>> -	depends on EVENTFD
>> +config VHOST
>> +	tristate
>>   	select VHOST_IOTLB
>>   	help
>>   	  This option is selected by any driver which needs to access
>>   	  the core of vhost.
>>   
>> -if VHOST
>> +menuconfig VHOST_MENU
>> +	bool "VHOST drivers"
>> +	default y
>> +
>> +if VHOST_MENU
> In fact this is similar to VIRTIO, and I wonder whether VIRTIO has also
> been broken by
> 	commit 7b95fec6d2ffa53f4a8d637b0f223644d458ea4e
> 	Author: Vincent Legoll<vincent.legoll@gmail.com>
> 	Date:   Sun Jan 7 12:33:56 2018 +0100
>
> 	    virtio: make VIRTIO a menuconfig to ease disabling it all
>
> I see lots of defconfigs set VIRTIO_PCI but not VIRTIO_MENU ...


Probably not since VIRTIO_MENU has "default y"

E.g for powerpc, I got:

# make ARCH=powerpc defconfig
*** Default configuration is based on 'ppc64_defconfig'
#
# No change to .config
#
# grep CONFIG_VIRTIO .config
CONFIG_VIRTIO_BLK=m
CONFIG_VIRTIO_NET=m
CONFIG_VIRTIO_CONSOLE=m
CONFIG_VIRTIO=m
CONFIG_VIRTIO_MENU=y
CONFIG_VIRTIO_PCI=m
CONFIG_VIRTIO_PCI_LEGACY=y
# CONFIG_VIRTIO_VDPA is not set
CONFIG_VIRTIO_BALLOON=m
# CONFIG_VIRTIO_INPUT is not set
# CONFIG_VIRTIO_MMIO is not set
# CONFIG_VIRTIO_FS is not set

Thanks
Jason Wang April 1, 2020, 2:50 p.m. UTC | #18
On 2020/4/1 下午10:27, Michael S. Tsirkin wrote:
> On Wed, Apr 01, 2020 at 10:13:29PM +0800, Jason Wang wrote:
>> On 2020/4/1 下午9:02, Christian Borntraeger wrote:
>>> On 01.04.20 14:56, Christian Borntraeger wrote:
>>>> On 01.04.20 14:50, Jason Wang wrote:
>>>>> On 2020/4/1 下午7:21, Christian Borntraeger wrote:
>>>>>> On 26.03.20 15:01, Jason Wang wrote:
>>>>>>> Currently, CONFIG_VHOST depends on CONFIG_VIRTUALIZATION. But vhost is
>>>>>>> not necessarily for VM since it's a generic userspace and kernel
>>>>>>> communication protocol. Such dependency may prevent archs without
>>>>>>> virtualization support from using vhost.
>>>>>>>
>>>>>>> To solve this, a dedicated vhost menu is created under drivers so
>>>>>>> CONIFG_VHOST can be decoupled out of CONFIG_VIRTUALIZATION.
>>>>>> FWIW, this now results in vhost not being build with defconfig kernels (in todays
>>>>>> linux-next).
>>>>>>
>>>>> Hi Christian:
>>>>>
>>>>> Did you meet it even with this commit https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git/commit/?id=a4be40cbcedba9b5b714f3c95182e8a45176e42d?
>>>> I simply used linux-next. The defconfig does NOT contain CONFIG_VHOST and therefore CONFIG_VHOST_NET and friends
>>>> can not be selected.
>>>>
>>>> $ git checkout next-20200401
>>>> $ make defconfig
>>>>     HOSTCC  scripts/basic/fixdep
>>>>     HOSTCC  scripts/kconfig/conf.o
>>>>     HOSTCC  scripts/kconfig/confdata.o
>>>>     HOSTCC  scripts/kconfig/expr.o
>>>>     LEX     scripts/kconfig/lexer.lex.c
>>>>     YACC    scripts/kconfig/parser.tab.[ch]
>>>>     HOSTCC  scripts/kconfig/lexer.lex.o
>>>>     HOSTCC  scripts/kconfig/parser.tab.o
>>>>     HOSTCC  scripts/kconfig/preprocess.o
>>>>     HOSTCC  scripts/kconfig/symbol.o
>>>>     HOSTCC  scripts/kconfig/util.o
>>>>     HOSTLD  scripts/kconfig/conf
>>>> *** Default configuration is based on 'x86_64_defconfig'
>>>> #
>>>> # configuration written to .config
>>>> #
>>>>
>>>> $ grep VHOST .config
>>>> # CONFIG_VHOST is not set
>>>>
>>>>> If yes, what's your build config looks like?
>>>>>
>>>>> Thanks
>>> This was x86. Not sure if that did work before.
>>> On s390 this is definitely a regression as the defconfig files
>>> for s390 do select VHOST_NET
>>>
>>> grep VHOST arch/s390/configs/*
>>> arch/s390/configs/debug_defconfig:CONFIG_VHOST_NET=m
>>> arch/s390/configs/debug_defconfig:CONFIG_VHOST_VSOCK=m
>>> arch/s390/configs/defconfig:CONFIG_VHOST_NET=m
>>> arch/s390/configs/defconfig:CONFIG_VHOST_VSOCK=m
>>>
>>> and this worked with 5.6, but does not work with next. Just adding
>>> CONFIG_VHOST=m to the defconfig solves the issue, something like
>>
>> Right, I think we probably need
>>
>> 1) add CONFIG_VHOST=m to all defconfigs that enables
>> CONFIG_VHOST_NET/VSOCK/SCSI.
>>
>> or
>>
>> 2) don't use menuconfig for CONFIG_VHOST, let NET/SCSI/VDPA just select it.
>>
>> Thanks
> OK I tried this:
>
> diff --git a/drivers/vhost/Kconfig b/drivers/vhost/Kconfig
> index 2523a1d4290a..a314b900d479 100644
> --- a/drivers/vhost/Kconfig
> +++ b/drivers/vhost/Kconfig
> @@ -19,11 +19,10 @@ menuconfig VHOST
>   	  This option is selected by any driver which needs to access
>   	  the core of vhost.
>   
> -if VHOST
> -
>   config VHOST_NET
>   	tristate "Host kernel accelerator for virtio net"
>   	depends on NET && EVENTFD && (TUN || !TUN) && (TAP || !TAP)
> +	select VHOST
>   	---help---
>   	  This kernel module can be loaded in host kernel to accelerate
>   	  guest networking with virtio_net. Not to be confused with virtio_net
> @@ -35,6 +34,7 @@ config VHOST_NET
>   config VHOST_SCSI
>   	tristate "VHOST_SCSI TCM fabric driver"
>   	depends on TARGET_CORE && EVENTFD
> +	select VHOST
>   	default n
>   	---help---
>   	Say M here to enable the vhost_scsi TCM fabric module
> @@ -44,6 +44,7 @@ config VHOST_VSOCK
>   	tristate "vhost virtio-vsock driver"
>   	depends on VSOCKETS && EVENTFD
>   	select VIRTIO_VSOCKETS_COMMON
> +	select VHOST
>   	default n
>   	---help---
>   	This kernel module can be loaded in the host kernel to provide AF_VSOCK
> @@ -57,6 +58,7 @@ config VHOST_VDPA
>   	tristate "Vhost driver for vDPA-based backend"
>   	depends on EVENTFD
>   	select VDPA
> +	select VHOST
>   	help
>   	  This kernel module can be loaded in host kernel to accelerate
>   	  guest virtio devices with the vDPA-based backends.
> @@ -78,5 +80,3 @@ config VHOST_CROSS_ENDIAN_LEGACY
>   	  adds some overhead, it is disabled by default.
>   
>   	  If unsure, say "N".
> -
> -endif
>
>
> But now CONFIG_VHOST is always "y", never "m".
> Which I think will make it a built-in.
> Didn't figure out why yet.


Is it because the dependency of EVENTFD for CONFIG_VHOST?

Remove that one for this patch, I can get CONFIG_VHOST=m.

But according to documentation/kbuild/kconfig.rst, select is used for 
option without prompt.

Thanks


>
Michael S. Tsirkin April 1, 2020, 3:57 p.m. UTC | #19
On Wed, Apr 01, 2020 at 10:50:50PM +0800, Jason Wang wrote:
> 
> On 2020/4/1 下午10:27, Michael S. Tsirkin wrote:
> > On Wed, Apr 01, 2020 at 10:13:29PM +0800, Jason Wang wrote:
> > > On 2020/4/1 下午9:02, Christian Borntraeger wrote:
> > > > On 01.04.20 14:56, Christian Borntraeger wrote:
> > > > > On 01.04.20 14:50, Jason Wang wrote:
> > > > > > On 2020/4/1 下午7:21, Christian Borntraeger wrote:
> > > > > > > On 26.03.20 15:01, Jason Wang wrote:
> > > > > > > > Currently, CONFIG_VHOST depends on CONFIG_VIRTUALIZATION. But vhost is
> > > > > > > > not necessarily for VM since it's a generic userspace and kernel
> > > > > > > > communication protocol. Such dependency may prevent archs without
> > > > > > > > virtualization support from using vhost.
> > > > > > > > 
> > > > > > > > To solve this, a dedicated vhost menu is created under drivers so
> > > > > > > > CONIFG_VHOST can be decoupled out of CONFIG_VIRTUALIZATION.
> > > > > > > FWIW, this now results in vhost not being build with defconfig kernels (in todays
> > > > > > > linux-next).
> > > > > > > 
> > > > > > Hi Christian:
> > > > > > 
> > > > > > Did you meet it even with this commit https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git/commit/?id=a4be40cbcedba9b5b714f3c95182e8a45176e42d?
> > > > > I simply used linux-next. The defconfig does NOT contain CONFIG_VHOST and therefore CONFIG_VHOST_NET and friends
> > > > > can not be selected.
> > > > > 
> > > > > $ git checkout next-20200401
> > > > > $ make defconfig
> > > > >     HOSTCC  scripts/basic/fixdep
> > > > >     HOSTCC  scripts/kconfig/conf.o
> > > > >     HOSTCC  scripts/kconfig/confdata.o
> > > > >     HOSTCC  scripts/kconfig/expr.o
> > > > >     LEX     scripts/kconfig/lexer.lex.c
> > > > >     YACC    scripts/kconfig/parser.tab.[ch]
> > > > >     HOSTCC  scripts/kconfig/lexer.lex.o
> > > > >     HOSTCC  scripts/kconfig/parser.tab.o
> > > > >     HOSTCC  scripts/kconfig/preprocess.o
> > > > >     HOSTCC  scripts/kconfig/symbol.o
> > > > >     HOSTCC  scripts/kconfig/util.o
> > > > >     HOSTLD  scripts/kconfig/conf
> > > > > *** Default configuration is based on 'x86_64_defconfig'
> > > > > #
> > > > > # configuration written to .config
> > > > > #
> > > > > 
> > > > > $ grep VHOST .config
> > > > > # CONFIG_VHOST is not set
> > > > > 
> > > > > > If yes, what's your build config looks like?
> > > > > > 
> > > > > > Thanks
> > > > This was x86. Not sure if that did work before.
> > > > On s390 this is definitely a regression as the defconfig files
> > > > for s390 do select VHOST_NET
> > > > 
> > > > grep VHOST arch/s390/configs/*
> > > > arch/s390/configs/debug_defconfig:CONFIG_VHOST_NET=m
> > > > arch/s390/configs/debug_defconfig:CONFIG_VHOST_VSOCK=m
> > > > arch/s390/configs/defconfig:CONFIG_VHOST_NET=m
> > > > arch/s390/configs/defconfig:CONFIG_VHOST_VSOCK=m
> > > > 
> > > > and this worked with 5.6, but does not work with next. Just adding
> > > > CONFIG_VHOST=m to the defconfig solves the issue, something like
> > > 
> > > Right, I think we probably need
> > > 
> > > 1) add CONFIG_VHOST=m to all defconfigs that enables
> > > CONFIG_VHOST_NET/VSOCK/SCSI.
> > > 
> > > or
> > > 
> > > 2) don't use menuconfig for CONFIG_VHOST, let NET/SCSI/VDPA just select it.
> > > 
> > > Thanks
> > OK I tried this:
> > 
> > diff --git a/drivers/vhost/Kconfig b/drivers/vhost/Kconfig
> > index 2523a1d4290a..a314b900d479 100644
> > --- a/drivers/vhost/Kconfig
> > +++ b/drivers/vhost/Kconfig
> > @@ -19,11 +19,10 @@ menuconfig VHOST
> >   	  This option is selected by any driver which needs to access
> >   	  the core of vhost.
> > -if VHOST
> > -
> >   config VHOST_NET
> >   	tristate "Host kernel accelerator for virtio net"
> >   	depends on NET && EVENTFD && (TUN || !TUN) && (TAP || !TAP)
> > +	select VHOST
> >   	---help---
> >   	  This kernel module can be loaded in host kernel to accelerate
> >   	  guest networking with virtio_net. Not to be confused with virtio_net
> > @@ -35,6 +34,7 @@ config VHOST_NET
> >   config VHOST_SCSI
> >   	tristate "VHOST_SCSI TCM fabric driver"
> >   	depends on TARGET_CORE && EVENTFD
> > +	select VHOST
> >   	default n
> >   	---help---
> >   	Say M here to enable the vhost_scsi TCM fabric module
> > @@ -44,6 +44,7 @@ config VHOST_VSOCK
> >   	tristate "vhost virtio-vsock driver"
> >   	depends on VSOCKETS && EVENTFD
> >   	select VIRTIO_VSOCKETS_COMMON
> > +	select VHOST
> >   	default n
> >   	---help---
> >   	This kernel module can be loaded in the host kernel to provide AF_VSOCK
> > @@ -57,6 +58,7 @@ config VHOST_VDPA
> >   	tristate "Vhost driver for vDPA-based backend"
> >   	depends on EVENTFD
> >   	select VDPA
> > +	select VHOST
> >   	help
> >   	  This kernel module can be loaded in host kernel to accelerate
> >   	  guest virtio devices with the vDPA-based backends.
> > @@ -78,5 +80,3 @@ config VHOST_CROSS_ENDIAN_LEGACY
> >   	  adds some overhead, it is disabled by default.
> >   	  If unsure, say "N".
> > -
> > -endif
> > 
> > 
> > But now CONFIG_VHOST is always "y", never "m".
> > Which I think will make it a built-in.
> > Didn't figure out why yet.
> 
> 
> Is it because the dependency of EVENTFD for CONFIG_VHOST?

Oh no, it's because I forgot to change menuconfig to config.


> Remove that one for this patch, I can get CONFIG_VHOST=m.
> 
> But according to documentation/kbuild/kconfig.rst, select is used for option
> without prompt.
> 
> Thanks
> 
> 
> >
Michael S. Tsirkin April 1, 2020, 4:05 p.m. UTC | #20
On Wed, Apr 01, 2020 at 10:29:32PM +0800, Jason Wang wrote:
> >From 9b3a5d23b8bf6b0a11e65e688335d782f8e6aa5c Mon Sep 17 00:00:00 2001
> From: Jason Wang <jasowang@redhat.com>
> Date: Wed, 1 Apr 2020 22:17:27 +0800
> Subject: [PATCH] vhost: let CONFIG_VHOST to be selected by drivers
> 
> The defconfig on some archs enable vhost_net or vhost_vsock by
> default. So instead of adding CONFIG_VHOST=m to all of those files,
> simply letting CONFIG_VHOST to be selected by all of the vhost
> drivers. This fixes the build on the archs with CONFIG_VHOST_NET=m in
> their defconfig.
> 
> Signed-off-by: Jason Wang <jasowang@redhat.com>
> ---
>  drivers/vhost/Kconfig | 15 +++++++++++----
>  1 file changed, 11 insertions(+), 4 deletions(-)
> 
> diff --git a/drivers/vhost/Kconfig b/drivers/vhost/Kconfig
> index 2523a1d4290a..362b832f5338 100644
> --- a/drivers/vhost/Kconfig
> +++ b/drivers/vhost/Kconfig
> @@ -11,19 +11,23 @@ config VHOST_RING
>  	  This option is selected by any driver which needs to access
>  	  the host side of a virtio ring.
>  
> -menuconfig VHOST
> -	tristate "Host kernel accelerator for virtio (VHOST)"
> -	depends on EVENTFD
> +config VHOST
> +	tristate
>  	select VHOST_IOTLB
>  	help
>  	  This option is selected by any driver which needs to access
>  	  the core of vhost.


OK so don't we need the dependency on EVENTFD though?
I recall there was a bug this was supposed to fix ...


> -if VHOST
> +menuconfig VHOST_MENU
> +	bool "VHOST drivers"
> +	default y
> +
> +if VHOST_MENU
>  
>  config VHOST_NET
>  	tristate "Host kernel accelerator for virtio net"
>  	depends on NET && EVENTFD && (TUN || !TUN) && (TAP || !TAP)
> +	select VHOST
>  	---help---
>  	  This kernel module can be loaded in host kernel to accelerate
>  	  guest networking with virtio_net. Not to be confused with virtio_net
> @@ -35,6 +39,7 @@ config VHOST_NET
>  config VHOST_SCSI
>  	tristate "VHOST_SCSI TCM fabric driver"
>  	depends on TARGET_CORE && EVENTFD
> +	select VHOST
>  	default n
>  	---help---
>  	Say M here to enable the vhost_scsi TCM fabric module
> @@ -43,6 +48,7 @@ config VHOST_SCSI
>  config VHOST_VSOCK
>  	tristate "vhost virtio-vsock driver"
>  	depends on VSOCKETS && EVENTFD
> +	select VHOST
>  	select VIRTIO_VSOCKETS_COMMON
>  	default n
>  	---help---
> @@ -56,6 +62,7 @@ config VHOST_VSOCK
>  config VHOST_VDPA
>  	tristate "Vhost driver for vDPA-based backend"
>  	depends on EVENTFD
> +	select VHOST
>  	select VDPA
>  	help
>  	  This kernel module can be loaded in host kernel to accelerate
> -- 
> 2.20.1
>
Michael S. Tsirkin April 1, 2020, 4:08 p.m. UTC | #21
On Wed, Apr 01, 2020 at 10:29:32PM +0800, Jason Wang wrote:
> >From 9b3a5d23b8bf6b0a11e65e688335d782f8e6aa5c Mon Sep 17 00:00:00 2001
> From: Jason Wang <jasowang@redhat.com>
> Date: Wed, 1 Apr 2020 22:17:27 +0800
> Subject: [PATCH] vhost: let CONFIG_VHOST to be selected by drivers
> 
> The defconfig on some archs enable vhost_net or vhost_vsock by
> default. So instead of adding CONFIG_VHOST=m to all of those files,
> simply letting CONFIG_VHOST to be selected by all of the vhost
> drivers. This fixes the build on the archs with CONFIG_VHOST_NET=m in
> their defconfig.
> 
> Signed-off-by: Jason Wang <jasowang@redhat.com>
> ---
>  drivers/vhost/Kconfig | 15 +++++++++++----
>  1 file changed, 11 insertions(+), 4 deletions(-)
> 
> diff --git a/drivers/vhost/Kconfig b/drivers/vhost/Kconfig
> index 2523a1d4290a..362b832f5338 100644
> --- a/drivers/vhost/Kconfig
> +++ b/drivers/vhost/Kconfig
> @@ -11,19 +11,23 @@ config VHOST_RING
>  	  This option is selected by any driver which needs to access
>  	  the host side of a virtio ring.
>  
> -menuconfig VHOST
> -	tristate "Host kernel accelerator for virtio (VHOST)"
> -	depends on EVENTFD
> +config VHOST
> +	tristate
>  	select VHOST_IOTLB
>  	help
>  	  This option is selected by any driver which needs to access
>  	  the core of vhost.
>  
> -if VHOST
> +menuconfig VHOST_MENU
> +	bool "VHOST drivers"
> +	default y
> +
> +if VHOST_MENU
>  
>  config VHOST_NET
>  	tristate "Host kernel accelerator for virtio net"
>  	depends on NET && EVENTFD && (TUN || !TUN) && (TAP || !TAP)
> +	select VHOST
>  	---help---
>  	  This kernel module can be loaded in host kernel to accelerate
>  	  guest networking with virtio_net. Not to be confused with virtio_net
> @@ -35,6 +39,7 @@ config VHOST_NET
>  config VHOST_SCSI
>  	tristate "VHOST_SCSI TCM fabric driver"
>  	depends on TARGET_CORE && EVENTFD
> +	select VHOST
>  	default n
>  	---help---
>  	Say M here to enable the vhost_scsi TCM fabric module
> @@ -43,6 +48,7 @@ config VHOST_SCSI
>  config VHOST_VSOCK
>  	tristate "vhost virtio-vsock driver"
>  	depends on VSOCKETS && EVENTFD
> +	select VHOST
>  	select VIRTIO_VSOCKETS_COMMON
>  	default n
>  	---help---
> @@ -56,6 +62,7 @@ config VHOST_VSOCK
>  config VHOST_VDPA
>  	tristate "Vhost driver for vDPA-based backend"
>  	depends on EVENTFD
> +	select VHOST
>  	select VDPA
>  	help
>  	  This kernel module can be loaded in host kernel to accelerate

OK so I squashed this into the original buggy patch.
Could you please play with vhost branch of my tree on various
arches? If it looks ok to you let me know I'll push
this to next.
Christian Borntraeger April 1, 2020, 6:53 p.m. UTC | #22
On 01.04.20 17:57, Michael S. Tsirkin wrote:
> On Wed, Apr 01, 2020 at 10:50:50PM +0800, Jason Wang wrote:
>>
>> On 2020/4/1 下午10:27, Michael S. Tsirkin wrote:
>>> On Wed, Apr 01, 2020 at 10:13:29PM +0800, Jason Wang wrote:
>>>> On 2020/4/1 下午9:02, Christian Borntraeger wrote:
>>>>> On 01.04.20 14:56, Christian Borntraeger wrote:
>>>>>> On 01.04.20 14:50, Jason Wang wrote:
>>>>>>> On 2020/4/1 下午7:21, Christian Borntraeger wrote:
>>>>>>>> On 26.03.20 15:01, Jason Wang wrote:
>>>>>>>>> Currently, CONFIG_VHOST depends on CONFIG_VIRTUALIZATION. But vhost is
>>>>>>>>> not necessarily for VM since it's a generic userspace and kernel
>>>>>>>>> communication protocol. Such dependency may prevent archs without
>>>>>>>>> virtualization support from using vhost.
>>>>>>>>>
>>>>>>>>> To solve this, a dedicated vhost menu is created under drivers so
>>>>>>>>> CONIFG_VHOST can be decoupled out of CONFIG_VIRTUALIZATION.
>>>>>>>> FWIW, this now results in vhost not being build with defconfig kernels (in todays
>>>>>>>> linux-next).
>>>>>>>>
>>>>>>> Hi Christian:
>>>>>>>
>>>>>>> Did you meet it even with this commit https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git/commit/?id=a4be40cbcedba9b5b714f3c95182e8a45176e42d?
>>>>>> I simply used linux-next. The defconfig does NOT contain CONFIG_VHOST and therefore CONFIG_VHOST_NET and friends
>>>>>> can not be selected.
>>>>>>
>>>>>> $ git checkout next-20200401
>>>>>> $ make defconfig
>>>>>>     HOSTCC  scripts/basic/fixdep
>>>>>>     HOSTCC  scripts/kconfig/conf.o
>>>>>>     HOSTCC  scripts/kconfig/confdata.o
>>>>>>     HOSTCC  scripts/kconfig/expr.o
>>>>>>     LEX     scripts/kconfig/lexer.lex.c
>>>>>>     YACC    scripts/kconfig/parser.tab.[ch]
>>>>>>     HOSTCC  scripts/kconfig/lexer.lex.o
>>>>>>     HOSTCC  scripts/kconfig/parser.tab.o
>>>>>>     HOSTCC  scripts/kconfig/preprocess.o
>>>>>>     HOSTCC  scripts/kconfig/symbol.o
>>>>>>     HOSTCC  scripts/kconfig/util.o
>>>>>>     HOSTLD  scripts/kconfig/conf
>>>>>> *** Default configuration is based on 'x86_64_defconfig'
>>>>>> #
>>>>>> # configuration written to .config
>>>>>> #
>>>>>>
>>>>>> $ grep VHOST .config
>>>>>> # CONFIG_VHOST is not set
>>>>>>
>>>>>>> If yes, what's your build config looks like?
>>>>>>>
>>>>>>> Thanks
>>>>> This was x86. Not sure if that did work before.
>>>>> On s390 this is definitely a regression as the defconfig files
>>>>> for s390 do select VHOST_NET
>>>>>
>>>>> grep VHOST arch/s390/configs/*
>>>>> arch/s390/configs/debug_defconfig:CONFIG_VHOST_NET=m
>>>>> arch/s390/configs/debug_defconfig:CONFIG_VHOST_VSOCK=m
>>>>> arch/s390/configs/defconfig:CONFIG_VHOST_NET=m
>>>>> arch/s390/configs/defconfig:CONFIG_VHOST_VSOCK=m
>>>>>
>>>>> and this worked with 5.6, but does not work with next. Just adding
>>>>> CONFIG_VHOST=m to the defconfig solves the issue, something like
>>>>
>>>> Right, I think we probably need
>>>>
>>>> 1) add CONFIG_VHOST=m to all defconfigs that enables
>>>> CONFIG_VHOST_NET/VSOCK/SCSI.
>>>>
>>>> or
>>>>
>>>> 2) don't use menuconfig for CONFIG_VHOST, let NET/SCSI/VDPA just select it.
>>>>
>>>> Thanks
>>> OK I tried this:
>>>
>>> diff --git a/drivers/vhost/Kconfig b/drivers/vhost/Kconfig
>>> index 2523a1d4290a..a314b900d479 100644
>>> --- a/drivers/vhost/Kconfig
>>> +++ b/drivers/vhost/Kconfig
>>> @@ -19,11 +19,10 @@ menuconfig VHOST
>>>   	  This option is selected by any driver which needs to access
>>>   	  the core of vhost.
>>> -if VHOST
>>> -
>>>   config VHOST_NET
>>>   	tristate "Host kernel accelerator for virtio net"
>>>   	depends on NET && EVENTFD && (TUN || !TUN) && (TAP || !TAP)
>>> +	select VHOST
>>>   	---help---
>>>   	  This kernel module can be loaded in host kernel to accelerate
>>>   	  guest networking with virtio_net. Not to be confused with virtio_net
>>> @@ -35,6 +34,7 @@ config VHOST_NET
>>>   config VHOST_SCSI
>>>   	tristate "VHOST_SCSI TCM fabric driver"
>>>   	depends on TARGET_CORE && EVENTFD
>>> +	select VHOST
>>>   	default n
>>>   	---help---
>>>   	Say M here to enable the vhost_scsi TCM fabric module
>>> @@ -44,6 +44,7 @@ config VHOST_VSOCK
>>>   	tristate "vhost virtio-vsock driver"
>>>   	depends on VSOCKETS && EVENTFD
>>>   	select VIRTIO_VSOCKETS_COMMON
>>> +	select VHOST
>>>   	default n
>>>   	---help---
>>>   	This kernel module can be loaded in the host kernel to provide AF_VSOCK
>>> @@ -57,6 +58,7 @@ config VHOST_VDPA
>>>   	tristate "Vhost driver for vDPA-based backend"
>>>   	depends on EVENTFD
>>>   	select VDPA
>>> +	select VHOST
>>>   	help
>>>   	  This kernel module can be loaded in host kernel to accelerate
>>>   	  guest virtio devices with the vDPA-based backends.
>>> @@ -78,5 +80,3 @@ config VHOST_CROSS_ENDIAN_LEGACY
>>>   	  adds some overhead, it is disabled by default.
>>>   	  If unsure, say "N".
>>> -
>>> -endif
>>>
>>>
>>> But now CONFIG_VHOST is always "y", never "m".
>>> Which I think will make it a built-in.
>>> Didn't figure out why yet.
>>
>>
>> Is it because the dependency of EVENTFD for CONFIG_VHOST?
> 
> Oh no, it's because I forgot to change menuconfig to config.
> 
> 
>> Remove that one for this patch, I can get CONFIG_VHOST=m.

FWIW, the current vhost/linux-next branch seems to work again.
Jason Wang April 2, 2020, 3:22 a.m. UTC | #23
On 2020/4/2 上午12:08, Michael S. Tsirkin wrote:
> On Wed, Apr 01, 2020 at 10:29:32PM +0800, Jason Wang wrote:
>> >From 9b3a5d23b8bf6b0a11e65e688335d782f8e6aa5c Mon Sep 17 00:00:00 2001
>> From: Jason Wang <jasowang@redhat.com>
>> Date: Wed, 1 Apr 2020 22:17:27 +0800
>> Subject: [PATCH] vhost: let CONFIG_VHOST to be selected by drivers
>>
>> The defconfig on some archs enable vhost_net or vhost_vsock by
>> default. So instead of adding CONFIG_VHOST=m to all of those files,
>> simply letting CONFIG_VHOST to be selected by all of the vhost
>> drivers. This fixes the build on the archs with CONFIG_VHOST_NET=m in
>> their defconfig.
>>
>> Signed-off-by: Jason Wang <jasowang@redhat.com>
>> ---
>>   drivers/vhost/Kconfig | 15 +++++++++++----
>>   1 file changed, 11 insertions(+), 4 deletions(-)
>>
>> diff --git a/drivers/vhost/Kconfig b/drivers/vhost/Kconfig
>> index 2523a1d4290a..362b832f5338 100644
>> --- a/drivers/vhost/Kconfig
>> +++ b/drivers/vhost/Kconfig
>> @@ -11,19 +11,23 @@ config VHOST_RING
>>   	  This option is selected by any driver which needs to access
>>   	  the host side of a virtio ring.
>>   
>> -menuconfig VHOST
>> -	tristate "Host kernel accelerator for virtio (VHOST)"
>> -	depends on EVENTFD
>> +config VHOST
>> +	tristate
>>   	select VHOST_IOTLB
>>   	help
>>   	  This option is selected by any driver which needs to access
>>   	  the core of vhost.
>>   
>> -if VHOST
>> +menuconfig VHOST_MENU
>> +	bool "VHOST drivers"
>> +	default y
>> +
>> +if VHOST_MENU
>>   
>>   config VHOST_NET
>>   	tristate "Host kernel accelerator for virtio net"
>>   	depends on NET && EVENTFD && (TUN || !TUN) && (TAP || !TAP)
>> +	select VHOST
>>   	---help---
>>   	  This kernel module can be loaded in host kernel to accelerate
>>   	  guest networking with virtio_net. Not to be confused with virtio_net
>> @@ -35,6 +39,7 @@ config VHOST_NET
>>   config VHOST_SCSI
>>   	tristate "VHOST_SCSI TCM fabric driver"
>>   	depends on TARGET_CORE && EVENTFD
>> +	select VHOST
>>   	default n
>>   	---help---
>>   	Say M here to enable the vhost_scsi TCM fabric module
>> @@ -43,6 +48,7 @@ config VHOST_SCSI
>>   config VHOST_VSOCK
>>   	tristate "vhost virtio-vsock driver"
>>   	depends on VSOCKETS && EVENTFD
>> +	select VHOST
>>   	select VIRTIO_VSOCKETS_COMMON
>>   	default n
>>   	---help---
>> @@ -56,6 +62,7 @@ config VHOST_VSOCK
>>   config VHOST_VDPA
>>   	tristate "Vhost driver for vDPA-based backend"
>>   	depends on EVENTFD
>> +	select VHOST


This part is not squashed.


>>   	select VDPA
>>   	help
>>   	  This kernel module can be loaded in host kernel to accelerate
> OK so I squashed this into the original buggy patch.
> Could you please play with vhost branch of my tree on various
> arches? If it looks ok to you let me know I'll push
> this to next.


With the above part squashed. I've tested all the archs whose defconfig 
have VHOST_NET or VHOST_VSOCK enabled.

All looks fine.

Thanks
Michael S. Tsirkin April 2, 2020, 2:03 p.m. UTC | #24
On Thu, Apr 02, 2020 at 11:22:57AM +0800, Jason Wang wrote:
> 
> On 2020/4/2 上午12:08, Michael S. Tsirkin wrote:
> > On Wed, Apr 01, 2020 at 10:29:32PM +0800, Jason Wang wrote:
> > > >From 9b3a5d23b8bf6b0a11e65e688335d782f8e6aa5c Mon Sep 17 00:00:00 2001
> > > From: Jason Wang <jasowang@redhat.com>
> > > Date: Wed, 1 Apr 2020 22:17:27 +0800
> > > Subject: [PATCH] vhost: let CONFIG_VHOST to be selected by drivers
> > > 
> > > The defconfig on some archs enable vhost_net or vhost_vsock by
> > > default. So instead of adding CONFIG_VHOST=m to all of those files,
> > > simply letting CONFIG_VHOST to be selected by all of the vhost
> > > drivers. This fixes the build on the archs with CONFIG_VHOST_NET=m in
> > > their defconfig.
> > > 
> > > Signed-off-by: Jason Wang <jasowang@redhat.com>
> > > ---
> > >   drivers/vhost/Kconfig | 15 +++++++++++----
> > >   1 file changed, 11 insertions(+), 4 deletions(-)
> > > 
> > > diff --git a/drivers/vhost/Kconfig b/drivers/vhost/Kconfig
> > > index 2523a1d4290a..362b832f5338 100644
> > > --- a/drivers/vhost/Kconfig
> > > +++ b/drivers/vhost/Kconfig
> > > @@ -11,19 +11,23 @@ config VHOST_RING
> > >   	  This option is selected by any driver which needs to access
> > >   	  the host side of a virtio ring.
> > > -menuconfig VHOST
> > > -	tristate "Host kernel accelerator for virtio (VHOST)"
> > > -	depends on EVENTFD
> > > +config VHOST
> > > +	tristate
> > >   	select VHOST_IOTLB
> > >   	help
> > >   	  This option is selected by any driver which needs to access
> > >   	  the core of vhost.
> > > -if VHOST
> > > +menuconfig VHOST_MENU
> > > +	bool "VHOST drivers"
> > > +	default y
> > > +
> > > +if VHOST_MENU
> > >   config VHOST_NET
> > >   	tristate "Host kernel accelerator for virtio net"
> > >   	depends on NET && EVENTFD && (TUN || !TUN) && (TAP || !TAP)
> > > +	select VHOST
> > >   	---help---
> > >   	  This kernel module can be loaded in host kernel to accelerate
> > >   	  guest networking with virtio_net. Not to be confused with virtio_net
> > > @@ -35,6 +39,7 @@ config VHOST_NET
> > >   config VHOST_SCSI
> > >   	tristate "VHOST_SCSI TCM fabric driver"
> > >   	depends on TARGET_CORE && EVENTFD
> > > +	select VHOST
> > >   	default n
> > >   	---help---
> > >   	Say M here to enable the vhost_scsi TCM fabric module
> > > @@ -43,6 +48,7 @@ config VHOST_SCSI
> > >   config VHOST_VSOCK
> > >   	tristate "vhost virtio-vsock driver"
> > >   	depends on VSOCKETS && EVENTFD
> > > +	select VHOST
> > >   	select VIRTIO_VSOCKETS_COMMON
> > >   	default n
> > >   	---help---
> > > @@ -56,6 +62,7 @@ config VHOST_VSOCK
> > >   config VHOST_VDPA
> > >   	tristate "Vhost driver for vDPA-based backend"
> > >   	depends on EVENTFD
> > > +	select VHOST
> 
> 
> This part is not squashed.
> 
> 
> > >   	select VDPA
> > >   	help
> > >   	  This kernel module can be loaded in host kernel to accelerate
> > OK so I squashed this into the original buggy patch.
> > Could you please play with vhost branch of my tree on various
> > arches? If it looks ok to you let me know I'll push
> > this to next.
> 
> 
> With the above part squashed. I've tested all the archs whose defconfig have
> VHOST_NET or VHOST_VSOCK enabled.
> 
> All looks fine.
> 
> Thanks


I'm a bit confused. So is the next tag in my tree ok now?
Jason Wang April 2, 2020, 2:23 p.m. UTC | #25
On 2020/4/2 下午10:03, Michael S. Tsirkin wrote:
> On Thu, Apr 02, 2020 at 11:22:57AM +0800, Jason Wang wrote:
>> On 2020/4/2 上午12:08, Michael S. Tsirkin wrote:
>>> On Wed, Apr 01, 2020 at 10:29:32PM +0800, Jason Wang wrote:
>>>> >From 9b3a5d23b8bf6b0a11e65e688335d782f8e6aa5c Mon Sep 17 00:00:00 2001
>>>> From: Jason Wang <jasowang@redhat.com>
>>>> Date: Wed, 1 Apr 2020 22:17:27 +0800
>>>> Subject: [PATCH] vhost: let CONFIG_VHOST to be selected by drivers
>>>>
>>>> The defconfig on some archs enable vhost_net or vhost_vsock by
>>>> default. So instead of adding CONFIG_VHOST=m to all of those files,
>>>> simply letting CONFIG_VHOST to be selected by all of the vhost
>>>> drivers. This fixes the build on the archs with CONFIG_VHOST_NET=m in
>>>> their defconfig.
>>>>
>>>> Signed-off-by: Jason Wang <jasowang@redhat.com>
>>>> ---
>>>>    drivers/vhost/Kconfig | 15 +++++++++++----
>>>>    1 file changed, 11 insertions(+), 4 deletions(-)
>>>>
>>>> diff --git a/drivers/vhost/Kconfig b/drivers/vhost/Kconfig
>>>> index 2523a1d4290a..362b832f5338 100644
>>>> --- a/drivers/vhost/Kconfig
>>>> +++ b/drivers/vhost/Kconfig
>>>> @@ -11,19 +11,23 @@ config VHOST_RING
>>>>    	  This option is selected by any driver which needs to access
>>>>    	  the host side of a virtio ring.
>>>> -menuconfig VHOST
>>>> -	tristate "Host kernel accelerator for virtio (VHOST)"
>>>> -	depends on EVENTFD
>>>> +config VHOST
>>>> +	tristate
>>>>    	select VHOST_IOTLB
>>>>    	help
>>>>    	  This option is selected by any driver which needs to access
>>>>    	  the core of vhost.
>>>> -if VHOST
>>>> +menuconfig VHOST_MENU
>>>> +	bool "VHOST drivers"
>>>> +	default y
>>>> +
>>>> +if VHOST_MENU
>>>>    config VHOST_NET
>>>>    	tristate "Host kernel accelerator for virtio net"
>>>>    	depends on NET && EVENTFD && (TUN || !TUN) && (TAP || !TAP)
>>>> +	select VHOST
>>>>    	---help---
>>>>    	  This kernel module can be loaded in host kernel to accelerate
>>>>    	  guest networking with virtio_net. Not to be confused with virtio_net
>>>> @@ -35,6 +39,7 @@ config VHOST_NET
>>>>    config VHOST_SCSI
>>>>    	tristate "VHOST_SCSI TCM fabric driver"
>>>>    	depends on TARGET_CORE && EVENTFD
>>>> +	select VHOST
>>>>    	default n
>>>>    	---help---
>>>>    	Say M here to enable the vhost_scsi TCM fabric module
>>>> @@ -43,6 +48,7 @@ config VHOST_SCSI
>>>>    config VHOST_VSOCK
>>>>    	tristate "vhost virtio-vsock driver"
>>>>    	depends on VSOCKETS && EVENTFD
>>>> +	select VHOST
>>>>    	select VIRTIO_VSOCKETS_COMMON
>>>>    	default n
>>>>    	---help---
>>>> @@ -56,6 +62,7 @@ config VHOST_VSOCK
>>>>    config VHOST_VDPA
>>>>    	tristate "Vhost driver for vDPA-based backend"
>>>>    	depends on EVENTFD
>>>> +	select VHOST
>>
>> This part is not squashed.
>>
>>
>>>>    	select VDPA
>>>>    	help
>>>>    	  This kernel module can be loaded in host kernel to accelerate
>>> OK so I squashed this into the original buggy patch.
>>> Could you please play with vhost branch of my tree on various
>>> arches? If it looks ok to you let me know I'll push
>>> this to next.
>>
>> With the above part squashed. I've tested all the archs whose defconfig have
>> VHOST_NET or VHOST_VSOCK enabled.
>>
>> All looks fine.
>>
>> Thanks
>
> I'm a bit confused. So is the next tag in my tree ok now?


Still need to select CONFIG_VHOST for  CONFIG_VHOST_VDPA. Others are ok.

Thanks


>
Michael S. Tsirkin April 2, 2020, 2:38 p.m. UTC | #26
On Thu, Apr 02, 2020 at 10:23:59PM +0800, Jason Wang wrote:
> 
> On 2020/4/2 下午10:03, Michael S. Tsirkin wrote:
> > On Thu, Apr 02, 2020 at 11:22:57AM +0800, Jason Wang wrote:
> > > On 2020/4/2 上午12:08, Michael S. Tsirkin wrote:
> > > > On Wed, Apr 01, 2020 at 10:29:32PM +0800, Jason Wang wrote:
> > > > > >From 9b3a5d23b8bf6b0a11e65e688335d782f8e6aa5c Mon Sep 17 00:00:00 2001
> > > > > From: Jason Wang <jasowang@redhat.com>
> > > > > Date: Wed, 1 Apr 2020 22:17:27 +0800
> > > > > Subject: [PATCH] vhost: let CONFIG_VHOST to be selected by drivers
> > > > > 
> > > > > The defconfig on some archs enable vhost_net or vhost_vsock by
> > > > > default. So instead of adding CONFIG_VHOST=m to all of those files,
> > > > > simply letting CONFIG_VHOST to be selected by all of the vhost
> > > > > drivers. This fixes the build on the archs with CONFIG_VHOST_NET=m in
> > > > > their defconfig.
> > > > > 
> > > > > Signed-off-by: Jason Wang <jasowang@redhat.com>
> > > > > ---
> > > > >    drivers/vhost/Kconfig | 15 +++++++++++----
> > > > >    1 file changed, 11 insertions(+), 4 deletions(-)
> > > > > 
> > > > > diff --git a/drivers/vhost/Kconfig b/drivers/vhost/Kconfig
> > > > > index 2523a1d4290a..362b832f5338 100644
> > > > > --- a/drivers/vhost/Kconfig
> > > > > +++ b/drivers/vhost/Kconfig
> > > > > @@ -11,19 +11,23 @@ config VHOST_RING
> > > > >    	  This option is selected by any driver which needs to access
> > > > >    	  the host side of a virtio ring.
> > > > > -menuconfig VHOST
> > > > > -	tristate "Host kernel accelerator for virtio (VHOST)"
> > > > > -	depends on EVENTFD
> > > > > +config VHOST
> > > > > +	tristate
> > > > >    	select VHOST_IOTLB
> > > > >    	help
> > > > >    	  This option is selected by any driver which needs to access
> > > > >    	  the core of vhost.
> > > > > -if VHOST
> > > > > +menuconfig VHOST_MENU
> > > > > +	bool "VHOST drivers"
> > > > > +	default y
> > > > > +
> > > > > +if VHOST_MENU
> > > > >    config VHOST_NET
> > > > >    	tristate "Host kernel accelerator for virtio net"
> > > > >    	depends on NET && EVENTFD && (TUN || !TUN) && (TAP || !TAP)
> > > > > +	select VHOST
> > > > >    	---help---
> > > > >    	  This kernel module can be loaded in host kernel to accelerate
> > > > >    	  guest networking with virtio_net. Not to be confused with virtio_net
> > > > > @@ -35,6 +39,7 @@ config VHOST_NET
> > > > >    config VHOST_SCSI
> > > > >    	tristate "VHOST_SCSI TCM fabric driver"
> > > > >    	depends on TARGET_CORE && EVENTFD
> > > > > +	select VHOST
> > > > >    	default n
> > > > >    	---help---
> > > > >    	Say M here to enable the vhost_scsi TCM fabric module
> > > > > @@ -43,6 +48,7 @@ config VHOST_SCSI
> > > > >    config VHOST_VSOCK
> > > > >    	tristate "vhost virtio-vsock driver"
> > > > >    	depends on VSOCKETS && EVENTFD
> > > > > +	select VHOST
> > > > >    	select VIRTIO_VSOCKETS_COMMON
> > > > >    	default n
> > > > >    	---help---
> > > > > @@ -56,6 +62,7 @@ config VHOST_VSOCK
> > > > >    config VHOST_VDPA
> > > > >    	tristate "Vhost driver for vDPA-based backend"
> > > > >    	depends on EVENTFD
> > > > > +	select VHOST
> > > 
> > > This part is not squashed.
> > > 
> > > 
> > > > >    	select VDPA
> > > > >    	help
> > > > >    	  This kernel module can be loaded in host kernel to accelerate
> > > > OK so I squashed this into the original buggy patch.
> > > > Could you please play with vhost branch of my tree on various
> > > > arches? If it looks ok to you let me know I'll push
> > > > this to next.
> > > 
> > > With the above part squashed. I've tested all the archs whose defconfig have
> > > VHOST_NET or VHOST_VSOCK enabled.
> > > 
> > > All looks fine.
> > > 
> > > Thanks
> > 
> > I'm a bit confused. So is the next tag in my tree ok now?
> 
> 
> Still need to select CONFIG_VHOST for  CONFIG_VHOST_VDPA. Others are ok.
> 
> Thanks


Oh like this then?

diff --git a/drivers/vhost/Kconfig b/drivers/vhost/Kconfig
index bdd270fede26..cb6b17323eb2 100644
--- a/drivers/vhost/Kconfig
+++ b/drivers/vhost/Kconfig
@@ -61,6 +63,7 @@ config VHOST_VSOCK
 config VHOST_VDPA
 	tristate "Vhost driver for vDPA-based backend"
 	depends on EVENTFD
+	select VHOST
 	select VDPA
 	help
 	  This kernel module can be loaded in host kernel to accelerate
Jason Wang April 2, 2020, 2:56 p.m. UTC | #27
On 2020/4/2 下午10:38, Michael S. Tsirkin wrote:
> On Thu, Apr 02, 2020 at 10:23:59PM +0800, Jason Wang wrote:
>> On 2020/4/2 下午10:03, Michael S. Tsirkin wrote:
>>> On Thu, Apr 02, 2020 at 11:22:57AM +0800, Jason Wang wrote:
>>>> On 2020/4/2 上午12:08, Michael S. Tsirkin wrote:
>>>>> On Wed, Apr 01, 2020 at 10:29:32PM +0800, Jason Wang wrote:
>>>>>> >From 9b3a5d23b8bf6b0a11e65e688335d782f8e6aa5c Mon Sep 17 00:00:00 2001
>>>>>> From: Jason Wang <jasowang@redhat.com>
>>>>>> Date: Wed, 1 Apr 2020 22:17:27 +0800
>>>>>> Subject: [PATCH] vhost: let CONFIG_VHOST to be selected by drivers
>>>>>>
>>>>>> The defconfig on some archs enable vhost_net or vhost_vsock by
>>>>>> default. So instead of adding CONFIG_VHOST=m to all of those files,
>>>>>> simply letting CONFIG_VHOST to be selected by all of the vhost
>>>>>> drivers. This fixes the build on the archs with CONFIG_VHOST_NET=m in
>>>>>> their defconfig.
>>>>>>
>>>>>> Signed-off-by: Jason Wang <jasowang@redhat.com>
>>>>>> ---
>>>>>>     drivers/vhost/Kconfig | 15 +++++++++++----
>>>>>>     1 file changed, 11 insertions(+), 4 deletions(-)
>>>>>>
>>>>>> diff --git a/drivers/vhost/Kconfig b/drivers/vhost/Kconfig
>>>>>> index 2523a1d4290a..362b832f5338 100644
>>>>>> --- a/drivers/vhost/Kconfig
>>>>>> +++ b/drivers/vhost/Kconfig
>>>>>> @@ -11,19 +11,23 @@ config VHOST_RING
>>>>>>     	  This option is selected by any driver which needs to access
>>>>>>     	  the host side of a virtio ring.
>>>>>> -menuconfig VHOST
>>>>>> -	tristate "Host kernel accelerator for virtio (VHOST)"
>>>>>> -	depends on EVENTFD
>>>>>> +config VHOST
>>>>>> +	tristate
>>>>>>     	select VHOST_IOTLB
>>>>>>     	help
>>>>>>     	  This option is selected by any driver which needs to access
>>>>>>     	  the core of vhost.
>>>>>> -if VHOST
>>>>>> +menuconfig VHOST_MENU
>>>>>> +	bool "VHOST drivers"
>>>>>> +	default y
>>>>>> +
>>>>>> +if VHOST_MENU
>>>>>>     config VHOST_NET
>>>>>>     	tristate "Host kernel accelerator for virtio net"
>>>>>>     	depends on NET && EVENTFD && (TUN || !TUN) && (TAP || !TAP)
>>>>>> +	select VHOST
>>>>>>     	---help---
>>>>>>     	  This kernel module can be loaded in host kernel to accelerate
>>>>>>     	  guest networking with virtio_net. Not to be confused with virtio_net
>>>>>> @@ -35,6 +39,7 @@ config VHOST_NET
>>>>>>     config VHOST_SCSI
>>>>>>     	tristate "VHOST_SCSI TCM fabric driver"
>>>>>>     	depends on TARGET_CORE && EVENTFD
>>>>>> +	select VHOST
>>>>>>     	default n
>>>>>>     	---help---
>>>>>>     	Say M here to enable the vhost_scsi TCM fabric module
>>>>>> @@ -43,6 +48,7 @@ config VHOST_SCSI
>>>>>>     config VHOST_VSOCK
>>>>>>     	tristate "vhost virtio-vsock driver"
>>>>>>     	depends on VSOCKETS && EVENTFD
>>>>>> +	select VHOST
>>>>>>     	select VIRTIO_VSOCKETS_COMMON
>>>>>>     	default n
>>>>>>     	---help---
>>>>>> @@ -56,6 +62,7 @@ config VHOST_VSOCK
>>>>>>     config VHOST_VDPA
>>>>>>     	tristate "Vhost driver for vDPA-based backend"
>>>>>>     	depends on EVENTFD
>>>>>> +	select VHOST
>>>> This part is not squashed.
>>>>
>>>>
>>>>>>     	select VDPA
>>>>>>     	help
>>>>>>     	  This kernel module can be loaded in host kernel to accelerate
>>>>> OK so I squashed this into the original buggy patch.
>>>>> Could you please play with vhost branch of my tree on various
>>>>> arches? If it looks ok to you let me know I'll push
>>>>> this to next.
>>>> With the above part squashed. I've tested all the archs whose defconfig have
>>>> VHOST_NET or VHOST_VSOCK enabled.
>>>>
>>>> All looks fine.
>>>>
>>>> Thanks
>>> I'm a bit confused. So is the next tag in my tree ok now?
>>
>> Still need to select CONFIG_VHOST for  CONFIG_VHOST_VDPA. Others are ok.
>>
>> Thanks
>
> Oh like this then?
>
> diff --git a/drivers/vhost/Kconfig b/drivers/vhost/Kconfig
> index bdd270fede26..cb6b17323eb2 100644
> --- a/drivers/vhost/Kconfig
> +++ b/drivers/vhost/Kconfig
> @@ -61,6 +63,7 @@ config VHOST_VSOCK
>   config VHOST_VDPA
>   	tristate "Vhost driver for vDPA-based backend"
>   	depends on EVENTFD
> +	select VHOST
>   	select VDPA
>   	help
>   	  This kernel module can be loaded in host kernel to accelerate


Yes.

Thanks


>

Patch
diff mbox series

diff --git a/arch/arm/kvm/Kconfig b/arch/arm/kvm/Kconfig
index f591026347a5..be97393761bf 100644
--- a/arch/arm/kvm/Kconfig
+++ b/arch/arm/kvm/Kconfig
@@ -54,6 +54,4 @@  config KVM_ARM_HOST
 	---help---
 	  Provides host support for ARM processors.
 
-source "drivers/vhost/Kconfig"
-
 endif # VIRTUALIZATION
diff --git a/arch/arm64/kvm/Kconfig b/arch/arm64/kvm/Kconfig
index a475c68cbfec..449386d76441 100644
--- a/arch/arm64/kvm/Kconfig
+++ b/arch/arm64/kvm/Kconfig
@@ -64,6 +64,4 @@  config KVM_ARM_PMU
 config KVM_INDIRECT_VECTORS
        def_bool KVM && (HARDEN_BRANCH_PREDICTOR || HARDEN_EL2_VECTORS)
 
-source "drivers/vhost/Kconfig"
-
 endif # VIRTUALIZATION
diff --git a/arch/mips/kvm/Kconfig b/arch/mips/kvm/Kconfig
index eac25aef21e0..b91d145aa2d5 100644
--- a/arch/mips/kvm/Kconfig
+++ b/arch/mips/kvm/Kconfig
@@ -72,6 +72,4 @@  config KVM_MIPS_DEBUG_COP0_COUNTERS
 
 	  If unsure, say N.
 
-source "drivers/vhost/Kconfig"
-
 endif # VIRTUALIZATION
diff --git a/arch/powerpc/kvm/Kconfig b/arch/powerpc/kvm/Kconfig
index 711fca9bc6f0..12885eda324e 100644
--- a/arch/powerpc/kvm/Kconfig
+++ b/arch/powerpc/kvm/Kconfig
@@ -204,6 +204,4 @@  config KVM_XIVE
 	default y
 	depends on KVM_XICS && PPC_XIVE_NATIVE && KVM_BOOK3S_HV_POSSIBLE
 
-source "drivers/vhost/Kconfig"
-
 endif # VIRTUALIZATION
diff --git a/arch/s390/kvm/Kconfig b/arch/s390/kvm/Kconfig
index d3db3d7ed077..def3b60f1fe8 100644
--- a/arch/s390/kvm/Kconfig
+++ b/arch/s390/kvm/Kconfig
@@ -55,8 +55,4 @@  config KVM_S390_UCONTROL
 
 	  If unsure, say N.
 
-# OK, it's a little counter-intuitive to do this, but it puts it neatly under
-# the virtualization menu.
-source "drivers/vhost/Kconfig"
-
 endif # VIRTUALIZATION
diff --git a/arch/x86/kvm/Kconfig b/arch/x86/kvm/Kconfig
index 991019d5eee1..0dfe70e17af9 100644
--- a/arch/x86/kvm/Kconfig
+++ b/arch/x86/kvm/Kconfig
@@ -94,8 +94,4 @@  config KVM_MMU_AUDIT
 	 This option adds a R/W kVM module parameter 'mmu_audit', which allows
 	 auditing of KVM MMU events at runtime.
 
-# OK, it's a little counter-intuitive to do this, but it puts it neatly under
-# the virtualization menu.
-source "drivers/vhost/Kconfig"
-
 endif # VIRTUALIZATION
diff --git a/drivers/Kconfig b/drivers/Kconfig
index 8befa53f43be..7a6d8b2b68b4 100644
--- a/drivers/Kconfig
+++ b/drivers/Kconfig
@@ -138,6 +138,8 @@  source "drivers/virt/Kconfig"
 
 source "drivers/virtio/Kconfig"
 
+source "drivers/vhost/Kconfig"
+
 source "drivers/hv/Kconfig"
 
 source "drivers/xen/Kconfig"
diff --git a/drivers/misc/mic/Kconfig b/drivers/misc/mic/Kconfig
index b6841ba6d922..8f201d019f5a 100644
--- a/drivers/misc/mic/Kconfig
+++ b/drivers/misc/mic/Kconfig
@@ -133,8 +133,4 @@  config VOP
 	  OS and tools for MIC to use with this driver are available from
 	  <http://software.intel.com/en-us/mic-developer>.
 
-if VOP
-source "drivers/vhost/Kconfig.vringh"
-endif
-
 endmenu
diff --git a/drivers/net/caif/Kconfig b/drivers/net/caif/Kconfig
index e74e2bb61236..9db0570c5beb 100644
--- a/drivers/net/caif/Kconfig
+++ b/drivers/net/caif/Kconfig
@@ -58,8 +58,4 @@  config CAIF_VIRTIO
 	---help---
 	  The CAIF driver for CAIF over Virtio.
 
-if CAIF_VIRTIO
-source "drivers/vhost/Kconfig.vringh"
-endif
-
 endif # CAIF_DRIVERS
diff --git a/drivers/vhost/Kconfig b/drivers/vhost/Kconfig
index 3d03ccbd1adc..4aef10a54cd1 100644
--- a/drivers/vhost/Kconfig
+++ b/drivers/vhost/Kconfig
@@ -1,8 +1,20 @@ 
 # SPDX-License-Identifier: GPL-2.0-only
+config VHOST_RING
+	tristate
+	help
+	  This option is selected by any driver which needs to access
+	  the host side of a virtio ring.
+
+menuconfig VHOST
+	tristate "Host kernel accelerator for virtio (VHOST)"
+	help
+	  This option is selected by any driver which needs to access
+	  the core of vhost.
+if VHOST
+
 config VHOST_NET
 	tristate "Host kernel accelerator for virtio net"
 	depends on NET && EVENTFD && (TUN || !TUN) && (TAP || !TAP)
-	select VHOST
 	---help---
 	  This kernel module can be loaded in host kernel to accelerate
 	  guest networking with virtio_net. Not to be confused with virtio_net
@@ -14,7 +26,6 @@  config VHOST_NET
 config VHOST_SCSI
 	tristate "VHOST_SCSI TCM fabric driver"
 	depends on TARGET_CORE && EVENTFD
-	select VHOST
 	default n
 	---help---
 	Say M here to enable the vhost_scsi TCM fabric module
@@ -24,7 +35,6 @@  config VHOST_VSOCK
 	tristate "vhost virtio-vsock driver"
 	depends on VSOCKETS && EVENTFD
 	select VIRTIO_VSOCKETS_COMMON
-	select VHOST
 	default n
 	---help---
 	This kernel module can be loaded in the host kernel to provide AF_VSOCK
@@ -34,12 +44,6 @@  config VHOST_VSOCK
 	To compile this driver as a module, choose M here: the module will be called
 	vhost_vsock.
 
-config VHOST
-	tristate
-	---help---
-	  This option is selected by any driver which needs to access
-	  the core of vhost.
-
 config VHOST_CROSS_ENDIAN_LEGACY
 	bool "Cross-endian support for vhost"
 	default n
@@ -54,3 +58,4 @@  config VHOST_CROSS_ENDIAN_LEGACY
 	  adds some overhead, it is disabled by default.
 
 	  If unsure, say "N".
+endif
diff --git a/drivers/vhost/Kconfig.vringh b/drivers/vhost/Kconfig.vringh
deleted file mode 100644
index c1fe36a9b8d4..000000000000
--- a/drivers/vhost/Kconfig.vringh
+++ /dev/null
@@ -1,6 +0,0 @@ 
-# SPDX-License-Identifier: GPL-2.0-only
-config VHOST_RING
-	tristate
-	---help---
-	  This option is selected by any driver which needs to access
-	  the host side of a virtio ring.