[PATCH v6 01/13] ethdev: allow start/stop from secondary process

Stephen Hemminger stephen at networkplumber.org
Wed Jul 23 16:38:54 CEST 2025


On Wed, 23 Jul 2025 05:08:04 +0400 (+04)
Ivan Malov <ivan.malov at arknetworks.am> wrote:

>  +
> > +int
> > +ethdev_request(uint16_t port_id, enum ethdev_mp_operation operation,
> > +	       const void *buf, size_t buf_len)
> > +{
> > +	struct rte_mp_msg mp_req = { };
> > +	struct rte_mp_reply mp_reply;
> > +	struct ethdev_mp_request *req;
> > +	struct timespec ts = {.tv_sec = 5, .tv_nsec = 0};
> > +	int ret;
> > +
> > +	if (sizeof(*req) + buf_len > RTE_MP_MAX_PARAM_LEN) {
> > +		RTE_ETHDEV_LOG_LINE(ERR,
> > +				    "request %u port %u invalid len %zu",
> > +				    operation, port_id, buf_len);
> > +		return -EINVAL;  
> 
> A couple of lines below 'resp->err_value' is used to set 'rte_errno'. Why not
> also set it here then? May be I'm wrong. Or may be set it in (ret < 0) check?
> 
> > +	}
> > +
> > +	strlcpy(mp_req.name, ETHDEV_MP, RTE_MP_MAX_NAME_LEN);
> > +	mp_req.len_param = sizeof(*req) + buf_len;
> > +
> > +	req = (struct ethdev_mp_request *)mp_req.param;
> > +	req->operation = operation;
> > +	req->port_id = port_id;
> > +
> > +	if (buf_len > 0)
> > +		memcpy(req->config, buf, buf_len);
> > +
> > +	ret = rte_mp_request_sync(&mp_req, &mp_reply, &ts);
> > +	if (ret == 0) {
> > +		const struct rte_mp_msg *mp_rep = &mp_reply.msgs[0];
> > +		const struct ethdev_mp_response *resp
> > +			= (const struct ethdev_mp_response *)mp_rep->param;
> > +
> > +		if (resp->err_value == 0)
> > +			ret = 0;
> > +		else
> > +			rte_errno = -resp->err_value;  
> 
> By the looks of it, this check sets 'ret = 0' when it is already 0 and, at the
> same time, when 'resp->err_value' is non-zero, does not override 'ret' with it.
> I apologise in case I've got this wrong.
> 
> > +		free(mp_reply.msgs);
> > +	}
> > +
> > +	if (ret < 0)
> > +		RTE_ETHDEV_LOG_LINE(ERR,
> > +		       "port %up ethdev op %u failed", port_id, operation);
> > +	return ret;
> > +}

Thanks, this code was copy/past from pdump so thats why it was not
perfect in error checking.

> > --- a/lib/ethdev/rte_ethdev.c
> > +++ b/lib/ethdev/rte_ethdev.c
> > @@ -1800,54 +1800,61 @@ rte_eth_dev_start(uint16_t port_id)
> >
> > 	if (dev->data->dev_configured == 0) {
> > 		RTE_ETHDEV_LOG_LINE(INFO,
> > -			"Device with port_id=%"PRIu16" is not configured.",
> > -			port_id);
> > +				    "Device with port_id=%"PRIu16" is not configured.",
> > +				    port_id);  
> 
> On the one hand, it's great that an improvement is being offered. On the other
> hand, one may argue this is unrelated to the stated purpose of the patch. And,
> finally, may be placing it 'RTE_ETHDEV_LOG_LINE(INFO, "Device with...' would
> also work and not trigger a checkpatch warning, but I may be wrong.
> 

Thanks this was from editor doing indent, not needed will remove.


More information about the dev mailing list