From a62c495e7124a958f80615a375fa1c1c32852936 Mon Sep 17 00:00:00 2001 From: Lemmy Huang Date: Thu, 25 May 2023 16:25:11 +0800 Subject: [PATCH] cleancode: refactor gazelle_list.h Signed-off-by: Lemmy Huang --- src/common/gazelle_base_func.h | 6 --- src/lstack/api/lstack_epoll.c | 72 +++++++++++-------------- src/lstack/core/lstack_lwip.c | 55 +++++++------------ src/lstack/core/lstack_protocol_stack.c | 16 +++--- src/lstack/core/lstack_stack_stat.c | 7 +-- 5 files changed, 64 insertions(+), 92 deletions(-) diff --git a/src/common/gazelle_base_func.h b/src/common/gazelle_base_func.h index d21ef5f..f83a8eb 100644 --- a/src/common/gazelle_base_func.h +++ b/src/common/gazelle_base_func.h @@ -25,16 +25,10 @@ return -1; \ } while (0) -#define NODE_ENTRY(node, type, member) \ - ((type*)((char*)(node) - (size_t)&((type*)0)->member)) - int32_t separate_str_to_array(char *args, uint32_t *array, int32_t array_size, int32_t max_value); int32_t check_and_set_run_dir(void); int32_t filename_check(const char* args); -#undef container_of -#define container_of(ptr, type, field) ((type *)(void*)(((char *)(ptr)) - offsetof(type, field))) - #endif /* ifndef __GAZELLE_BASE_FUNC_H__ */ diff --git a/src/lstack/api/lstack_epoll.c b/src/lstack/api/lstack_epoll.c index 2fba2ee..64c3600 100644 --- a/src/lstack/api/lstack_epoll.c +++ b/src/lstack/api/lstack_epoll.c @@ -67,35 +67,26 @@ void add_sock_event(struct lwip_sock *sock, uint32_t event) } sock->events |= (event == EPOLLERR) ? (EPOLLIN | EPOLLERR) : (event & sock->epoll_events); - if (list_is_null(&sock->event_list)) { - list_add_node(&wakeup->event_list, &sock->event_list); + if (list_node_null(&sock->event_list)) { + list_add_node(&sock->event_list, &wakeup->event_list); } pthread_spin_unlock(&wakeup->event_list_lock); } struct protocol_stack *stack = sock->stack; - if (list_is_null(&wakeup->wakeup_list[stack->stack_idx])) { - list_add_node(&stack->wakeup_list, &wakeup->wakeup_list[stack->stack_idx]); + if (list_node_null(&wakeup->wakeup_list[stack->stack_idx])) { + list_add_node(&wakeup->wakeup_list[stack->stack_idx], &stack->wakeup_list); } } void wakeup_stack_epoll(struct protocol_stack *stack) { - struct list_node *node, *temp; - - list_for_each_safe(node, temp, &stack->wakeup_list) { - /* When temp is NULL, find the tail node in the wekeup_list and connect it to the back of the node */ - if (unlikely(temp == NULL)) { - struct list_node *nod = &stack->wakeup_list; - while (nod->prev && nod->prev != node) { - nod = nod->prev; - } - nod->prev = node; - node->next = nod; - temp = nod; - } + struct wakeup_poll *wakeup; + struct list_node *node, *next; - struct wakeup_poll *wakeup = container_of((node - stack->stack_idx), struct wakeup_poll, wakeup_list); + list_for_each_node(node, next, &stack->wakeup_list) { + node -= stack->stack_idx; /* array header address */ + wakeup = list_entry((typeof(((struct wakeup_poll *)0)->wakeup_list) *)node, struct wakeup_poll, wakeup_list); if (__atomic_load_n(&wakeup->in_wait, __ATOMIC_ACQUIRE)) { __atomic_store_n(&wakeup->in_wait, false, __ATOMIC_RELEASE); @@ -104,7 +95,7 @@ void wakeup_stack_epoll(struct protocol_stack *stack) stack->stats.wakeup_events++; } - list_del_node_null(&wakeup->wakeup_list[stack->stack_idx]); + list_del_node(&wakeup->wakeup_list[stack->stack_idx]); } } @@ -155,8 +146,8 @@ static void raise_pending_events(struct wakeup_poll *wakeup, struct lwip_sock *s pthread_spin_lock(&wakeup->event_list_lock); sock->events = event; if (wakeup->type == WAKEUP_EPOLL && (sock->events & sock->epoll_events) && - list_is_null(&sock->event_list)) { - list_add_node(&wakeup->event_list, &sock->event_list); + list_node_null(&sock->event_list)) { + list_add_node(&sock->event_list, &wakeup->event_list); } pthread_spin_unlock(&wakeup->event_list_lock); } @@ -183,7 +174,7 @@ int32_t lstack_do_epoll_create(int32_t fd) } for (uint32_t i = 0; i < PROTOCOL_STACK_MAX; i++) { - init_list_node_null(&wakeup->wakeup_list[i]); + list_init_node(&wakeup->wakeup_list[i]); } if (pthread_mutex_init(&wakeup->wait, NULL) != 0) { @@ -195,12 +186,12 @@ int32_t lstack_do_epoll_create(int32_t fd) __atomic_store_n(&wakeup->in_wait, false, __ATOMIC_RELEASE); struct protocol_stack_group *stack_group = get_protocol_stack_group(); - init_list_node_null(&wakeup->poll_list); + list_init_node(&wakeup->poll_list); pthread_spin_lock(&stack_group->poll_list_lock); - list_add_node(&stack_group->poll_list, &wakeup->poll_list); + list_add_node(&wakeup->poll_list, &stack_group->poll_list); pthread_spin_unlock(&stack_group->poll_list_lock); - init_list_node(&wakeup->event_list); + list_init_head(&wakeup->event_list); pthread_spin_init(&wakeup->event_list_lock, PTHREAD_PROCESS_PRIVATE); wakeup->type = WAKEUP_EPOLL; @@ -239,6 +230,7 @@ int32_t lstack_epoll_close(int32_t fd) struct protocol_stack_group *stack_group = get_protocol_stack_group(); struct wakeup_poll *wakeup = sock->wakeup; + struct list_node *node, *next; if (wakeup == NULL) { return 0; } @@ -247,17 +239,16 @@ int32_t lstack_epoll_close(int32_t fd) stack_broadcast_clean_epoll(wakeup); - struct list_node *node, *temp; pthread_spin_lock(&wakeup->event_list_lock); - list_for_each_safe(node, temp, &wakeup->event_list) { - struct lwip_sock *sock = container_of(node, struct lwip_sock, event_list); - list_del_node_null(&sock->event_list); + list_for_each_node(node, next, &wakeup->event_list) { + struct lwip_sock *sock = list_entry(node, struct lwip_sock, event_list); + list_del_node(&sock->event_list); } pthread_spin_unlock(&wakeup->event_list_lock); pthread_spin_destroy(&wakeup->event_list_lock); pthread_spin_lock(&stack_group->poll_list_lock); - list_del_node_null(&wakeup->poll_list); + list_del_node(&wakeup->poll_list); pthread_spin_unlock(&stack_group->poll_list_lock); pthread_mutex_destroy(&wakeup->wait); @@ -348,7 +339,7 @@ int32_t lstack_epoll_ctl(int32_t epfd, int32_t op, int32_t fd, struct epoll_even sock->epoll_events = 0; wakeup->stack_fd_cnt[sock->stack->stack_idx]--; pthread_spin_lock(&wakeup->event_list_lock); - list_del_node_null(&sock->event_list); + list_del_node(&sock->event_list); pthread_spin_unlock(&wakeup->event_list_lock); break; default: @@ -364,26 +355,27 @@ int32_t lstack_epoll_ctl(int32_t epfd, int32_t op, int32_t fd, struct epoll_even static int32_t epoll_lwip_event(struct wakeup_poll *wakeup, struct epoll_event *events, uint32_t maxevents) { int32_t event_num = 0; - struct list_node *node, *temp; + struct lwip_sock *sock; + struct list_node *node, *next; pthread_spin_lock(&wakeup->event_list_lock); - list_for_each_safe(node, temp, &wakeup->event_list) { - struct lwip_sock *sock = container_of(node, struct lwip_sock, event_list); + list_for_each_node(node, next, &wakeup->event_list) { + sock = list_entry(node, struct lwip_sock, event_list); if ((sock->epoll_events & sock->events) == 0) { - list_del_node_null(&sock->event_list); + list_del_node(&sock->event_list); continue; } if (sock->epoll_events & EPOLLET) { - list_del_node_null(&sock->event_list); + list_del_node(&sock->event_list); } /* EPOLLONESHOT: generate event after epoll_ctl add/mod event again epoll_event set 0 avoid generating event util epoll_ctl set epoll_event a valu */ if (sock->epoll_events & EPOLLONESHOT) { - list_del_node_null(&sock->event_list); + list_del_node(&sock->event_list); sock->epoll_events = 0; } @@ -519,7 +511,7 @@ static int32_t init_poll_wakeup_data(struct wakeup_poll *wakeup) __atomic_store_n(&wakeup->in_wait, false, __ATOMIC_RELEASE); for (uint32_t i = 0; i < PROTOCOL_STACK_MAX; i++) { - init_list_node_null(&wakeup->wakeup_list[i]); + list_init_node(&wakeup->wakeup_list[i]); } wakeup->epollfd = posix_api->epoll_create_fn(POLL_KERNEL_EVENTS); @@ -542,9 +534,9 @@ static int32_t init_poll_wakeup_data(struct wakeup_poll *wakeup) } struct protocol_stack_group *stack_group = get_protocol_stack_group(); - init_list_node_null(&wakeup->poll_list); + list_init_node(&wakeup->poll_list); pthread_spin_lock(&stack_group->poll_list_lock); - list_add_node(&stack_group->poll_list, &wakeup->poll_list); + list_add_node(&wakeup->poll_list, &stack_group->poll_list); pthread_spin_unlock(&stack_group->poll_list_lock); int32_t stack_count[PROTOCOL_STACK_MAX] = {0}; diff --git a/src/lstack/core/lstack_lwip.c b/src/lstack/core/lstack_lwip.c index 035311f..08836da 100644 --- a/src/lstack/core/lstack_lwip.c +++ b/src/lstack/core/lstack_lwip.c @@ -202,8 +202,8 @@ void gazelle_init_sock(int32_t fd) (void)replenish_send_idlembuf(stack, sock); sock->stack = stack; - init_list_node_null(&sock->recv_list); - init_list_node_null(&sock->event_list); + list_init_node(&sock->recv_list); + list_init_node(&sock->event_list); } void gazelle_clean_sock(int32_t fd) @@ -215,7 +215,7 @@ void gazelle_clean_sock(int32_t fd) if (sock->wakeup && sock->wakeup->type == WAKEUP_EPOLL) { pthread_spin_lock(&sock->wakeup->event_list_lock); - list_del_node_null(&sock->event_list); + list_del_node(&sock->event_list); pthread_spin_unlock(&sock->wakeup->event_list_lock); } @@ -223,7 +223,7 @@ void gazelle_clean_sock(int32_t fd) reset_sock_data(sock); - list_del_node_null(&sock->recv_list); + list_del_node(&sock->recv_list); } void gazelle_free_pbuf(struct pbuf *pbuf) @@ -342,7 +342,7 @@ static inline void del_data_out_event(struct lwip_sock *sock) sock->events &= ~EPOLLOUT; if (sock->events == 0) { - list_del_node_null(&sock->event_list); + list_del_node(&sock->event_list); } } @@ -874,7 +874,7 @@ static inline void del_data_in_event(struct lwip_sock *sock) sock->events &= ~EPOLLIN; if (sock->events == 0) { - list_del_node_null(&sock->event_list); + list_del_node(&sock->event_list); } } @@ -1121,20 +1121,18 @@ void add_recv_list(int32_t fd) { struct lwip_sock *sock = lwip_get_socket_nouse(fd); - if (sock && sock->stack && list_is_null(&sock->recv_list)) { - list_add_node(&sock->stack->recv_list, &sock->recv_list); + if (sock && sock->stack && list_node_null(&sock->recv_list)) { + list_add_node(&sock->recv_list, &sock->stack->recv_list); } } void read_same_node_recv_list(struct protocol_stack *stack) { - struct list_node *list = &(stack->same_node_recv_list); - struct list_node *node, *temp; + struct list_node *node, *next; struct lwip_sock *sock; - - list_for_each_safe(node, temp, list) { - sock = container_of(node, struct lwip_sock, recv_list); - + + list_for_each_node(node, next, &stack->same_node_recv_list) { + sock = list_entry(node, struct lwip_sock, recv_list); if (sock->same_node_rx_ring != NULL && same_node_ring_count(sock)) { add_sock_event(sock, EPOLLIN); } @@ -1143,23 +1141,22 @@ void read_same_node_recv_list(struct protocol_stack *stack) void read_recv_list(struct protocol_stack *stack, uint32_t max_num) { - struct list_node *list = &(stack->recv_list); - struct list_node *node, *temp; + struct list_node *node, *next; struct lwip_sock *sock; uint32_t read_num = 0; - list_for_each_safe(node, temp, list) { - sock = container_of(node, struct lwip_sock, recv_list); + list_for_each_node(node, next, &stack->recv_list) { + sock = list_entry(node, struct lwip_sock, recv_list); if (++read_num > max_num) { /* list head move to next send */ list_del_node(&stack->recv_list); - list_add_node(&sock->recv_list, &stack->recv_list); + list_add_node(&stack->recv_list, &sock->recv_list); break; } if (sock->conn == NULL || sock->conn->recvmbox == NULL || rte_ring_count(sock->conn->recvmbox->ring) == 0) { - list_del_node_null(&sock->recv_list); + list_del_node(&sock->recv_list); continue; } @@ -1229,7 +1226,7 @@ static void copy_pcb_to_conn(struct gazelle_stat_lstack_conn_info *conn, const s conn->send_ring_cnt = gazelle_ring_readover_count(sock->send_ring); conn->events = sock->events; conn->epoll_events = sock->epoll_events; - conn->eventlist = !list_is_null(&sock->event_list); + conn->eventlist = !list_node_null(&sock->event_list); } } } @@ -1368,18 +1365,6 @@ void get_lwip_connnum(struct rpc_msg *msg) msg->result = conn_num; } -static uint32_t get_list_count(struct list_node *list) -{ - struct list_node *node, *temp; - uint32_t count = 0; - - list_for_each_safe(node, temp, list) { - count++; - } - - return count; -} - void stack_mempool_size(struct rpc_msg *msg) { struct protocol_stack *stack = (struct protocol_stack*)msg->args[MSG_ARG_0].p; @@ -1391,7 +1376,7 @@ void stack_recvlist_count(struct rpc_msg *msg) { struct protocol_stack *stack = (struct protocol_stack*)msg->args[MSG_ARG_0].p; - msg->result = get_list_count(&stack->recv_list); + msg->result = list_get_count(&stack->recv_list); } void netif_poll(struct netif *netif) @@ -1513,7 +1498,7 @@ err_t find_same_node_memzone(struct tcp_pcb *pcb, struct lwip_sock *nsock) /* rcvlink init in alloc_socket() */ /* remove from g_rcv_process_list in free_socket */ - list_add_node(&nsock->stack->same_node_recv_list, &nsock->recv_list); + list_add_node(&nsock->recv_list, &nsock->stack->same_node_recv_list); return 0; } diff --git a/src/lstack/core/lstack_protocol_stack.c b/src/lstack/core/lstack_protocol_stack.c index b7aeeae..c31e65b 100644 --- a/src/lstack/core/lstack_protocol_stack.c +++ b/src/lstack/core/lstack_protocol_stack.c @@ -288,9 +288,9 @@ static int32_t init_stack_value(struct protocol_stack *stack, void *arg) stack->stack_idx = t_params->idx; stack->lwip_stats = &lwip_stats; - init_list_node(&stack->recv_list); - init_list_node(&stack->same_node_recv_list); - init_list_node(&stack->wakeup_list); + list_init_head(&stack->recv_list); + list_init_head(&stack->same_node_recv_list); + list_init_head(&stack->wakeup_list); sys_calibrate_tsc(); stack_stat_init(); @@ -421,8 +421,8 @@ static void wakeup_kernel_event(struct protocol_stack *stack) } __atomic_store_n(&wakeup->have_kernel_event, true, __ATOMIC_RELEASE); - if (list_is_null(&wakeup->wakeup_list[stack->stack_idx])) { - list_add_node(&stack->wakeup_list, &wakeup->wakeup_list[stack->stack_idx]); + if (list_node_null(&wakeup->wakeup_list[stack->stack_idx])) { + list_add_node(&wakeup->wakeup_list[stack->stack_idx], &stack->wakeup_list); } } @@ -545,7 +545,7 @@ int32_t init_protocol_stack(void) stack_group->stack_num = get_global_cfg_params()->num_cpu * 2; } - init_list_node(&stack_group->poll_list); + list_init_head(&stack_group->poll_list); pthread_spin_init(&stack_group->poll_list_lock, PTHREAD_PROCESS_PRIVATE); pthread_spin_init(&stack_group->socket_lock, PTHREAD_PROCESS_PRIVATE); @@ -814,7 +814,7 @@ void stack_clean_epoll(struct rpc_msg *msg) struct protocol_stack *stack = get_protocol_stack(); struct wakeup_poll *wakeup = (struct wakeup_poll *)msg->args[MSG_ARG_0].p; - list_del_node_null(&wakeup->wakeup_list[stack->stack_idx]); + list_del_node(&wakeup->wakeup_list[stack->stack_idx]); } /* when fd is listenfd, listenfd of all protocol stack thread will be closed */ @@ -929,7 +929,7 @@ static void inline del_accept_in_event(struct lwip_sock *sock) if (!NETCONN_IS_ACCEPTIN(sock)) { sock->events &= ~EPOLLIN; if (sock->events == 0) { - list_del_node_null(&sock->event_list); + list_del_node(&sock->event_list); } } diff --git a/src/lstack/core/lstack_stack_stat.c b/src/lstack/core/lstack_stack_stat.c index a66445b..9f2e93a 100644 --- a/src/lstack/core/lstack_stack_stat.c +++ b/src/lstack/core/lstack_stack_stat.c @@ -128,12 +128,13 @@ static void set_latency_start_flag(bool start) static void get_wakeup_stat(struct protocol_stack_group *stack_group, struct protocol_stack *stack, struct gazelle_wakeup_stat *stat) { - struct list_node *node, *temp; + struct wakeup_poll *wakeup; + struct list_node *node, *next; pthread_spin_lock(&stack_group->poll_list_lock); - list_for_each_safe(node, temp, &stack_group->poll_list) { - struct wakeup_poll *wakeup = container_of(node, struct wakeup_poll, poll_list); + list_for_each_node(node, next, &stack_group->poll_list) { + wakeup = list_entry(node, struct wakeup_poll, poll_list); if (wakeup->bind_stack == stack) { stat->app_events += wakeup->stat.app_events; -- 2.23.0