Skip to contentSkip to conversation

Link ibrte_vhost to librte_pmd_vhost

RFC In review Tetsuya Mukawa 4 participants 11 messages Apr 25, 2016 – Apr 27, 2016 Network drivers

lore
Share & tools
lore
#0 lore raw

RFC 1/1 Link ibrte_vhost to librte_pmd_vhost

Hi Yuanhan,

I want to apply a patch to vhost PMD.
Before submitting, could you please let me know your guess about the patch?

Here is my problem.
I am using below shared library configuration to build my application. CONFIG_RTE_BUILD_SHARED_LIB=y
Normally, My application doesn't need vhost facilities, so librte_vhost isn't linked while compiling.

Sometimes, I need to use vhost PMD, so I just want to add '-d librte_pmd_vhost.so' to DPDK command line to load vhost PMD library. But my application doesn't have librte_vhost, then I've got an error about it.
Even if specify like "-d librte_vhost -d librte_pmd_vhost", I still have an error.
Probably this is because above libraries will be dlopen(ed) with RTLD_LOCAL option.

Here, I have 2 choices.
One is linking librte_vhost to my application while compiling, even if I don't need it normally.
This is the way all DPDK examples did. But I am wondering if I should follow this.

Another way is applying a below patch.

drivers/net/vhost/Makefile +1 -0
@@ -38,6 +38,7 @@ LIB = librte_pmd_vhost.a
 
 CFLAGS += -O3
 CFLAGS += $(WERROR_FLAGS)
+LDLIBS += -lrte_vhost
 
 EXPORT_MAP := rte_pmd_vhost_version.map
 

This is same way to link libpcap to librte_pmd_pcap. What do you think about adding it to vhost PMD?

Thanks,
Tetsuya

Acked-by on v1 1/1
#1 lore raw
Quoted 37 lines · Tetsuya Mukawa

Hi Yuanhan,

I want to apply a patch to vhost PMD.
Before submitting, could you please let me know your guess about the patch?

Here is my problem.
I am using below shared library configuration to build my application. CONFIG_RTE_BUILD_SHARED_LIB=y
Normally, My application doesn't need vhost facilities, so librte_vhost isn't linked while compiling.

Sometimes, I need to use vhost PMD, so I just want to add '-d librte_pmd_vhost.so' to DPDK command line to load vhost PMD library. But my application doesn't have librte_vhost, then I've got an error about it.
Even if specify like "-d librte_vhost -d librte_pmd_vhost", I still have an error.
Probably this is because above libraries will be dlopen(ed) with RTLD_LOCAL option.

Here, I have 2 choices.
One is linking librte_vhost to my application while compiling, even if I don't need it normally.
This is the way all DPDK examples did. But I am wondering if I should follow this.

Another way is applying a below patch.

drivers/net/vhost/Makefile +1 -0
@@ -38,6 +38,7 @@ LIB = librte_pmd_vhost.a
 
  CFLAGS += -O3
  CFLAGS += $(WERROR_FLAGS)
+LDLIBS += -lrte_vhost
 
  EXPORT_MAP := rte_pmd_vhost_version.map
 
Quoted 2 lines

This is same way to link libpcap to librte_pmd_pcap. What do you think about adding it to vhost PMD?

Yes, this is absolutely the right thing to do.

Ultimately this should be done for all dependencies in all libraries, but missing dependencies are even more pronounced in plugins so the sooner this goes in, the better.

- Panu -

Quoted 4 lines

Thanks,
Tetsuya

#2 lore raw
Quoted 44 lines · Panu Matilainen
Quoted 38 lines · Tetsuya Mukawa

Hi Yuanhan,

I want to apply a patch to vhost PMD.
Before submitting, could you please let me know your guess about the patch?

Here is my problem.
I am using below shared library configuration to build my application. CONFIG_RTE_BUILD_SHARED_LIB=y
Normally, My application doesn't need vhost facilities, so librte_vhost isn't linked while compiling.

Sometimes, I need to use vhost PMD, so I just want to add '-d librte_pmd_vhost.so' to DPDK command line to load vhost PMD library. But my application doesn't have librte_vhost, then I've got an error about it.
Even if specify like "-d librte_vhost -d librte_pmd_vhost", I still have an error.
Probably this is because above libraries will be dlopen(ed) with RTLD_LOCAL option.

Here, I have 2 choices.
One is linking librte_vhost to my application while compiling, even if I don't need it normally.
This is the way all DPDK examples did. But I am wondering if I should follow this.

Another way is applying a below patch.

drivers/net/vhost/Makefile +1 -0
@@ -38,6 +38,7 @@ LIB = librte_pmd_vhost.a
 
  CFLAGS += -O3
  CFLAGS += $(WERROR_FLAGS)
