d761fec5f6
- Applied all the fixes recommended by upstream for v2.2 stable release(bsc#981996). [+0008-app-testpmd-handle-SIGINT-and-SIGTERM.patch, +0009-bonding-copy-entire-config-structure-in-mode-4.patch, +0010-bonding-fix-active-slaves-with-no-primary.patch, +0011-bonding-do-not-ignore-multicast-in-mode-4.patch, +0012-bonding-do-not-activate-slave-twice.patch, +0013-bonding-fix-crash-when-no-slave-device.patch, +0014-bonding-fix-detach-of-bonded-device.patch, +0015-bonding-fix-detach-of-slave-devices.patch, +0016-eal-linux-support-built-in-kernel-modules.patch, +0017-examples-l3fwd-handle-SIGINT-and-SIGTERM.patch, +0018-fm10k-fix-VLAN-flag-in-scattered-Rx.patch, +0019-i40e-base-fix-driver-load-failure.patch, +0020-i40e-base-fix-missing-check-for-stopped-admin-queue.patch, +0021-i40e-fix-inverted-check-for-no-refcount.patch, +0022-i40e-fix-overflow.patch, +0023-i40e-fix-VLAN-filtering.patch, +0024-mempool-fix-leak-when-creation-fails.patch, +0025-pcap-fix-captured-frame-length.patch, +0026-port-fix-crash-for-ethdev-writer-nodrop.patch, +0027-port-fix-crash-for-ring-writer-nodrop.patch, +0028-tools-fix-unbinding-failure-handling.patch, +0029-tools-support-Python-3-in-bind-script.patch, +0030-tools-support-binding-to-built-in-kernel-modules.patch, +0031-vhost-fix-leak-of-fds-and-mmaps.patch, +0032-virtio-fix-crash-in-statistics-functions.patch, +0033-virtio-fix-descriptors-pointing-to-the-same-buffer.patch, +0034-virtio-fix-restart.patch] OBS-URL: https://build.opensuse.org/request/show/399089 OBS-URL: https://build.opensuse.org/package/show/network/dpdk?expand=0&rev=3
84 lines
2.5 KiB
Diff
84 lines
2.5 KiB
Diff
From 6e7caa1ad9d597fed0a49468af25ae6e68b8c443 Mon Sep 17 00:00:00 2001
|
|
From: Kamil Rytarowski <kamil.rytarowski@caviumnetworks.com>
|
|
Date: Thu, 28 Jan 2016 14:13:54 +0100
|
|
Subject: [PATCH] eal/linux: support built-in kernel modules
|
|
|
|
Currently rte_eal_check_module() detects Linux kernel modules via reading
|
|
/proc/modules. Built-in ones aren't listed there and therefore they are not
|
|
being found.
|
|
|
|
Add support for checking built-in modules with parsing the sysfs files
|
|
|
|
This commit obsoletes the /proc/modules parsing approach.
|
|
|
|
Signed-off-by: Kamil Rytarowski <kamil.rytarowski@caviumnetworks.com>
|
|
Acked-by: David Marchand <david.marchand@6wind.com>
|
|
Acked-by: Yuanhan Liu <yuanhan.liu@linux.intel.com>
|
|
---
|
|
lib/librte_eal/linuxapp/eal/eal.c | 35 +++++++++++++++++++++--------------
|
|
1 file changed, 21 insertions(+), 14 deletions(-)
|
|
|
|
diff --git a/lib/librte_eal/linuxapp/eal/eal.c b/lib/librte_eal/linuxapp/eal/eal.c
|
|
index 635ec36..4d3e0de 100644
|
|
--- a/lib/librte_eal/linuxapp/eal/eal.c
|
|
+++ b/lib/librte_eal/linuxapp/eal/eal.c
|
|
@@ -49,6 +49,7 @@
|
|
#include <errno.h>
|
|
#include <sys/mman.h>
|
|
#include <sys/queue.h>
|
|
+#include <sys/stat.h>
|
|
#if defined(RTE_ARCH_X86_64) || defined(RTE_ARCH_I686)
|
|
#include <sys/io.h>
|
|
#endif
|
|
@@ -901,27 +902,33 @@ int rte_eal_has_hugepages(void)
|
|
int
|
|
rte_eal_check_module(const char *module_name)
|
|
{
|
|
- char mod_name[30]; /* Any module names can be longer than 30 bytes? */
|
|
- int ret = 0;
|
|
+ char sysfs_mod_name[PATH_MAX];
|
|
+ struct stat st;
|
|
int n;
|
|
|
|
if (NULL == module_name)
|
|
return -1;
|
|
|
|
- FILE *fd = fopen("/proc/modules", "r");
|
|
- if (NULL == fd) {
|
|
- RTE_LOG(ERR, EAL, "Open /proc/modules failed!"
|
|
- " error %i (%s)\n", errno, strerror(errno));
|
|
+ /* Check if there is sysfs mounted */
|
|
+ if (stat("/sys/module", &st) != 0) {
|
|
+ RTE_LOG(DEBUG, EAL, "sysfs is not mounted! error %i (%s)\n",
|
|
+ errno, strerror(errno));
|
|
return -1;
|
|
}
|
|
- while (!feof(fd)) {
|
|
- n = fscanf(fd, "%29s %*[^\n]", mod_name);
|
|
- if ((n == 1) && !strcmp(mod_name, module_name)) {
|
|
- ret = 1;
|
|
- break;
|
|
- }
|
|
+
|
|
+ /* A module might be built-in, therefore try sysfs */
|
|
+ n = snprintf(sysfs_mod_name, PATH_MAX, "/sys/module/%s", module_name);
|
|
+ if (n < 0 || n > PATH_MAX) {
|
|
+ RTE_LOG(DEBUG, EAL, "Could not format module path\n");
|
|
+ return -1;
|
|
}
|
|
- fclose(fd);
|
|
|
|
- return ret;
|
|
+ if (stat(sysfs_mod_name, &st) != 0) {
|
|
+ RTE_LOG(DEBUG, EAL, "Module %s not found! error %i (%s)\n",
|
|
+ sysfs_mod_name, errno, strerror(errno));
|
|
+ return 0;
|
|
+ }
|
|
+
|
|
+ /* Module has been found */
|
|
+ return 1;
|
|
}
|
|
--
|
|
2.6.2
|
|
|