kni: support async user request
Adding async userspace requests which don't wait for the userspace response and always return success. This is preparation to address a regression in KNI. Signed-off-by: Elad Nachman <eladv6@gmail.com> Signed-off-by: Ferruh Yigit <ferruh.yigit@intel.com>
This commit is contained in:
parent
740f3d20ee
commit
6b1f8e4f9b
@ -124,6 +124,14 @@ kni_net_process_request(struct net_device *dev, struct rte_kni_request *req)
|
||||
goto fail;
|
||||
}
|
||||
|
||||
/* No result available since request is handled
|
||||
* asynchronously. set response to success.
|
||||
*/
|
||||
if (req->async != 0) {
|
||||
req->result = 0;
|
||||
goto async;
|
||||
}
|
||||
|
||||
ret_val = wait_event_interruptible_timeout(kni->wq,
|
||||
kni_fifo_count(kni->resp_q), 3 * HZ);
|
||||
if (signal_pending(current) || ret_val <= 0) {
|
||||
@ -139,6 +147,7 @@ kni_net_process_request(struct net_device *dev, struct rte_kni_request *req)
|
||||
}
|
||||
|
||||
memcpy(req, kni->sync_kva, sizeof(struct rte_kni_request));
|
||||
async:
|
||||
ret = 0;
|
||||
|
||||
fail:
|
||||
|
@ -591,8 +591,11 @@ rte_kni_handle_request(struct rte_kni *kni)
|
||||
break;
|
||||
}
|
||||
|
||||
/* Construct response mbuf and put it back to resp_q */
|
||||
ret = kni_fifo_put(kni->resp_q, (void **)&req, 1);
|
||||
/* if needed, construct response buffer and put it back to resp_q */
|
||||
if (!req->async)
|
||||
ret = kni_fifo_put(kni->resp_q, (void **)&req, 1);
|
||||
else
|
||||
ret = 1;
|
||||
if (ret != 1) {
|
||||
RTE_LOG(ERR, KNI, "Fail to put the muf back to resp_q\n");
|
||||
return -1; /* It is an error of can't putting the mbuf back */
|
||||
|
@ -48,6 +48,7 @@ struct rte_kni_request {
|
||||
uint8_t promiscusity;/**< 1: promisc mode enable, 0: disable */
|
||||
uint8_t allmulti; /**< 1: all-multicast mode enable, 0: disable */
|
||||
};
|
||||
int32_t async : 1; /**< 1: request is asynchronous */
|
||||
int32_t result; /**< Result for processing request */
|
||||
} __attribute__((__packed__));
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user