Patchwork [3/3] vfio: Enable vfio-pci and mark supported

login
register
mail settings
Submitter Alex Williamson
Date Aug. 1, 2012, 5:18 a.m.
Message ID <20120801051821.22163.64385.stgit@bling.home>
Download mbox | patch
Permalink /patch/174388/
State New
Headers show

Comments

Alex Williamson - Aug. 1, 2012, 5:18 a.m.
Signed-off-by: Alex Williamson <alex.williamson@redhat.com>
---

 MAINTAINERS           |    5 +++++
 configure             |   12 ++++++++++++
 hw/i386/Makefile.objs |    1 +
 3 files changed, 18 insertions(+)
Jan Kiszka - Aug. 1, 2012, 7:15 a.m.
On 2012-08-01 07:18, Alex Williamson wrote:
> Signed-off-by: Alex Williamson <alex.williamson@redhat.com>
> ---
> 
>  MAINTAINERS           |    5 +++++
>  configure             |   12 ++++++++++++
>  hw/i386/Makefile.objs |    1 +
>  3 files changed, 18 insertions(+)
> 
> diff --git a/MAINTAINERS b/MAINTAINERS
> index 2d219d2..9680d69 100644
> --- a/MAINTAINERS
> +++ b/MAINTAINERS
> @@ -460,6 +460,11 @@ M: Gerd Hoffmann <kraxel@redhat.com>
>  S: Maintained
>  F: hw/usb*
>  
> +VFIO
> +M: Alex Williamson <alex.williamson@redhat.com>
> +S: Supported
> +F: hw/vfio*
> +
>  vhost
>  M: Michael S. Tsirkin <mst@redhat.com>
>  S: Supported
> diff --git a/configure b/configure
> index c65b5f6..81108dc 100755
> --- a/configure
> +++ b/configure
> @@ -143,6 +143,7 @@ attr=""
>  libattr=""
>  xfs=""
>  
> +vfio_pci="no"
>  vhost_net="no"
>  kvm="no"
>  gprof="no"
> @@ -489,6 +490,7 @@ Haiku)
>    usb="linux"
>    kvm="yes"
>    vhost_net="yes"
> +  vfio_pci="yes"
>    if [ "$cpu" = "i386" -o "$cpu" = "x86_64" ] ; then
>      audio_possible_drivers="$audio_possible_drivers fmod"
>    fi
> @@ -824,6 +826,10 @@ for opt do
>    ;;
>    --disable-guest-agent) guest_agent="no"
>    ;;
> +  --disable-vfio-pci) vfio_pci="no"
> +  ;;
> +  --enable-vfio-pci) vfio_pci="yes"
> +  ;;

Do we need this level of control? Open question I'm just wondering every
time a new feature gets added together with --disable/--enable switches.

>    *) echo "ERROR: unknown option $opt"; show_help="yes"
>    ;;
>    esac
> @@ -1112,6 +1118,8 @@ echo "  --disable-guest-agent    disable building of the QEMU Guest Agent"
>  echo "  --enable-guest-agent     enable building of the QEMU Guest Agent"
>  echo "  --with-coroutine=BACKEND coroutine backend. Supported options:"
>  echo "                           gthread, ucontext, sigaltstack, windows"
> +echo "  --disable-vfio-pci       disable vfio pci device assignement support"
> +echo "  --enable-vfio-pci        enable vfio pci device assignment support"
>  echo ""
>  echo "NOTE: The object files are built at the place where configure is launched"
>  exit 1
> @@ -3072,6 +3080,7 @@ echo "OpenGL support    $opengl"
>  echo "libiscsi support  $libiscsi"
>  echo "build guest agent $guest_agent"
>  echo "coroutine backend $coroutine_backend"
> +echo "VFIO PCI support  $vfio_pci"
>  
>  if test "$sdl_too_old" = "yes"; then
>  echo "-> Your SDL version is too old - please upgrade to have SDL support"
> @@ -3754,6 +3763,9 @@ case "$target_arch2" in
>    *)
>      echo "CONFIG_NO_XEN=y" >> $config_target_mak
>  esac
> +if test "$vfio_pci" = "yes" -a "$target_softmmu" = "yes" ; then
> +  echo "CONFIG_VFIO_PCI=y" >> $config_target_mak
> +fi

