On Thu, Nov 12, 2020 at 8:30 AM Cheng Jiang <cheng1.ji...@intel.com> wrote: > > Fix vhost-switch compiling issue when ioat dependency is missing. > Change 'RTE_x86' check into 'RTE_RAW_IOAT' check in meson build file > and update Makefile. Clean some codes. > > Fixes: abec60e7115d ("examples/vhost: support vhost async data path") > Fixes: 3a04ecb21420 ("examples/vhost: add async vhost args parsing") > > Signed-off-by: Cheng Jiang <cheng1.ji...@intel.com> > --- > v3: > * Added fixes lines in commit log. > > v2: > * Cleaned some codes > * Changed RTE_RAW_IOAT check method in Makefile > * Added ioat function definition when RTE_RAW_IOAT is missing > > examples/vhost/Makefile | 5 +++++ > examples/vhost/ioat.h | 32 +++++++++++++++++++++++++------- > examples/vhost/main.c | 22 +++++++++++----------- > examples/vhost/meson.build | 2 +- > 4 files changed, 42 insertions(+), 19 deletions(-) > > diff --git a/examples/vhost/Makefile b/examples/vhost/Makefile > index cec59d0e0..cbe56f742 100644 > --- a/examples/vhost/Makefile > +++ b/examples/vhost/Makefile > @@ -28,6 +28,11 @@ CFLAGS += -O3 $(shell $(PKGCONF) --cflags libdpdk) > LDFLAGS_SHARED = $(shell $(PKGCONF) --libs libdpdk) > LDFLAGS_STATIC = $(shell $(PKGCONF) --static --libs libdpdk) > > +HAS_RAW_IOAT=$(shell echo RTE_RAW_IOAT | $(CPP) $(CFLAGS) -P - | tail -1) > +ifeq ($(HAS_RAW_IOAT), 1) > +SRCS-y += ioat.c > +endif > + > CFLAGS += -DALLOW_EXPERIMENTAL_API > > build/$(APP)-shared: $(SRCS-y) Makefile $(PC_FILE) | build > diff --git a/examples/vhost/ioat.h b/examples/vhost/ioat.h > index 9664fcc3a..d6e1e2e07 100644 > --- a/examples/vhost/ioat.h > +++ b/examples/vhost/ioat.h > @@ -24,14 +24,8 @@ struct dma_for_vhost { > uint16_t nr; > }; > > -#ifdef RTE_ARCH_X86 > +#ifdef RTE_RAW_IOAT > int open_ioat(const char *value); > -#else > -static int open_ioat(const char *value __rte_unused) > -{ > - return -1; > -} > -#endif > > uint32_t > ioat_transfer_data_cb(int vid, uint16_t queue_id, > @@ -42,4 +36,28 @@ uint32_t > ioat_check_completed_copies_cb(int vid, uint16_t queue_id, > struct rte_vhost_async_status *opaque_data, > uint16_t max_packets); > +#else > +static int open_ioat(const char *value __rte_unused) > +{ > + return -1; > +} > + > +static uint32_t > +ioat_transfer_data_cb(int vid __rte_unused, uint16_t queue_id __rte_unused, > + struct rte_vhost_async_desc *descs __rte_unused, > + struct rte_vhost_async_status *opaque_data __rte_unused, > + uint16_t count __rte_unused) > +{ > + return -1; > +} > + > +static uint32_t > +ioat_check_completed_copies_cb(int vid __rte_unused, > + uint16_t queue_id __rte_unused, > + struct rte_vhost_async_status *opaque_data __rte_unused, > + uint16_t max_packets __rte_unused) > +{ > + return -1; > +} > +#endif > #endif /* _IOAT_H_ */ > diff --git a/examples/vhost/main.c b/examples/vhost/main.c > index 59a1aff07..4dc6102ab 100644 > --- a/examples/vhost/main.c > +++ b/examples/vhost/main.c > @@ -1294,13 +1294,6 @@ new_device(int vid) > int lcore, core_add = 0; > uint32_t device_num_min = num_devices; > struct vhost_dev *vdev; > - > - struct rte_vhost_async_channel_ops channel_ops = { > - .transfer_data = ioat_transfer_data_cb, > - .check_completed_copies = ioat_check_completed_copies_cb > - }; > - struct rte_vhost_async_features f; > - > vdev = rte_zmalloc("vhost device", sizeof(*vdev), > RTE_CACHE_LINE_SIZE); > if (vdev == NULL) { > RTE_LOG(INFO, VHOST_DATA, > @@ -1342,10 +1335,17 @@ new_device(int vid) > vid, vdev->coreid); > > if (async_vhost_driver) { > - f.async_inorder = 1; > - f.async_threshold = 256; > - return rte_vhost_async_channel_register(vid, VIRTIO_RXQ, > - f.intval, &channel_ops); > + struct rte_vhost_async_features f; > + struct rte_vhost_async_channel_ops channel_ops; > + if (strncmp(dma_type, "ioat", 4) == 0) { > + channel_ops.transfer_data = ioat_transfer_data_cb; > + channel_ops.check_completed_copies = > + ioat_check_completed_copies_cb; > + f.async_inorder = 1; > + f.async_threshold = 256; > + return rte_vhost_async_channel_register(vid, > VIRTIO_RXQ, > + f.intval, &channel_ops); > + } > } > > return 0; > diff --git a/examples/vhost/meson.build b/examples/vhost/meson.build > index 24f1f7131..d5388a795 100644 > --- a/examples/vhost/meson.build > +++ b/examples/vhost/meson.build > @@ -15,7 +15,7 @@ sources = files( > 'main.c', 'virtio_net.c' > ) > > -if dpdk_conf.has('RTE_ARCH_X86') > +if dpdk_conf.has('RTE_RAW_IOAT') > deps += 'raw_ioat' > sources += files('ioat.c') > endif > -- > 2.29.2 >
I'll let Bruce and Maxime have the last word on this patch. But at least it works for me, Tested-by: David Marchand <david.march...@redhat.com> -- David Marchand