Message ID | PR1P264MB2030EB80D45C19826E935ADFDFEA9@PR1P264MB2030.FRAP264.PROD.OUTLOOK.COM (mailing list archive) |
---|---|
State | Not Applicable |
Delegated to: | David Marchand |
Headers | show |
Series | vmbus: get current rte_vmbus_bus struct | expand |
Context | Check | Description |
---|---|---|
ci/iol-testing | warning | apply patch failure |
ci/Intel-compilation | warning | apply issues |
ci/checkpatch | warning | coding style issues |
On Wed, Apr 13, 2022 at 9:32 AM Abdelfattah Chehab <abdelfattah.chehab-ext@ekinops.com> wrote: > > Hi All, > > FOREACH_DEVICE_ON_VMBUS needs rte_vmbus_bus to work on > > If static link to libdpdk.a : no issues > > If dynamic link to *.so: linker issue, global variable not found. Not sure I really get your usecase, but this probably is a linking issue on your side.
The global variable is not accessible from libdpdk.so I don't really see how the linker can find it in this case. -----Original Message----- From: David Marchand <david.marchand@redhat.com> Sent: 13 April 2022 10:11 To: Abdelfattah Chehab <abdelfattah.chehab-ext@ekinops.com> Cc: dev@dpdk.org; stable@dpdk.org Subject: Re: [PATCH] vmbus: get current rte_vmbus_bus struct On Wed, Apr 13, 2022 at 9:32 AM Abdelfattah Chehab <abdelfattah.chehab-ext@ekinops.com> wrote: > > Hi All, > > FOREACH_DEVICE_ON_VMBUS needs rte_vmbus_bus to work on > > If static link to libdpdk.a : no issues > > If dynamic link to *.so: linker issue, global variable not found. Not sure I really get your usecase, but this probably is a linking issue on your side. -- David Marchand
diff --git a/dpdk-20.11/drivers/bus/vmbus/rte_bus_vmbus.h b/dpdk-20.11/drivers/bus/vmbus/rte_bus_vmbus.h --- a/dpdk-20.11/drivers/bus/vmbus/rte_bus_vmbus.h +++ b/dpdk-20.11/drivers/bus/vmbus/rte_bus_vmbus.h @@ -414,6 +414,16 @@ } \ RTE_PMD_EXPORT_NAME(nm, __COUNTER__) +/** + * Gets the global rte_vmbus_bus struct + * + * @param bus + * Pointer to rte_vmbus_bus structure. + * @return + * Return 0 if success. + */ +int rte_vmbus_get_bus(struct rte_vmbus_bus *bus); + #ifdef __cplusplus } #endif diff --git a/dpdk-20.11/drivers/bus/vmbus/version.map b/dpdk-20.11/drivers/bus/vmbus/version.map --- a/dpdk-20.11/drivers/bus/vmbus/version.map +++ b/dpdk-20.11/drivers/bus/vmbus/version.map @@ -23,6 +23,7 @@ rte_vmbus_subchan_open; rte_vmbus_unmap_device; rte_vmbus_unregister; + rte_vmbus_get_bus; local: *; }; diff --git a/dpdk-20.11/drivers/bus/vmbus/vmbus_common.c b/dpdk-20.11/drivers/bus/vmbus/vmbus_common.c --- a/dpdk-20.11/drivers/bus/vmbus/vmbus_common.c +++ b/dpdk-20.11/drivers/bus/vmbus/vmbus_common.c @@ -25,6 +25,17 @@ extern struct rte_vmbus_bus rte_vmbus_bus; +/* Gets the global rte_vmbus_bus struct*/ +int rte_vmbus_get_bus(struct rte_vmbus_bus *bus){ + + if (!bus) + return 1; + + memcpy(bus, &rte_vmbus_bus, sizeof(struct rte_vmbus_bus)); + + return 0; +} + /* map a particular resource from a file */ void * vmbus_map_resource(void *requested_addr, int fd, off_t offset, size_t size,