Does this already somehow depend on host == Linux? If not, you may break
the others.

>  case "$target_arch2" in
>    i386|x86_64|ppcemb|ppc|ppc64|s390x)
>      # Make sure the target and host cpus are compatible
> diff --git a/hw/i386/Makefile.objs b/hw/i386/Makefile.objs
> index 8c764bb..a2783ef 100644
> --- a/hw/i386/Makefile.objs
> +++ b/hw/i386/Makefile.objs
> @@ -11,5 +11,6 @@ obj-$(CONFIG_XEN_PCI_PASSTHROUGH) += xen-host-pci-device.o
>  obj-$(CONFIG_XEN_PCI_PASSTHROUGH) += xen_pt.o xen_pt_config_init.o xen_pt_msi.o
>  obj-y += kvm/
>  obj-$(CONFIG_SPICE) += qxl.o qxl-logger.o qxl-render.o
> +obj-$(CONFIG_VFIO_PCI) += vfio_pci.o
>  
>  obj-y := $(addprefix ../,$(obj-y))
> 

Jan
Alex Williamson - Aug. 1, 2012, 6:14 p.m.
On Wed, 2012-08-01 at 09:15 +0200, Jan Kiszka wrote:
> On 2012-08-01 07:18, Alex Williamson wrote:
> > Signed-off-by: Alex Williamson <alex.williamson@redhat.com>
> > ---
> > 
> >  MAINTAINERS           |    5 +++++
> >  configure             |   12 ++++++++++++
> >  hw/i386/Makefile.objs |    1 +
> >  3 files changed, 18 insertions(+)
> > 
> > diff --git a/MAINTAINERS b/MAINTAINERS
> > index 2d219d2..9680d69 100644
> > --- a/MAINTAINERS
> > +++ b/MAINTAINERS
> > @@ -460,6 +460,11 @@ M: Gerd Hoffmann <kraxel@redhat.com>
> >  S: Maintained
> >  F: hw/usb*
> >  
> > +VFIO
> > +M: Alex Williamson <alex.williamson@redhat.com>
> > +S: Supported
> > +F: hw/vfio*
> > +
> >  vhost
> >  M: Michael S. Tsirkin <mst@redhat.com>
> >  S: Supported
> > diff --git a/configure b/configure
> > index c65b5f6..81108dc 100755
> > --- a/configure
> > +++ b/configure
> > @@ -143,6 +143,7 @@ attr=""
> >  libattr=""
> >  xfs=""
> >  
> > +vfio_pci="no"
> >  vhost_net="no"
> >  kvm="no"
> >  gprof="no"
> > @@ -489,6 +490,7 @@ Haiku)
> >    usb="linux"
> >    kvm="yes"
> >    vhost_net="yes"
> > +  vfio_pci="yes"
> >    if [ "$cpu" = "i386" -o "$cpu" = "x86_64" ] ; then
> >      audio_possible_drivers="$audio_possible_drivers fmod"
> >    fi
> > @@ -824,6 +826,10 @@ for opt do
> >    ;;
> >    --disable-guest-agent) guest_agent="no"
> >    ;;
> > +  --disable-vfio-pci) vfio_pci="no"
> > +  ;;
> > +  --enable-vfio-pci) vfio_pci="yes"
> > +  ;;
> 
> Do we need this level of control? Open question I'm just wondering every
> time a new feature gets added together with --disable/--enable switches.

Well, I could certainly understand if some downstream wanted to ship a
qemu that didn't enable device assignment.  I'm sure they'd rather have
a config option to do that instead of needing to modify code.  I
generally find --enable useful to force an error and tell me what I'm
missing when I specifically want a feature rather than having it
silently disabled.  

