Package Details: winesync-dkms 5.16-4

Git Clone URL: https://aur.archlinux.org/winesync.git (read-only, click to copy)
Package Base: winesync
Description: Wine synchronization primitive driver - out-of-tree module (dkms version)
Upstream URL: https://repo.or.cz/linux/zf.git/shortlog/refs/heads/winesync4
Licenses: GPL2
Provides: WINESYNC-MODULE
Submitter: openglfreak
Maintainer: openglfreak
Last Packager: openglfreak
Votes: 3
Popularity: 0.006036
First Submitted: 2021-03-22 19:50 (UTC)
Last Updated: 2022-08-16 19:40 (UTC)

Pinned Comments

openglfreak commented on 2021-03-22 19:50 (UTC)

Explanation: Winesync is yet another reimplementation of the NT synchronization primitives for Wine, this time using a new kernel module instead of using existing kernel features or a new syscall. This implementation mimics the original from Windows perfectly (bar any bugs), in contrast to esync and fsync which had some hackily implemented operations. Performance shouldn't be much different from esync and fsync.

Latest Comments

Hakkaten commented on 2023-01-15 16:45 (UTC)

Is having this installed all I need to do to make use of it? Will any Wine on my system take advantage of this without any tweaking on my part? Just discovered this when I was browsing wine packages, I use CachyOS and their repos have this.

saghm commented on 2022-02-15 17:41 (UTC)

I've confirmed that the issue I was having was with the xanmod-rog kernel and not a winesync issue. Sorry about the noise!

saghm commented on 2022-02-15 00:32 (UTC)

The kernel module seems to be failing to build for me as of kernel version 5.16.9, although I'm using the https://aur.archlinux.org/packages/linux-xanmod-rog kernel, so I'm not sure if this will work with other ones. I noticed that the winesync version is only 5.15 rather than 5.16, but it seems to have worked fine up through 5.16.8, and I don't see any recent changes to upstream, so I don't know whether that's an indication that this is expectation or not.

Contents of /var/lib/dkms/winesync/5.15/build/make.log:

DKMS make.log for winesync-5.15 for kernel 5.16.9-xanmod0-rog-1 (x86_64)
Mon Feb 14 07:28:08 PM EST 2022
make: Entering directory '/usr/lib/modules/5.16.9-xanmod0-rog-1/build'
  CC [M]  /var/lib/dkms/winesync/5.15/build/src/drivers/misc/winesync.o
/var/lib/dkms/winesync/5.15/build/src/drivers/misc/winesync.c: In function ‘try_wake_all’:
/var/lib/dkms/winesync/5.15/build/src/drivers/misc/winesync.c:249:52: error: ‘WINESYNC_WAIT_FLAG_GET’ undeclared (first use in this function)
  249 |                                 if (entry->flags & WINESYNC_WAIT_FLAG_GET)
      |                                                    ^~~~~~~~~~~~~~~~~~~~~~
/var/lib/dkms/winesync/5.15/build/src/drivers/misc/winesync.c:249:52: note: each undeclared identifier is reported only once for each function it appears in
/var/lib/dkms/winesync/5.15/build/src/drivers/misc/winesync.c: In function ‘try_wake_any_sem’:
/var/lib/dkms/winesync/5.15/build/src/drivers/misc/winesync.c:298:44: error: ‘WINESYNC_WAIT_FLAG_GET’ undeclared (first use in this function)
  298 |                         if (entry->flags & WINESYNC_WAIT_FLAG_GET)
      |                                            ^~~~~~~~~~~~~~~~~~~~~~
