Message ID | 1366804881-553-5-git-send-email-david@gibson.dropbear.id.au |
---|---|
State | New |
Headers | show |
On Wed, 2013-04-24 at 22:01 +1000, David Gibson wrote: > At the moment, vfio maintains a global list of containers that are assumed > to be more or less interchangeable, since they are all set up with a > MemoryListener to have all of system memory mapped. However, that only > makes sense if all the containers are used on devices which really do > expect a dma address space identical to system memory. > > This patch moves towards that by making the list of containers per > DMAContext (which corresponds to a dma address space) instead of global. This seems like an unnecessary intrusion into common code. Why not create a vfio specific list of dma objects, each with a list of containers? Thanks, Alex > Signed-off-by: David Gibson <david@gibson.dropbear.id.au> > --- > dma-helpers.c | 2 ++ > hw/misc/vfio.c | 13 ++++++++----- > include/hw/misc/vfio.h | 28 ++++++++++++++++++++++++++++ > include/sysemu/dma.h | 2 ++ > stubs/Makefile.objs | 1 + > stubs/vfio.c | 6 ++++++ > 6 files changed, 47 insertions(+), 5 deletions(-) > create mode 100644 include/hw/misc/vfio.h > create mode 100644 stubs/vfio.c > > diff --git a/dma-helpers.c b/dma-helpers.c > index 272632f..f0c7866 100644 > --- a/dma-helpers.c > +++ b/dma-helpers.c > @@ -11,6 +11,7 @@ > #include "trace.h" > #include "qemu/range.h" > #include "qemu/thread.h" > +#include "hw/misc/vfio.h" > > /* #define DEBUG_IOMMU */ > > @@ -386,6 +387,7 @@ void dma_context_init(DMAContext *dma, AddressSpace *as, DMATranslateFunc transl > dma->translate = translate; > dma->map = map; > dma->unmap = unmap; > + dma_context_init_vfio(dma); > } > > void *iommu_dma_memory_map(DMAContext *dma, dma_addr_t addr, dma_addr_t *len, > diff --git a/hw/misc/vfio.c b/hw/misc/vfio.c > index f77a599..ab870a8 100644 > --- a/hw/misc/vfio.c > +++ b/hw/misc/vfio.c > @@ -39,6 +39,7 @@ > #include "qemu/range.h" > #include "sysemu/kvm.h" > #include "sysemu/sysemu.h" > +#include "hw/misc/vfio.h" > > /* #define DEBUG_VFIO */ > #ifdef DEBUG_VFIO > @@ -179,9 +180,6 @@ typedef struct VFIOGroup { > > #define MSIX_CAP_LENGTH 12 > > -static QLIST_HEAD(, VFIOContainer) > - container_list = QLIST_HEAD_INITIALIZER(container_list); > - > static QLIST_HEAD(, VFIOGroup) > group_list = QLIST_HEAD_INITIALIZER(group_list); > > @@ -2613,6 +2611,11 @@ static int vfio_load_rom(VFIODevice *vdev) > return 0; > } > > +void dma_context_init_vfio(DMAContext *dma) > +{ > + QLIST_INIT(&dma->vfio.containers); > +} > + > static int vfio_connect_context(VFIOGroup *group, DMAContext *dma) > { > VFIOContainer *container; > @@ -2628,7 +2631,7 @@ static int vfio_connect_context(VFIOGroup *group, DMAContext *dma) > } > } > > - QLIST_FOREACH(container, &container_list, next) { > + QLIST_FOREACH(container, &dma->vfio.containers, next) { > if (!ioctl(group->fd, VFIO_GROUP_SET_CONTAINER, &container->fd)) { > group->container = container; > QLIST_INSERT_HEAD(&container->group_list, group, container_next); > @@ -2683,7 +2686,7 @@ static int vfio_connect_context(VFIOGroup *group, DMAContext *dma) > } > > QLIST_INIT(&container->group_list); > - QLIST_INSERT_HEAD(&container_list, container, next); > + QLIST_INSERT_HEAD(&dma->vfio.containers, container, next); > > group->container = container; > QLIST_INSERT_HEAD(&container->group_list, group, container_next); > diff --git a/include/hw/misc/vfio.h b/include/hw/misc/vfio.h > new file mode 100644 > index 0000000..18fe144 > --- /dev/null > +++ b/include/hw/misc/vfio.h > @@ -0,0 +1,28 @@ > +/* > + * vfio based device assignment > + * > + * Copyright 2013 David Gibson, IBM Corporation. > + * Copyright Red Hat, Inc. 2012 > + * > + * This work is licensed under the terms of the GNU GPL, version > + * 2. See the COPYING file in the top-level directory. > + */ > +#ifndef QEMU_VFIO_H > +#define QEMU_VFIO_H > + > +#include "qemu/queue.h" > + > +typedef struct DMAContext DMAContext; > +struct DMAContext; > + > +typedef struct VFIOContainer VFIOContainer; > +struct VFIOContainer; > + > +typedef struct DMAContextVFIO DMAContextVFIO; > +struct DMAContextVFIO { > + QLIST_HEAD(, VFIOContainer) containers; > +}; > + > +void dma_context_init_vfio(DMAContext *dma); > + > +#endif /* QEMU_VFIO_H */ > diff --git a/include/sysemu/dma.h b/include/sysemu/dma.h > index a52c93a..8692d0a 100644 > --- a/include/sysemu/dma.h > +++ b/include/sysemu/dma.h > @@ -15,6 +15,7 @@ > #include "hw/hw.h" > #include "block/block.h" > #include "sysemu/kvm.h" > +#include "hw/misc/vfio.h" > > typedef struct DMAContext DMAContext; > typedef struct ScatterGatherEntry ScatterGatherEntry; > @@ -66,6 +67,7 @@ struct DMAContext { > DMATranslateFunc *translate; > DMAMapFunc *map; > DMAUnmapFunc *unmap; > + DMAContextVFIO vfio; > }; > > /* A global DMA context corresponding to the address_space_memory > diff --git a/stubs/Makefile.objs b/stubs/Makefile.objs > index 9c55b34..858ca6b 100644 > --- a/stubs/Makefile.objs > +++ b/stubs/Makefile.objs > @@ -20,6 +20,7 @@ stub-obj-y += reset.o > stub-obj-y += set-fd-handler.o > stub-obj-y += slirp.o > stub-obj-y += sysbus.o > +stub-obj-y += vfio.o > stub-obj-y += vm-stop.o > stub-obj-y += vmstate.o > stub-obj-$(CONFIG_WIN32) += fd-register.o > diff --git a/stubs/vfio.c b/stubs/vfio.c > new file mode 100644 > index 0000000..6fe4a84 > --- /dev/null > +++ b/stubs/vfio.c > @@ -0,0 +1,6 @@ > +#include "hw/misc/vfio.h" > +#include "sysemu/dma.h" > + > +void dma_context_init_vfio(DMAContext *dma) > +{ > +}
Il 24/04/2013 17:12, Alex Williamson ha scritto: >> > At the moment, vfio maintains a global list of containers that are assumed >> > to be more or less interchangeable, since they are all set up with a >> > MemoryListener to have all of system memory mapped. However, that only >> > makes sense if all the containers are used on devices which really do >> > expect a dma address space identical to system memory. >> > >> > This patch moves towards that by making the list of containers per >> > DMAContext (which corresponds to a dma address space) instead of global. > This seems like an unnecessary intrusion into common code. Why not > create a vfio specific list of dma objects, each with a list of > containers? Thanks, Yeah, I suggest that this is re-evaluated on top of the iommu patches. You can find them at git://github.com/bonzini/qemu.git, branch iommu. It seems to work with pseries, at least my guest crashes at the same place with and without. USB works, and so do VGA and spapr-vscsi. Paolo
On Wed, Apr 24, 2013 at 09:12:39AM -0600, Alex Williamson wrote: > On Wed, 2013-04-24 at 22:01 +1000, David Gibson wrote: > > At the moment, vfio maintains a global list of containers that are assumed > > to be more or less interchangeable, since they are all set up with a > > MemoryListener to have all of system memory mapped. However, that only > > makes sense if all the containers are used on devices which really do > > expect a dma address space identical to system memory. > > > > This patch moves towards that by making the list of containers per > > DMAContext (which corresponds to a dma address space) instead of global. > > This seems like an unnecessary intrusion into common code. Why not > create a vfio specific list of dma objects, each with a list of > containers? Thanks, Possible, but ugly. DMAContext *is* the handle for a DMA address space. Having a parallel array of VFIO contextns would be converting from the generic handle to the VFIO one would be a search, rather than just a dereference, and making sure the lifetime of the VFIO one matches the lifetime of the generic object would be unnecessarily awkward. Which reminds me, I forgot to implement a VFIO hook for DMAContext destruction in this patch. That does need to be fixed.
On Wed, Apr 24, 2013 at 06:33:33PM +0200, Paolo Bonzini wrote: > Il 24/04/2013 17:12, Alex Williamson ha scritto: > >> > At the moment, vfio maintains a global list of containers that are assumed > >> > to be more or less interchangeable, since they are all set up with a > >> > MemoryListener to have all of system memory mapped. However, that only > >> > makes sense if all the containers are used on devices which really do > >> > expect a dma address space identical to system memory. > >> > > >> > This patch moves towards that by making the list of containers per > >> > DMAContext (which corresponds to a dma address space) instead of global. > > This seems like an unnecessary intrusion into common code. Why not > > create a vfio specific list of dma objects, each with a list of > > containers? Thanks, > > Yeah, I suggest that this is re-evaluated on top of the iommu patches. > You can find them at git://github.com/bonzini/qemu.git, branch iommu. > It seems to work with pseries, at least my guest crashes at the same > place with and without. USB works, and so do VGA and spapr-vscsi. Ok, I'll have a look when I get a chance. Any guesses as to when they might reach mainline?
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Il 25/04/2013 08:36, David Gibson ha scritto: > On Wed, Apr 24, 2013 at 06:33:33PM +0200, Paolo Bonzini wrote: >> Il 24/04/2013 17:12, Alex Williamson ha scritto: >>>>> At the moment, vfio maintains a global list of containers >>>>> that are assumed to be more or less interchangeable, since >>>>> they are all set up with a MemoryListener to have all of >>>>> system memory mapped. However, that only makes sense if >>>>> all the containers are used on devices which really do >>>>> expect a dma address space identical to system memory. >>>>> >>>>> This patch moves towards that by making the list of >>>>> containers per DMAContext (which corresponds to a dma >>>>> address space) instead of global. >>> This seems like an unnecessary intrusion into common code. Why >>> not create a vfio specific list of dma objects, each with a >>> list of containers? Thanks, >> >> Yeah, I suggest that this is re-evaluated on top of the iommu >> patches. > >> You can find them at git://github.com/bonzini/qemu.git, branch >> iommu. It seems to work with pseries, at least my guest crashes >> at the same place with and without. USB works, and so do VGA and >> spapr-vscsi. > > Ok, I'll have a look when I get a chance. Any guesses as to when > they might reach mainline? If I get your Tested-by, early in 1.6. Paolo -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.19 (GNU/Linux) Comment: Using GnuPG with Thunderbird - http://www.enigmail.net/ iQIcBAEBAgAGBQJRej5jAAoJEBvWZb6bTYby6I0P/1lUAJhlrZ3mJ7h3HOK/Hee4 3U+csDnpp9kBkkoueWcfg/u5FCEIQ5MDII4/qvcJ6onLB6kp6cTyU5KRUQEFw+SF er/CfC3bIIo1wz3Ze6l9shOLa4bqiCawBGA5+dRKzh9KWuNwFmmkWjbUNBEgNcnb 0Iz2/jdL6KWEE8a7brCchJZpv6Ib0AhDMEp1wf6OwdJOWQx6BbLSr/SzFTb3/Wgs JOawqd6Dd/O45E+b0rDkXoF2Fit/XvrBSm0Hju8zvT3XnWeJxIMEiFroJIN053F2 /QHPWoF/xLRnP1JPhxiudSHZCKOMxQn/XBYa+olxt4MhRzEU+0F3bgUY19+sjfbh OAgtB5icjTP+gFPC2mw3wZZnHJ6Q0bWkLOSmQ4UXpcv88ZagJUDUTCiAWp2dPYnE czKLUC5IB1KAp8AWb3dqiym/BpDPuO0s/15t19e2/qJOZKU4PDQJD9hSnnbcYwRN dVMQWVpxKro2cZUXV6NbAhNXIdfM4WCdRDUDtRssAeaVOG5iiwdr481PC90+o7O1 gLLfKfsMytHflKwCre9ew6o+obwHXvSLbliou0kJAY0iuYyoAogu6zq4Eu+i+ia7 28JX5qpI/hRebacIKDryc0xGHGah06JHMLdITF7rLqH9fVg2X1Mz+4FAGwjUmO+m +23q7kaLcfBMjmKKfS3O =FkrW -----END PGP SIGNATURE-----
On 04/26/2013 06:44 PM, Paolo Bonzini wrote: > Il 25/04/2013 08:36, David Gibson ha scritto: >> On Wed, Apr 24, 2013 at 06:33:33PM +0200, Paolo Bonzini wrote: >>> Il 24/04/2013 17:12, Alex Williamson ha scritto: >>>>>> At the moment, vfio maintains a global list of containers >>>>>> that are assumed to be more or less interchangeable, since >>>>>> they are all set up with a MemoryListener to have all of >>>>>> system memory mapped. However, that only makes sense if >>>>>> all the containers are used on devices which really do >>>>>> expect a dma address space identical to system memory. >>>>>> >>>>>> This patch moves towards that by making the list of >>>>>> containers per DMAContext (which corresponds to a dma >>>>>> address space) instead of global. >>>> This seems like an unnecessary intrusion into common code. Why >>>> not create a vfio specific list of dma objects, each with a >>>> list of containers? Thanks, >>> >>> Yeah, I suggest that this is re-evaluated on top of the iommu >>> patches. >> >>> You can find them at git://github.com/bonzini/qemu.git, branch >>> iommu. It seems to work with pseries, at least my guest crashes >>> at the same place with and without. USB works, and so do VGA and >>> spapr-vscsi. >> >> Ok, I'll have a look when I get a chance. Any guesses as to when >> they might reach mainline? > > If I get your Tested-by, early in 1.6. Emulated PCI works on ppc64/spapr so far.
Il 26/04/2013 10:46, Alexey Kardashevskiy ha scritto: > On 04/26/2013 06:44 PM, Paolo Bonzini wrote: >> Il 25/04/2013 08:36, David Gibson ha scritto: >>> On Wed, Apr 24, 2013 at 06:33:33PM +0200, Paolo Bonzini wrote: >>>> Il 24/04/2013 17:12, Alex Williamson ha scritto: >>>>>>> At the moment, vfio maintains a global list of containers >>>>>>> that are assumed to be more or less interchangeable, since >>>>>>> they are all set up with a MemoryListener to have all of >>>>>>> system memory mapped. However, that only makes sense if >>>>>>> all the containers are used on devices which really do >>>>>>> expect a dma address space identical to system memory. >>>>>>> >>>>>>> This patch moves towards that by making the list of >>>>>>> containers per DMAContext (which corresponds to a dma >>>>>>> address space) instead of global. >>>>> This seems like an unnecessary intrusion into common code. Why >>>>> not create a vfio specific list of dma objects, each with a >>>>> list of containers? Thanks, >>>> >>>> Yeah, I suggest that this is re-evaluated on top of the iommu >>>> patches. >>> >>>> You can find them at git://github.com/bonzini/qemu.git, branch >>>> iommu. It seems to work with pseries, at least my guest crashes >>>> at the same place with and without. USB works, and so do VGA and >>>> spapr-vscsi. >>> >>> Ok, I'll have a look when I get a chance. Any guesses as to when >>> they might reach mainline? >> >> If I get your Tested-by, early in 1.6. > > Emulated PCI works on ppc64/spapr so far. What about VIO? Doesn't it go through the IOMMU as well? I'm sure you can test it more than I did (it did break in Avi's original patches, so it must not be that bad...). Paolo
On 04/26/2013 06:52 PM, Paolo Bonzini wrote: > Il 26/04/2013 10:46, Alexey Kardashevskiy ha scritto: >> On 04/26/2013 06:44 PM, Paolo Bonzini wrote: >>> Il 25/04/2013 08:36, David Gibson ha scritto: >>>> On Wed, Apr 24, 2013 at 06:33:33PM +0200, Paolo Bonzini wrote: >>>>> Il 24/04/2013 17:12, Alex Williamson ha scritto: >>>>>>>> At the moment, vfio maintains a global list of containers >>>>>>>> that are assumed to be more or less interchangeable, since >>>>>>>> they are all set up with a MemoryListener to have all of >>>>>>>> system memory mapped. However, that only makes sense if >>>>>>>> all the containers are used on devices which really do >>>>>>>> expect a dma address space identical to system memory. >>>>>>>> >>>>>>>> This patch moves towards that by making the list of >>>>>>>> containers per DMAContext (which corresponds to a dma >>>>>>>> address space) instead of global. >>>>>> This seems like an unnecessary intrusion into common code. Why >>>>>> not create a vfio specific list of dma objects, each with a >>>>>> list of containers? Thanks, >>>>> >>>>> Yeah, I suggest that this is re-evaluated on top of the iommu >>>>> patches. >>>> >>>>> You can find them at git://github.com/bonzini/qemu.git, branch >>>>> iommu. It seems to work with pseries, at least my guest crashes >>>>> at the same place with and without. USB works, and so do VGA and >>>>> spapr-vscsi. >>>> >>>> Ok, I'll have a look when I get a chance. Any guesses as to when >>>> they might reach mainline? >>> >>> If I get your Tested-by, early in 1.6. >> >> Emulated PCI works on ppc64/spapr so far. > > What about VIO? Doesn't it go through the IOMMU as well? I'm sure you > can test it more than I did (it did break in Avi's original patches, so > it must not be that bad...). I run QEMU with -net nic,model=ibmveth -net user,hostfwd=tcp::5000-:22 and run in the guest: "dhclient ; wget google.com" which worked fine. When it damaged, it does not go further than dhclient :)
Il 26/04/2013 10:56, Alexey Kardashevskiy ha scritto: > On 04/26/2013 06:52 PM, Paolo Bonzini wrote: >> Il 26/04/2013 10:46, Alexey Kardashevskiy ha scritto: >>> On 04/26/2013 06:44 PM, Paolo Bonzini wrote: >>>> Il 25/04/2013 08:36, David Gibson ha scritto: >>>>> On Wed, Apr 24, 2013 at 06:33:33PM +0200, Paolo Bonzini wrote: >>>>>> Il 24/04/2013 17:12, Alex Williamson ha scritto: >>>>>>>>> At the moment, vfio maintains a global list of containers >>>>>>>>> that are assumed to be more or less interchangeable, since >>>>>>>>> they are all set up with a MemoryListener to have all of >>>>>>>>> system memory mapped. However, that only makes sense if >>>>>>>>> all the containers are used on devices which really do >>>>>>>>> expect a dma address space identical to system memory. >>>>>>>>> >>>>>>>>> This patch moves towards that by making the list of >>>>>>>>> containers per DMAContext (which corresponds to a dma >>>>>>>>> address space) instead of global. >>>>>>> This seems like an unnecessary intrusion into common code. Why >>>>>>> not create a vfio specific list of dma objects, each with a >>>>>>> list of containers? Thanks, >>>>>> >>>>>> Yeah, I suggest that this is re-evaluated on top of the iommu >>>>>> patches. >>>>> >>>>>> You can find them at git://github.com/bonzini/qemu.git, branch >>>>>> iommu. It seems to work with pseries, at least my guest crashes >>>>>> at the same place with and without. USB works, and so do VGA and >>>>>> spapr-vscsi. >>>>> >>>>> Ok, I'll have a look when I get a chance. Any guesses as to when >>>>> they might reach mainline? >>>> >>>> If I get your Tested-by, early in 1.6. >>> >>> Emulated PCI works on ppc64/spapr so far. >> >> What about VIO? Doesn't it go through the IOMMU as well? I'm sure you >> can test it more than I did (it did break in Avi's original patches, so >> it must not be that bad...). > > I run QEMU with > -net nic,model=ibmveth -net user,hostfwd=tcp::5000-:22 > and run in the guest: "dhclient ; wget google.com" which worked fine. > When it damaged, it does not go further than dhclient :) Ok, that counts as a Tested-by from you, I guess. Paolo
diff --git a/dma-helpers.c b/dma-helpers.c index 272632f..f0c7866 100644 --- a/dma-helpers.c +++ b/dma-helpers.c @@ -11,6 +11,7 @@ #include "trace.h" #include "qemu/range.h" #include "qemu/thread.h" +#include "hw/misc/vfio.h" /* #define DEBUG_IOMMU */ @@ -386,6 +387,7 @@ void dma_context_init(DMAContext *dma, AddressSpace *as, DMATranslateFunc transl dma->translate = translate; dma->map = map; dma->unmap = unmap; + dma_context_init_vfio(dma); } void *iommu_dma_memory_map(DMAContext *dma, dma_addr_t addr, dma_addr_t *len, diff --git a/hw/misc/vfio.c b/hw/misc/vfio.c index f77a599..ab870a8 100644 --- a/hw/misc/vfio.c +++ b/hw/misc/vfio.c @@ -39,6 +39,7 @@ #include "qemu/range.h" #include "sysemu/kvm.h" #include "sysemu/sysemu.h" +#include "hw/misc/vfio.h" /* #define DEBUG_VFIO */ #ifdef DEBUG_VFIO @@ -179,9 +180,6 @@ typedef struct VFIOGroup { #define MSIX_CAP_LENGTH 12 -static QLIST_HEAD(, VFIOContainer) - container_list = QLIST_HEAD_INITIALIZER(container_list); - static QLIST_HEAD(, VFIOGroup) group_list = QLIST_HEAD_INITIALIZER(group_list); @@ -2613,6 +2611,11 @@ static int vfio_load_rom(VFIODevice *vdev) return 0; } +void dma_context_init_vfio(DMAContext *dma) +{ + QLIST_INIT(&dma->vfio.containers); +} + static int vfio_connect_context(VFIOGroup *group, DMAContext *dma) { VFIOContainer *container; @@ -2628,7 +2631,7 @@ static int vfio_connect_context(VFIOGroup *group, DMAContext *dma) } } - QLIST_FOREACH(container, &container_list, next) { + QLIST_FOREACH(container, &dma->vfio.containers, next) { if (!ioctl(group->fd, VFIO_GROUP_SET_CONTAINER, &container->fd)) { group->container = container; QLIST_INSERT_HEAD(&container->group_list, group, container_next); @@ -2683,7 +2686,7 @@ static int vfio_connect_context(VFIOGroup *group, DMAContext *dma) } QLIST_INIT(&container->group_list); - QLIST_INSERT_HEAD(&container_list, container, next); + QLIST_INSERT_HEAD(&dma->vfio.containers, container, next); group->container = container; QLIST_INSERT_HEAD(&container->group_list, group, container_next); diff --git a/include/hw/misc/vfio.h b/include/hw/misc/vfio.h new file mode 100644 index 0000000..18fe144 --- /dev/null +++ b/include/hw/misc/vfio.h @@ -0,0 +1,28 @@ +/* + * vfio based device assignment + * + * Copyright 2013 David Gibson, IBM Corporation. + * Copyright Red Hat, Inc. 2012 + * + * This work is licensed under the terms of the GNU GPL, version + * 2. See the COPYING file in the top-level directory. + */ +#ifndef QEMU_VFIO_H +#define QEMU_VFIO_H + +#include "qemu/queue.h" + +typedef struct DMAContext DMAContext; +struct DMAContext; + +typedef struct VFIOContainer VFIOContainer; +struct VFIOContainer; + +typedef struct DMAContextVFIO DMAContextVFIO; +struct DMAContextVFIO { + QLIST_HEAD(, VFIOContainer) containers; +}; + +void dma_context_init_vfio(DMAContext *dma); + +#endif /* QEMU_VFIO_H */ diff --git a/include/sysemu/dma.h b/include/sysemu/dma.h index a52c93a..8692d0a 100644 --- a/include/sysemu/dma.h +++ b/include/sysemu/dma.h @@ -15,6 +15,7 @@ #include "hw/hw.h" #include "block/block.h" #include "sysemu/kvm.h" +#include "hw/misc/vfio.h" typedef struct DMAContext DMAContext; typedef struct ScatterGatherEntry ScatterGatherEntry; @@ -66,6 +67,7 @@ struct DMAContext { DMATranslateFunc *translate; DMAMapFunc *map; DMAUnmapFunc *unmap; + DMAContextVFIO vfio; }; /* A global DMA context corresponding to the address_space_memory diff --git a/stubs/Makefile.objs b/stubs/Makefile.objs index 9c55b34..858ca6b 100644 --- a/stubs/Makefile.objs +++ b/stubs/Makefile.objs @@ -20,6 +20,7 @@ stub-obj-y += reset.o stub-obj-y += set-fd-handler.o stub-obj-y += slirp.o stub-obj-y += sysbus.o +stub-obj-y += vfio.o stub-obj-y += vm-stop.o stub-obj-y += vmstate.o stub-obj-$(CONFIG_WIN32) += fd-register.o diff --git a/stubs/vfio.c b/stubs/vfio.c new file mode 100644 index 0000000..6fe4a84 --- /dev/null +++ b/stubs/vfio.c @@ -0,0 +1,6 @@ +#include "hw/misc/vfio.h" +#include "sysemu/dma.h" + +void dma_context_init_vfio(DMAContext *dma) +{ +}
At the moment, vfio maintains a global list of containers that are assumed to be more or less interchangeable, since they are all set up with a MemoryListener to have all of system memory mapped. However, that only makes sense if all the containers are used on devices which really do expect a dma address space identical to system memory. This patch moves towards that by making the list of containers per DMAContext (which corresponds to a dma address space) instead of global. Signed-off-by: David Gibson <david@gibson.dropbear.id.au> --- dma-helpers.c | 2 ++ hw/misc/vfio.c | 13 ++++++++----- include/hw/misc/vfio.h | 28 ++++++++++++++++++++++++++++ include/sysemu/dma.h | 2 ++ stubs/Makefile.objs | 1 + stubs/vfio.c | 6 ++++++ 6 files changed, 47 insertions(+), 5 deletions(-) create mode 100644 include/hw/misc/vfio.h create mode 100644 stubs/vfio.c