Skip to content

yichya/openwrt-hv-tools

Repository files navigation

openwrt-hv-tools

Hyper-V Linux Guest Services for OpenWrt

About hv_fcopy_uio_daemon

This should be used on Linux 6.10 or later (6.12 WIP for OpenWrt), but currently it does not work at all.

Compiling

Currently it does not compile with OpenWrt toolchain (complaining about __always_inline). Seems can be solved by:

diff --git a/tools/hv/vmbus_bufring.c b/tools/hv/vmbus_bufring.c
index bac32c1109df..ee9f48511a71 100644
--- a/tools/hv/vmbus_bufring.c
+++ b/tools/hv/vmbus_bufring.c
@@ -58,7 +58,7 @@ void vmbus_br_setup(struct vmbus_br *br, void *buf, unsigned int blen)
        br->dsize = blen - sizeof(struct vmbus_bufring);
 }
 
-static inline __always_inline void
+static inline __attribute__((always_inline)) void
 rte_smp_mb(void)
 {
        asm volatile("lock addl $0, -128(%%rsp); " ::: "memory");

Running

It requires some uio related vmbus device which unfortunately I don't know how to initialize.

Wed Apr 16 23:30:57 2025 user.info HV_UIO_FCOPY: starting; pid is:5065
Wed Apr 16 23:30:57 2025 user.err HV_UIO_FCOPY: Failed to open directory (errno=No such file or directory).
Wed Apr 16 23:30:57 2025 user.err HV_UIO_FCOPY: open /dev/ failed; error: 21 Is a directory

Tried following Generic Hyper-V UIO driver but no uio* seen under /dev or /sys/bus/vmbus/devices/eb765408-105f-49b6-b4aa-c123b64d17d4 (source)

# ls -al /sys/bus/vmbus/devices/eb765408-105f-49b6-b4aa-c123b64d17d4/
drwxr-xr-x    4 root     root             0 Apr 16 23:47 .
drwxr-xr-x   22 root     root             0 Apr 16 23:47 ..
-r--r--r--    1 root     root          4096 Apr 16 23:47 channel_vp_mapping
drwxr-xr-x    3 root     root             0 Apr 16 23:47 channels
-r--r--r--    1 root     root          4096 Apr 16 23:47 class_id
-r--r--r--    1 root     root          4096 Apr 16 23:47 device
-r--r--r--    1 root     root          4096 Apr 16 23:47 device_id
-rw-r--r--    1 root     root          4096 Apr 16 23:49 driver_override
-r--r--r--    1 root     root          4096 Apr 16 23:47 id
-r--r--r--    1 root     root          4096 Apr 16 23:47 in_intr_mask
-r--r--r--    1 root     root          4096 Apr 16 23:47 in_read_bytes_avail
-r--r--r--    1 root     root          4096 Apr 16 23:47 in_read_index
-r--r--r--    1 root     root          4096 Apr 16 23:47 in_write_bytes_avail
-r--r--r--    1 root     root          4096 Apr 16 23:47 in_write_index
-r--r--r--    1 root     root          4096 Apr 16 23:47 modalias
-r--r--r--    1 root     root          4096 Apr 16 23:47 out_intr_mask
-r--r--r--    1 root     root          4096 Apr 16 23:47 out_read_bytes_avail
-r--r--r--    1 root     root          4096 Apr 16 23:47 out_read_index
-r--r--r--    1 root     root          4096 Apr 16 23:47 out_write_bytes_avail
-r--r--r--    1 root     root          4096 Apr 16 23:47 out_write_index
drwxr-xr-x    2 root     root             0 Apr 16 23:47 power
-r--r--r--    1 root     root          4096 Apr 16 23:47 state
lrwxrwxrwx    1 root     root             0 Apr 16 23:47 subsystem -> ../../../../../../bus/vmbus
-rw-r--r--    1 root     root          4096 Apr 16 23:47 uevent
-r--r--r--    1 root     root          4096 Apr 16 23:47 vendor

Manually binding device does not work as well:

# echo -n eb765408-105f-49b6-b4aa-c123b64d17d4 > /sys/bus/vmbus/drivers/uio_hv_generic/bind
ash: write error: No such device

At the same time this seems also not working on Ubuntu 25.04 Beta (Running linux-azure kernel variant). The problem seems same as running on OpenWrt:

Apr 16 16:44:55 yichya-ubuntu sudo[1146]:   yichya : TTY=tty1 ; PWD=/usr/lib/linux-azure-tools-6.14.0-1004 ; USER=root ; COMMAND=./hv_fcopy_uio_daemon -n
Apr 16 16:44:55 yichya-ubuntu sudo[1146]: pam_unix(sudo:session): session opened for user root(uid=0) by yichya(uid=1000)
Apr 16 16:44:55 yichya-ubuntu HV_UIO_FCOPY[1148]: starting; pid is:1148
Apr 16 16:44:55 yichya-ubuntu HV_UIO_FCOPY[1148]: Failed to open directory (errno=No such file or directory).
Apr 16 16:44:55 yichya-ubuntu HV_UIO_FCOPY[1148]: open /dev/ failed; error: 21 Is a directory

Not sure if it's related to Hyper-V version (Tried both on Windows 11 24H2 and Windows Server 2022, both not working) or kernel configuration.

TL;DR

Since it is broken and not very useful, there's an option in this package to exclude any fcopy implementation.

Legacy hv_fcopy_daemon does not work on Linux 6.10 or later because it needs /dev/vmbus/hv_fcopy which is available only on older kernel versions.

About

Hyper-V Linux Guest Services for OpenWrt

Resources

Stars

Watchers

Forks

Contributors