[dpdk-dev] [PATCH v4 2/2] eal/linux: Add support for handling built-in kernel modules
Kamil Rytarowski
krytarowski at caviumnetworks.com
Wed Dec 9 14:28:10 CET 2015
W dniu 09.12.2015 o 08:30, Panu Matilainen pisze:
> On 12/08/2015 05:33 PM, Kamil Rytarowski wrote:
>> 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 by the script.
>>
>> 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 at caviumnetworks.com>
>> Signed-off-by: David Marchand <david.marchand at 6wind.com>
>> ---
>> lib/librte_eal/linuxapp/eal/eal.c | 34
>> ++++++++++++++++++++--------------
>> 1 file changed, 20 insertions(+), 14 deletions(-)
>>
>> diff --git a/lib/librte_eal/linuxapp/eal/eal.c
>> b/lib/librte_eal/linuxapp/eal/eal.c
>> index 635ec36..92482a0 100644
>> --- a/lib/librte_eal/linuxapp/eal/eal.c
>> +++ b/lib/librte_eal/linuxapp/eal/eal.c
>> @@ -901,27 +901,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, "Open %s failed! error %i (%s)\n",
>> + sysfs_mod_name, errno, strerror(errno));
>> + return 0;
>> + }
>
> Like with /sys/module, its not trying to *open* sysfs_mod_name
> directory either so it shouldn't claim to do so.
>
> I did use plural on purpose when I said "the debug messages are
> incorrect/misleading. It's certainly not trying to *open* these
> directories so it should not claim to do so" in my previous mail :)
>
> - Panu -
>
Should be good now!
Thank you.
More information about the dev
mailing list