[dpdk-dev,v2] devargs: fix policy check in rte_eal_devargs_add
Checks
Commit Message
Do not fail upon detecting a set bus configuration when adding an
rte_devargs. i.e. adding a blacklisted PCI device while the bus is
configured in whitelist mode.
This failure condition has been introduced when the bus policies
were implemented. This implementation however was meant to strictly
follow the existing API. This check was not and should not be performed
until the current API has been properly deprecated.
Fixes: 02823c1db0bc ("devargs: parse bus policies")
Signed-off-by: Gaetan Rivet <gaetan.rivet@6wind.com>
---
v2:
- reword commitlog to better explain my intent.
lib/librte_eal/common/eal_common_devargs.c | 16 +++-------------
1 file changed, 3 insertions(+), 13 deletions(-)
Comments
02/08/2017 19:12, Gaetan Rivet:
> Do not fail upon detecting a set bus configuration when adding an
> rte_devargs. i.e. adding a blacklisted PCI device while the bus is
> configured in whitelist mode.
>
> This failure condition has been introduced when the bus policies
> were implemented. This implementation however was meant to strictly
> follow the existing API. This check was not and should not be performed
> until the current API has been properly deprecated.
>
> Fixes: 02823c1db0bc ("devargs: parse bus policies")
>
> Signed-off-by: Gaetan Rivet <gaetan.rivet@6wind.com>
Adding a precision:
The same kind of check is already done when parsing EAL options.
Applied, thanks
@@ -170,22 +170,12 @@ rte_eal_devargs_add(enum rte_devtype devtype, const char *devargs_str)
bus = devargs->bus;
if (devargs->type == RTE_DEVTYPE_BLACKLISTED_PCI)
devargs->policy = RTE_DEV_BLACKLISTED;
- if (devargs->policy == RTE_DEV_WHITELISTED) {
- if (bus->conf.scan_mode == RTE_BUS_SCAN_UNDEFINED) {
+ if (bus->conf.scan_mode == RTE_BUS_SCAN_UNDEFINED) {
+ if (devargs->policy == RTE_DEV_WHITELISTED)
bus->conf.scan_mode = RTE_BUS_SCAN_WHITELIST;
- } else if (bus->conf.scan_mode == RTE_BUS_SCAN_BLACKLIST) {
- fprintf(stderr, "ERROR: incompatible device policy and bus scan mode\n");
- goto fail;
- }
- } else if (devargs->policy == RTE_DEV_BLACKLISTED) {
- if (bus->conf.scan_mode == RTE_BUS_SCAN_UNDEFINED) {
+ else if (devargs->policy == RTE_DEV_BLACKLISTED)
bus->conf.scan_mode = RTE_BUS_SCAN_BLACKLIST;
- } else if (bus->conf.scan_mode == RTE_BUS_SCAN_WHITELIST) {
- fprintf(stderr, "ERROR: incompatible device policy and bus scan mode\n");
- goto fail;
- }
}
-
TAILQ_INSERT_TAIL(&devargs_list, devargs, next);
return 0;