> >    *) echo "ERROR: unknown option $opt"; show_help="yes"
> >    ;;
> >    esac
> > @@ -1112,6 +1118,8 @@ echo "  --disable-guest-agent    disable building of the QEMU Guest Agent"
> >  echo "  --enable-guest-agent     enable building of the QEMU Guest Agent"
> >  echo "  --with-coroutine=BACKEND coroutine backend. Supported options:"
> >  echo "                           gthread, ucontext, sigaltstack, windows"
> > +echo "  --disable-vfio-pci       disable vfio pci device assignement support"
> > +echo "  --enable-vfio-pci        enable vfio pci device assignment support"
> >  echo ""
> >  echo "NOTE: The object files are built at the place where configure is launched"
> >  exit 1
> > @@ -3072,6 +3080,7 @@ echo "OpenGL support    $opengl"
> >  echo "libiscsi support  $libiscsi"
> >  echo "build guest agent $guest_agent"
> >  echo "coroutine backend $coroutine_backend"
> > +echo "VFIO PCI support  $vfio_pci"
> >  
> >  if test "$sdl_too_old" = "yes"; then
> >  echo "-> Your SDL version is too old - please upgrade to have SDL support"
> > @@ -3754,6 +3763,9 @@ case "$target_arch2" in
> >    *)
> >      echo "CONFIG_NO_XEN=y" >> $config_target_mak
> >  esac
> > +if test "$vfio_pci" = "yes" -a "$target_softmmu" = "yes" ; then
> > +  echo "CONFIG_VFIO_PCI=y" >> $config_target_mak
> > +fi
> 
> Does this already somehow depend on host == Linux? If not, you may break
> the others.

Hmm, probably missing that, I'll look where to add it.  Thanks,

