Re: [PATCH] KVM: x86: Add support for cmpxchg16b emulation

kernel test robot
2026-03-07T05:41:50Z

Hi Sairaj,

kernel test robot noticed the following build errors:

[auto build test ERROR on kvm/queue]
[also build test ERROR on kvm/next tip/master linus/master v7.0-rc2 next-20260306]
[cannot apply to kvm/linux-next tip/auto-latest bp/for-next]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]

url: https://github.com/intel-lab-lkp/linux/commits/Sairaj-Kodilkar/KVM-x86-Add-support-for-cmpxchg16b-emulation/20260306-182915
base: https://git.kernel.org/pub/scm/virt/kvm/kvm.git queue
patch link: https://lore.kernel.org/r/20260306102047.29760-1-sarunkod%40amd.com
patch subject: [PATCH] KVM: x86: Add support for cmpxchg16b emulation
config: i386-randconfig-012-20260307 (https://download.01.org/0day-ci/archive/20260307/202603071358.8bRahq3i-lkp@intel.com/config)
compiler: clang version 20.1.8 (https://github.com/llvm/llvm-project 87f0227cb60147a26a1eeb4fb06e3b505e9c7261)
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20260307/202603071358.8bRahq3i-lkp@intel.com/reproduce)

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202603071358.8bRahq3i-lkp@intel.com/

All errors (new ones prefixed by >>):

In file included from arch/x86/kvm/mmu/page_track.c:19:
In file included from arch/x86/kvm/mmu.h:7:
In file included from arch/x86/kvm/x86.h:10:
>> arch/x86/kvm/kvm_emulate.h:271:3: error: unknown type name '__uint128_t'
271 | __uint128_t val128;
| ^
1 error generated.
--
In file included from arch/x86/kvm/vmx/vmcs12.c:4:
In file included from arch/x86/kvm/vmx/vmcs12.h:7:
In file included from arch/x86/kvm/vmx/vmcs.h:12:
In file included from arch/x86/kvm/vmx/capabilities.h:7:
In file included from arch/x86/kvm/vmx/../lapic.h:11:
In file included from arch/x86/kvm/vmx/../hyperv.h:25:
In file included from arch/x86/kvm/vmx/../x86.h:10:
>> arch/x86/kvm/vmx/../kvm_emulate.h:271:3: error: unknown type name '__uint128_t'
271 | __uint128_t val128;
| ^
1 error generated.
--
In file included from arch/x86/kvm/emulate.c:24:
>> arch/x86/kvm/kvm_emulate.h:271:3: error: unknown type name '__uint128_t'
271 | __uint128_t val128;
| ^
>> arch/x86/kvm/emulate.c:393:12: error: no member named 'val' in 'struct operand'
393 | ctxt->dst.val = 0xFF * !!(ctxt->eflags & X86_EFLAGS_CF);
| ~~~~~~~~~ ^
>> arch/x86/kvm/emulate.c:423:27: error: no member named 'val64' in 'struct operand'
423 | .src_val = ctxt->src.val64,
| ~~~~~~~~~ ^
arch/x86/kvm/emulate.c:424:27: error: no member named 'val64' in 'struct operand'
424 | .dst_val = ctxt->dst.val64,
| ~~~~~~~~~ ^
arch/x86/kvm/emulate.c:955:1: error: no member named 'val' in 'struct operand'
955 | EM_ASM_2(add);
| ^~~~~~~~~~~~~
arch/x86/kvm/emulate.c:346:10: note: expanded from macro 'EM_ASM_2'
346 | case 1: __EM_ASM_2(op##b, al, dl); break; \
| ^~~~~~~~~~~~~~~~~~~~~~~~~
arch/x86/kvm/emulate.c:305:3: note: expanded from macro '__EM_ASM_2'
305 | __EM_ASM(#op " %%" #src ", %%" #dst " \n\t")
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
arch/x86/kvm/emulate.c:291:25: note: expanded from macro '__EM_ASM'
291 | : "+a" (ctxt->dst.val), \
| ~~~~~~~~~ ^
arch/x86/kvm/emulate.c:955:1: error: no member named 'val' in 'struct operand'
955 | EM_ASM_2(add);
| ^~~~~~~~~~~~~
arch/x86/kvm/emulate.c:346:10: note: expanded from macro 'EM_ASM_2'
346 | case 1: __EM_ASM_2(op##b, al, dl); break; \
| ^~~~~~~~~~~~~~~~~~~~~~~~~
arch/x86/kvm/emulate.c:305:3: note: expanded from macro '__EM_ASM_2'
305 | __EM_ASM(#op " %%" #src ", %%" #dst " \n\t")
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
arch/x86/kvm/emulate.c:292:25: note: expanded from macro '__EM_ASM'
292 | "+d" (ctxt->src.val), \
| ~~~~~~~~~ ^
arch/x86/kvm/emulate.c:955:1: error: no member named 'val' in 'struct operand'
955 | EM_ASM_2(add);
| ^~~~~~~~~~~~~
arch/x86/kvm/emulate.c:346:10: note: expanded from macro 'EM_ASM_2'
346 | case 1: __EM_ASM_2(op##b, al, dl); break; \
| ^~~~~~~~~~~~~~~~~~~~~~~~~
arch/x86/kvm/emulate.c:305:3: note: expanded from macro '__EM_ASM_2'
305 | __EM_ASM(#op " %%" #src ", %%" #dst " \n\t")
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
arch/x86/kvm/emulate.c:295:25: note: expanded from macro '__EM_ASM'
295 | : "c" (ctxt->src2.val))
| ~~~~~~~~~~ ^
arch/x86/kvm/emulate.c:955:1: error: no member named 'val' in 'struct operand'
955 | EM_ASM_2(add);
| ^~~~~~~~~~~~~
arch/x86/kvm/emulate.c:347:10: note: expanded from macro 'EM_ASM_2'
347 | case 2: __EM_ASM_2(op##w, ax, dx); break; \
| ^~~~~~~~~~~~~~~~~~~~~~~~~
arch/x86/kvm/emulate.c:305:3: note: expanded from macro '__EM_ASM_2'
305 | __EM_ASM(#op " %%" #src ", %%" #dst " \n\t")
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
arch/x86/kvm/emulate.c:291:25: note: expanded from macro '__EM_ASM'
291 | : "+a" (ctxt->dst.val), \
| ~~~~~~~~~ ^
arch/x86/kvm/emulate.c:955:1: error: no member named 'val' in 'struct operand'
955 | EM_ASM_2(add);
| ^~~~~~~~~~~~~
arch/x86/kvm/emulate.c:347:10: note: expanded from macro 'EM_ASM_2'
347 | case 2: __EM_ASM_2(op##w, ax, dx); break; \
| ^~~~~~~~~~~~~~~~~~~~~~~~~
arch/x86/kvm/emulate.c:305:3: note: expanded from macro '__EM_ASM_2'
305 | __EM_ASM(#op " %%" #src ", %%" #dst " \n\t")
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
arch/x86/kvm/emulate.c:292:25: note: expanded from macro '__EM_ASM'
292 | "+d" (ctxt->src.val), \
| ~~~~~~~~~ ^
arch/x86/kvm/emulate.c:955:1: error: no member named 'val' in 'struct operand'
955 | EM_ASM_2(add);
| ^~~~~~~~~~~~~
arch/x86/kvm/emulate.c:347:10: note: expanded from macro 'EM_ASM_2'
347 | case 2: __EM_ASM_2(op##w, ax, dx); break; \
| ^~~~~~~~~~~~~~~~~~~~~~~~~
arch/x86/kvm/emulate.c:305:3: note: expanded from macro '__EM_ASM_2'
305 | __EM_ASM(#op " %%" #src ", %%" #dst " \n\t")
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
arch/x86/kvm/emulate.c:295:25: note: expanded from macro '__EM_ASM'
295 | : "c" (ctxt->src2.val))
| ~~~~~~~~~~ ^
arch/x86/kvm/emulate.c:955:1: error: no member named 'val' in 'struct operand'
955 | EM_ASM_2(add);
| ^~~~~~~~~~~~~
arch/x86/kvm/emulate.c:348:10: note: expanded from macro 'EM_ASM_2'
348 | case 4: __EM_ASM_2(op##l, eax, edx); break; \
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~
arch/x86/kvm/emulate.c:305:3: note: expanded from macro '__EM_ASM_2'
305 | __EM_ASM(#op " %%" #src ", %%" #dst " \n\t")
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
arch/x86/kvm/emulate.c:291:25: note: expanded from macro '__EM_ASM'
291 | : "+a" (ctxt->dst.val), \
| ~~~~~~~~~ ^
arch/x86/kvm/emulate.c:955:1: error: no member named 'val' in 'struct operand'
955 | EM_ASM_2(add);
| ^~~~~~~~~~~~~
arch/x86/kvm/emulate.c:348:10: note: expanded from macro 'EM_ASM_2'
348 | case 4: __EM_ASM_2(op##l, eax, edx); break; \
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~
arch/x86/kvm/emulate.c:305:3: note: expanded from macro '__EM_ASM_2'
305 | __EM_ASM(#op " %%" #src ", %%" #dst " \n\t")
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
arch/x86/kvm/emulate.c:292:25: note: expanded from macro '__EM_ASM'
292 | "+d" (ctxt->src.val), \
--
In file included from arch/x86/kvm/x86.c:21:
In file included from arch/x86/kvm/irq.h:19:
In file included from arch/x86/kvm/lapic.h:11:
In file included from arch/x86/kvm/hyperv.h:25:
In file included from arch/x86/kvm/x86.h:10:
>> arch/x86/kvm/kvm_emulate.h:271:3: error: unknown type name '__uint128_t'
271 | __uint128_t val128;
| ^
In file included from arch/x86/kvm/x86.c:44:
include/linux/mman.h:157:9: warning: division by zero is undefined [-Wdivision-by-zero]
157 | _calc_vm_trans(flags, MAP_SYNC, VM_SYNC ) |
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/linux/mman.h:135:21: note: expanded from macro '_calc_vm_trans'
135 | : ((x) & (bit1)) / ((bit1) / (bit2))))
| ^ ~~~~~~~~~~~~~~~~~
>> arch/x86/kvm/x86.c:9381:30: error: no member named 'val' in 'struct operand'
9381 | return vector == ctxt->src.val;
| ~~~~~~~~~ ^
1 warning and 2 errors generated.

vim +/__uint128_t +271 arch/x86/kvm/kvm_emulate.h

249
250 /* Type, address-of, and value of an instruction's operand. */
251 struct operand {
252 enum { OP_REG, OP_MEM, OP_MEM_STR, OP_IMM, OP_XMM, OP_YMM, OP_MM, OP_NONE } type;
253 unsigned int bytes;
254 unsigned int count;
255 union {
256 unsigned long orig_val;
257 u64 orig_val64;
258 };
259 union {
260 unsigned long *reg;
261 struct segmented_address {
262 ulong ea;
263 unsigned seg;
264 } mem;
265 unsigned xmm;
266 unsigned mm;
267 } addr;
268 union {
269 unsigned long val;
270 u64 val64;
> 271 __uint128_t val128;
272 char valptr[sizeof(avx256_t)];
273 sse128_t vec_val;
274 avx256_t vec_val2;
275 u64 mm_val;
276 void *data;
277 } __aligned(32);
278 };
279

--
0-DAY CI Kernel Test Service