store in allowed list parameter for later parsing */
| 321 | |
| 322 | /* store in allowed list parameter for later parsing */ |
| 323 | int |
| 324 | rte_devargs_add(enum rte_devtype devtype, const char *devargs_str) |
| 325 | { |
| 326 | struct rte_devargs *devargs = NULL; |
| 327 | struct rte_bus *bus = NULL; |
| 328 | const char *dev = devargs_str; |
| 329 | |
| 330 | /* use calloc instead of rte_zmalloc as it's called early at init */ |
| 331 | devargs = calloc(1, sizeof(*devargs)); |
| 332 | if (devargs == NULL) |
| 333 | goto fail; |
| 334 | |
| 335 | if (rte_devargs_parse(devargs, dev)) |
| 336 | goto fail; |
| 337 | devargs->type = devtype; |
| 338 | bus = devargs->bus; |
| 339 | if (devargs->type == RTE_DEVTYPE_BLOCKED) |
| 340 | devargs->policy = RTE_DEV_BLOCKED; |
| 341 | if (bus->conf.scan_mode == RTE_BUS_SCAN_UNDEFINED) { |
| 342 | if (devargs->policy == RTE_DEV_ALLOWED) |
| 343 | bus->conf.scan_mode = RTE_BUS_SCAN_ALLOWLIST; |
| 344 | else if (devargs->policy == RTE_DEV_BLOCKED) |
| 345 | bus->conf.scan_mode = RTE_BUS_SCAN_BLOCKLIST; |
| 346 | } |
| 347 | TAILQ_INSERT_TAIL(&devargs_list, devargs, next); |
| 348 | return 0; |
| 349 | |
| 350 | fail: |
| 351 | if (devargs) { |
| 352 | rte_devargs_reset(devargs); |
| 353 | free(devargs); |
| 354 | } |
| 355 | |
| 356 | return -1; |
| 357 | } |
| 358 | |
| 359 | int |
| 360 | rte_devargs_remove(struct rte_devargs *devargs) |
no test coverage detected