Alex
Alex Williamson - Aug. 1, 2012, 7:40 p.m.
On Wed, 2012-08-01 at 12:14 -0600, Alex Williamson wrote:
> On Wed, 2012-08-01 at 09:15 +0200, Jan Kiszka wrote:
> > On 2012-08-01 07:18, Alex Williamson wrote:
> > > Signed-off-by: Alex Williamson <alex.williamson@redhat.com>
> > > ---
> > > 
> > >  MAINTAINERS           |    5 +++++
> > >  configure             |   12 ++++++++++++
> > >  hw/i386/Makefile.objs |    1 +
> > >  3 files changed, 18 insertions(+)
> > > 
> > > diff --git a/MAINTAINERS b/MAINTAINERS
> > > index 2d219d2..9680d69 100644
> > > --- a/MAINTAINERS
> > > +++ b/MAINTAINERS
> > > @@ -460,6 +460,11 @@ M: Gerd Hoffmann <kraxel@redhat.com>
> > >  S: Maintained
> > >  F: hw/usb*
> > >  
> > > +VFIO
> > > +M: Alex Williamson <alex.williamson@redhat.com>
> > > +S: Supported
> > > +F: hw/vfio*
> > > +
> > >  vhost
> > >  M: Michael S. Tsirkin <mst@redhat.com>
> > >  S: Supported
> > > diff --git a/configure b/configure
> > > index c65b5f6..81108dc 100755
> > > --- a/configure
> > > +++ b/configure
> > > @@ -143,6 +143,7 @@ attr=""
> > >  libattr=""
> > >  xfs=""
> > >  
> > > +vfio_pci="no"
> > >  vhost_net="no"
> > >  kvm="no"
> > >  gprof="no"
> > > @@ -489,6 +490,7 @@ Haiku)
> > >    usb="linux"
> > >    kvm="yes"
> > >    vhost_net="yes"
> > > +  vfio_pci="yes"
> > >    if [ "$cpu" = "i386" -o "$cpu" = "x86_64" ] ; then
> > >      audio_possible_drivers="$audio_possible_drivers fmod"
> > >    fi
> > > @@ -824,6 +826,10 @@ for opt do
> > >    ;;
> > >    --disable-guest-agent) guest_agent="no"
> > >    ;;
> > > +  --disable-vfio-pci) vfio_pci="no"
> > > +  ;;
> > > +  --enable-vfio-pci) vfio_pci="yes"
> > > +  ;;
> > 
> > Do we need this level of control? Open question I'm just wondering every
> > time a new feature gets added together with --disable/--enable switches.
> 
> Well, I could certainly understand if some downstream wanted to ship a
> qemu that didn't enable device assignment.  I'm sure they'd rather have
> a config option to do that instead of needing to modify code.  I
> generally find --enable useful to force an error and tell me what I'm
> missing when I specifically want a feature rather than having it
> silently disabled.  
> 
> > >    *) echo "ERROR: unknown option $opt"; show_help="yes"
> > >    ;;
> > >    esac
> > > @@ -1112,6 +1118,8 @@ echo "  --disable-guest-agent    disable building of the QEMU Guest Agent"
> > >  echo "  --enable-guest-agent     enable building of the QEMU Guest Agent"
> > >  echo "  --with-coroutine=BACKEND coroutine backend. Supported options:"
> > >  echo "                           gthread, ucontext, sigaltstack, windows"
> > > +echo "  --disable-vfio-pci       disable vfio pci device assignement support"
> > > +echo "  --enable-vfio-pci        enable vfio pci device assignment support"
> > >  echo ""
> > >  echo "NOTE: The object files are built at the place where configure is launched"
> > >  exit 1
> > > @@ -3072,6 +3080,7 @@ echo "OpenGL support    $opengl"
> > >  echo "libiscsi support  $libiscsi"
> > >  echo "build guest agent $guest_agent"
> > >  echo "coroutine backend $coroutine_backend"
> > > +echo "VFIO PCI support  $vfio_pci"
> > >  
> > >  if test "$sdl_too_old" = "yes"; then
> > >  echo "-> Your SDL version is too old - please upgrade to have SDL support"
> > > @@ -3754,6 +3763,9 @@ case "$target_arch2" in
> > >    *)
> > >      echo "CONFIG_NO_XEN=y" >> $config_target_mak
> > >  esac
> > > +if test "$vfio_pci" = "yes" -a "$target_softmmu" = "yes" ; then
> > > +  echo "CONFIG_VFIO_PCI=y" >> $config_target_mak
> > > +fi
> > 
> > Does this already somehow depend on host == Linux? If not, you may break
> > the others.
> 
> Hmm, probably missing that, I'll look where to add it.  Thanks,

Or I'm just forgetful.  This is handled by the vfio_pci="yes" in the
second chunk of configure above.  Thanks,