+LDLIBS += -lrte_vhost
 
  EXPORT_MAP := rte_pmd_vhost_version.map
 
Quoted 2 lines

This is same way to link libpcap to librte_pmd_pcap. What do you think about adding it to vhost PMD?

Yes, this is absolutely the right thing to do.

Quoted 7 lines

Ultimately this should be done for all dependencies in all libraries, but missing dependencies are even more pronounced in plugins so the sooner this goes in, the better.

- Panu -

Hi Panu,

I appreciate your comment.
I will send it as a patch tomorrow.
It seems I cannot connect to DPDK git repository so far. So I cannot test it with latest code.

Thanks,
Tetsuya

Quoted 7 lines
Quoted 6 lines

Thanks,
Tetsuya

#3 lore raw
In reply to Panu Matilainen
Quoted 17 lines · Panu Matilainen
Quoted 12 lines

Another way is applying a below patch.

drivers/net/vhost/Makefile +1 -0
@@ -38,6 +38,7 @@ LIB = librte_pmd_vhost.a
 
 CFLAGS += -O3
 CFLAGS += $(WERROR_FLAGS)
+LDLIBS += -lrte_vhost
 
 EXPORT_MAP := rte_pmd_vhost_version.map
 
Quoted 2 lines

This is same way to link libpcap to librte_pmd_pcap. What do you think about adding it to vhost PMD?

Yes, this is absolutely the right thing to do.

Quoted 5 lines

Ultimately this should be done for all dependencies in all libraries, but missing dependencies are even more pronounced in plugins so the sooner this goes in, the better.

Panu, thanks for the input.

Tetsuya, please submit a formal patch so that I can merge.

	--yliu
#4 lore raw
Quoted 21 lines · Yuanhan Liu
Quoted 20 lines · Panu Matilainen
Quoted 12 lines

Another way is applying a below patch.

drivers/net/vhost/Makefile +1 -0
@@ -38,6 +38,7 @@ LIB = librte_pmd_vhost.a
 
 CFLAGS += -O3
 CFLAGS += $(WERROR_FLAGS)
+LDLIBS += -lrte_vhost
 
 EXPORT_MAP := rte_pmd_vhost_version.map
 
Quoted 2 lines

This is same way to link libpcap to librte_pmd_pcap. What do you think about adding it to vhost PMD?

Yes, this is absolutely the right thing to do.

Ultimately this should be done for all dependencies in all libraries, but missing dependencies are even more pronounced in plugins so the sooner this goes in, the better.

Quoted 6 lines
Quoted 1 line

Panu, thanks for the input.

Tetsuya, please submit a formal patch so that I can merge.

	--yliu

Hi Yuanhan,

Oh sorry, I forgot to add "--in-reply-to" while sending the patch, so you may miss it.
Also the order of Acked-by and Signed-off-by was wrong in above patch. So I will send v2 soon.

Thanks,
Tetsuya

#5 lore raw
Quoted 27 lines · Tetsuya Mukawa
Quoted 26 lines · Yuanhan Liu
Quoted 16 lines · Panu Matilainen
Quoted 12 lines

Another way is applying a below patch.

drivers/net/vhost/Makefile +1 -0
@@ -38,6 +38,7 @@ LIB = librte_pmd_vhost.a
 
 CFLAGS += -O3
 CFLAGS += $(WERROR_FLAGS)
+LDLIBS += -lrte_vhost
 
 EXPORT_MAP := rte_pmd_vhost_version.map
 
Quoted 2 lines

This is same way to link libpcap to librte_pmd_pcap. What do you think about adding it to vhost PMD?

Yes, this is absolutely the right thing to do.

Quoted 5 lines

Ultimately this should be done for all dependencies in all libraries, but missing dependencies are even more pronounced in plugins so the sooner this goes in, the better.

Panu, thanks for the input.

Tetsuya, please submit a formal patch so that I can merge.

Quoted 8 lines
Quoted 1 line
	--yliu

Hi Yuanhan,

Oh sorry, I forgot to add "--in-reply-to" while sending the patch, so you may miss it.
Also the order of Acked-by and Signed-off-by was wrong in above patch. So I will send v2 soon.

No worry. I could fix them, and I don't think there is a very strict rule for both of them :) BTW, FYI, I just found my linux.intel.com seems to be broken (no idea why), thus I made late response.

(well, I found you just send a v2; I will apply that tomorrow).

	--yliu
#6 lore raw
Quoted 35 lines · Yuanhan Liu
Quoted 27 lines · Tetsuya Mukawa
Quoted 26 lines · Yuanhan Liu
Quoted 16 lines · Panu Matilainen
Quoted 12 lines

Another way is applying a below patch.

