From: kernel test robot <lkp@intel.com>
To: Sean Christopherson <seanjc@google.com>,
Paolo Bonzini <pbonzini@redhat.com>,
Nathan Chancellor <nathan@kernel.org>,
Nick Desaulniers <ndesaulniers@google.com>
Cc: llvm@lists.linux.dev, kbuild-all@lists.01.org,
Sean Christopherson <seanjc@google.com>,
Vitaly Kuznetsov <vkuznets@redhat.com>,
Wanpeng Li <wanpengli@tencent.com>,
Jim Mattson <jmattson@google.com>, Joerg Roedel <joro@8bytes.org>,
kvm@vger.kernel.org
Subject: Re: [PATCH 4/5] KVM: x86: Use __try_cmpxchg_user() to emulate atomic accesses
Date: Tue, 1 Feb 2022 17:25:00 +0800 [thread overview]
Message-ID: <202202011753.zksthphR-lkp@intel.com> (raw)
In-Reply-To: <20220201010838.1494405-5-seanjc@google.com>
Hi Sean,
I love your patch! Yet something to improve:
[auto build test ERROR on 26291c54e111ff6ba87a164d85d4a4e134b7315c]
url: https://github.com/0day-ci/linux/commits/Sean-Christopherson/x86-uaccess-CMPXCHG-KVM-bug-fixes/20220201-091001
base: 26291c54e111ff6ba87a164d85d4a4e134b7315c
config: i386-randconfig-a002 (https://download.01.org/0day-ci/archive/20220201/202202011753.zksthphR-lkp@intel.com/config)
compiler: clang version 14.0.0 (https://github.com/llvm/llvm-project 6b1e844b69f15bb7dffaf9365cd2b355d2eb7579)
reproduce (this is a W=1 build):
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# https://github.com/0day-ci/linux/commit/5387711f4b49675e162ca30b05a3b2435326e5f9
git remote add linux-review https://github.com/0day-ci/linux
git fetch --no-tags linux-review Sean-Christopherson/x86-uaccess-CMPXCHG-KVM-bug-fixes/20220201-091001
git checkout 5387711f4b49675e162ca30b05a3b2435326e5f9
# save the config file to linux build tree
mkdir build_dir
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 O=build_dir ARCH=i386 SHELL=/bin/bash
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
All errors (new ones prefixed by >>):
>> arch/x86/kvm/x86.c:7213:7: error: invalid output size for constraint '+a'
r = emulator_try_cmpxchg_user(u64, hva, old, new);
^
arch/x86/kvm/x86.c:7159:3: note: expanded from macro 'emulator_try_cmpxchg_user'
(__try_cmpxchg_user((t *)(ptr), (t *)(old), *(t *)(new), efault ## t))
^
arch/x86/include/asm/uaccess.h:629:11: note: expanded from macro '__try_cmpxchg_user'
__ret = !unsafe_try_cmpxchg_user(_ptr, _oldp, _nval, _label); \
^
arch/x86/include/asm/uaccess.h:606:18: note: expanded from macro 'unsafe_try_cmpxchg_user'
case 1: __ret = __try_cmpxchg_user_asm("b", "q", \
^
arch/x86/include/asm/uaccess.h:467:22: note: expanded from macro '__try_cmpxchg_user_asm'
[old] "+a" (__old) \
^
>> arch/x86/kvm/x86.c:7213:7: error: invalid output size for constraint '+a'
arch/x86/kvm/x86.c:7159:3: note: expanded from macro 'emulator_try_cmpxchg_user'
(__try_cmpxchg_user((t *)(ptr), (t *)(old), *(t *)(new), efault ## t))
^
arch/x86/include/asm/uaccess.h:629:11: note: expanded from macro '__try_cmpxchg_user'
__ret = !unsafe_try_cmpxchg_user(_ptr, _oldp, _nval, _label); \
^
arch/x86/include/asm/uaccess.h:610:18: note: expanded from macro 'unsafe_try_cmpxchg_user'
case 2: __ret = __try_cmpxchg_user_asm("w", "r", \
^
arch/x86/include/asm/uaccess.h:467:22: note: expanded from macro '__try_cmpxchg_user_asm'
[old] "+a" (__old) \
^
>> arch/x86/kvm/x86.c:7213:7: error: invalid output size for constraint '+a'
arch/x86/kvm/x86.c:7159:3: note: expanded from macro 'emulator_try_cmpxchg_user'
(__try_cmpxchg_user((t *)(ptr), (t *)(old), *(t *)(new), efault ## t))
^
arch/x86/include/asm/uaccess.h:629:11: note: expanded from macro '__try_cmpxchg_user'
__ret = !unsafe_try_cmpxchg_user(_ptr, _oldp, _nval, _label); \
^
arch/x86/include/asm/uaccess.h:614:18: note: expanded from macro 'unsafe_try_cmpxchg_user'
case 4: __ret = __try_cmpxchg_user_asm("l", "r", \
^
arch/x86/include/asm/uaccess.h:467:22: note: expanded from macro '__try_cmpxchg_user_asm'
[old] "+a" (__old) \
^
3 errors generated.
vim +7213 arch/x86/kvm/x86.c
7157
7158 #define emulator_try_cmpxchg_user(t, ptr, old, new) \
7159 (__try_cmpxchg_user((t *)(ptr), (t *)(old), *(t *)(new), efault ## t))
7160
7161 static int emulator_cmpxchg_emulated(struct x86_emulate_ctxt *ctxt,
7162 unsigned long addr,
7163 const void *old,
7164 const void *new,
7165 unsigned int bytes,
7166 struct x86_exception *exception)
7167 {
7168 struct kvm_vcpu *vcpu = emul_to_vcpu(ctxt);
7169 u64 page_line_mask;
7170 unsigned long hva;
7171 gpa_t gpa;
7172 int r;
7173
7174 /* guests cmpxchg8b have to be emulated atomically */
7175 if (bytes > 8 || (bytes & (bytes - 1)))
7176 goto emul_write;
7177
7178 gpa = kvm_mmu_gva_to_gpa_write(vcpu, addr, NULL);
7179
7180 if (gpa == UNMAPPED_GVA ||
7181 (gpa & PAGE_MASK) == APIC_DEFAULT_PHYS_BASE)
7182 goto emul_write;
7183
7184 /*
7185 * Emulate the atomic as a straight write to avoid #AC if SLD is
7186 * enabled in the host and the access splits a cache line.
7187 */
7188 if (boot_cpu_has(X86_FEATURE_SPLIT_LOCK_DETECT))
7189 page_line_mask = ~(cache_line_size() - 1);
7190 else
7191 page_line_mask = PAGE_MASK;
7192
7193 if (((gpa + bytes - 1) & page_line_mask) != (gpa & page_line_mask))
7194 goto emul_write;
7195
7196 hva = kvm_vcpu_gfn_to_hva(vcpu, gpa_to_gfn(gpa));
7197 if (kvm_is_error_hva(addr))
7198 goto emul_write;
7199
7200 hva += offset_in_page(gpa);
7201
7202 switch (bytes) {
7203 case 1:
7204 r = emulator_try_cmpxchg_user(u8, hva, old, new);
7205 break;
7206 case 2:
7207 r = emulator_try_cmpxchg_user(u16, hva, old, new);
7208 break;
7209 case 4:
7210 r = emulator_try_cmpxchg_user(u32, hva, old, new);
7211 break;
7212 case 8:
> 7213 r = emulator_try_cmpxchg_user(u64, hva, old, new);
7214 break;
7215 default:
7216 BUG();
7217 }
7218
7219 if (r < 0)
7220 goto emul_write;
7221 if (r)
7222 return X86EMUL_CMPXCHG_FAILED;
7223
7224 kvm_page_track_write(vcpu, gpa, new, bytes);
7225
7226 return X86EMUL_CONTINUE;
7227
7228 emul_write:
7229 printk_once(KERN_WARNING "kvm: emulating exchange as write\n");
7230
7231 return emulator_write_emulated(ctxt, addr, new, bytes, exception);
7232 }
7233
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
WARNING: multiple messages have this Message-ID (diff)
From: kernel test robot <lkp@intel.com>
To: kbuild-all@lists.01.org
Subject: Re: [PATCH 4/5] KVM: x86: Use __try_cmpxchg_user() to emulate atomic accesses
Date: Tue, 01 Feb 2022 17:25:00 +0800 [thread overview]
Message-ID: <202202011753.zksthphR-lkp@intel.com> (raw)
In-Reply-To: <20220201010838.1494405-5-seanjc@google.com>
[-- Attachment #1: Type: text/plain, Size: 6717 bytes --]
Hi Sean,
I love your patch! Yet something to improve:
[auto build test ERROR on 26291c54e111ff6ba87a164d85d4a4e134b7315c]
url: https://github.com/0day-ci/linux/commits/Sean-Christopherson/x86-uaccess-CMPXCHG-KVM-bug-fixes/20220201-091001
base: 26291c54e111ff6ba87a164d85d4a4e134b7315c
config: i386-randconfig-a002 (https://download.01.org/0day-ci/archive/20220201/202202011753.zksthphR-lkp(a)intel.com/config)
compiler: clang version 14.0.0 (https://github.com/llvm/llvm-project 6b1e844b69f15bb7dffaf9365cd2b355d2eb7579)
reproduce (this is a W=1 build):
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# https://github.com/0day-ci/linux/commit/5387711f4b49675e162ca30b05a3b2435326e5f9
git remote add linux-review https://github.com/0day-ci/linux
git fetch --no-tags linux-review Sean-Christopherson/x86-uaccess-CMPXCHG-KVM-bug-fixes/20220201-091001
git checkout 5387711f4b49675e162ca30b05a3b2435326e5f9
# save the config file to linux build tree
mkdir build_dir
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 O=build_dir ARCH=i386 SHELL=/bin/bash
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
All errors (new ones prefixed by >>):
>> arch/x86/kvm/x86.c:7213:7: error: invalid output size for constraint '+a'
r = emulator_try_cmpxchg_user(u64, hva, old, new);
^
arch/x86/kvm/x86.c:7159:3: note: expanded from macro 'emulator_try_cmpxchg_user'
(__try_cmpxchg_user((t *)(ptr), (t *)(old), *(t *)(new), efault ## t))
^
arch/x86/include/asm/uaccess.h:629:11: note: expanded from macro '__try_cmpxchg_user'
__ret = !unsafe_try_cmpxchg_user(_ptr, _oldp, _nval, _label); \
^
arch/x86/include/asm/uaccess.h:606:18: note: expanded from macro 'unsafe_try_cmpxchg_user'
case 1: __ret = __try_cmpxchg_user_asm("b", "q", \
^
arch/x86/include/asm/uaccess.h:467:22: note: expanded from macro '__try_cmpxchg_user_asm'
[old] "+a" (__old) \
^
>> arch/x86/kvm/x86.c:7213:7: error: invalid output size for constraint '+a'
arch/x86/kvm/x86.c:7159:3: note: expanded from macro 'emulator_try_cmpxchg_user'
(__try_cmpxchg_user((t *)(ptr), (t *)(old), *(t *)(new), efault ## t))
^
arch/x86/include/asm/uaccess.h:629:11: note: expanded from macro '__try_cmpxchg_user'
__ret = !unsafe_try_cmpxchg_user(_ptr, _oldp, _nval, _label); \
^
arch/x86/include/asm/uaccess.h:610:18: note: expanded from macro 'unsafe_try_cmpxchg_user'
case 2: __ret = __try_cmpxchg_user_asm("w", "r", \
^
arch/x86/include/asm/uaccess.h:467:22: note: expanded from macro '__try_cmpxchg_user_asm'
[old] "+a" (__old) \
^
>> arch/x86/kvm/x86.c:7213:7: error: invalid output size for constraint '+a'
arch/x86/kvm/x86.c:7159:3: note: expanded from macro 'emulator_try_cmpxchg_user'
(__try_cmpxchg_user((t *)(ptr), (t *)(old), *(t *)(new), efault ## t))
^
arch/x86/include/asm/uaccess.h:629:11: note: expanded from macro '__try_cmpxchg_user'
__ret = !unsafe_try_cmpxchg_user(_ptr, _oldp, _nval, _label); \
^
arch/x86/include/asm/uaccess.h:614:18: note: expanded from macro 'unsafe_try_cmpxchg_user'
case 4: __ret = __try_cmpxchg_user_asm("l", "r", \
^
arch/x86/include/asm/uaccess.h:467:22: note: expanded from macro '__try_cmpxchg_user_asm'
[old] "+a" (__old) \
^
3 errors generated.
vim +7213 arch/x86/kvm/x86.c
7157
7158 #define emulator_try_cmpxchg_user(t, ptr, old, new) \
7159 (__try_cmpxchg_user((t *)(ptr), (t *)(old), *(t *)(new), efault ## t))
7160
7161 static int emulator_cmpxchg_emulated(struct x86_emulate_ctxt *ctxt,
7162 unsigned long addr,
7163 const void *old,
7164 const void *new,
7165 unsigned int bytes,
7166 struct x86_exception *exception)
7167 {
7168 struct kvm_vcpu *vcpu = emul_to_vcpu(ctxt);
7169 u64 page_line_mask;
7170 unsigned long hva;
7171 gpa_t gpa;
7172 int r;
7173
7174 /* guests cmpxchg8b have to be emulated atomically */
7175 if (bytes > 8 || (bytes & (bytes - 1)))
7176 goto emul_write;
7177
7178 gpa = kvm_mmu_gva_to_gpa_write(vcpu, addr, NULL);
7179
7180 if (gpa == UNMAPPED_GVA ||
7181 (gpa & PAGE_MASK) == APIC_DEFAULT_PHYS_BASE)
7182 goto emul_write;
7183
7184 /*
7185 * Emulate the atomic as a straight write to avoid #AC if SLD is
7186 * enabled in the host and the access splits a cache line.
7187 */
7188 if (boot_cpu_has(X86_FEATURE_SPLIT_LOCK_DETECT))
7189 page_line_mask = ~(cache_line_size() - 1);
7190 else
7191 page_line_mask = PAGE_MASK;
7192
7193 if (((gpa + bytes - 1) & page_line_mask) != (gpa & page_line_mask))
7194 goto emul_write;
7195
7196 hva = kvm_vcpu_gfn_to_hva(vcpu, gpa_to_gfn(gpa));
7197 if (kvm_is_error_hva(addr))
7198 goto emul_write;
7199
7200 hva += offset_in_page(gpa);
7201
7202 switch (bytes) {
7203 case 1:
7204 r = emulator_try_cmpxchg_user(u8, hva, old, new);
7205 break;
7206 case 2:
7207 r = emulator_try_cmpxchg_user(u16, hva, old, new);
7208 break;
7209 case 4:
7210 r = emulator_try_cmpxchg_user(u32, hva, old, new);
7211 break;
7212 case 8:
> 7213 r = emulator_try_cmpxchg_user(u64, hva, old, new);
7214 break;
7215 default:
7216 BUG();
7217 }
7218
7219 if (r < 0)
7220 goto emul_write;
7221 if (r)
7222 return X86EMUL_CMPXCHG_FAILED;
7223
7224 kvm_page_track_write(vcpu, gpa, new, bytes);
7225
7226 return X86EMUL_CONTINUE;
7227
7228 emul_write:
7229 printk_once(KERN_WARNING "kvm: emulating exchange as write\n");
7230
7231 return emulator_write_emulated(ctxt, addr, new, bytes, exception);
7232 }
7233
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
next prev parent reply other threads:[~2022-02-01 9:25 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-02-01 1:08 [PATCH 0/5] x86: uaccess CMPXCHG + KVM bug fixes Sean Christopherson
2022-02-01 1:08 ` [PATCH 1/5] Kconfig: Add option for asm goto w/ tied outputs to workaround clang-13 bug Sean Christopherson
2022-02-01 20:16 ` Nick Desaulniers
2022-02-01 20:56 ` Sean Christopherson
2022-02-01 21:15 ` Nick Desaulniers
2022-02-01 1:08 ` [PATCH 2/5] x86/uaccess: Implement macros for CMPXCHG on user addresses Sean Christopherson
2022-02-01 1:08 ` [PATCH 3/5] KVM: x86: Use __try_cmpxchg_user() to update guest PTE A/D bits Sean Christopherson
2022-02-01 7:01 ` kernel test robot
2022-02-01 7:01 ` kernel test robot
2022-02-01 19:44 ` Sean Christopherson
2022-02-01 19:44 ` Sean Christopherson
2022-02-01 19:53 ` Nick Desaulniers
2022-02-01 19:53 ` Nick Desaulniers
2022-02-01 13:25 ` kernel test robot
2022-02-01 13:25 ` kernel test robot
2022-02-01 1:08 ` [PATCH 4/5] KVM: x86: Use __try_cmpxchg_user() to emulate atomic accesses Sean Christopherson
2022-02-01 9:25 ` kernel test robot [this message]
2022-02-01 9:25 ` kernel test robot
2022-02-01 1:08 ` [PATCH 5/5] KVM: x86: Bail to userspace if emulation of atomic user access faults Sean Christopherson
2022-02-01 17:09 ` [PATCH 0/5] x86: uaccess CMPXCHG + KVM bug fixes Tadeusz Struk
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=202202011753.zksthphR-lkp@intel.com \
--to=lkp@intel.com \
--cc=jmattson@google.com \
--cc=joro@8bytes.org \
--cc=kbuild-all@lists.01.org \
--cc=kvm@vger.kernel.org \
--cc=llvm@lists.linux.dev \
--cc=nathan@kernel.org \
--cc=ndesaulniers@google.com \
--cc=pbonzini@redhat.com \
--cc=seanjc@google.com \
--cc=vkuznets@redhat.com \
--cc=wanpengli@tencent.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.