Alex
Jan Kiszka - Aug. 2, 2012, 9:03 a.m.
On 2012-08-01 21:40, Alex Williamson wrote:
> On Wed, 2012-08-01 at 12:14 -0600, Alex Williamson wrote:
>> On Wed, 2012-08-01 at 09:15 +0200, Jan Kiszka wrote:
>>> On 2012-08-01 07:18, Alex Williamson wrote:
>>>> Signed-off-by: Alex Williamson <alex.williamson@redhat.com>
>>>> ---
>>>>
>>>>  MAINTAINERS           |    5 +++++
>>>>  configure             |   12 ++++++++++++
>>>>  hw/i386/Makefile.objs |    1 +
>>>>  3 files changed, 18 insertions(+)
>>>>
>>>> diff --git a/MAINTAINERS b/MAINTAINERS
>>>> index 2d219d2..9680d69 100644
>>>> --- a/MAINTAINERS
>>>> +++ b/MAINTAINERS
>>>> @@ -460,6 +460,11 @@ M: Gerd Hoffmann <kraxel@redhat.com>
>>>>  S: Maintained
>>>>  F: hw/usb*
>>>>  
>>>> +VFIO
>>>> +M: Alex Williamson <alex.williamson@redhat.com>
>>>> +S: Supported
>>>> +F: hw/vfio*
>>>> +
>>>>  vhost
>>>>  M: Michael S. Tsirkin <mst@redhat.com>
>>>>  S: Supported
>>>> diff --git a/configure b/configure
>>>> index c65b5f6..81108dc 100755
>>>> --- a/configure
>>>> +++ b/configure
>>>> @@ -143,6 +143,7 @@ attr=""
>>>>  libattr=""
>>>>  xfs=""
>>>>  
>>>> +vfio_pci="no"
>>>>  vhost_net="no"
>>>>  kvm="no"
>>>>  gprof="no"
>>>> @@ -489,6 +490,7 @@ Haiku)
>>>>    usb="linux"
>>>>    kvm="yes"
>>>>    vhost_net="yes"
>>>> +  vfio_pci="yes"
>>>>    if [ "$cpu" = "i386" -o "$cpu" = "x86_64" ] ; then
>>>>      audio_possible_drivers="$audio_possible_drivers fmod"
>>>>    fi
>>>> @@ -824,6 +826,10 @@ for opt do
>>>>    ;;
>>>>    --disable-guest-agent) guest_agent="no"
>>>>    ;;
>>>> +  --disable-vfio-pci) vfio_pci="no"
>>>> +  ;;
>>>> +  --enable-vfio-pci) vfio_pci="yes"
>>>> +  ;;
>>>
>>> Do we need this level of control? Open question I'm just wondering every
>>> time a new feature gets added together with --disable/--enable switches.
>>
>> Well, I could certainly understand if some downstream wanted to ship a
>> qemu that didn't enable device assignment.  I'm sure they'd rather have
>> a config option to do that instead of needing to modify code.  I
>> generally find --enable useful to force an error and tell me what I'm
>> missing when I specifically want a feature rather than having it
>> silently disabled.  
>>
>>>>    *) echo "ERROR: unknown option $opt"; show_help="yes"
>>>>    ;;
>>>>    esac
>>>> @@ -1112,6 +1118,8 @@ echo "  --disable-guest-agent    disable building of the QEMU Guest Agent"
>>>>  echo "  --enable-guest-agent     enable building of the QEMU Guest Agent"
>>>>  echo "  --with-coroutine=BACKEND coroutine backend. Supported options:"
>>>>  echo "                           gthread, ucontext, sigaltstack, windows"
>>>> +echo "  --disable-vfio-pci       disable vfio pci device assignement support"
>>>> +echo "  --enable-vfio-pci        enable vfio pci device assignment support"
>>>>  echo ""
>>>>  echo "NOTE: The object files are built at the place where configure is launched"
>>>>  exit 1
>>>> @@ -3072,6 +3080,7 @@ echo "OpenGL support    $opengl"
>>>>  echo "libiscsi support  $libiscsi"
>>>>  echo "build guest agent $guest_agent"
>>>>  echo "coroutine backend $coroutine_backend"
>>>> +echo "VFIO PCI support  $vfio_pci"
>>>>  
>>>>  if test "$sdl_too_old" = "yes"; then
>>>>  echo "-> Your SDL version is too old - please upgrade to have SDL support"
>>>> @@ -3754,6 +3763,9 @@ case "$target_arch2" in
>>>>    *)
>>>>      echo "CONFIG_NO_XEN=y" >> $config_target_mak
>>>>  esac
>>>> +if test "$vfio_pci" = "yes" -a "$target_softmmu" = "yes" ; then
>>>> +  echo "CONFIG_VFIO_PCI=y" >> $config_target_mak
>>>> +fi
>>>
>>> Does this already somehow depend on host == Linux? If not, you may break
>>> the others.
>>
>> Hmm, probably missing that, I'll look where to add it.  Thanks,
> 
> Or I'm just forgetful.  This is handled by the vfio_pci="yes" in the
> second chunk of configure above.  Thanks,

Ah, ok. Then it's fine.

Jan
Anthony Liguori - Aug. 13, 2012, 10:19 p.m.
Jan Kiszka <jan.kiszka@web.de> writes:

