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

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