Bug 257

Summary: ipc: rte_mp_request_sync return 0 on error.
Product: DPDK Reporter: Herakliusz (herakliusz.lipiec)
Component: coreAssignee: Anatoly Burakov (anatoly.burakov)
Status: CONFIRMED ---    
Severity: normal CC: ajit.khaparde, anatoly.burakov
Priority: Normal    
Version: 18.11   
Target Milestone: ---   
Hardware: All   
OS: All   

Description Herakliusz 2019-04-19 18:53:56 CEST
API can return success (0), but reply buffer might be invalid.

There are three code paths that can return a success, but have no (valid) message.
In case of two I think it should be a failure.
In rte_mp_request_sync there is a call to mp_request_sync which may return 0 with no message in case of:
- failure to send the message on behalf of remote
- the caller not caring about reply message. (this is probably fine)
This is then returned as 0 by rte_mp_request_sync (docs say that it will return 0 on success).
If IPC is disabled rte_mp_request_sync also return 0, but i think it should be a failure (it did not send anything, it did not received anything because operation is not supported).
Comment 1 Anatoly Burakov 2019-04-23 10:23:52 CEST
I'm not sure i follow.

If the remote end failed to send the message, nb_received would not be incremented, and it would obviously not be safe to attempt to read the message. That's why nb_received is there - to let the caller know how many buffers have actually arrived.

The function returning 0 when remote end has failed to send a response is intentional - it is not up to the API to decide whether this is an error condition (i.e. if the caller considers mismatch between nb_sent and nb_received to be an error).

Not sure about the "not supported" part - perhaps it indeed should return -1 and set rte_errno to ENOTSUP.