/var/lib/dkms/winesync/5.15/build/src/drivers/misc/winesync.c: In function ‘try_wake_any_mutex’:
/var/lib/dkms/winesync/5.15/build/src/drivers/misc/winesync.c:323:44: error: ‘WINESYNC_WAIT_FLAG_GET’ undeclared (first use in this function)
  323 |                         if (entry->flags & WINESYNC_WAIT_FLAG_GET) {
      |                                            ^~~~~~~~~~~~~~~~~~~~~~
In file included from ./include/linux/bitops.h:7,
                 from ./include/linux/kernel.h:13,
                 from ./arch/x86/include/asm/percpu.h:27,
                 from ./arch/x86/include/asm/current.h:6,
                 from ./arch/x86/include/asm/processor.h:17,
                 from ./arch/x86/include/asm/timex.h:5,
                 from ./include/linux/timex.h:65,
                 from ./include/linux/time32.h:13,
                 from ./include/linux/time.h:60,
                 from ./include/linux/compat.h:10,
                 from /var/lib/dkms/winesync/5.15/build/src/drivers/misc/winesync.c:8:
/var/lib/dkms/winesync/5.15/build/src/drivers/misc/winesync.c: In function ‘setup_wait’:
/var/lib/dkms/winesync/5.15/build/src/drivers/misc/winesync.c:715:58: error: ‘const struct winesync_wait_args’ has no member named ‘sigmask’
  715 |         const void __user *sigmask = u64_to_user_ptr(args->sigmask);
      |                                                          ^~
./include/linux/typecheck.h:11:16: note: in definition of macro ‘typecheck’
   11 |         typeof(x) __dummy2; \
      |                ^
/var/lib/dkms/winesync/5.15/build/src/drivers/misc/winesync.c:715:38: note: in expansion of macro ‘u64_to_user_ptr’
  715 |         const void __user *sigmask = u64_to_user_ptr(args->sigmask);
      |                                      ^~~~~~~~~~~~~~~
./include/linux/typecheck.h:12:25: warning: comparison of distinct pointer types lacks a cast
   12 |         (void)(&__dummy == &__dummy2); \
      |                         ^~
./include/linux/kernel.h:52:9: note: in expansion of macro ‘typecheck’
   52 |         typecheck(u64, (x));            \
      |         ^~~~~~~~~
/var/lib/dkms/winesync/5.15/build/src/drivers/misc/winesync.c:715:38: note: in expansion of macro ‘u64_to_user_ptr’
  715 |         const void __user *sigmask = u64_to_user_ptr(args->sigmask);
      |                                      ^~~~~~~~~~~~~~~
In file included from ./arch/x86/include/asm/percpu.h:27,
                 from ./arch/x86/include/asm/current.h:6,
                 from ./arch/x86/include/asm/processor.h:17,
                 from ./arch/x86/include/asm/timex.h:5,
                 from ./include/linux/timex.h:65,
                 from ./include/linux/time32.h:13,
                 from ./include/linux/time.h:60,
                 from ./include/linux/compat.h:10,
                 from /var/lib/dkms/winesync/5.15/build/src/drivers/misc/winesync.c:8:
/var/lib/dkms/winesync/5.15/build/src/drivers/misc/winesync.c:715:58: error: ‘const struct winesync_wait_args’ has no member named ‘sigmask’
  715 |         const void __user *sigmask = u64_to_user_ptr(args->sigmask);
      |                                                          ^~
./include/linux/kernel.h:53:36: note: in definition of macro ‘u64_to_user_ptr’
   53 |         (void __user *)(uintptr_t)(x);  \
      |                                    ^
In file included from <command-line>:
/var/lib/dkms/winesync/5.15/build/src/drivers/misc/winesync.c:724:60: error: ‘const struct winesync_wait_args’ has no member named ‘sigsetsize’
  724 |                 ret = set_compat_user_sigmask(sigmask, args->sigsetsize);
      |                                                            ^~
/var/lib/dkms/winesync/5.15/build/defines.h:3:70: note: in definition of macro ‘set_compat_user_sigmask’
    3 | #define set_compat_user_sigmask(x, y) (*pset_compat_user_sigmask)(x, y)
      |                                                                      ^
/var/lib/dkms/winesync/5.15/build/src/drivers/misc/winesync.c:726:53: error: ‘const struct winesync_wait_args’ has no member named ‘sigsetsize’
  726 |                 ret = set_user_sigmask(sigmask, args->sigsetsize);
      |                                                     ^~
/var/lib/dkms/winesync/5.15/build/defines.h:2:56: note: in definition of macro ‘set_user_sigmask’
    2 | #define set_user_sigmask(x, y) (*pset_user_sigmask)(x, y)
      |                                                        ^
/var/lib/dkms/winesync/5.15/build/src/drivers/misc/winesync.c:744:49: error: invalid application of ‘sizeof’ to incomplete type ‘struct winesync_wait_obj’
  744 |         objs = kmalloc_array(args->count, sizeof(*objs), GFP_KERNEL);
      |                                                 ^
/var/lib/dkms/winesync/5.15/build/src/drivers/misc/winesync.c:748:58: error: invalid application of ‘sizeof’ to incomplete type ‘struct winesync_wait_obj’
  748 |                            array_size(args->count, sizeof(*objs)))) {
      |                                                          ^
/var/lib/dkms/winesync/5.15/build/src/drivers/misc/winesync.c:767:61: error: invalid use of undefined type ‘struct winesync_wait_obj’
  767 |                 struct winesync_obj *obj = get_obj(dev, objs[i].obj);
      |                                                             ^
/var/lib/dkms/winesync/5.15/build/src/drivers/misc/winesync.c:767:64: error: invalid use of undefined type ‘struct winesync_wait_obj’
  767 |                 struct winesync_obj *obj = get_obj(dev, objs[i].obj);
      |                                                                ^
/var/lib/dkms/winesync/5.15/build/src/drivers/misc/winesync.c:785:36: error: invalid use of undefined type ‘struct winesync_wait_obj’
  785 |                 entry->flags = objs[i].flags;
      |                                    ^
/var/lib/dkms/winesync/5.15/build/src/drivers/misc/winesync.c:785:39: error: invalid use of undefined type ‘struct winesync_wait_obj’
  785 |                 entry->flags = objs[i].flags;
      |                                       ^
make[1]: *** [scripts/Makefile.build:287: /var/lib/dkms/winesync/5.15/build/src/drivers/misc/winesync.o] Error 1
make: *** [Makefile:1847: /var/lib/dkms/winesync/5.15/build] Error 2
make: Leaving directory '/usr/lib/modules/5.16.9-xanmod0-rog-1/build'

openglfreak commented on 2021-08-13 23:42 (UTC)

@JonnyBoss That makes it compile the non-dkms package for the currently running kernel, instead of for the default Arch kernel, so that's not acceptable. Use _provide_nondkms=false instead.

JonnyBoss commented on 2021-08-13 13:51 (UTC)

@Sukid, @openglfreak I had the exact same issue as Sukid on Manjaro. I was able to successfully build and install the package with a few changes to the PKGBUILD. The following patch should not brake compatibility with default Arch, but add compatibility with manjaro and probably a lot of other kernels as well.

--- PKGBUILD    2021-08-13 14:15:36.547332660 +0200
+++ PKGBUILD    2021-08-13 15:13:49.013982625 +0200
@@ -73,7 +73,7 @@

 if [ "$_provide_nondkms" = true ]; then
 build() {
-    _kernver="$(cat /usr/src/linux/version)"
+    _kernver="$(uname -r)"
     install -Dm644 "$srcdir/Makefile" "$srcdir/$pkgbase-$pkgver/Makefile"
     install -Dm644 "$srcdir/winesync.h-$_commit" "$srcdir/$pkgbase-$pkgver/include/uapi/linux/winesync.h"
     install -Dm644 "$srcdir/winesync.c-$_commit" "$srcdir/$pkgbase-$pkgver/src/drivers/misc/winesync.c"
@@ -86,8 +86,9 @@
     arch=("$CARCH")
     depends=("${_nondkms_depends[@]}")
     provides=("${_module_provides[@]}")
-    _kernver="$(cat /usr/src/linux/version)"
-    install -t "$pkgdir/usr/lib/modules/$_kernver/extramodules" -Dm644 "$srcdir/build/$pkgbase/$pkgver/$_kernver/$CARCH/module"/*
+    _kernver="$(uname -r)"
+    _extramodules="$(readlink -f "/usr/lib/modules/$_kernver/extramodules")"
+    install -t "$pkgdir$_extramodules" -Dm644 "$srcdir/build/$pkgbase/$pkgver/$_kernver/$CARCH/module"/*
     find "$pkgdir" -name '*.ko' -exec xz -T1 '{}' \+
 }
 fi

openglfreak commented on 2021-05-19 10:06 (UTC)

@Sukid Yes, you need the default kernel installed to build the non-dkms package.

Sukid commented on 2021-05-06 14:19 (UTC) (edited on 2021-05-06 14:30 (UTC) by Sukid)

I need to change provide_nondkms to false, otherwise this happens:

==> Starting build()... cat: /usr/src/linux/version: No such file or directory ==> ERROR: A failure occurred in build(). Aborting... error making: winesync (winesync-dkms)

I guess that's because I don't have the default kernel installed?

openglfreak commented on 2021-03-22 19:50 (UTC)

Explanation: Winesync is yet another reimplementation of the NT synchronization primitives for Wine, this time using a new kernel module instead of using existing kernel features or a new syscall. This implementation mimics the original from Windows perfectly (bar any bugs), in contrast to esync and fsync which had some hackily implemented operations. Performance shouldn't be much different from esync and fsync.