| 466 | } |
| 467 | |
| 468 | static int |
| 469 | eal_parse_socket_arg(char *strval, volatile uint64_t *socket_arg) |
| 470 | { |
| 471 | char * arg[RTE_MAX_NUMA_NODES]; |
| 472 | char *end; |
| 473 | int arg_num, i, len; |
| 474 | |
| 475 | len = strnlen(strval, SOCKET_MEM_STRLEN); |
| 476 | if (len == SOCKET_MEM_STRLEN) { |
| 477 | RTE_LOG(ERR, EAL, "--socket-mem is too long\n"); |
| 478 | return -1; |
| 479 | } |
| 480 | |
| 481 | /* all other error cases will be caught later */ |
| 482 | if (!isdigit(strval[len-1])) |
| 483 | return -1; |
| 484 | |
| 485 | /* split the optarg into separate socket values */ |
| 486 | arg_num = rte_strsplit(strval, len, |
| 487 | arg, RTE_MAX_NUMA_NODES, ','); |
| 488 | |
| 489 | /* if split failed, or 0 arguments */ |
| 490 | if (arg_num <= 0) |
| 491 | return -1; |
| 492 | |
| 493 | /* parse each defined socket option */ |
| 494 | errno = 0; |
| 495 | for (i = 0; i < arg_num; i++) { |
| 496 | uint64_t val; |
| 497 | end = NULL; |
| 498 | val = strtoull(arg[i], &end, 10); |
| 499 | |
| 500 | /* check for invalid input */ |
| 501 | if ((errno != 0) || |
| 502 | (arg[i][0] == '\0') || (end == NULL) || (*end != '\0')) |
| 503 | return -1; |
| 504 | val <<= 20; |
| 505 | socket_arg[i] = val; |
| 506 | } |
| 507 | |
| 508 | return 0; |
| 509 | } |
| 510 | |
| 511 | static int |
| 512 | eal_parse_vfio_intr(const char *mode) |
no test coverage detected