Skip to content

Build of 6.18.20.1 Linux kernel for WSL fails (dxgkrnl/__dma_fence_is_later signature mismatch) #40164

@faratech

Description

@faratech

Windows Version

Microsoft Windows [Version 10.0.26200.8117]

WSL Version

2.7.1.0

Are you using WSL 1 or WSL 2?

  • WSL 2
  • WSL 1

Kernel Version

6.6.123.2-microsoft-standard-WSL2+ (running; 6.18.20.1 is what fails to build)

Distro Version

Ubuntu 25.10

Other Software

  • GCC 15.2.0 (Ubuntu 15.2.0-4ubuntu4)
  • Host arch: aarch64 (Snapdragon X Elite)

Repro Steps

git clone --depth 1 -b linux-msft-wsl-6.18.20.1 \
    https://github.com/microsoft/WSL2-Linux-Kernel.git
cd WSL2-Linux-Kernel
cp Microsoft/config-wsl-arm64 .config      # or config-wsl
make ARCH=arm64 olddefconfig               # or ARCH=x86
make ARCH=arm64 -j"$(nproc)" Image         # or bzImage

Expected Behavior

Kernel builds cleanly from the linux-msft-wsl-6.18.20.1 release tag using the shipped default config.

Actual Behavior

drivers/hv/dxgkrnl/dxgsyncfile.c: In function 'dxgdmafence_signaled':
drivers/hv/dxgkrnl/dxgsyncfile.c:449:46: error: passing argument 1 of
  '__dma_fence_is_later' makes pointer from integer without a cast
  [-Wint-conversion]
  449 |     return __dma_fence_is_later(syncpoint->fence_value, fence->seqno,
./include/linux/dma-fence.h:471:59: note: expected 'struct dma_fence *'
  but argument is of type 'u64'
drivers/hv/dxgkrnl/dxgsyncfile.c:450:42: error: passing argument 3 of
  '__dma_fence_is_later' makes integer from pointer without a cast
  [-Wint-conversion]

Root cause

__dma_fence_is_later changed signature between 6.6.y and 6.18.y:

Tag include/linux/dma-fence.h
linux-msft-wsl-6.6.123.2 (u64 f1, u64 f2, const struct dma_fence_ops *ops)
linux-msft-wsl-6.18.20.1 (struct dma_fence *fence, u64 f1, u64 f2)

Every other in-tree caller was updated to the new form (dma-fence-chain.c, sw_sync.c, xe_sched_job.c, xe_hw_fence.c), but drivers/hv/dxgkrnl/dxgsyncfile.c:449 still uses the old calling convention — so dxgkrnl is inconsistent with the very header it includes. Verified by diffing the file between the two tags: the dxgkrnl line is byte-identical in 6.6.123.2 and 6.18.20.1 despite the header change, i.e., the driver was simply missed during the 6.6 → 6.18 rebase.

The file is arch-independent and CONFIG_DXGKRNL=y in both config-wsl and config-wsl-arm64, so this reproduces on any host building the release tag from source. Confirmed firsthand on aarch64.

Fix

One-line, pure API-compat, no semantic change:

--- a/drivers/hv/dxgkrnl/dxgsyncfile.c
+++ b/drivers/hv/dxgkrnl/dxgsyncfile.c
@@ -446,8 +446,7 @@ static bool dxgdmafence_signaled(struct dma_fence *fence)
 	syncpoint = to_syncpoint(fence);
 	if (syncpoint == 0)
 		return true;
-	return __dma_fence_is_later(syncpoint->fence_value, fence->seqno,
-				    fence->ops);
+	return __dma_fence_is_later(fence, syncpoint->fence_value, fence->seqno);
 }

Builds cleanly on aarch64 with config-wsl-arm64 + this patch.

Why this tag probably shipped (compiler note)

Both Microsoft/config-wsl and Microsoft/config-wsl-arm64 on this tag begin with:

CONFIG_CC_VERSION_TEXT="gcc (GCC) 13.2.0"
CONFIG_GCC_VERSION=130200

The -Wint-conversion / -Wincompatible-pointer-types diagnostics this bug triggers were warnings on GCC ≤ 13 but were promoted to errors by default in GCC 14. So on GCC 13 this code warns but still produces a working image; on any current mainstream distro toolchain (Debian 13, Ubuntu 24.04+, Fedora 40+, Arch, openSUSE Tumbleweed — all GCC 14 or 15), it's a hard failure. That strongly suggests whatever verifies the public tag before publishing is still on GCC 13, which means this class of regression slips through silently. Bumping release-verification to GCC ≥14 would catch all four of the recent "tag doesn't build" reports (#12431, #13086, #13511, this one) going forward.

Diagnostic Logs

N/A — pre-boot compile failure, not a runtime issue.


cc @chessturo — flagging since you cut the linux-msft-wsl-6.18.20.1 tag.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions