Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/patches/95976/?format=api
https://patches.dpdk.org/api/patches/95976/?format=api", "web_url": "https://patches.dpdk.org/project/dpdk/patch/20210716110806.2566788-2-dkozlyuk@nvidia.com/", "project": { "id": 1, "url": "https://patches.dpdk.org/api/projects/1/?format=api", "name": "DPDK", "link_name": "dpdk", "list_id": "dev.dpdk.org", "list_email": "dev@dpdk.org", "web_url": "http://core.dpdk.org", "scm_url": "git://dpdk.org/dpdk", "webscm_url": "http://git.dpdk.org/dpdk", "list_archive_url": "https://inbox.dpdk.org/dev", "list_archive_url_format": "https://inbox.dpdk.org/dev/{}", "commit_url_format": "" }, "msgid": "<20210716110806.2566788-2-dkozlyuk@nvidia.com>", "list_archive_url": "https://inbox.dpdk.org/dev/20210716110806.2566788-2-dkozlyuk@nvidia.com", "date": "2021-07-16T11:08:04", "name": "[21.11,v2,1/3] eal/linux: make hugetlbfs analysis reusable", "commit_ref": null, "pull_url": null, "state": "superseded", "archived": true, "hash": "2ef20f0933fb3b0932d9499042c4de0533dc6686", "submitter": { "id": 2248, "url": "https://patches.dpdk.org/api/people/2248/?format=api", "name": "Dmitry Kozlyuk", "email": "dkozlyuk@nvidia.com" }, "delegate": { "id": 24651, "url": "https://patches.dpdk.org/api/users/24651/?format=api", "username": "dmarchand", "first_name": "David", "last_name": "Marchand", "email": "david.marchand@redhat.com" }, "mbox": "https://patches.dpdk.org/project/dpdk/patch/20210716110806.2566788-2-dkozlyuk@nvidia.com/mbox/", "series": [ { "id": 17863, "url": "https://patches.dpdk.org/api/series/17863/?format=api", "web_url": "https://patches.dpdk.org/project/dpdk/list/?series=17863", "date": "2021-07-16T11:08:03", "name": "eal: add memory pre-allocation from existing files", "version": 2, "mbox": "https://patches.dpdk.org/series/17863/mbox/" } ], "comments": "https://patches.dpdk.org/api/patches/95976/comments/", "check": "success", "checks": "https://patches.dpdk.org/api/patches/95976/checks/", "tags": {}, "related": [], "headers": { "Return-Path": "<dev-bounces@dpdk.org>", "X-Original-To": "patchwork@inbox.dpdk.org", "Delivered-To": "patchwork@inbox.dpdk.org", "Received": [ "from mails.dpdk.org (mails.dpdk.org [217.70.189.124])\n\tby inbox.dpdk.org (Postfix) with ESMTP id B6E51A0C4C;\n\tFri, 16 Jul 2021 13:08:32 +0200 (CEST)", "from [217.70.189.124] (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id C055641357;\n\tFri, 16 Jul 2021 13:08:31 +0200 (CEST)", "from NAM02-BN1-obe.outbound.protection.outlook.com\n (mail-bn1nam07on2077.outbound.protection.outlook.com [40.107.212.77])\n by mails.dpdk.org (Postfix) with ESMTP id CEE804134E\n for <dev@dpdk.org>; Fri, 16 Jul 2021 13:08:29 +0200 (CEST)", "from DM3PR12CA0082.namprd12.prod.outlook.com (2603:10b6:0:57::26) by\n BYAPR12MB2694.namprd12.prod.outlook.com (2603:10b6:a03:69::31) with\n Microsoft\n SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id\n 15.20.4308.23; Fri, 16 Jul 2021 11:08:26 +0000", "from DM6NAM11FT027.eop-nam11.prod.protection.outlook.com\n (2603:10b6:0:57:cafe::fe) by DM3PR12CA0082.outlook.office365.com\n (2603:10b6:0:57::26) with Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4331.21 via Frontend\n Transport; Fri, 16 Jul 2021 11:08:26 +0000", "from mail.nvidia.com (216.228.112.34) by\n DM6NAM11FT027.mail.protection.outlook.com (10.13.172.205) with Microsoft SMTP\n Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id\n 15.20.4331.21 via Frontend Transport; Fri, 16 Jul 2021 11:08:25 +0000", "from nvidia.com (172.20.187.5) by HQMAIL107.nvidia.com\n (172.20.187.13) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Fri, 16 Jul\n 2021 11:08:24 +0000" ], "ARC-Seal": "i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;\n b=VKG0fqmWK6et7110khkjrz4Ra1gc49CZBTkqTplIpdGK3YYEJOFsHVITpdw7kTzqbeXYGAgNMKC6h7HNQ/MqyIjSVW1Rvi6kOdD/pIV9F6arf2yi2aF1yesy144BQcpSnyLB1ywcw9+kwtbW5saIMK9QbijHFXgUlHfcYqojPI9Rrvoeib5SM0ryN12xs6I3x4u49JfFm1+3yqZNeGFh20383Bu4mz4obNHQIyhpEojknaJRpU4Si0bMzxGpjBjc7sHwYBE3BkKPGb0n/Nfjt+3MRfJ69JJPeHMXPz+AaB7ROndtfYv6FQif+7R8WAT5z6XdKRu51+62SYj8CoBxng==", "ARC-Message-Signature": "i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;\n s=arcselector9901;\n h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;\n bh=EzAhVRISwFsdw0J26/1ykpw8XFGEUa4Wvu8iDiW4fws=;\n b=m4irIJSGmOni48wNmdfpmSpjG05Ml1L3i42RlRVzfmeOgMR7RzVd+N44yXHJ0xoP+KwfHwyDx+fN0LyvIjLwwP7IDyk5xVbH1qis2Ma655w6Z/23l45w3/z+TR3UsSSU/NQpPoECVriVDvWa+RPMEb2vlsnq8cr15q4h46U8hqhd9qr18sFi1TcpRCRalbXDZbdxs04YyCmySn8QgyMjb8RPYT5vQYEOLG1xdinnTBJs2rPseSGCrCL/pulreeZ2oSxIQrwTo8IvNOI0r7tGQReHWcRmwFyhSyp8MrAoEzCZ0diq31HGB3bVRABFwJU697e7TqJ2jA3cxCBoNjlTMw==", "ARC-Authentication-Results": "i=1; mx.microsoft.com 1; spf=pass (sender ip is\n 216.228.112.34) smtp.rcpttodomain=intel.com smtp.mailfrom=nvidia.com;\n dmarc=pass (p=quarantine sp=none pct=100) action=none header.from=nvidia.com;\n dkim=none (message not signed); arc=none", "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com;\n s=selector2;\n h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;\n bh=EzAhVRISwFsdw0J26/1ykpw8XFGEUa4Wvu8iDiW4fws=;\n b=qzNmMe3RclX8kCyGBE5iTJxUOlbN97n5+zqzivZEx/6eJXZGy1JaNStpSREuY9DqskrI9cXNc5bYDsn1HRpyMmlcDPVZVo3MrIg5v0K7MHb7uhSvwTfQIYVUZozamiBD0gWewTtCa7eSYwO47pEkZnkwPZ3WMmeJ9lOo9wF3qKo3x6BpZ/WTWrgbazkjwLW5RlXufHabas0DC4auHAQB6VJO47z02lL8WwMCxyyUQzHD+DX5aRDi4QWzkxyMyHz6MwEja6OsWBrX9APEoH+61bWHd+A0PQOLMbdOLOIYn1JbV38atqAm/HXISdBG2XRu/+Xl7Ea3U/BzkrOSlZPM7Q==", "X-MS-Exchange-Authentication-Results": "spf=pass (sender IP is 216.228.112.34)\n smtp.mailfrom=nvidia.com; intel.com; dkim=none (message not signed)\n header.d=none;intel.com; dmarc=pass action=none header.from=nvidia.com;", "Received-SPF": "Pass (protection.outlook.com: domain of nvidia.com designates\n 216.228.112.34 as permitted sender) receiver=protection.outlook.com;\n client-ip=216.228.112.34; helo=mail.nvidia.com;", "From": "Dmitry Kozlyuk <dkozlyuk@nvidia.com>", "To": "<dev@dpdk.org>", "CC": "Anatoly Burakov <anatoly.burakov@intel.com>, Viacheslav Ovsiienko\n <viacheslavo@nvidia.com>", "Date": "Fri, 16 Jul 2021 14:08:04 +0300", "Message-ID": "<20210716110806.2566788-2-dkozlyuk@nvidia.com>", "X-Mailer": "git-send-email 2.25.1", "In-Reply-To": "<20210716110806.2566788-1-dkozlyuk@nvidia.com>", "References": "<20210705124950.902701-1-dkozlyuk@nvidia.com>\n <20210716110806.2566788-1-dkozlyuk@nvidia.com>", "MIME-Version": "1.0", "Content-Transfer-Encoding": "8bit", "Content-Type": "text/plain", "X-Originating-IP": "[172.20.187.5]", "X-ClientProxiedBy": "HQMAIL111.nvidia.com (172.20.187.18) To\n HQMAIL107.nvidia.com (172.20.187.13)", "X-EOPAttributedMessage": "0", "X-MS-PublicTrafficType": "Email", "X-MS-Office365-Filtering-Correlation-Id": "9a76be90-57ed-464a-2740-08d9484a08a9", "X-MS-TrafficTypeDiagnostic": "BYAPR12MB2694:", "X-Microsoft-Antispam-PRVS": "\n <BYAPR12MB2694C2225AFF20F9FBFE7080B9119@BYAPR12MB2694.namprd12.prod.outlook.com>", "X-MS-Oob-TLC-OOBClassifiers": "OLM:5236;", "X-MS-Exchange-SenderADCheck": "1", "X-MS-Exchange-AntiSpam-Relay": "0", "X-Microsoft-Antispam": "BCL:0;", "X-Microsoft-Antispam-Message-Info": "\n dd8GbvQsx2ttqhFzpcCobHeXQhskkuSAGjrs5VUhDv08oavs7jagDCndM3TxXmeteMZ7JoKbyKWljZg8YLALkx/ASo8fFaBtshWOtqHBfHQiEtONfpBvA8ZhpJdkzkMRPatKJwE3BBK1Hds+jTwaMfk/m865IOQoqWczaWyWZWzWhtDDe6A7U3L6J/BIBwS0bUO24sp/jXHDvLEeBw6Rq+Xfs84qyRLrWI350uawlzk6j/zVEM3MLtatT2POEDJqMAti7hQZtKjc4D5Pob4vFEA3XOliSEHaSMhGC+SpnwrbfcZbPA5RwxYQyn6nv1R63+mo+sycOz1/7IuUzKbNE3qQk/ef94K0YJKX1jcG1jmcYgbcVE4nNrTaWPQvbj1VsxYN7Jbz2FZJ8J5OKWKhJXJ8yZURlXQqWIkrv9Aaa58fOf31XxVtnG8Qt6yRebojrAD83olgeJmdXNkfEFdRs0fJtINfXuX0ryDti6lC9Cx2Kl5NmQrbFQALsde5M/fSA7UryBiFpFywKr/vAGDy2e5uylZEiIWemVmV+cF+X4Mj78kdv8VStHZh46TxjSlSZ8w5BBNVWqxDu03+uQcro1NMF0MhcCgmHWM8HkvcpNEL0jSK+I6Z/f2/lHZbAblOMzGkpEt5BJNKdNJ5Fsm9bh6lg8aZWfTvaSMP3v5BCTlBE04uJr5qaq6uwz0HR3bf1pbRX4jbFcbJZaeg27V3zKNOBNdJTb/sTLTrukhhddU=", "X-Forefront-Antispam-Report": "CIP:216.228.112.34; CTRY:US; LANG:en; SCL:1;\n SRV:;\n IPV:NLI; SFV:NSPM; H:mail.nvidia.com; PTR:schybrid03.nvidia.com; CAT:NONE;\n SFS:(4636009)(39860400002)(396003)(346002)(136003)(376002)(36840700001)(46966006)(34020700004)(6286002)(82310400003)(2906002)(1076003)(6916009)(70206006)(70586007)(478600001)(107886003)(6666004)(336012)(54906003)(2616005)(7696005)(83380400001)(36906005)(36756003)(356005)(426003)(4326008)(55016002)(5660300002)(82740400003)(316002)(86362001)(47076005)(186003)(26005)(8676002)(16526019)(36860700001)(8936002)(7636003);\n DIR:OUT; SFP:1101;", "X-OriginatorOrg": "Nvidia.com", "X-MS-Exchange-CrossTenant-OriginalArrivalTime": "16 Jul 2021 11:08:25.8309 (UTC)", "X-MS-Exchange-CrossTenant-Network-Message-Id": "\n 9a76be90-57ed-464a-2740-08d9484a08a9", "X-MS-Exchange-CrossTenant-Id": "43083d15-7273-40c1-b7db-39efd9ccc17a", "X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp": "\n TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a; Ip=[216.228.112.34];\n Helo=[mail.nvidia.com]", "X-MS-Exchange-CrossTenant-AuthSource": "\n DM6NAM11FT027.eop-nam11.prod.protection.outlook.com", "X-MS-Exchange-CrossTenant-AuthAs": "Anonymous", "X-MS-Exchange-CrossTenant-FromEntityHeader": "HybridOnPrem", "X-MS-Exchange-Transport-CrossTenantHeadersStamped": "BYAPR12MB2694", "Subject": "[dpdk-dev] [PATCH 21.11 v2 1/3] eal/linux: make hugetlbfs analysis\n reusable", "X-BeenThere": "dev@dpdk.org", "X-Mailman-Version": "2.1.29", "Precedence": "list", "List-Id": "DPDK patches and discussions <dev.dpdk.org>", "List-Unsubscribe": "<https://mails.dpdk.org/options/dev>,\n <mailto:dev-request@dpdk.org?subject=unsubscribe>", "List-Archive": "<http://mails.dpdk.org/archives/dev/>", "List-Post": "<mailto:dev@dpdk.org>", "List-Help": "<mailto:dev-request@dpdk.org?subject=help>", "List-Subscribe": "<https://mails.dpdk.org/listinfo/dev>,\n <mailto:dev-request@dpdk.org?subject=subscribe>", "Errors-To": "dev-bounces@dpdk.org", "Sender": "\"dev\" <dev-bounces@dpdk.org>" }, "content": "get_hugepage_dir() searched for a hugetlbfs mount with a given page size\nusing handcraft parsing of /proc/mounts and mixing traversal logic with\nselecting the needed entry. Separate code to enumerate hugetlbfs mounts\nto eal_hugepage_mount_walk() taking a callback that can inspect already\nparsed entries. Use mntent(3) API for parsing. This allows to reuse\nenumeration logic in subsequent patches.\n\nSigned-off-by: Dmitry Kozlyuk <dkozlyuk@nvidia.com>\nReviewed-by: Viacheslav Ovsiienko <viacheslavo@nvidia.com>\n---\n lib/eal/linux/eal_hugepage_info.c | 153 +++++++++++++++++++-----------\n lib/eal/linux/eal_hugepage_info.h | 39 ++++++++\n 2 files changed, 135 insertions(+), 57 deletions(-)\n create mode 100644 lib/eal/linux/eal_hugepage_info.h", "diff": "diff --git a/lib/eal/linux/eal_hugepage_info.c b/lib/eal/linux/eal_hugepage_info.c\nindex d97792cade..a090c0a5b5 100644\n--- a/lib/eal/linux/eal_hugepage_info.c\n+++ b/lib/eal/linux/eal_hugepage_info.c\n@@ -12,6 +12,7 @@\n #include <stdio.h>\n #include <fnmatch.h>\n #include <inttypes.h>\n+#include <mntent.h>\n #include <stdarg.h>\n #include <unistd.h>\n #include <errno.h>\n@@ -34,6 +35,7 @@\n #include \"eal_private.h\"\n #include \"eal_internal_cfg.h\"\n #include \"eal_hugepages.h\"\n+#include \"eal_hugepage_info.h\"\n #include \"eal_filesystem.h\"\n \n static const char sys_dir_path[] = \"/sys/kernel/mm/hugepages\";\n@@ -195,73 +197,110 @@ get_default_hp_size(void)\n \treturn size;\n }\n \n-static int\n-get_hugepage_dir(uint64_t hugepage_sz, char *hugedir, int len)\n+int\n+eal_hugepage_mount_walk(eal_hugepage_mount_walk_cb *cb, void *cb_arg)\n {\n-\tenum proc_mount_fieldnames {\n-\t\tDEVICE = 0,\n-\t\tMOUNTPT,\n-\t\tFSTYPE,\n-\t\tOPTIONS,\n-\t\t_FIELDNAME_MAX\n-\t};\n-\tstatic uint64_t default_size = 0;\n-\tconst char proc_mounts[] = \"/proc/mounts\";\n-\tconst char hugetlbfs_str[] = \"hugetlbfs\";\n-\tconst size_t htlbfs_str_len = sizeof(hugetlbfs_str) - 1;\n-\tconst char pagesize_opt[] = \"pagesize=\";\n-\tconst size_t pagesize_opt_len = sizeof(pagesize_opt) - 1;\n-\tconst char split_tok = ' ';\n-\tchar *splitstr[_FIELDNAME_MAX];\n-\tchar buf[BUFSIZ];\n-\tint retval = -1;\n-\tconst struct internal_config *internal_conf =\n-\t\teal_get_internal_configuration();\n-\n-\tFILE *fd = fopen(proc_mounts, \"r\");\n-\tif (fd == NULL)\n-\t\trte_panic(\"Cannot open %s\\n\", proc_mounts);\n+\tstatic const char PATH[] = \"/proc/mounts\";\n+\tstatic const char OPTION[] = \"pagesize\";\n+\n+\tstatic uint64_t default_size;\n+\n+\tFILE *f = NULL;\n+\tstruct mntent *m;\n+\tchar *hugepage_sz_str;\n+\tuint64_t hugepage_sz;\n+\tint ret = -1;\n+\n+\tf = setmntent(PATH, \"r\");\n+\tif (f == NULL) {\n+\t\tRTE_LOG(ERR, EAL, \"%s(): setmntent(%s): %s\\n\",\n+\t\t\t\t__func__, PATH, strerror(errno));\n+\t\tgoto exit;\n+\t}\n \n \tif (default_size == 0)\n \t\tdefault_size = get_default_hp_size();\n \n-\twhile (fgets(buf, sizeof(buf), fd)){\n-\t\tif (rte_strsplit(buf, sizeof(buf), splitstr, _FIELDNAME_MAX,\n-\t\t\t\tsplit_tok) != _FIELDNAME_MAX) {\n-\t\t\tRTE_LOG(ERR, EAL, \"Error parsing %s\\n\", proc_mounts);\n-\t\t\tbreak; /* return NULL */\n-\t\t}\n+\tret = 0;\n+\tdo {\n+\t\tm = getmntent(f);\n+\t\tif (m == NULL)\n+\t\t\tbreak;\n \n-\t\t/* we have a specified --huge-dir option, only examine that dir */\n-\t\tif (internal_conf->hugepage_dir != NULL &&\n-\t\t\t\tstrcmp(splitstr[MOUNTPT], internal_conf->hugepage_dir) != 0)\n+\t\tif (strcmp(m->mnt_fsname, \"hugetlbfs\") != 0)\n \t\t\tcontinue;\n \n-\t\tif (strncmp(splitstr[FSTYPE], hugetlbfs_str, htlbfs_str_len) == 0){\n-\t\t\tconst char *pagesz_str = strstr(splitstr[OPTIONS], pagesize_opt);\n-\n-\t\t\t/* if no explicit page size, the default page size is compared */\n-\t\t\tif (pagesz_str == NULL){\n-\t\t\t\tif (hugepage_sz == default_size){\n-\t\t\t\t\tstrlcpy(hugedir, splitstr[MOUNTPT], len);\n-\t\t\t\t\tretval = 0;\n-\t\t\t\t\tbreak;\n-\t\t\t\t}\n-\t\t\t}\n-\t\t\t/* there is an explicit page size, so check it */\n-\t\t\telse {\n-\t\t\t\tuint64_t pagesz = rte_str_to_size(&pagesz_str[pagesize_opt_len]);\n-\t\t\t\tif (pagesz == hugepage_sz) {\n-\t\t\t\t\tstrlcpy(hugedir, splitstr[MOUNTPT], len);\n-\t\t\t\t\tretval = 0;\n-\t\t\t\t\tbreak;\n-\t\t\t\t}\n+\t\thugepage_sz_str = hasmntopt(m, OPTION);\n+\t\tif (hugepage_sz_str != NULL) {\n+\t\t\thugepage_sz_str += strlen(OPTION) + 1; /* +1 for '=' */\n+\t\t\thugepage_sz = rte_str_to_size(hugepage_sz_str);\n+\t\t\tif (hugepage_sz == 0) {\n+\t\t\t\tRTE_LOG(DEBUG, EAL, \"Cannot parse hugepage size from '%s' for %s\\n\",\n+\t\t\t\t\t\tm->mnt_opts, m->mnt_dir);\n+\t\t\t\tcontinue;\n \t\t\t}\n-\t\t} /* end if strncmp hugetlbfs */\n-\t} /* end while fgets */\n+\t\t} else {\n+\t\t\tRTE_LOG(DEBUG, EAL, \"Hugepage filesystem at %s without %s option\\n\",\n+\t\t\t\t\tm->mnt_dir, OPTION);\n+\t\t\thugepage_sz = default_size;\n+\t\t}\n \n-\tfclose(fd);\n-\treturn retval;\n+\t\tif (cb(m->mnt_dir, hugepage_sz, cb_arg) != 0)\n+\t\t\tbreak;\n+\t} while (m != NULL);\n+\n+\tif (ferror(f) && !feof(f)) {\n+\t\tRTE_LOG(DEBUG, EAL, \"%s(): getmntent(): %s\\n\",\n+\t\t\t\t__func__, strerror(errno));\n+\t\tret = -1;\n+\t\tgoto exit;\n+\t}\n+\n+exit:\n+\tif (f != NULL)\n+\t\tendmntent(f);\n+\treturn ret;\n+}\n+\n+struct match_hugepage_mount_arg {\n+\tuint64_t hugepage_sz;\n+\tchar *hugedir;\n+\tint hugedir_len;\n+\tbool done;\n+};\n+\n+static int\n+match_hugepage_mount(const char *path, uint64_t hugepage_sz, void *cb_arg)\n+{\n+\tconst struct internal_config *internal_conf =\n+\t\teal_get_internal_configuration();\n+\tstruct match_hugepage_mount_arg *arg = cb_arg;\n+\n+\t/* we have a specified --huge-dir option, only examine that dir */\n+\tif (internal_conf->hugepage_dir != NULL &&\n+\t\t\tstrcmp(path, internal_conf->hugepage_dir) != 0)\n+\t\treturn 0;\n+\n+\tif (hugepage_sz == arg->hugepage_sz) {\n+\t\tstrlcpy(arg->hugedir, path, arg->hugedir_len);\n+\t\targ->done = true;\n+\t\treturn 1;\n+\t}\n+\n+\treturn 0;\n+}\n+\n+static int\n+get_hugepage_dir(uint64_t hugepage_sz, char *hugedir, int len)\n+{\n+\tstruct match_hugepage_mount_arg arg = {\n+\t\t.hugepage_sz = hugepage_sz,\n+\t\t.hugedir = hugedir,\n+\t\t.hugedir_len = len,\n+\t\t.done = false,\n+\t};\n+\tint ret = eal_hugepage_mount_walk(match_hugepage_mount, &arg);\n+\treturn ret == 0 && arg.done ? 0 : -1;\n }\n \n /*\ndiff --git a/lib/eal/linux/eal_hugepage_info.h b/lib/eal/linux/eal_hugepage_info.h\nnew file mode 100644\nindex 0000000000..c7efa37c66\n--- /dev/null\n+++ b/lib/eal/linux/eal_hugepage_info.h\n@@ -0,0 +1,39 @@\n+/* SPDX-License-Identifier: BSD-3-Clause\n+ * Copyright 2021 NVIDIA CORPORATION & AFFILIATES.\n+ */\n+\n+#ifndef _EAL_HUGEPAGE_INFO_\n+#define _EAL_HUGEPAGE_INFO_\n+\n+#include <stdint.h>\n+\n+/**\n+ * Function called for each hugetlbfs mount point.\n+ *\n+ * @param path\n+ * Mount point directory.\n+ * @param hugepage_sz\n+ * Hugepage size for the mount or default system hugepage size.\n+ * @param arg\n+ * User data.\n+ *\n+ * @return\n+ * 0 to continue walking, 1 to stop.\n+ */\n+typedef int (eal_hugepage_mount_walk_cb)(const char *path, uint64_t hugepage_sz,\n+\t\t\t\t\t void *arg);\n+\n+/**\n+ * Enumerate hugetlbfs mount points.\n+ *\n+ * @param cb\n+ * Function called for each mount point.\n+ * @param cb_arg\n+ * User data passed to the callback.\n+ *\n+ * @return\n+ * 0 on success, negative on failure.\n+ */\n+int eal_hugepage_mount_walk(eal_hugepage_mount_walk_cb *cb, void *cb_arg);\n+\n+#endif /* _EAL_HUGEPAGE_INFO_ */\n", "prefixes": [ "21.11", "v2", "1/3" ] }{ "id": 95976, "url": "