X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=lib%2Flibrte_rawdev%2Frte_rawdev.c;h=f29164dd1588173986e18a1c526c01e90e723b19;hb=5b38d8cd4663;hp=6c4d783cc545917abd6bf03b64b45ae9700c4ffc;hpb=8db9dce72d4abee4c3a66a0eb163c469bae4ad9e;p=dpdk.git diff --git a/lib/librte_rawdev/rte_rawdev.c b/lib/librte_rawdev/rte_rawdev.c index 6c4d783cc5..f29164dd15 100644 --- a/lib/librte_rawdev/rte_rawdev.c +++ b/lib/librte_rawdev/rte_rawdev.c @@ -137,7 +137,8 @@ rte_rawdev_configure(uint16_t dev_id, struct rte_rawdev_info *dev_conf, int rte_rawdev_queue_conf_get(uint16_t dev_id, uint16_t queue_id, - rte_rawdev_obj_t queue_conf) + rte_rawdev_obj_t queue_conf, + size_t queue_conf_size) { struct rte_rawdev *dev; @@ -145,14 +146,15 @@ rte_rawdev_queue_conf_get(uint16_t dev_id, dev = &rte_rawdevs[dev_id]; RTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->queue_def_conf, -ENOTSUP); - (*dev->dev_ops->queue_def_conf)(dev, queue_id, queue_conf); - return 0; + return (*dev->dev_ops->queue_def_conf)(dev, queue_id, queue_conf, + queue_conf_size); } int rte_rawdev_queue_setup(uint16_t dev_id, uint16_t queue_id, - rte_rawdev_obj_t queue_conf) + rte_rawdev_obj_t queue_conf, + size_t queue_conf_size) { struct rte_rawdev *dev; @@ -160,7 +162,8 @@ rte_rawdev_queue_setup(uint16_t dev_id, dev = &rte_rawdevs[dev_id]; RTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->queue_setup, -ENOTSUP); - return (*dev->dev_ops->queue_setup)(dev, queue_id, queue_conf); + return (*dev->dev_ops->queue_setup)(dev, queue_id, queue_conf, + queue_conf_size); } int @@ -395,20 +398,21 @@ rte_rawdev_start(uint16_t dev_id) RTE_RAWDEV_VALID_DEVID_OR_ERR_RET(dev_id, -EINVAL); dev = &rte_rawdevs[dev_id]; - RTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->dev_start, -ENOTSUP); - if (dev->started != 0) { RTE_RDEV_ERR("Device with dev_id=%" PRIu8 "already started", dev_id); return 0; } + if (dev->dev_ops->dev_start == NULL) + goto mark_started; + diag = (*dev->dev_ops->dev_start)(dev); - if (diag == 0) - dev->started = 1; - else + if (diag != 0) return diag; +mark_started: + dev->started = 1; return 0; } @@ -422,15 +426,18 @@ rte_rawdev_stop(uint16_t dev_id) RTE_RAWDEV_VALID_DEVID_OR_RET(dev_id); dev = &rte_rawdevs[dev_id]; - RTE_FUNC_PTR_OR_RET(*dev->dev_ops->dev_stop); - if (dev->started == 0) { RTE_RDEV_ERR("Device with dev_id=%" PRIu8 "already stopped", dev_id); return; } + if (dev->dev_ops->dev_stop == NULL) + goto mark_stopped; + (*dev->dev_ops->dev_stop)(dev); + +mark_stopped: dev->started = 0; } @@ -571,11 +578,15 @@ handle_dev_xstats(const char *cmd __rte_unused, struct rte_rawdev_xstats_name *xstat_names; int dev_id, num_xstats, i, ret; unsigned int *ids; + char *end_param; if (params == NULL || strlen(params) == 0 || !isdigit(*params)) return -1; - dev_id = atoi(params); + dev_id = strtoul(params, &end_param, 0); + if (*end_param != '\0') + RTE_RDEV_LOG(NOTICE, + "Extra parameters passed to rawdev telemetry command, ignoring"); if (!rte_rawdev_pmd_is_valid_dev(dev_id)) return -1;