[EXTERNAL] [PATCH v5 3/4] eal/linux: report uevent socket overrun
Long Li
longli at microsoft.com
Thu Aug 20 03:41:41 CEST 2026
>
> Make uevent handler handle case where kernel netlink receive buffer is
> overrun. If this happens the DPDK device state will potentially be out of sync,
> but better not to give up.
>
> The code already handles the case of kernel sending a zero length message; it
> just ignores it.
>
> Fixes: 0d0f478d0483 ("eal/linux: add uevent parse and process")
> Cc: stable at dpdk.org
>
> Reported-by: Randy Tice <rtice at cisco.com>
> Signed-off-by: Stephen Hemminger <stephen at networkplumber.org>
Reviewed-by: Long Li <longli at microsoft.com>
> ---
> lib/eal/linux/eal_dev.c | 19 ++++++++++++++-----
> 1 file changed, 14 insertions(+), 5 deletions(-)
>
> diff --git a/lib/eal/linux/eal_dev.c b/lib/eal/linux/eal_dev.c index
> fb5c8bf070..b535122ff6 100644
> --- a/lib/eal/linux/eal_dev.c
> +++ b/lib/eal/linux/eal_dev.c
> @@ -270,11 +270,20 @@ dev_uev_handler(__rte_unused void *param)
>
> ret = recv(rte_intr_fd_get(intr_handle), buf, EAL_UEV_MSG_LEN,
> MSG_DONTWAIT);
> - if (ret < 0 && errno == EAGAIN)
> - return;
> - else if (ret <= 0) {
> - /* connection is closed or broken, can not up again. */
> - EAL_LOG(ERR, "uevent socket connection is broken.");
> + if (ret < 0) {
> + /* transient error */
> + if (errno == EAGAIN || errno == EWOULDBLOCK || errno ==
> EINTR)
> + return;
> +
> + /* kernel netlink messages lost */
> + if (errno == ENOBUFS) {
> + EAL_LOG(NOTICE, "kernel receive buffer overrun");
> + return;
> + }
> +
> + EAL_LOG(ERR, "unexpected error on uevent recv: %s",
> + strerror(errno));
> +
> rte_eal_alarm_set(1, dev_delayed_unregister, NULL);
> return;
> }
> --
> 2.53.0
More information about the stable
mailing list