drivers/net/vhost/Makefile +1 -0
@@ -38,6 +38,7 @@ LIB = librte_pmd_vhost.a
 
 CFLAGS += -O3
 CFLAGS += $(WERROR_FLAGS)
+LDLIBS += -lrte_vhost
 
 EXPORT_MAP := rte_pmd_vhost_version.map
 
Quoted 2 lines

This is same way to link libpcap to librte_pmd_pcap. What do you think about adding it to vhost PMD?

Yes, this is absolutely the right thing to do.

Quoted 5 lines

Ultimately this should be done for all dependencies in all libraries, but missing dependencies are even more pronounced in plugins so the sooner this goes in, the better.

Panu, thanks for the input.

Tetsuya, please submit a formal patch so that I can merge.

Quoted 7 lines
Quoted 1 line
	--yliu

Hi Yuanhan,

Oh sorry, I forgot to add "--in-reply-to" while sending the patch, so you may miss it.
Also the order of Acked-by and Signed-off-by was wrong in above patch. So I will send v2 soon.

Quoted 7 lines

No worry. I could fix them, and I don't think there is a very strict rule for both of them :) BTW, FYI, I just found my linux.intel.com seems to be broken (no idea why), thus I made late response.

(well, I found you just send a v2; I will apply that tomorrow).

	--yliu

Thank you so much!

Tetsuya

#7 lore raw

PATCH v2 1/1 vhost: Fix linkage of vhost PMD

In reply to Tetsuya Mukawa

Currently, vhost PMD doesn't have linkage for librte_vhost, even though it depends on librte_vhost APIs. This causes a linkage error if below conditions are fulfilled.

- DPDK libraries are compiled as shared libraries.
- DPDK application doesn't link librte_vhost.
- Above application tries to link vhost PMD using '-d' DPDK option.

The patch adds linkage for librte_vhost to vhost PMD not to cause an above error.

---
 drivers/net/vhost/Makefile | 1 +
 1 file changed, 1 insertion(+)
drivers/net/vhost/Makefile +1 -0
index f49a69b..30b91a0 100644
@@ -38,6 +38,7 @@ LIB = librte_pmd_vhost.a
 
 CFLAGS += -O3
 CFLAGS += $(WERROR_FLAGS)
+LDLIBS += -lrte_vhost
 
 EXPORT_MAP := rte_pmd_vhost_version.map
 
Signature · 1 line
2.5.0
#8 lore raw

Re: [PATCH v2] vhost: Fix linkage of vhost PMD

Quoted 23 lines · Tetsuya Mukawa

Currently, vhost PMD doesn't have linkage for librte_vhost, even though it depends on librte_vhost APIs. This causes a linkage error if below conditions are fulfilled.

- DPDK libraries are compiled as shared libraries.
- DPDK application doesn't link librte_vhost.
- Above application tries to link vhost PMD using '-d' DPDK option.

The patch adds linkage for librte_vhost to vhost PMD not to cause an above error.

---
 drivers/net/vhost/Makefile | 1 +
 1 file changed, 1 insertion(+)
drivers/net/vhost/Makefile +0 -0
index f49a69b..30b91a0 100644

drivers/net/vhost/Makefile LIB = librte_pmd_vhost.a · line 44

Quoted 7 lines
drivers/net/vhost/Makefile +1 -0
@@ -38,6 +38,7 @@ LIB = librte_pmd_vhost.a
 
 CFLAGS += -O3
 CFLAGS += $(WERROR_FLAGS)
+LDLIBS += -lrte_vhost
 
 EXPORT_MAP := rte_pmd_vhost_version.map
 

Hmm, turns out this isn't quite enough, simply because its the first of its kind (first internal dependency between libraries), at least I'm getting:

== Build drivers/net/vhost
gcc -m64 -Wl,--version-script=/srv/work/dist/dpdk/dpdk-16.04/drivers/net/vhost/rte_pmd_vhost_version.map
-shared rte_eth_vhost.o -lrte_vhost -Wl,-soname,librte_pmd_vhost.so.1
-o librte_pmd_vhost.so.1
/usr/bin/ld: cannot find -lrte_vhost
collect2: error: ld returned 1 exit status /srv/work/dist/dpdk/dpdk-16.04/mk/rte.lib.mk:127: recipe for target 'librte_pmd_vhost.so.1' failed

So it'll need something like this as a pre-requisite to add the internal libraries to the linker path:

mk/rte.lib.mk +1 -1
index 8f7e021..f5d7b04 100644
@@ -86,7 +86,7 @@ O_TO_A_DO = @set -e; \
        $(O_TO_A) && \
        echo $(O_TO_A_CMD) > $(call exe2cmd,$(@))
 
