[v2,1/2] eal: add eal option to configure iova mode
Checks
Commit Message
From: Santosh Shukla <santosh.shukla@caviumnetworks.com>
In the case of user don't want to use bus iova scheme and want
to override.
For that, Adding eal option --iova-mode=<string> where valid input
string is 'pa' or 'va'.
Signed-off-by: Santosh Shukla <santosh.shukla@caviumnetworks.com>
Signed-off-by: Jerin Jacob <jerin.jacob@caviumnetworks.com>
---
lib/librte_eal/common/eal_common_options.c | 30 ++++++++++++++++++++++++++++++
lib/librte_eal/common/eal_internal_cfg.h | 1 +
lib/librte_eal/common/eal_options.h | 2 ++
3 files changed, 33 insertions(+)
Comments
On 9/19/2018 12:40 AM, eric zhang wrote:
> From: Santosh Shukla <santosh.shukla@caviumnetworks.com>
>
> In the case of user don't want to use bus iova scheme and want
> to override.
>
> For that, Adding eal option --iova-mode=<string> where valid input
> string is 'pa' or 'va'.
>
> Signed-off-by: Santosh Shukla <santosh.shukla@caviumnetworks.com>
> Signed-off-by: Jerin Jacob <jerin.jacob@caviumnetworks.com>
Just wondering if you want to add some description in:
1. Prog Guide - EAL section
2. EAL Command line options for testpmd
(https://doc.dpdk.org/guides/testpmd_app_ug/run_app.html?highlight=eal)
Otherwise LGTM
Acked-by: Hemant Agrawal <hemant.agrawal@nxp.com>
> ---
> lib/librte_eal/common/eal_common_options.c | 30 ++++++++++++++++++++++++++++++
> lib/librte_eal/common/eal_internal_cfg.h | 1 +
> lib/librte_eal/common/eal_options.h | 2 ++
> 3 files changed, 33 insertions(+)
>
> diff --git a/lib/librte_eal/common/eal_common_options.c b/lib/librte_eal/common/eal_common_options.c
> index 996a034..ab2a28c 100644
> --- a/lib/librte_eal/common/eal_common_options.c
> +++ b/lib/librte_eal/common/eal_common_options.c
> @@ -82,6 +82,7 @@
> {OPT_HELP, 0, NULL, OPT_HELP_NUM },
> {OPT_HUGE_DIR, 1, NULL, OPT_HUGE_DIR_NUM },
> {OPT_HUGE_UNLINK, 0, NULL, OPT_HUGE_UNLINK_NUM },
> + {OPT_IOVA_MODE, 1, NULL, OPT_IOVA_MODE_NUM },
> {OPT_LCORES, 1, NULL, OPT_LCORES_NUM },
> {OPT_LOG_LEVEL, 1, NULL, OPT_LOG_LEVEL_NUM },
> {OPT_MASTER_LCORE, 1, NULL, OPT_MASTER_LCORE_NUM },
> @@ -218,6 +219,7 @@ struct device_option {
> #endif
> internal_cfg->vmware_tsc_map = 0;
> internal_cfg->create_uio_dev = 0;
> + internal_cfg->iova_mode = -1;
> internal_cfg->mbuf_pool_ops_name = RTE_MBUF_DEFAULT_MEMPOOL_OPS;
> }
>
> @@ -994,6 +996,25 @@ static int xdigit2val(unsigned char c)
> return RTE_PROC_INVALID;
> }
>
> +static int
> +eal_parse_iova_mode(const char *name)
> +{
> + int mode;
> +
> + if (name == NULL)
> + return -1;
> +
> + if (!strcmp("pa", name))
> + mode = RTE_IOVA_PA;
> + else if (!strcmp("va", name))
> + mode = RTE_IOVA_VA;
> + else
> + return -1;
> +
> + internal_config.iova_mode = mode;
> + return 0;
> +}
> +
> int
> eal_parse_common_option(int opt, const char *optarg,
> struct internal_config *conf)
> @@ -1158,6 +1179,13 @@ static int xdigit2val(unsigned char c)
> }
> core_parsed = 1;
> break;
> + case OPT_IOVA_MODE_NUM:
> + if (eal_parse_iova_mode(optarg) < 0) {
> + RTE_LOG(ERR, EAL, "invalid parameters for --"
> + OPT_IOVA_MODE "\n");
> + return -1;
> + }
> + break;
>
> /* don't know what to do, leave this to caller */
> default:
> @@ -1306,6 +1334,8 @@ static int xdigit2val(unsigned char c)
> " -h, --help This help\n"
> "\nEAL options for DEBUG use only:\n"
> " --"OPT_HUGE_UNLINK" Unlink hugepage files after init\n"
> + " --"OPT_IOVA_MODE" Set iova mode. 'pa' for IOVA_PA\n"
> + " 'va' for IOVA_VA\n"
> " --"OPT_NO_HUGE" Use malloc instead of hugetlbfs\n"
> " --"OPT_NO_PCI" Disable PCI\n"
> " --"OPT_NO_HPET" Disable HPET\n"
> diff --git a/lib/librte_eal/common/eal_internal_cfg.h b/lib/librte_eal/common/eal_internal_cfg.h
> index fa6ccbe..29bf53f 100644
> --- a/lib/librte_eal/common/eal_internal_cfg.h
> +++ b/lib/librte_eal/common/eal_internal_cfg.h
> @@ -83,6 +83,7 @@ struct internal_config {
> const char *hugepage_dir; /**< specific hugetlbfs directory to use */
> const char *mbuf_pool_ops_name; /**< mbuf pool ops name */
> unsigned num_hugepage_sizes; /**< how many sizes on this system */
> + enum rte_iova_mode iova_mode ; /**< Set iova mode on this system */
> struct hugepage_info hugepage_info[MAX_HUGEPAGE_SIZES];
> };
> extern struct internal_config internal_config; /**< Global EAL configuration. */
> diff --git a/lib/librte_eal/common/eal_options.h b/lib/librte_eal/common/eal_options.h
> index 30e6bb4..7786189 100644
> --- a/lib/librte_eal/common/eal_options.h
> +++ b/lib/librte_eal/common/eal_options.h
> @@ -83,6 +83,8 @@ enum {
> OPT_VFIO_INTR_NUM,
> #define OPT_VMWARE_TSC_MAP "vmware-tsc-map"
> OPT_VMWARE_TSC_MAP_NUM,
> +#define OPT_IOVA_MODE "iova-mode"
> + OPT_IOVA_MODE_NUM,
> OPT_LONG_MAX_NUM
> };
>
On 18-Sep-18 8:10 PM, eric zhang wrote:
> From: Santosh Shukla <santosh.shukla@caviumnetworks.com>
>
> In the case of user don't want to use bus iova scheme and want
> to override.
>
> For that, Adding eal option --iova-mode=<string> where valid input
> string is 'pa' or 'va'.
>
> Signed-off-by: Santosh Shukla <santosh.shukla@caviumnetworks.com>
> Signed-off-by: Jerin Jacob <jerin.jacob@caviumnetworks.com>
> ---
Needs documentation update in Programmer's Guide to explain why such a
thing might be needed, and update EAL parameter guides.
For the patch itself,
Acked-by: Anatoly Burakov <anatoly.burakov@intel.com>
On 09/26/2018 08:42 AM, Burakov, Anatoly wrote:
> On 18-Sep-18 8:10 PM, eric zhang wrote:
>> From: Santosh Shukla <santosh.shukla@caviumnetworks.com>
>>
>> In the case of user don't want to use bus iova scheme and want
>> to override.
>>
>> For that, Adding eal option --iova-mode=<string> where valid input
>> string is 'pa' or 'va'.
>>
>> Signed-off-by: Santosh Shukla <santosh.shukla@caviumnetworks.com>
>> Signed-off-by: Jerin Jacob <jerin.jacob@caviumnetworks.com>
>> ---
>
> Needs documentation update in Programmer's Guide to explain why such a
> thing might be needed, and update EAL parameter guides.
>
> For the patch itself,
> Acked-by: Anatoly Burakov <anatoly.burakov@intel.com>
Thanks Anatoly. Documentations were updated and patch is at
http://patchwork.dpdk.org/patch/45785/. Would you please give a review?
Eric
On 10/1/2018 5:00 PM, Eric Zhang wrote:
>
>
> On 09/26/2018 08:42 AM, Burakov, Anatoly wrote:
>> On 18-Sep-18 8:10 PM, eric zhang wrote:
>>> From: Santosh Shukla <santosh.shukla@caviumnetworks.com>
>>>
>>> In the case of user don't want to use bus iova scheme and want
>>> to override.
>>>
>>> For that, Adding eal option --iova-mode=<string> where valid input
>>> string is 'pa' or 'va'.
>>>
>>> Signed-off-by: Santosh Shukla <santosh.shukla@caviumnetworks.com>
>>> Signed-off-by: Jerin Jacob <jerin.jacob@caviumnetworks.com>
>>> ---
>>
>> Needs documentation update in Programmer's Guide to explain why such a
>> thing might be needed, and update EAL parameter guides.
>>
>> For the patch itself,
>> Acked-by: Anatoly Burakov <anatoly.burakov@intel.com>
> Thanks Anatoly. Documentations were updated and patch is at
> http://patchwork.dpdk.org/patch/45785/. Would you please give a review?
I suggest sending a new version of this patchset with that patch included,
instead of two separate patches.
Makes life easy for people that needs to follow that dependency and good for
keeping record for future.
@@ -82,6 +82,7 @@
{OPT_HELP, 0, NULL, OPT_HELP_NUM },
{OPT_HUGE_DIR, 1, NULL, OPT_HUGE_DIR_NUM },
{OPT_HUGE_UNLINK, 0, NULL, OPT_HUGE_UNLINK_NUM },
+ {OPT_IOVA_MODE, 1, NULL, OPT_IOVA_MODE_NUM },
{OPT_LCORES, 1, NULL, OPT_LCORES_NUM },
{OPT_LOG_LEVEL, 1, NULL, OPT_LOG_LEVEL_NUM },
{OPT_MASTER_LCORE, 1, NULL, OPT_MASTER_LCORE_NUM },
@@ -218,6 +219,7 @@ struct device_option {
#endif
internal_cfg->vmware_tsc_map = 0;
internal_cfg->create_uio_dev = 0;
+ internal_cfg->iova_mode = -1;
internal_cfg->mbuf_pool_ops_name = RTE_MBUF_DEFAULT_MEMPOOL_OPS;
}
@@ -994,6 +996,25 @@ static int xdigit2val(unsigned char c)
return RTE_PROC_INVALID;
}
+static int
+eal_parse_iova_mode(const char *name)
+{
+ int mode;
+
+ if (name == NULL)
+ return -1;
+
+ if (!strcmp("pa", name))
+ mode = RTE_IOVA_PA;
+ else if (!strcmp("va", name))
+ mode = RTE_IOVA_VA;
+ else
+ return -1;
+
+ internal_config.iova_mode = mode;
+ return 0;
+}
+
int
eal_parse_common_option(int opt, const char *optarg,
struct internal_config *conf)
@@ -1158,6 +1179,13 @@ static int xdigit2val(unsigned char c)
}
core_parsed = 1;
break;
+ case OPT_IOVA_MODE_NUM:
+ if (eal_parse_iova_mode(optarg) < 0) {
+ RTE_LOG(ERR, EAL, "invalid parameters for --"
+ OPT_IOVA_MODE "\n");
+ return -1;
+ }
+ break;
/* don't know what to do, leave this to caller */
default:
@@ -1306,6 +1334,8 @@ static int xdigit2val(unsigned char c)
" -h, --help This help\n"
"\nEAL options for DEBUG use only:\n"
" --"OPT_HUGE_UNLINK" Unlink hugepage files after init\n"
+ " --"OPT_IOVA_MODE" Set iova mode. 'pa' for IOVA_PA\n"
+ " 'va' for IOVA_VA\n"
" --"OPT_NO_HUGE" Use malloc instead of hugetlbfs\n"
" --"OPT_NO_PCI" Disable PCI\n"
" --"OPT_NO_HPET" Disable HPET\n"
@@ -83,6 +83,7 @@ struct internal_config {
const char *hugepage_dir; /**< specific hugetlbfs directory to use */
const char *mbuf_pool_ops_name; /**< mbuf pool ops name */
unsigned num_hugepage_sizes; /**< how many sizes on this system */
+ enum rte_iova_mode iova_mode ; /**< Set iova mode on this system */
struct hugepage_info hugepage_info[MAX_HUGEPAGE_SIZES];
};
extern struct internal_config internal_config; /**< Global EAL configuration. */
@@ -83,6 +83,8 @@ enum {
OPT_VFIO_INTR_NUM,
#define OPT_VMWARE_TSC_MAP "vmware-tsc-map"
OPT_VMWARE_TSC_MAP_NUM,
+#define OPT_IOVA_MODE "iova-mode"
+ OPT_IOVA_MODE_NUM,
OPT_LONG_MAX_NUM
};