[dpdk-dev] [PATCH v11 06/19] eal: support attach or detach share device from secondary

Burakov, Anatoly anatoly.burakov at intel.com
Wed Jul 11 14:34:00 CEST 2018


On 11-Jul-18 4:09 AM, Qi Zhang wrote:
> This patch cover the multi-process hotplug case when a device
> attach/detach request be issued from a secondary process
> 
> device attach on secondary:
> a) secondary send sync request to the primary.
> b) primary receive the request and attach the new device if
>     failed goto i).
> c) primary forward attach sync request to all secondary.
> d) secondary receive the request and attach the device and send a reply.
> e) primary check the reply if all success goes to j).
> f) primary send attach rollback sync request to all secondary.
> g) secondary receive the request and detach the device and send a reply.
> h) primary receive the reply and detach device as rollback action.
> i) send attach fail to secondary as a reply of step a), goto k).
> j) send attach success to secondary as a reply of step a).
> k) secondary receive reply and return.
> 
> device detach on secondary:
> a) secondary send sync request to the primary.
> b) primary send detach sync request to all secondary.
> c) secondary detach the device and send a reply.
> d) primary check the reply if all success goes to g).
> e) primary send detach rollback sync request to all secondary.
> f) secondary receive the request and attach back device. goto h).
> g) primary detach the device if success goto i), else goto e).
> h) primary send detach fail to secondary as a reply of step a), goto j).
> i) primary send detach success to secondary as a reply of step a).
> j) secondary receive reply and return.
> 
> Signed-off-by: Qi Zhang <qi.z.zhang at intel.com>
> ---
>   lib/librte_eal/common/eal_common_dev.c |  20 +++-
>   lib/librte_eal/common/hotplug_mp.c     | 175 ++++++++++++++++++++++++++++++++-
>   2 files changed, 189 insertions(+), 6 deletions(-)
> 
> diff --git a/lib/librte_eal/common/eal_common_dev.c b/lib/librte_eal/common/eal_common_dev.c
> index ab2b25558..ee09720c4 100644
> --- a/lib/librte_eal/common/eal_common_dev.c
> +++ b/lib/librte_eal/common/eal_common_dev.c
> @@ -221,7 +221,7 @@ rte_eal_hotplug_add(const char *busname, const char *devname,
>   	if (rte_eal_process_type() != RTE_PROC_PRIMARY) {
>   		/**
>   		 * If in secondary process, just send IPC request to
> -		 * primary process
> +		 * primary process.
>   		 */
>   		ret = eal_dev_hotplug_request_to_primary(&req);
>   		if (ret) {
> @@ -234,6 +234,7 @@ rte_eal_hotplug_add(const char *busname, const char *devname,
>   				"Failed to hotplug add device\n");
>   		return req.result;
>   	}
> +
>   	/**

The above two changes look like unintended noise (or perhaps you meant 
to merge them into one of the previous commits.

>   	 * attach a device from primary start from here:
>   	 *
> @@ -295,6 +296,23 @@ rte_eal_hotplug_remove(const char *busname, const char *devname)
>   	if (rte_eal_process_type() != RTE_PROC_PRIMARY) {
>   		/**
>   		 * If in secondary process, just send IPC request to
> +		 * primary process.

<snip>

> +	memset(&mp_req, 0, sizeof(mp_req));
> +	memcpy(mp_req.param, req, sizeof(*req));
> +	mp_req.len_param = sizeof(*req);
> +	strlcpy(mp_req.name, EAL_DEV_MP_ACTION_REQUEST, sizeof(mp_req.name));
> +
> +	ret = rte_mp_request_sync(&mp_req, &mp_reply, &ts);
> +	if (ret || mp_reply.nb_received != 1) {
> +		RTE_LOG(ERR, EAL, "cannot send request to primary");
> +		return ret;
> +	}

In case of ret = 0 and nb_received = 0, you would be returning 0 as ret 
= 0. I don't think that's what you intended here :)

> +
> +	resp = (struct eal_dev_mp_req *)mp_reply.msgs[0].param;
> +	req->result = resp->result;
> +
> +	return ret;
>   }
>   
>   int eal_dev_hotplug_request_to_secondary(struct eal_dev_mp_req *req)
> 


-- 
Thanks,
Anatoly


More information about the dev mailing list