All of lore.kernel.org
 help / color / mirror / Atom feed
From: Bruce Richardson <bruce.richardson@intel.com>
To: "Jiang, Cheng1" <cheng1.jiang@intel.com>
Cc: David Marchand <david.marchand@redhat.com>,
	Maxime Coquelin <maxime.coquelin@redhat.com>,
	"Xia, Chenbo" <chenbo.xia@intel.com>, dev <dev@dpdk.org>,
	"Fu, Patrick" <patrick.fu@intel.com>,
	"Yang, YvonneX" <yvonnex.yang@intel.com>,
	"Hu, Jiayu" <jiayu.hu@intel.com>,
	Thomas Monjalon <thomas@monjalon.net>,
	"Yigit, Ferruh" <ferruh.yigit@intel.com>
Subject: Re: [dpdk-dev] [PATCH v1] examples/vhost: fix ioat dependency issue
Date: Thu, 12 Nov 2020 09:31:13 +0000	[thread overview]
Message-ID: <20201112093113.GB1309@bricha3-MOBL.ger.corp.intel.com> (raw)
In-Reply-To: <CO1PR11MB499597446E7CBC60BA8BC229DCE70@CO1PR11MB4995.namprd11.prod.outlook.com>

On Thu, Nov 12, 2020 at 07:14:26AM +0000, Jiang, Cheng1 wrote:
> Hi,
> 
> > -----Original Message-----
> > From: David Marchand <david.marchand@redhat.com>
> > Sent: Wednesday, November 11, 2020 10:36 PM
> > To: Jiang, Cheng1 <cheng1.jiang@intel.com>
> > Cc: Maxime Coquelin <maxime.coquelin@redhat.com>; Xia, Chenbo
> > <chenbo.xia@intel.com>; dev <dev@dpdk.org>; Fu, Patrick
> > <patrick.fu@intel.com>; Yang, YvonneX <yvonnex.yang@intel.com>; Hu,
> > Jiayu <jiayu.hu@intel.com>; Thomas Monjalon <thomas@monjalon.net>;
> > Yigit, Ferruh <ferruh.yigit@intel.com>
> > Subject: Re: [PATCH v1] examples/vhost: fix ioat dependency issue
> > 
> > On Wed, Nov 11, 2020 at 12:29 PM Cheng Jiang <Cheng1.jiang@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.
> > 
> > Still failing for me.
> > 98b4c65506 - (HEAD) examples/vhost: fix ioat dependency issue (28
> > seconds ago) <Cheng Jiang>
> > a8adac0bc0 - (origin/main) doc: add instructions for building 32-bit
> > DPDK (5 days ago) <Bruce Richardson>
> > 
> > Please try the reproducer I gave:
> > 
> > rm -f build/vhost-switch build/vhost-switch-static build/vhost-switch-shared
> > test -d build && rmdir -p build || true
> > cc -O3 -I/home/dmarchan/dpdk/installdir/usr/local/include -include
> > rte_config.h -march=native -I/usr/usr/include
> > -DALLOW_EXPERIMENTAL_API main.c virtio_net.c -o
> > build/vhost-switch-shared -pthread -Wl,--as-needed
> > -L/home/dmarchan/dpdk/installdir/usr/local/lib64 -lrte_node
> > -lrte_graph -lrte_bpf -lrte_flow_classify -lrte_pipeline -lrte_table
> > -lrte_port -lrte_fib -lrte_ipsec -lrte_vhost -lrte_stack
> > -lrte_security -lrte_sched -lrte_reorder -lrte_rib -lrte_regexdev
> > -lrte_rawdev -lrte_pdump -lrte_power -lrte_member -lrte_lpm
> > -lrte_latencystats -lrte_kni -lrte_jobstats -lrte_ip_frag -lrte_gso
> > -lrte_gro -lrte_eventdev -lrte_efd -lrte_distributor -lrte_cryptodev
> > -lrte_compressdev -lrte_cfgfile -lrte_bitratestats -lrte_bbdev
> > -lrte_acl -lrte_timer -lrte_hash -lrte_metrics -lrte_cmdline -lrte_pci
> > -lrte_ethdev -lrte_meter -lrte_net -lrte_mbuf -lrte_mempool -lrte_rcu
> > -lrte_ring -lrte_eal -lrte_telemetry -lrte_kvargs -lbsd
> > /usr/bin/ld: /tmp/ccqE1W9S.o: in function `new_device':
> > main.c:(.text+0x173): undefined reference to `ioat_transfer_data_cb'
> > /usr/bin/ld: main.c:(.text+0x178): undefined reference to
> > `ioat_check_completed_copies_cb'
> > /usr/bin/ld: /tmp/ccqE1W9S.o: in function `main':
> > main.c:(.text.startup+0x25e): undefined reference to `open_ioat'
> > collect2: error: ld returned 1 exit status
> > make: *** [Makefile:39: build/vhost-switch-shared] Error 1
> > 
> > 
> > There are at least two problems:
> > - the code in main.c unconditionally expects the ioat stuff to be
> > available (this is why the link fails above),
> > - the Makefile unconditionally compiles ioat.c, which you fixed with this patch,
> > 
> > There is a potential additional problem:
> > I would expect a need for linking against the rte_raw_ioat driver, but
> > we are "lucky" that all that is used in this example are inlines.
> > So I guess it works without adding anything to LDFLAGS_SHARED.
> > 
> > 
> > >
> > > Signed-off-by: Cheng Jiang <Cheng1.jiang@intel.com>
> > > ---
> > >  examples/vhost/Makefile    | 5 +++++
> > >  examples/vhost/ioat.h      | 2 +-
> > >  examples/vhost/meson.build | 2 +-
> > >  3 files changed, 7 insertions(+), 2 deletions(-)
> > >
> > > diff --git a/examples/vhost/Makefile b/examples/vhost/Makefile
> > > index cec59d0e0f..505e443217 100644
> > > --- a/examples/vhost/Makefile
> > > +++ b/examples/vhost/Makefile
> > > @@ -5,7 +5,12 @@
> > >  APP = vhost-switch
> > >
> > >  # all source are stored in SRCS-y
> > > +IOAT_PATH = $(shell pkg-config --cflags-only-I libdpdk | sed -e
> > "s/^..//")/rte_ioat_rawdev.h
> > > +ifeq ($(IOAT_PATH), $(wildcard $(IOAT_PATH)))
> > > +SRCS-y := main.c virtio_net.c ioat.c
> > > +else
> > >  SRCS-y := main.c virtio_net.c
> > > +endif
> > 
> > I'd rather rely on the driver define since the C code relies on it:
> > Something like:
> > 
> >  PC_FILE := $(shell $(PKGCONF) --path libdpdk 2>/dev/null)
> >  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
> > 
> 
> Sure, I will fix it in the next version, thanks a lot.
> 
> > 
> > >
> > >  # Build using pkg-config variables if possible
> > >  ifneq ($(shell pkg-config --exists libdpdk && echo 0),0)
> > > diff --git a/examples/vhost/ioat.h b/examples/vhost/ioat.h
> > > index 9664fcc3ac..d6d0f7c18a 100644
> > > --- a/examples/vhost/ioat.h
> > > +++ b/examples/vhost/ioat.h
> > > @@ -24,7 +24,7 @@ struct dma_for_vhost {
> > >         uint16_t nr;
> > >  };
> > >
> > > -#ifdef RTE_ARCH_X86
> > > +#ifdef RTE_RAW_IOAT
> > >  int open_ioat(const char *value);
> > 
> > main.c should check for RTE_RAW_IOAT before including ioat.h.
> > And then in this header, you can remove this stub too.
> > 
> 
> As for this one, ioat.h don't have dependency on IOAT driver, it is needed by the example regardless of whether the raw/ioat driver exists. And I added more RTE_RAW_IOAT check in ioat.h. Now it can be compiled.
> 

The trouble is that the ioat header file won't be installed if the driver
is not built. They will be available for building inside the source tree,
but not on a system with dpdk installed using "ninja install"

/Bruce

  reply	other threads:[~2020-11-12  9:31 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-11-11 11:19 [dpdk-dev] [PATCH v1] examples/vhost: fix ioat dependency issue Cheng Jiang
2020-11-11 14:36 ` David Marchand
2020-11-11 15:03   ` Bruce Richardson
2020-11-12  7:14   ` Jiang, Cheng1
2020-11-12  9:31     ` Bruce Richardson [this message]
2020-11-12  9:39       ` David Marchand
2020-11-12 10:22         ` Bruce Richardson
2020-11-12  5:16 ` [dpdk-dev] [PATCH v2] " Cheng Jiang
2020-11-12  7:21 ` [dpdk-dev] [PATCH v3] " Cheng Jiang
2020-11-12  9:36   ` David Marchand
2020-11-12 10:28     ` Bruce Richardson
2020-11-12 11:29       ` Jiang, Cheng1
2020-11-12 12:02         ` Bruce Richardson
2020-11-12 14:06           ` Jiang, Cheng1
2020-11-12 13:47 ` [dpdk-dev] [PATCH v4] " Cheng Jiang
2020-11-12 15:01   ` Bruce Richardson
2020-11-12 15:55     ` Jiang, Cheng1
2020-11-12 15:49 ` [dpdk-dev] [PATCH v5] " Cheng Jiang
2020-11-12 16:01   ` Bruce Richardson
2020-11-12 16:51   ` Maxime Coquelin
2020-11-12 18:18   ` David Marchand
2020-11-13  8:40   ` Maxime Coquelin

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20201112093113.GB1309@bricha3-MOBL.ger.corp.intel.com \
    --to=bruce.richardson@intel.com \
    --cc=chenbo.xia@intel.com \
    --cc=cheng1.jiang@intel.com \
    --cc=david.marchand@redhat.com \
    --cc=dev@dpdk.org \
    --cc=ferruh.yigit@intel.com \
    --cc=jiayu.hu@intel.com \
    --cc=maxime.coquelin@redhat.com \
    --cc=patrick.fu@intel.com \
    --cc=thomas@monjalon.net \
    --cc=yvonnex.yang@intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.