> On 2012-08-01 07:18, Alex Williamson wrote:
>> Signed-off-by: Alex Williamson <alex.williamson@redhat.com>
>> ---
>> 
>>  MAINTAINERS           |    5 +++++
>>  configure             |   12 ++++++++++++
>>  hw/i386/Makefile.objs |    1 +
>>  3 files changed, 18 insertions(+)
>> 
>> diff --git a/MAINTAINERS b/MAINTAINERS
>> index 2d219d2..9680d69 100644
>> --- a/MAINTAINERS
>> +++ b/MAINTAINERS
>> @@ -460,6 +460,11 @@ M: Gerd Hoffmann <kraxel@redhat.com>
>>  S: Maintained
>>  F: hw/usb*
>>  
>> +VFIO
>> +M: Alex Williamson <alex.williamson@redhat.com>
>> +S: Supported
>> +F: hw/vfio*
>> +
>>  vhost
>>  M: Michael S. Tsirkin <mst@redhat.com>
>>  S: Supported
>> diff --git a/configure b/configure
>> index c65b5f6..81108dc 100755
>> --- a/configure
>> +++ b/configure
>> @@ -143,6 +143,7 @@ attr=""
>>  libattr=""
>>  xfs=""
>>  
>> +vfio_pci="no"
>>  vhost_net="no"
>>  kvm="no"
>>  gprof="no"
>> @@ -489,6 +490,7 @@ Haiku)
>>    usb="linux"
>>    kvm="yes"
>>    vhost_net="yes"
>> +  vfio_pci="yes"
>>    if [ "$cpu" = "i386" -o "$cpu" = "x86_64" ] ; then
>>      audio_possible_drivers="$audio_possible_drivers fmod"
>>    fi
>> @@ -824,6 +826,10 @@ for opt do
>>    ;;
>>    --disable-guest-agent) guest_agent="no"
>>    ;;
>> +  --disable-vfio-pci) vfio_pci="no"
>> +  ;;
>> +  --enable-vfio-pci) vfio_pci="yes"
>> +  ;;
>
> Do we need this level of control? Open question I'm just wondering every
> time a new feature gets added together with --disable/--enable
> switches.

I don't think so--it's easy enough for an administrator to disable vfio
for a user.

Regards,

Anthony Liguori

