From mboxrd@z Thu Jan 1 00:00:00 1970 Authentication-Results: passt.top; dmarc=none (p=none dis=none) header.from=gibson.dropbear.id.au Authentication-Results: passt.top; dkim=pass (2048-bit key; secure) header.d=gibson.dropbear.id.au header.i=@gibson.dropbear.id.au header.a=rsa-sha256 header.s=202412 header.b=RPsFQzu8; dkim-atps=neutral Received: from mail.ozlabs.org (mail.ozlabs.org [IPv6:2404:9400:2221:ea00::3]) by passt.top (Postfix) with ESMTPS id 99D185A026F for ; Thu, 30 Jan 2025 08:26:25 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gibson.dropbear.id.au; s=202412; t=1738221972; bh=hjpl4+frsSCDFuXPCj7wTRHotG1Oc6PKdSN7iIVadNc=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=RPsFQzu8NfpvuUhQX+/fqUgefYQoC5iplr/COK6f2Q1/vNe+zmS60dlL70jOqDmOJ VEA7ko1tj9AJaGc7VX3VRu7QZgY1kQDWSlxYDOjxENhDtWXGOFUckqWsZU1koP0S+L LhHDWa2XyyuH0iURjUfD2chwJzLjzWgbn01EDYLJOaK+LfTD5Yvhgjt0gjSbLCeIck oUl5dHysPG0fGlPhXH4pwFok8QcP2uZFLCGgesAARsYWgBDClpS2X+/uAIhPoV4rxC YNZUIxd/kkA8efkXo3ZOzJ/yUY/0msvPNJnclzgqasbpXJiFGZySrCopHI882IaP87 72wHYPw+KUknQ== Received: by gandalf.ozlabs.org (Postfix, from userid 1007) id 4Yk9Yc4HDwz4x5m; Thu, 30 Jan 2025 18:26:12 +1100 (AEDT) From: David Gibson To: Stefano Brivio , passt-dev@passt.top Subject: [PATCH 2/2] util: Rename and make global vu_remove_watch() Date: Thu, 30 Jan 2025 17:52:11 +1100 Message-ID: <20250130065211.770325-3-david@gibson.dropbear.id.au> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250130065211.770325-1-david@gibson.dropbear.id.au> References: <20250130065211.770325-1-david@gibson.dropbear.id.au> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Message-ID-Hash: N3N5TGCJYRRURIQ7DWTUSVUNXKQNL6GQ X-Message-ID-Hash: N3N5TGCJYRRURIQ7DWTUSVUNXKQNL6GQ X-MailFrom: dgibson@gandalf.ozlabs.org X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header CC: David Gibson X-Mailman-Version: 3.3.8 Precedence: list List-Id: Development discussion and patches for passt Archived-At: Archived-At: List-Archive: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: vu_remove_watch() is used in vhost_user.c to remove an fd from the global epoll set. There's nothing really vhost user specific about it though, so rename, move to util.c and use it in a bunch of places outside vhost_user.c where it makes things marginally more readable. Signed-off-by: David Gibson --- icmp.c | 2 +- tap.c | 2 +- tcp.c | 4 ++-- tcp_splice.c | 4 ++-- udp_flow.c | 2 +- util.c | 10 ++++++++++ util.h | 1 + vhost_user.c | 21 +++++---------------- vu_common.c | 6 ++---- 9 files changed, 25 insertions(+), 27 deletions(-) diff --git a/icmp.c b/icmp.c index 143e93be..bcf498d2 100644 --- a/icmp.c +++ b/icmp.c @@ -150,7 +150,7 @@ unexpected: static void icmp_ping_close(const struct ctx *c, const struct icmp_ping_flow *pingf) { - epoll_ctl(c->epollfd, EPOLL_CTL_DEL, pingf->sock, NULL); + epoll_del(c, pingf->sock); close(pingf->sock); flow_hash_remove(c, FLOW_SIDX(pingf, INISIDE)); } diff --git a/tap.c b/tap.c index cd32a901..772648f9 100644 --- a/tap.c +++ b/tap.c @@ -1005,7 +1005,7 @@ void tap_sock_reset(struct ctx *c) exit(EXIT_SUCCESS); /* Close the connected socket, wait for a new connection */ - epoll_ctl(c->epollfd, EPOLL_CTL_DEL, c->fd_tap, NULL); + epoll_del(c, c->fd_tap); close(c->fd_tap); c->fd_tap = -1; if (c->mode == MODE_VU) diff --git a/tcp.c b/tcp.c index 4eed82bf..77873815 100644 --- a/tcp.c +++ b/tcp.c @@ -468,9 +468,9 @@ static int tcp_epoll_ctl(const struct ctx *c, struct tcp_tap_conn *conn) if (conn->events == CLOSED) { if (conn->in_epoll) - epoll_ctl(c->epollfd, EPOLL_CTL_DEL, conn->sock, NULL); + epoll_del(c, conn->sock); if (conn->timer != -1) - epoll_ctl(c->epollfd, EPOLL_CTL_DEL, conn->timer, NULL); + epoll_del(c, conn->timer); return 0; } diff --git a/tcp_splice.c b/tcp_splice.c index 3a000ffa..5db1d62e 100644 --- a/tcp_splice.c +++ b/tcp_splice.c @@ -200,8 +200,8 @@ static void conn_flag_do(const struct ctx *c, struct tcp_splice_conn *conn, } if (flag == CLOSING) { - epoll_ctl(c->epollfd, EPOLL_CTL_DEL, conn->s[0], NULL); - epoll_ctl(c->epollfd, EPOLL_CTL_DEL, conn->s[1], NULL); + epoll_del(c, conn->s[0]); + epoll_del(c, conn->s[1]); } } diff --git a/udp_flow.c b/udp_flow.c index 9fd7d06a..7fae81de 100644 --- a/udp_flow.c +++ b/udp_flow.c @@ -52,7 +52,7 @@ void udp_flow_close(const struct ctx *c, struct udp_flow *uflow) if (uflow->s[TGTSIDE] >= 0) { /* But the flow specific one needs to be removed */ - epoll_ctl(c->epollfd, EPOLL_CTL_DEL, uflow->s[TGTSIDE], NULL); + epoll_del(c, uflow->s[TGTSIDE]); close(uflow->s[TGTSIDE]); uflow->s[TGTSIDE] = -1; } diff --git a/util.c b/util.c index 11973c44..c7b09f08 100644 --- a/util.c +++ b/util.c @@ -837,3 +837,13 @@ void raw_random(void *buf, size_t buflen) if (random_read < buflen) die("Unexpected EOF on random data source"); } + +/** + * epoll_del() - Remove a file descriptor from our passt epoll + * @c: Execution context + * @fd: File descriptor to remove + */ +void epoll_del(const struct ctx *c, int fd) +{ + epoll_ctl(c->epollfd, EPOLL_CTL_DEL, fd, NULL); +} diff --git a/util.h b/util.h index d02333d5..800a28be 100644 --- a/util.h +++ b/util.h @@ -276,6 +276,7 @@ static inline bool mod_between(unsigned x, unsigned i, unsigned j, unsigned m) #define FPRINTF(f, ...) (void)fprintf(f, __VA_ARGS__) void raw_random(void *buf, size_t buflen); +void epoll_del(const struct ctx *c, int fd); /* * Starting from glibc 2.40.9000 and commit 25a5eb4010df ("string: strerror, diff --git a/vhost_user.c b/vhost_user.c index 6bf0dda8..bbbf504f 100644 --- a/vhost_user.c +++ b/vhost_user.c @@ -162,17 +162,6 @@ static void vmsg_close_fds(const struct vhost_user_msg *vmsg) close(vmsg->fds[i]); } -/** - * vu_remove_watch() - Remove a file descriptor from our passt epoll - * file descriptor - * @vdev: vhost-user device - * @fd: file descriptor to remove - */ -static void vu_remove_watch(const struct vu_dev *vdev, int fd) -{ - epoll_ctl(vdev->context->epollfd, EPOLL_CTL_DEL, fd, NULL); -} - /** * vmsg_set_reply_u64() - Set reply payload.u64 and clear request flags * and fd_num @@ -748,7 +737,7 @@ static bool vu_get_vring_base_exec(struct vu_dev *vdev, vdev->vq[idx].call_fd = -1; } if (vdev->vq[idx].kick_fd != -1) { - vu_remove_watch(vdev, vdev->vq[idx].kick_fd); + epoll_del(vdev->context, vdev->vq[idx].kick_fd); close(vdev->vq[idx].kick_fd); vdev->vq[idx].kick_fd = -1; } @@ -816,7 +805,7 @@ static bool vu_set_vring_kick_exec(struct vu_dev *vdev, vu_check_queue_msg_file(msg); if (vdev->vq[idx].kick_fd != -1) { - vu_remove_watch(vdev, vdev->vq[idx].kick_fd); + epoll_del(vdev->context, vdev->vq[idx].kick_fd); close(vdev->vq[idx].kick_fd); vdev->vq[idx].kick_fd = -1; } @@ -1063,7 +1052,7 @@ static bool vu_set_device_state_fd_exec(struct vu_dev *vdev, die("Invalide device_state_fd direction: %d", direction); if (vdev->device_state_fd != -1) { - vu_remove_watch(vdev, vdev->device_state_fd); + epoll_del(vdev->context, vdev->device_state_fd); close(vdev->device_state_fd); } @@ -1145,7 +1134,7 @@ void vu_cleanup(struct vu_dev *vdev) vq->err_fd = -1; } if (vq->kick_fd != -1) { - vu_remove_watch(vdev, vq->kick_fd); + epoll_del(vdev->context, vq->kick_fd); close(vq->kick_fd); vq->kick_fd = -1; } @@ -1169,7 +1158,7 @@ void vu_cleanup(struct vu_dev *vdev) vu_close_log(vdev); if (vdev->device_state_fd != -1) { - vu_remove_watch(vdev, vdev->device_state_fd); + epoll_del(vdev->context, vdev->device_state_fd); close(vdev->device_state_fd); vdev->device_state_fd = -1; vdev->device_state_result = -1; diff --git a/vu_common.c b/vu_common.c index f43d8ac4..2c12dca3 100644 --- a/vu_common.c +++ b/vu_common.c @@ -325,8 +325,7 @@ void vu_migrate(struct vu_dev *vdev, uint32_t events) /* value to be returned by VHOST_USER_CHECK_DEVICE_STATE */ vdev->device_state_result = ret == -1 ? -1 : 0; /* Closing the file descriptor signals the end of transfer */ - epoll_ctl(vdev->context->epollfd, EPOLL_CTL_DEL, - vdev->device_state_fd, NULL); + epoll_del(vdev->context, vdev->device_state_fd); close(vdev->device_state_fd); vdev->device_state_fd = -1; } else if (events & EPOLLIN) { @@ -346,8 +345,7 @@ void vu_migrate(struct vu_dev *vdev, uint32_t events) debug("Closing migration channel"); /* The end of file signals the end of the transfer. */ - epoll_ctl(vdev->context->epollfd, EPOLL_CTL_DEL, - vdev->device_state_fd, NULL); + epoll_del(vdev->context, vdev->device_state_fd); close(vdev->device_state_fd); vdev->device_state_fd = -1; } -- 2.48.1