-O_TO_S = $(LD) $(_CPU_LDFLAGS) $(EXTRA_LDFLAGS) -shared $(OBJS-y) $(LDLIBS) \
+O_TO_S = $(LD) -L$(RTE_OUTPUT)/lib $(_CPU_LDFLAGS) $(EXTRA_LDFLAGS) -shared $(OBJS-y) $(LDLIBS) \
         -Wl,-soname,$(LIB) -o $(LIB)
 O_TO_S_STR = $(subst ','\'',$(O_TO_S)) #'# fix syntax highlight
 O_TO_S_DISP = $(if $(V),"$(O_TO_S_STR)","  LD $(@)")

I can submit an official patch for this later but I'm not exactly feeling like the sharpest knife in the drawer today so if somebody beats me to it, feel free.

- Panu -

#9 lore raw

Re: [PATCH v2] vhost: Fix linkage of vhost PMD

Quoted 66 lines · Panu Matilainen
Quoted 23 lines · Tetsuya Mukawa

Currently, vhost PMD doesn't have linkage for librte_vhost, even though it depends on librte_vhost APIs. This causes a linkage error if below conditions are fulfilled.

- DPDK libraries are compiled as shared libraries.
- DPDK application doesn't link librte_vhost.
- Above application tries to link vhost PMD using '-d' DPDK option.

The patch adds linkage for librte_vhost to vhost PMD not to cause an above error.

---
 drivers/net/vhost/Makefile | 1 +
 1 file changed, 1 insertion(+)
drivers/net/vhost/Makefile +0 -0
index f49a69b..30b91a0 100644

drivers/net/vhost/Makefile LIB = librte_pmd_vhost.a · line 44

Quoted 7 lines
drivers/net/vhost/Makefile +1 -0
@@ -38,6 +38,7 @@ LIB = librte_pmd_vhost.a
 
 CFLAGS += -O3
 CFLAGS += $(WERROR_FLAGS)
+LDLIBS += -lrte_vhost
 
 EXPORT_MAP := rte_pmd_vhost_version.map
 

Hmm, turns out this isn't quite enough, simply because its the first of its kind (first internal dependency between libraries), at least I'm getting:

== Build drivers/net/vhost
gcc -m64

(quoted diff) +0 -2
-Wl,--version-script=/srv/work/dist/dpdk/dpdk-16.04/drivers/net/vhost/rte_pmd_vhost_version.map
 -shared rte_eth_vhost.o -lrte_vhost -Wl,-soname,librte_pmd_vhost.so.1
-o librte_pmd_vhost.so.1

/usr/bin/ld: cannot find -lrte_vhost
collect2: error: ld returned 1 exit status /srv/work/dist/dpdk/dpdk-16.04/mk/rte.lib.mk:127: recipe for target 'librte_pmd_vhost.so.1' failed

So it'll need something like this as a pre-requisite to add the internal libraries to the linker path:

mk/rte.lib.mk +1 -2
index 8f7e021..f5d7b04 100644
@@ -86,7 +86,7 @@ O_TO_A_DO = @set -e; \
        $(O_TO_A) && \
        echo $(O_TO_A_CMD) > $(call exe2cmd,$(@))
 
-O_TO_S = $(LD) $(_CPU_LDFLAGS) $(EXTRA_LDFLAGS) -shared $(OBJS-y)
 $(LDLIBS) \
+O_TO_S = $(LD) -L$(RTE_OUTPUT)/lib $(_CPU_LDFLAGS) $(EXTRA_LDFLAGS)
-shared $(OBJS-y) $(LDLIBS) \
         -Wl,-soname,$(LIB) -o $(LIB)
 O_TO_S_STR = $(subst ','\'',$(O_TO_S)) #'# fix syntax highlight
 O_TO_S_DISP = $(if $(V),"$(O_TO_S_STR)","  LD $(@)")
Quoted 5 lines

I can submit an official patch for this later but I'm not exactly feeling like the sharpest knife in the drawer today so if somebody beats me to it, feel free.

- Panu -

Thanks for catching it.
It seems I've already installed DPDK libraries in /usr/local/lib/. Then , I could not catch this error.
I've confirmed your solution works fine.

Thanks,
Tetsuya

Applied
#10 lore raw

Re: [PATCH v2] vhost: Fix linkage of vhost PMD

In reply to Tetsuya Mukawa
Quoted 8 lines · Tetsuya Mukawa

Currently, vhost PMD doesn't have linkage for librte_vhost, even though it depends on librte_vhost APIs. This causes a linkage error if below conditions are fulfilled.

- DPDK libraries are compiled as shared libraries.
- DPDK application doesn't link librte_vhost.
- Above application tries to link vhost PMD using '-d' DPDK option.

Quoted 5 lines

The patch adds linkage for librte_vhost to vhost PMD not to cause an above error.

Applied to dpdk-next-virtio.

Thanks.

	--yliu