This is an automated email from the ASF dual-hosted git repository. xiaoxiang781216 pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/nuttx.git
commit d80a59e373c85bf1c306a1f66a629ada1a8e39b1 Author: Yongrong Wang <[email protected]> AuthorDate: Thu Oct 9 19:37:06 2025 +0800 vsock: inline some simple functions to improve performance The vhost tx rate increased by 6%. The virtio tx rate did not increase significantly. Signed-off-by: Yongrong Wang <[email protected]> --- net/vsock/vsock.h | 32 +++++++++++++++++++++---- net/vsock/vsock_addr.c | 16 ------------- net/vsock/vsock_sockif.c | 62 ++++++++++++++++++++---------------------------- net/vsock/vsock_vhost.c | 2 +- 4 files changed, 55 insertions(+), 57 deletions(-) diff --git a/net/vsock/vsock.h b/net/vsock/vsock.h index 60b8896128e..082cb81bb9a 100644 --- a/net/vsock/vsock.h +++ b/net/vsock/vsock.h @@ -98,6 +98,17 @@ vsock_pkt2hdr(FAR struct vsock_pkt_s *pkt) return (FAR struct vsock_hdr_s *)pkt->vb[0].buf; } +static inline_function void vsock_post(FAR sem_t *sem) +{ + int semcount = 0; + + nxsem_get_value(sem, &semcount); + if (semcount < 1) + { + nxsem_post(sem); + } +} + void vsock_recv_pkt(FAR struct vsock_transport_s *t, FAR struct vsock_pkt_s *pkt); @@ -114,6 +125,23 @@ void vsock_transport_register(FAR struct vsock_transport_s *t); * vsock_addr.c */ +static inline_function void vsock_addr_init(FAR struct sockaddr_vm *addr, + uint64_t cid, uint32_t port) +{ + memset(addr, 0, sizeof(*addr)); + addr->svm_family = AF_VSOCK; + addr->svm_cid = cid; + addr->svm_port = port; +} + +static inline_function bool +vsock_addr_equal(FAR const struct sockaddr_vm *addr1, + FAR const struct sockaddr_vm *addr2) +{ + return addr1->svm_cid == addr2->svm_cid && + addr1->svm_port == addr2->svm_port; +} + int vsock_addr_is_valid(FAR const struct sockaddr *addr, socklen_t addrlen); int vsock_addr_set(FAR struct sockaddr_vm *vmaddr, FAR const struct sockaddr *addr, @@ -121,10 +149,6 @@ int vsock_addr_set(FAR struct sockaddr_vm *vmaddr, int vsock_addr_get(FAR const struct sockaddr_vm *vmaddr, FAR struct sockaddr *addr, FAR socklen_t *addrlen); -void vsock_addr_init(FAR struct sockaddr_vm *addr, uint64_t cid, - uint32_t port); -bool vsock_addr_equal(FAR const struct sockaddr_vm *addr1, - FAR const struct sockaddr_vm *addr2); /* Virtual socket initialize */ diff --git a/net/vsock/vsock_addr.c b/net/vsock/vsock_addr.c index 159fd2a1c78..a0b843e3cff 100644 --- a/net/vsock/vsock_addr.c +++ b/net/vsock/vsock_addr.c @@ -89,19 +89,3 @@ int vsock_addr_get(FAR const struct sockaddr_vm *vmaddr, *addrlen = sizeof(struct sockaddr_vm); return 0; } - -void vsock_addr_init(FAR struct sockaddr_vm *addr, uint64_t cid, - uint32_t port) -{ - memset(addr, 0, sizeof(*addr)); - addr->svm_family = AF_VSOCK; - addr->svm_cid = cid; - addr->svm_port = port; -} - -bool vsock_addr_equal(FAR const struct sockaddr_vm *addr1, - FAR const struct sockaddr_vm *addr2) -{ - return addr1->svm_cid == addr2->svm_cid && - addr1->svm_port == addr2->svm_port; -} diff --git a/net/vsock/vsock_sockif.c b/net/vsock/vsock_sockif.c index de1d7b3c854..87d611ea61a 100644 --- a/net/vsock/vsock_sockif.c +++ b/net/vsock/vsock_sockif.c @@ -314,36 +314,22 @@ static inline_function void vsock_tx_unlock(FAR struct vsock_conn_s *conn) * Name: vsock_breaklock/vsock_restorelock ****************************************************************************/ -static void vsock_breaklock(FAR struct vsock_conn_s *conn, - FAR unsigned int *rxcount, - FAR unsigned int *txcount) +static inline_function void vsock_breaklock(FAR struct vsock_conn_s *conn, + FAR unsigned int *rxcount, + FAR unsigned int *txcount) { nxrmutex_breaklock(&conn->tx_lock, txcount); nxrmutex_breaklock(&conn->rx_lock, rxcount); } -static void vsock_restorelock(FAR struct vsock_conn_s *conn, - unsigned int rxcount, unsigned int txcount) +static inline_function void vsock_restorelock(FAR struct vsock_conn_s *conn, + unsigned int rxcount, + unsigned int txcount) { nxrmutex_restorelock(&conn->rx_lock, rxcount); nxrmutex_restorelock(&conn->tx_lock, txcount); } -/**************************************************************************** - * Name: vsock_post - ****************************************************************************/ - -static inline_function void vsock_post(FAR sem_t *sem) -{ - int semcount = 0; - - nxsem_get_value(sem, &semcount); - if (semcount < 1) - { - nxsem_post(sem); - } -} - /**************************************************************************** * Name: vsock_get_rx_size * @@ -352,7 +338,8 @@ static inline_function void vsock_post(FAR sem_t *sem) * ****************************************************************************/ -static size_t vsock_get_rx_size(FAR struct vsock_conn_s *conn) +static inline_function size_t +vsock_get_rx_size(FAR struct vsock_conn_s *conn) { size_t rx_size = 0; @@ -510,12 +497,12 @@ static void vsock_free(FAR struct vsock_conn_s *conn) * ****************************************************************************/ -static void vsock_add_ref(FAR struct vsock_conn_s *conn) +static inline_function void vsock_add_ref(FAR struct vsock_conn_s *conn) { atomic_fetch_add(&conn->ref, 1); } -static void vsock_sub_ref(FAR struct vsock_conn_s *conn) +static inline_function void vsock_sub_ref(FAR struct vsock_conn_s *conn) { if (atomic_fetch_sub(&conn->ref, 1) <= 1) { @@ -582,7 +569,7 @@ static FAR struct vsock_conn_s *vsock_alloc(void) * ****************************************************************************/ -static FAR struct vsock_conn_s * +static inline_function FAR struct vsock_conn_s * vsock_find_bound_conn(FAR const struct sockaddr_vm *addr) { FAR const struct sockaddr_vm *local; @@ -608,7 +595,7 @@ vsock_find_bound_conn(FAR const struct sockaddr_vm *addr) return NULL; } -static FAR struct vsock_conn_s * +static inline_function FAR struct vsock_conn_s * vsock_find_connected_conn(FAR const struct sockaddr_vm *remote_addr, FAR const struct sockaddr_vm *local_addr) { @@ -745,7 +732,8 @@ out: * ****************************************************************************/ -static void vsock_unbind_internal(FAR struct vsock_conn_s *conn) +static inline_function void +vsock_unbind_internal(FAR struct vsock_conn_s *conn) { conn->sconn.s_error = 0; vsock_remove_conn(conn); @@ -799,8 +787,9 @@ vsock_get_tx_credit(FAR struct vsock_conn_s *conn) * Name: vsock_update_tx_credit ****************************************************************************/ -static void vsock_update_tx_credit(FAR struct vsock_conn_s *conn, - FAR struct vsock_pkt_s *pkt) +static inline_function void +vsock_update_tx_credit(FAR struct vsock_conn_s *conn, + FAR struct vsock_pkt_s *pkt) { FAR struct vsock_hdr_s *hdr = vsock_pkt2hdr(pkt); irqstate_t flags; @@ -839,9 +828,9 @@ static inline_function bool vsock_msg_done(FAR const struct vsock_msg_s *msg) * ****************************************************************************/ -static size_t vsock_copy_pkt2msg(FAR struct vsock_conn_s *conn, - FAR struct vsock_msg_s *msg, - FAR struct vsock_pkt_s *pkt) +static inline_function size_t +vsock_copy_pkt2msg(FAR struct vsock_conn_s *conn, + FAR struct vsock_msg_s *msg, FAR struct vsock_pkt_s *pkt) { size_t ret = 0; @@ -958,8 +947,9 @@ static size_t vsock_copy_msg2pkt(FAR struct vsock_pkt_s *pkt, * ****************************************************************************/ -static size_t vsock_copy_pkt2circ(FAR struct vsock_conn_s *conn, - FAR struct vsock_pkt_s *pkt) +static inline_function size_t +vsock_copy_pkt2circ(FAR struct vsock_conn_s *conn, + FAR struct vsock_pkt_s *pkt) { FAR struct circbuf_s *circ = &conn->rx_buf; size_t ret = 0; @@ -1077,7 +1067,7 @@ static int vsock_send_pkt(FAR struct vsock_conn_s *conn, * Name: vsock_send_credit ****************************************************************************/ -static int vsock_send_credit(FAR struct vsock_conn_s *conn) +static inline_function int vsock_send_credit(FAR struct vsock_conn_s *conn) { return vsock_send_pkt(conn, NULL, VIRTIO_VSOCK_OP_CREDIT_UPDATE, 0, 0, 0); } @@ -1086,8 +1076,8 @@ static int vsock_send_credit(FAR struct vsock_conn_s *conn) * Name: vsock_update_rx_credit ****************************************************************************/ -static void vsock_update_rx_credit(FAR struct vsock_conn_s *conn, - size_t size) +static inline_function void +vsock_update_rx_credit(FAR struct vsock_conn_s *conn, size_t size) { irqstate_t flags; uint32_t delta; diff --git a/net/vsock/vsock_vhost.c b/net/vsock/vsock_vhost.c index 3dc7b0bf3b2..0b13e184506 100644 --- a/net/vsock/vsock_vhost.c +++ b/net/vsock/vsock_vhost.c @@ -111,7 +111,7 @@ static const struct vsock_transport_ops_s g_vsock_vhost_transport_ops = * Name: vsock_vhost_trans2priv ****************************************************************************/ -static FAR struct vsock_vhost_priv_s * +static inline_function FAR struct vsock_vhost_priv_s * vsock_vhost_trans2priv(FAR struct vsock_transport_s *t) { return container_of(t, struct vsock_vhost_priv_s, t);