>
>>    *) echo "ERROR: unknown option $opt"; show_help="yes"
>>    ;;
>>    esac
>> @@ -1112,6 +1118,8 @@ echo "  --disable-guest-agent    disable building of the QEMU Guest Agent"
>>  echo "  --enable-guest-agent     enable building of the QEMU Guest Agent"
>>  echo "  --with-coroutine=BACKEND coroutine backend. Supported options:"
>>  echo "                           gthread, ucontext, sigaltstack, windows"
>> +echo "  --disable-vfio-pci       disable vfio pci device assignement support"
>> +echo "  --enable-vfio-pci        enable vfio pci device assignment support"
>>  echo ""
>>  echo "NOTE: The object files are built at the place where configure is launched"
>>  exit 1
>> @@ -3072,6 +3080,7 @@ echo "OpenGL support    $opengl"
>>  echo "libiscsi support  $libiscsi"
>>  echo "build guest agent $guest_agent"
>>  echo "coroutine backend $coroutine_backend"
>> +echo "VFIO PCI support  $vfio_pci"
>>  
>>  if test "$sdl_too_old" = "yes"; then
>>  echo "-> Your SDL version is too old - please upgrade to have SDL support"
>> @@ -3754,6 +3763,9 @@ case "$target_arch2" in
>>    *)
>>      echo "CONFIG_NO_XEN=y" >> $config_target_mak
>>  esac
>> +if test "$vfio_pci" = "yes" -a "$target_softmmu" = "yes" ; then
>> +  echo "CONFIG_VFIO_PCI=y" >> $config_target_mak
>> +fi
>
> Does this already somehow depend on host == Linux? If not, you may break
> the others.
>
>>  case "$target_arch2" in
>>    i386|x86_64|ppcemb|ppc|ppc64|s390x)
>>      # Make sure the target and host cpus are compatible
>> diff --git a/hw/i386/Makefile.objs b/hw/i386/Makefile.objs
>> index 8c764bb..a2783ef 100644
>> --- a/hw/i386/Makefile.objs
>> +++ b/hw/i386/Makefile.objs
>> @@ -11,5 +11,6 @@ obj-$(CONFIG_XEN_PCI_PASSTHROUGH) += xen-host-pci-device.o
>>  obj-$(CONFIG_XEN_PCI_PASSTHROUGH) += xen_pt.o xen_pt_config_init.o xen_pt_msi.o
>>  obj-y += kvm/
>>  obj-$(CONFIG_SPICE) += qxl.o qxl-logger.o qxl-render.o
>> +obj-$(CONFIG_VFIO_PCI) += vfio_pci.o
>>  
>>  obj-y := $(addprefix ../,$(obj-y))
>> 
>
> Jan
Alex Williamson - Aug. 14, 2012, 5:27 a.m.
On Mon, 2012-08-13 at 17:19 -0500, Anthony Liguori wrote:
> Jan Kiszka <jan.kiszka@web.de> writes:
> 
> > On 2012-08-01 07:18, Alex Williamson wrote:
> >> Signed-off-by: Alex Williamson <alex.williamson@redhat.com>
> >> ---
> >> 
> >>  MAINTAINERS           |    5 +++++
> >>  configure             |   12 ++++++++++++
> >>  hw/i386/Makefile.objs |    1 +
> >>  3 files changed, 18 insertions(+)
> >> 
> >> diff --git a/MAINTAINERS b/MAINTAINERS
> >> index 2d219d2..9680d69 100644
> >> --- a/MAINTAINERS
> >> +++ b/MAINTAINERS
> >> @@ -460,6 +460,11 @@ M: Gerd Hoffmann <kraxel@redhat.com>
> >>  S: Maintained
> >>  F: hw/usb*
> >>  
> >> +VFIO
> >> +M: Alex Williamson <alex.williamson@redhat.com>
> >> +S: Supported
> >> +F: hw/vfio*
> >> +
> >>  vhost
> >>  M: Michael S. Tsirkin <mst@redhat.com>
> >>  S: Supported
> >> diff --git a/configure b/configure
> >> index c65b5f6..81108dc 100755
> >> --- a/configure
> >> +++ b/configure
> >> @@ -143,6 +143,7 @@ attr=""
> >>  libattr=""
> >>  xfs=""
> >>  
> >> +vfio_pci="no"
> >>  vhost_net="no"
> >>  kvm="no"
> >>  gprof="no"
> >> @@ -489,6 +490,7 @@ Haiku)
> >>    usb="linux"
> >>    kvm="yes"
> >>    vhost_net="yes"
> >> +  vfio_pci="yes"
> >>    if [ "$cpu" = "i386" -o "$cpu" = "x86_64" ] ; then
> >>      audio_possible_drivers="$audio_possible_drivers fmod"
> >>    fi
> >> @@ -824,6 +826,10 @@ for opt do
> >>    ;;
> >>    --disable-guest-agent) guest_agent="no"
> >>    ;;
> >> +  --disable-vfio-pci) vfio_pci="no"
> >> +  ;;
> >> +  --enable-vfio-pci) vfio_pci="yes"
> >> +  ;;
> >
> > Do we need this level of control? Open question I'm just wondering every
> > time a new feature gets added together with --disable/--enable
> > switches.
> 
> I don't think so--it's easy enough for an administrator to disable vfio
> for a user.

Ok, out voted.  I'll remove.  Thanks,

Alex
Avi Kivity - Aug. 14, 2012, 2:35 p.m.
On 08/14/2012 08:27 AM, Alex Williamson wrote:
>> >
>> > Do we need this level of control? Open question I'm just wondering every
>> > time a new feature gets added together with --disable/--enable
>> > switches.
>> 
>> I don't think so--it's easy enough for an administrator to disable vfio
>> for a user.
> 
> Ok, out voted.  I'll remove.  Thanks,
> 

There is an advantage to --enable-blah in that it errors out if build
requirements are not satisfied, compared to silently disabling the
feature with a plain ./configure.  This is important for distro builds
which can start to silently break features when we add a new build
requirement.

But it can be done later, possibly with a new --enable=vfio,kvm,... list
instead of individual features.

Patch

diff --git a/MAINTAINERS b/MAINTAINERS
index 2d219d2..9680d69 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -460,6 +460,11 @@  M: Gerd Hoffmann <kraxel@redhat.com>
 S: Maintained
 F: hw/usb*
 
+VFIO
+M: Alex Williamson <alex.williamson@redhat.com>
+S: Supported
+F: hw/vfio*
+
 vhost
 M: Michael S. Tsirkin <mst@redhat.com>
 S: Supported
diff --git a/configure b/configure
index c65b5f6..81108dc 100755
--- a/configure
+++ b/configure
@@ -143,6 +143,7 @@  attr=""
 libattr=""
 xfs=""
 
+vfio_pci="no"
 vhost_net="no"
 kvm="no"
 gprof="no"
@@ -489,6 +490,7 @@  Haiku)
   usb="linux"
   kvm="yes"
   vhost_net="yes"
+  vfio_pci="yes"
   if [ "$cpu" = "i386" -o "$cpu" = "x86_64" ] ; then
     audio_possible_drivers="$audio_possible_drivers fmod"
   fi
@@ -824,6 +826,10 @@  for opt do
   ;;
   --disable-guest-agent) guest_agent="no"
   ;;
+  --disable-vfio-pci) vfio_pci="no"
+  ;;
+  --enable-vfio-pci) vfio_pci="yes"
+  ;;
   *) echo "ERROR: unknown option $opt"; show_help="yes"
   ;;
   esac
@@ -1112,6 +1118,8 @@  echo "  --disable-guest-agent    disable building of the QEMU Guest Agent"
 echo "  --enable-guest-agent     enable building of the QEMU Guest Agent"
 echo "  --with-coroutine=BACKEND coroutine backend. Supported options:"
 echo "                           gthread, ucontext, sigaltstack, windows"
+echo "  --disable-vfio-pci       disable vfio pci device assignement support"
+echo "  --enable-vfio-pci        enable vfio pci device assignment support"
 echo ""
 echo "NOTE: The object files are built at the place where configure is launched"
 exit 1
@@ -3072,6 +3080,7 @@  echo "OpenGL support    $opengl"
 echo "libiscsi support  $libiscsi"
 echo "build guest agent $guest_agent"
 echo "coroutine backend $coroutine_backend"
+echo "VFIO PCI support  $vfio_pci"
 
 if test "$sdl_too_old" = "yes"; then
 echo "-> Your SDL version is too old - please upgrade to have SDL support"
@@ -3754,6 +3763,9 @@  case "$target_arch2" in
   *)
     echo "CONFIG_NO_XEN=y" >> $config_target_mak
 esac
+if test "$vfio_pci" = "yes" -a "$target_softmmu" = "yes" ; then
+  echo "CONFIG_VFIO_PCI=y" >> $config_target_mak
+fi
 case "$target_arch2" in
   i386|x86_64|ppcemb|ppc|ppc64|s390x)
     # Make sure the target and host cpus are compatible
diff --git a/hw/i386/Makefile.objs b/hw/i386/Makefile.objs
index 8c764bb..a2783ef 100644
--- a/hw/i386/Makefile.objs
+++ b/hw/i386/Makefile.objs
@@ -11,5 +11,6 @@  obj-$(CONFIG_XEN_PCI_PASSTHROUGH) += xen-host-pci-device.o
 obj-$(CONFIG_XEN_PCI_PASSTHROUGH) += xen_pt.o xen_pt_config_init.o xen_pt_msi.o
 obj-y += kvm/
 obj-$(CONFIG_SPICE) += qxl.o qxl-logger.o qxl-render.o
+obj-$(CONFIG_VFIO_PCI) += vfio_pci.o
 
 obj-y := $(addprefix ../,$(obj-y))