All of lore.kernel.org
 help / color / mirror / Atom feed
From: kernel test robot <lkp@intel.com>
To: Huacai Chen <chenhc@lemote.com>
Cc: kbuild-all@lists.01.org, clang-built-linux@googlegroups.com,
	linux-kernel@vger.kernel.org, Paolo Bonzini <pbonzini@redhat.com>,
	Aleksandar Markovic <aleksandar.qemu.devel@gmail.com>
Subject: arch/mips/kvm/emulate.c:946:23: warning: no previous prototype for function 'kvm_mips_emul_eret'
Date: Tue, 4 May 2021 05:05:23 +0800	[thread overview]
Message-ID: <202105040513.FKoNq7QG-lkp@intel.com> (raw)

[-- Attachment #1: Type: text/plain, Size: 40286 bytes --]

Hi Huacai,

First bad commit (maybe != root cause):

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head:   d835ff6c96ae6fa1ea474b0290a46e514ab6742b
commit: 0f78355c450835053fed85828c9d6526594c0921 KVM: MIPS: Enable KVM support for Loongson-3
date:   11 months ago
config: mips-randconfig-r026-20210504 (attached as .config)
compiler: clang version 13.0.0 (https://github.com/llvm/llvm-project 8f5a2a5836cc8e4c1def2bdeb022e7b496623439)
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
        # install mips cross compiling tool for clang build
        # apt-get install binutils-mips-linux-gnu
        # https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=0f78355c450835053fed85828c9d6526594c0921
        git remote add linus https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
        git fetch --no-tags linus master
        git checkout 0f78355c450835053fed85828c9d6526594c0921
        # save the attached .config to linux build tree
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 ARCH=mips 

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>

All warnings (new ones prefixed by >>):

   In file included from include/linux/thread_info.h:38:
   In file included from arch/mips/include/asm/thread_info.h:16:
   In file included from arch/mips/include/asm/processor.h:14:
   In file included from include/linux/atomic.h:7:
   arch/mips/include/asm/atomic.h:262:1: warning: converting the result of '<<' to a boolean always evaluates to true [-Wtautological-constant-compare]
   ATOMIC_SIP_OP(atomic64, s64, dsubu, lld, scd)
   ^
   arch/mips/include/asm/atomic.h:252:7: note: expanded from macro 'ATOMIC_SIP_OP'
           if (!__SYNC_loongson3_war)                                      \
                ^
   arch/mips/include/asm/sync.h:147:34: note: expanded from macro '__SYNC_loongson3_war'
   # define __SYNC_loongson3_war   (1 << 31)
                                      ^
   In file included from arch/mips/kvm/emulate.c:14:
   In file included from include/linux/ktime.h:24:
   In file included from include/linux/time.h:6:
   In file included from include/linux/seqlock.h:36:
   In file included from include/linux/spinlock.h:83:
   In file included from include/linux/spinlock_types.h:18:
   In file included from include/linux/lockdep.h:44:
   include/linux/debug_locks.h:17:9: warning: converting the result of '<<' to a boolean always evaluates to true [-Wtautological-constant-compare]
           return xchg(&debug_locks, 0);
                  ^
   arch/mips/include/asm/cmpxchg.h:102:7: note: expanded from macro 'xchg'
           if (!__SYNC_loongson3_war)                                      \
                ^
   arch/mips/include/asm/sync.h:147:34: note: expanded from macro '__SYNC_loongson3_war'
   # define __SYNC_loongson3_war   (1 << 31)
                                      ^
   In file included from arch/mips/kvm/emulate.c:14:
   In file included from include/linux/ktime.h:24:
   In file included from include/linux/time.h:74:
   In file included from include/linux/time32.h:13:
   In file included from include/linux/timex.h:65:
   In file included from arch/mips/include/asm/timex.h:19:
   In file included from arch/mips/include/asm/cpu-type.h:12:
   In file included from include/linux/smp.h:15:
   include/linux/llist.h:222:9: warning: converting the result of '<<' to a boolean always evaluates to true [-Wtautological-constant-compare]
           return xchg(&head->first, NULL);
                  ^
   arch/mips/include/asm/cmpxchg.h:102:7: note: expanded from macro 'xchg'
           if (!__SYNC_loongson3_war)                                      \
                ^
   arch/mips/include/asm/sync.h:147:34: note: expanded from macro '__SYNC_loongson3_war'
   # define __SYNC_loongson3_war   (1 << 31)
                                      ^
   In file included from arch/mips/kvm/emulate.c:15:
   In file included from include/linux/kvm_host.h:14:
   In file included from include/linux/mm.h:95:
   arch/mips/include/asm/pgtable.h:210:3: warning: converting the result of '<<' to a boolean always evaluates to true [-Wtautological-constant-compare]
                   cmpxchg64(&buddy->pte, 0, _PAGE_GLOBAL);
                   ^
   arch/mips/include/asm/cmpxchg.h:220:2: note: expanded from macro 'cmpxchg64'
           cmpxchg((ptr), (o), (n));                                       \
           ^
   arch/mips/include/asm/cmpxchg.h:194:7: note: expanded from macro 'cmpxchg'
           if (!__SYNC_loongson3_war)                                      \
                ^
   arch/mips/include/asm/sync.h:147:34: note: expanded from macro '__SYNC_loongson3_war'
   # define __SYNC_loongson3_war   (1 << 31)
                                      ^
   In file included from arch/mips/kvm/emulate.c:15:
   In file included from include/linux/kvm_host.h:14:
   In file included from include/linux/mm.h:95:
   arch/mips/include/asm/pgtable.h:210:3: warning: converting the result of '<<' to a boolean always evaluates to true [-Wtautological-constant-compare]
   arch/mips/include/asm/cmpxchg.h:220:2: note: expanded from macro 'cmpxchg64'
           cmpxchg((ptr), (o), (n));                                       \
           ^
   arch/mips/include/asm/cmpxchg.h:204:7: note: expanded from macro 'cmpxchg'
           if (!__SYNC_loongson3_war)                                      \
                ^
   arch/mips/include/asm/sync.h:147:34: note: expanded from macro '__SYNC_loongson3_war'
   # define __SYNC_loongson3_war   (1 << 31)
                                      ^
   In file included from arch/mips/kvm/emulate.c:15:
   include/linux/kvm_host.h:331:9: warning: converting the result of '<<' to a boolean always evaluates to true [-Wtautological-constant-compare]
           return cmpxchg(&vcpu->mode, IN_GUEST_MODE, EXITING_GUEST_MODE);
                  ^
   arch/mips/include/asm/cmpxchg.h:194:7: note: expanded from macro 'cmpxchg'
           if (!__SYNC_loongson3_war)                                      \
                ^
   arch/mips/include/asm/sync.h:147:34: note: expanded from macro '__SYNC_loongson3_war'
   # define __SYNC_loongson3_war   (1 << 31)
                                      ^
   In file included from arch/mips/kvm/emulate.c:15:
   include/linux/kvm_host.h:331:9: warning: converting the result of '<<' to a boolean always evaluates to true [-Wtautological-constant-compare]
   arch/mips/include/asm/cmpxchg.h:204:7: note: expanded from macro 'cmpxchg'
           if (!__SYNC_loongson3_war)                                      \
                ^
   arch/mips/include/asm/sync.h:147:34: note: expanded from macro '__SYNC_loongson3_war'
   # define __SYNC_loongson3_war   (1 << 31)
                                      ^
   In file included from arch/mips/kvm/emulate.c:24:
   In file included from arch/mips/include/asm/mmu_context.h:23:
   arch/mips/include/asm/ginvt.h:41:20: warning: shifting a negative signed value is undefined [-Wshift-negative-value]
           addr &= PAGE_MASK << 1;
                   ~~~~~~~~~ ^
   arch/mips/include/asm/ginvt.h:52:20: warning: shifting a negative signed value is undefined [-Wshift-negative-value]
           addr &= PAGE_MASK << 1;
                   ~~~~~~~~~ ^
>> arch/mips/kvm/emulate.c:946:23: warning: no previous prototype for function 'kvm_mips_emul_eret' [-Wmissing-prototypes]
   enum emulation_result kvm_mips_emul_eret(struct kvm_vcpu *vcpu)
                         ^
   arch/mips/kvm/emulate.c:946:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
   enum emulation_result kvm_mips_emul_eret(struct kvm_vcpu *vcpu)
   ^
   static 
>> arch/mips/kvm/emulate.c:1029:23: warning: no previous prototype for function 'kvm_mips_emul_tlbr' [-Wmissing-prototypes]
   enum emulation_result kvm_mips_emul_tlbr(struct kvm_vcpu *vcpu)
                         ^
   arch/mips/kvm/emulate.c:1029:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
   enum emulation_result kvm_mips_emul_tlbr(struct kvm_vcpu *vcpu)
   ^
   static 
>> arch/mips/kvm/emulate.c:1102:23: warning: no previous prototype for function 'kvm_mips_emul_tlbwi' [-Wmissing-prototypes]
   enum emulation_result kvm_mips_emul_tlbwi(struct kvm_vcpu *vcpu)
                         ^
   arch/mips/kvm/emulate.c:1102:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
   enum emulation_result kvm_mips_emul_tlbwi(struct kvm_vcpu *vcpu)
   ^
   static 
>> arch/mips/kvm/emulate.c:1138:23: warning: no previous prototype for function 'kvm_mips_emul_tlbwr' [-Wmissing-prototypes]
   enum emulation_result kvm_mips_emul_tlbwr(struct kvm_vcpu *vcpu)
                         ^
   arch/mips/kvm/emulate.c:1138:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
   enum emulation_result kvm_mips_emul_tlbwr(struct kvm_vcpu *vcpu)
   ^
   static 
>> arch/mips/kvm/emulate.c:1163:23: warning: no previous prototype for function 'kvm_mips_emul_tlbp' [-Wmissing-prototypes]
   enum emulation_result kvm_mips_emul_tlbp(struct kvm_vcpu *vcpu)
                         ^
   arch/mips/kvm/emulate.c:1163:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
   enum emulation_result kvm_mips_emul_tlbp(struct kvm_vcpu *vcpu)
   ^
   static 
   21 warnings generated.
   Assembler messages:
   Fatal error: invalid -march= option: `mips64r2'
   clang-13: error: assembler command failed with exit code 1 (use -v to see invocation)
--
           if (!__SYNC_loongson3_war)                                      \
                ^
   arch/mips/include/asm/sync.h:147:34: note: expanded from macro '__SYNC_loongson3_war'
   # define __SYNC_loongson3_war   (1 << 31)
                                      ^
   In file included from arch/mips/kvm/loongson_ipi.c:11:
   In file included from include/linux/kvm_host.h:7:
   In file included from include/linux/hardirq.h:5:
   In file included from include/linux/context_tracking_state.h:5:
   In file included from include/linux/percpu.h:6:
   In file included from include/linux/preempt.h:78:
   In file included from ./arch/mips/include/generated/asm/preempt.h:1:
   In file included from include/asm-generic/preempt.h:5:
   In file included from include/linux/thread_info.h:38:
   In file included from arch/mips/include/asm/thread_info.h:16:
   In file included from arch/mips/include/asm/processor.h:14:
   In file included from include/linux/atomic.h:7:
   arch/mips/include/asm/atomic.h:262:1: warning: converting the result of '<<' to a boolean always evaluates to true [-Wtautological-constant-compare]
   ATOMIC_SIP_OP(atomic64, s64, dsubu, lld, scd)
   ^
   arch/mips/include/asm/atomic.h:252:7: note: expanded from macro 'ATOMIC_SIP_OP'
           if (!__SYNC_loongson3_war)                                      \
                ^
   arch/mips/include/asm/sync.h:147:34: note: expanded from macro '__SYNC_loongson3_war'
   # define __SYNC_loongson3_war   (1 << 31)
                                      ^
   In file included from arch/mips/kvm/loongson_ipi.c:11:
   In file included from include/linux/kvm_host.h:7:
   In file included from include/linux/hardirq.h:5:
   In file included from include/linux/context_tracking_state.h:5:
   In file included from include/linux/percpu.h:7:
   In file included from include/linux/smp.h:15:
   include/linux/llist.h:222:9: warning: converting the result of '<<' to a boolean always evaluates to true [-Wtautological-constant-compare]
           return xchg(&head->first, NULL);
                  ^
   arch/mips/include/asm/cmpxchg.h:102:7: note: expanded from macro 'xchg'
           if (!__SYNC_loongson3_war)                                      \
                ^
   arch/mips/include/asm/sync.h:147:34: note: expanded from macro '__SYNC_loongson3_war'
   # define __SYNC_loongson3_war   (1 << 31)
                                      ^
   In file included from arch/mips/kvm/loongson_ipi.c:11:
   In file included from include/linux/kvm_host.h:7:
   In file included from include/linux/hardirq.h:7:
   In file included from include/linux/lockdep.h:44:
   include/linux/debug_locks.h:17:9: warning: converting the result of '<<' to a boolean always evaluates to true [-Wtautological-constant-compare]
           return xchg(&debug_locks, 0);
                  ^
   arch/mips/include/asm/cmpxchg.h:102:7: note: expanded from macro 'xchg'
           if (!__SYNC_loongson3_war)                                      \
                ^
   arch/mips/include/asm/sync.h:147:34: note: expanded from macro '__SYNC_loongson3_war'
   # define __SYNC_loongson3_war   (1 << 31)
                                      ^
   In file included from arch/mips/kvm/loongson_ipi.c:11:
   In file included from include/linux/kvm_host.h:14:
   In file included from include/linux/mm.h:95:
   arch/mips/include/asm/pgtable.h:210:3: warning: converting the result of '<<' to a boolean always evaluates to true [-Wtautological-constant-compare]
                   cmpxchg64(&buddy->pte, 0, _PAGE_GLOBAL);
                   ^
   arch/mips/include/asm/cmpxchg.h:220:2: note: expanded from macro 'cmpxchg64'
           cmpxchg((ptr), (o), (n));                                       \
           ^
   arch/mips/include/asm/cmpxchg.h:194:7: note: expanded from macro 'cmpxchg'
           if (!__SYNC_loongson3_war)                                      \
                ^
   arch/mips/include/asm/sync.h:147:34: note: expanded from macro '__SYNC_loongson3_war'
   # define __SYNC_loongson3_war   (1 << 31)
                                      ^
   In file included from arch/mips/kvm/loongson_ipi.c:11:
   In file included from include/linux/kvm_host.h:14:
   In file included from include/linux/mm.h:95:
   arch/mips/include/asm/pgtable.h:210:3: warning: converting the result of '<<' to a boolean always evaluates to true [-Wtautological-constant-compare]
   arch/mips/include/asm/cmpxchg.h:220:2: note: expanded from macro 'cmpxchg64'
           cmpxchg((ptr), (o), (n));                                       \
           ^
   arch/mips/include/asm/cmpxchg.h:204:7: note: expanded from macro 'cmpxchg'
           if (!__SYNC_loongson3_war)                                      \
                ^
   arch/mips/include/asm/sync.h:147:34: note: expanded from macro '__SYNC_loongson3_war'
   # define __SYNC_loongson3_war   (1 << 31)
                                      ^
   In file included from arch/mips/kvm/loongson_ipi.c:11:
   include/linux/kvm_host.h:331:9: warning: converting the result of '<<' to a boolean always evaluates to true [-Wtautological-constant-compare]
           return cmpxchg(&vcpu->mode, IN_GUEST_MODE, EXITING_GUEST_MODE);
                  ^
   arch/mips/include/asm/cmpxchg.h:194:7: note: expanded from macro 'cmpxchg'
           if (!__SYNC_loongson3_war)                                      \
                ^
   arch/mips/include/asm/sync.h:147:34: note: expanded from macro '__SYNC_loongson3_war'
   # define __SYNC_loongson3_war   (1 << 31)
                                      ^
   In file included from arch/mips/kvm/loongson_ipi.c:11:
   include/linux/kvm_host.h:331:9: warning: converting the result of '<<' to a boolean always evaluates to true [-Wtautological-constant-compare]
   arch/mips/include/asm/cmpxchg.h:204:7: note: expanded from macro 'cmpxchg'
           if (!__SYNC_loongson3_war)                                      \
                ^
   arch/mips/include/asm/sync.h:147:34: note: expanded from macro '__SYNC_loongson3_war'
   # define __SYNC_loongson3_war   (1 << 31)
                                      ^
>> arch/mips/kvm/loongson_ipi.c:190:6: warning: no previous prototype for function 'kvm_init_loongson_ipi' [-Wmissing-prototypes]
   void kvm_init_loongson_ipi(struct kvm *kvm)
        ^
   arch/mips/kvm/loongson_ipi.c:190:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
   void kvm_init_loongson_ipi(struct kvm *kvm)
   ^
   static 
   15 warnings generated.
   Assembler messages:
   Fatal error: invalid -march= option: `mips64r2'
   clang-13: error: assembler command failed with exit code 1 (use -v to see invocation)


vim +/kvm_mips_emul_eret +946 arch/mips/kvm/emulate.c

e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21   945  
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21  @946  enum emulation_result kvm_mips_emul_eret(struct kvm_vcpu *vcpu)
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21   947  {
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21   948  	struct mips_coproc *cop0 = vcpu->arch.cop0;
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21   949  	enum emulation_result er = EMULATE_DONE;
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21   950  
ede5f3e7b54a43 arch/mips/kvm/emulate.c       James Hogan   2016-10-25   951  	if (kvm_read_c0_guest_status(cop0) & ST0_ERL) {
ede5f3e7b54a43 arch/mips/kvm/emulate.c       James Hogan   2016-10-25   952  		kvm_clear_c0_guest_status(cop0, ST0_ERL);
ede5f3e7b54a43 arch/mips/kvm/emulate.c       James Hogan   2016-10-25   953  		vcpu->arch.pc = kvm_read_c0_guest_errorepc(cop0);
ede5f3e7b54a43 arch/mips/kvm/emulate.c       James Hogan   2016-10-25   954  	} else if (kvm_read_c0_guest_status(cop0) & ST0_EXL) {
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21   955  		kvm_debug("[%#lx] ERET to %#lx\n", vcpu->arch.pc,
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21   956  			  kvm_read_c0_guest_epc(cop0));
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21   957  		kvm_clear_c0_guest_status(cop0, ST0_EXL);
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21   958  		vcpu->arch.pc = kvm_read_c0_guest_epc(cop0);
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21   959  
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21   960  	} else {
6ad78a5c75c5bc arch/mips/kvm/kvm_mips_emul.c Dengcheng Zhu 2014-06-26   961  		kvm_err("[%#lx] ERET when MIPS_SR_EXL|MIPS_SR_ERL == 0\n",
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21   962  			vcpu->arch.pc);
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21   963  		er = EMULATE_FAIL;
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21   964  	}
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21   965  
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21   966  	return er;
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21   967  }
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21   968  
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21   969  enum emulation_result kvm_mips_emul_wait(struct kvm_vcpu *vcpu)
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21   970  {
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21   971  	kvm_debug("[%#lx] !!!WAIT!!! (%#lx)\n", vcpu->arch.pc,
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21   972  		  vcpu->arch.pending_exceptions);
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21   973  
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21   974  	++vcpu->stat.wait_exits;
1e09e86ac13747 arch/mips/kvm/emulate.c       James Hogan   2016-06-14   975  	trace_kvm_exit(vcpu, KVM_TRACE_EXIT_WAIT);
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21   976  	if (!vcpu->arch.pending_exceptions) {
f4474d50c7d483 arch/mips/kvm/emulate.c       James Hogan   2017-03-14   977  		kvm_vz_lose_htimer(vcpu);
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21   978  		vcpu->arch.wait = 1;
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21   979  		kvm_vcpu_block(vcpu);
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21   980  
d116e812f9026e arch/mips/kvm/kvm_mips_emul.c Dengcheng Zhu 2014-06-26   981  		/*
d116e812f9026e arch/mips/kvm/kvm_mips_emul.c Dengcheng Zhu 2014-06-26   982  		 * We we are runnable, then definitely go off to user space to
d116e812f9026e arch/mips/kvm/kvm_mips_emul.c Dengcheng Zhu 2014-06-26   983  		 * check if any I/O interrupts are pending.
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21   984  		 */
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21   985  		if (kvm_check_request(KVM_REQ_UNHALT, vcpu)) {
72875d8a4d92f6 arch/mips/kvm/emulate.c       Radim Krčmář  2017-04-26   986  			kvm_clear_request(KVM_REQ_UNHALT, vcpu);
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21   987  			vcpu->run->exit_reason = KVM_EXIT_IRQ_WINDOW_OPEN;
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21   988  		}
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21   989  	}
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21   990  
d98403a525fe16 arch/mips/kvm/kvm_mips_emul.c Dengcheng Zhu 2014-06-26   991  	return EMULATE_DONE;
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21   992  }
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21   993  
dc44abd6aad224 arch/mips/kvm/emulate.c       James Hogan   2017-03-14   994  static void kvm_mips_change_entryhi(struct kvm_vcpu *vcpu,
dc44abd6aad224 arch/mips/kvm/emulate.c       James Hogan   2017-03-14   995  				    unsigned long entryhi)
dc44abd6aad224 arch/mips/kvm/emulate.c       James Hogan   2017-03-14   996  {
dc44abd6aad224 arch/mips/kvm/emulate.c       James Hogan   2017-03-14   997  	struct mips_coproc *cop0 = vcpu->arch.cop0;
dc44abd6aad224 arch/mips/kvm/emulate.c       James Hogan   2017-03-14   998  	struct mm_struct *kern_mm = &vcpu->arch.guest_kernel_mm;
dc44abd6aad224 arch/mips/kvm/emulate.c       James Hogan   2017-03-14   999  	int cpu, i;
dc44abd6aad224 arch/mips/kvm/emulate.c       James Hogan   2017-03-14  1000  	u32 nasid = entryhi & KVM_ENTRYHI_ASID;
dc44abd6aad224 arch/mips/kvm/emulate.c       James Hogan   2017-03-14  1001  
dc44abd6aad224 arch/mips/kvm/emulate.c       James Hogan   2017-03-14  1002  	if (((kvm_read_c0_guest_entryhi(cop0) & KVM_ENTRYHI_ASID) != nasid)) {
dc44abd6aad224 arch/mips/kvm/emulate.c       James Hogan   2017-03-14  1003  		trace_kvm_asid_change(vcpu, kvm_read_c0_guest_entryhi(cop0) &
dc44abd6aad224 arch/mips/kvm/emulate.c       James Hogan   2017-03-14  1004  				      KVM_ENTRYHI_ASID, nasid);
dc44abd6aad224 arch/mips/kvm/emulate.c       James Hogan   2017-03-14  1005  
d116e812f9026e arch/mips/kvm/kvm_mips_emul.c Dengcheng Zhu 2014-06-26  1006  		/*
dc44abd6aad224 arch/mips/kvm/emulate.c       James Hogan   2017-03-14  1007  		 * Flush entries from the GVA page tables.
dc44abd6aad224 arch/mips/kvm/emulate.c       James Hogan   2017-03-14  1008  		 * Guest user page table will get flushed lazily on re-entry to
dc44abd6aad224 arch/mips/kvm/emulate.c       James Hogan   2017-03-14  1009  		 * guest user if the guest ASID actually changes.
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21  1010  		 */
dc44abd6aad224 arch/mips/kvm/emulate.c       James Hogan   2017-03-14  1011  		kvm_mips_flush_gva_pt(kern_mm->pgd, KMF_KERN);
dc44abd6aad224 arch/mips/kvm/emulate.c       James Hogan   2017-03-14  1012  
dc44abd6aad224 arch/mips/kvm/emulate.c       James Hogan   2017-03-14  1013  		/*
dc44abd6aad224 arch/mips/kvm/emulate.c       James Hogan   2017-03-14  1014  		 * Regenerate/invalidate kernel MMU context.
dc44abd6aad224 arch/mips/kvm/emulate.c       James Hogan   2017-03-14  1015  		 * The user MMU context will be regenerated lazily on re-entry
dc44abd6aad224 arch/mips/kvm/emulate.c       James Hogan   2017-03-14  1016  		 * to guest user if the guest ASID actually changes.
dc44abd6aad224 arch/mips/kvm/emulate.c       James Hogan   2017-03-14  1017  		 */
dc44abd6aad224 arch/mips/kvm/emulate.c       James Hogan   2017-03-14  1018  		preempt_disable();
dc44abd6aad224 arch/mips/kvm/emulate.c       James Hogan   2017-03-14  1019  		cpu = smp_processor_id();
4739f7dd99d757 arch/mips/kvm/emulate.c       Paul Burton   2019-02-02  1020  		get_new_mmu_context(kern_mm);
dc44abd6aad224 arch/mips/kvm/emulate.c       James Hogan   2017-03-14  1021  		for_each_possible_cpu(i)
dc44abd6aad224 arch/mips/kvm/emulate.c       James Hogan   2017-03-14  1022  			if (i != cpu)
0b317c389c6771 arch/mips/kvm/emulate.c       Paul Burton   2019-02-02  1023  				set_cpu_context(i, kern_mm, 0);
dc44abd6aad224 arch/mips/kvm/emulate.c       James Hogan   2017-03-14  1024  		preempt_enable();
dc44abd6aad224 arch/mips/kvm/emulate.c       James Hogan   2017-03-14  1025  	}
dc44abd6aad224 arch/mips/kvm/emulate.c       James Hogan   2017-03-14  1026  	kvm_write_c0_guest_entryhi(cop0, entryhi);
dc44abd6aad224 arch/mips/kvm/emulate.c       James Hogan   2017-03-14  1027  }
dc44abd6aad224 arch/mips/kvm/emulate.c       James Hogan   2017-03-14  1028  
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21 @1029  enum emulation_result kvm_mips_emul_tlbr(struct kvm_vcpu *vcpu)
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21  1030  {
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21  1031  	struct mips_coproc *cop0 = vcpu->arch.cop0;
dc44abd6aad224 arch/mips/kvm/emulate.c       James Hogan   2017-03-14  1032  	struct kvm_mips_tlb *tlb;
8cffd197485122 arch/mips/kvm/emulate.c       James Hogan   2016-06-09  1033  	unsigned long pc = vcpu->arch.pc;
dc44abd6aad224 arch/mips/kvm/emulate.c       James Hogan   2017-03-14  1034  	int index;
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21  1035  
dc44abd6aad224 arch/mips/kvm/emulate.c       James Hogan   2017-03-14  1036  	index = kvm_read_c0_guest_index(cop0);
dc44abd6aad224 arch/mips/kvm/emulate.c       James Hogan   2017-03-14  1037  	if (index < 0 || index >= KVM_MIPS_GUEST_TLB_SIZE) {
dc44abd6aad224 arch/mips/kvm/emulate.c       James Hogan   2017-03-14  1038  		/* UNDEFINED */
dc44abd6aad224 arch/mips/kvm/emulate.c       James Hogan   2017-03-14  1039  		kvm_debug("[%#lx] TLBR Index %#x out of range\n", pc, index);
dc44abd6aad224 arch/mips/kvm/emulate.c       James Hogan   2017-03-14  1040  		index &= KVM_MIPS_GUEST_TLB_SIZE - 1;
dc44abd6aad224 arch/mips/kvm/emulate.c       James Hogan   2017-03-14  1041  	}
dc44abd6aad224 arch/mips/kvm/emulate.c       James Hogan   2017-03-14  1042  
dc44abd6aad224 arch/mips/kvm/emulate.c       James Hogan   2017-03-14  1043  	tlb = &vcpu->arch.guest_tlb[index];
dc44abd6aad224 arch/mips/kvm/emulate.c       James Hogan   2017-03-14  1044  	kvm_write_c0_guest_pagemask(cop0, tlb->tlb_mask);
dc44abd6aad224 arch/mips/kvm/emulate.c       James Hogan   2017-03-14  1045  	kvm_write_c0_guest_entrylo0(cop0, tlb->tlb_lo[0]);
dc44abd6aad224 arch/mips/kvm/emulate.c       James Hogan   2017-03-14  1046  	kvm_write_c0_guest_entrylo1(cop0, tlb->tlb_lo[1]);
dc44abd6aad224 arch/mips/kvm/emulate.c       James Hogan   2017-03-14  1047  	kvm_mips_change_entryhi(vcpu, tlb->tlb_hi);
dc44abd6aad224 arch/mips/kvm/emulate.c       James Hogan   2017-03-14  1048  
dc44abd6aad224 arch/mips/kvm/emulate.c       James Hogan   2017-03-14  1049  	return EMULATE_DONE;
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21  1050  }
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21  1051  
91e4f1b6073dd6 arch/mips/kvm/emulate.c       James Hogan   2016-09-15  1052  /**
91e4f1b6073dd6 arch/mips/kvm/emulate.c       James Hogan   2016-09-15  1053   * kvm_mips_invalidate_guest_tlb() - Indicates a change in guest MMU map.
91e4f1b6073dd6 arch/mips/kvm/emulate.c       James Hogan   2016-09-15  1054   * @vcpu:	VCPU with changed mappings.
91e4f1b6073dd6 arch/mips/kvm/emulate.c       James Hogan   2016-09-15  1055   * @tlb:	TLB entry being removed.
91e4f1b6073dd6 arch/mips/kvm/emulate.c       James Hogan   2016-09-15  1056   *
91e4f1b6073dd6 arch/mips/kvm/emulate.c       James Hogan   2016-09-15  1057   * This is called to indicate a single change in guest MMU mappings, so that we
91e4f1b6073dd6 arch/mips/kvm/emulate.c       James Hogan   2016-09-15  1058   * can arrange TLB flushes on this and other CPUs.
91e4f1b6073dd6 arch/mips/kvm/emulate.c       James Hogan   2016-09-15  1059   */
91e4f1b6073dd6 arch/mips/kvm/emulate.c       James Hogan   2016-09-15  1060  static void kvm_mips_invalidate_guest_tlb(struct kvm_vcpu *vcpu,
91e4f1b6073dd6 arch/mips/kvm/emulate.c       James Hogan   2016-09-15  1061  					  struct kvm_mips_tlb *tlb)
91e4f1b6073dd6 arch/mips/kvm/emulate.c       James Hogan   2016-09-15  1062  {
c550d53934d821 arch/mips/kvm/emulate.c       James Hogan   2016-10-11  1063  	struct mm_struct *kern_mm = &vcpu->arch.guest_kernel_mm;
c550d53934d821 arch/mips/kvm/emulate.c       James Hogan   2016-10-11  1064  	struct mm_struct *user_mm = &vcpu->arch.guest_user_mm;
91e4f1b6073dd6 arch/mips/kvm/emulate.c       James Hogan   2016-09-15  1065  	int cpu, i;
91e4f1b6073dd6 arch/mips/kvm/emulate.c       James Hogan   2016-09-15  1066  	bool user;
91e4f1b6073dd6 arch/mips/kvm/emulate.c       James Hogan   2016-09-15  1067  
91e4f1b6073dd6 arch/mips/kvm/emulate.c       James Hogan   2016-09-15  1068  	/* No need to flush for entries which are already invalid */
91e4f1b6073dd6 arch/mips/kvm/emulate.c       James Hogan   2016-09-15  1069  	if (!((tlb->tlb_lo[0] | tlb->tlb_lo[1]) & ENTRYLO_V))
91e4f1b6073dd6 arch/mips/kvm/emulate.c       James Hogan   2016-09-15  1070  		return;
aba8592950f1c6 arch/mips/kvm/emulate.c       James Hogan   2016-12-16  1071  	/* Don't touch host kernel page tables or TLB mappings */
aba8592950f1c6 arch/mips/kvm/emulate.c       James Hogan   2016-12-16  1072  	if ((unsigned long)tlb->tlb_hi > 0x7fffffff)
aba8592950f1c6 arch/mips/kvm/emulate.c       James Hogan   2016-12-16  1073  		return;
91e4f1b6073dd6 arch/mips/kvm/emulate.c       James Hogan   2016-09-15  1074  	/* User address space doesn't need flushing for KSeg2/3 changes */
91e4f1b6073dd6 arch/mips/kvm/emulate.c       James Hogan   2016-09-15  1075  	user = tlb->tlb_hi < KVM_GUEST_KSEG0;
91e4f1b6073dd6 arch/mips/kvm/emulate.c       James Hogan   2016-09-15  1076  
91e4f1b6073dd6 arch/mips/kvm/emulate.c       James Hogan   2016-09-15  1077  	preempt_disable();
91e4f1b6073dd6 arch/mips/kvm/emulate.c       James Hogan   2016-09-15  1078  
aba8592950f1c6 arch/mips/kvm/emulate.c       James Hogan   2016-12-16  1079  	/* Invalidate page table entries */
aba8592950f1c6 arch/mips/kvm/emulate.c       James Hogan   2016-12-16  1080  	kvm_trap_emul_invalidate_gva(vcpu, tlb->tlb_hi & VPN2_MASK, user);
aba8592950f1c6 arch/mips/kvm/emulate.c       James Hogan   2016-12-16  1081  
91e4f1b6073dd6 arch/mips/kvm/emulate.c       James Hogan   2016-09-15  1082  	/*
91e4f1b6073dd6 arch/mips/kvm/emulate.c       James Hogan   2016-09-15  1083  	 * Probe the shadow host TLB for the entry being overwritten, if one
91e4f1b6073dd6 arch/mips/kvm/emulate.c       James Hogan   2016-09-15  1084  	 * matches, invalidate it
91e4f1b6073dd6 arch/mips/kvm/emulate.c       James Hogan   2016-09-15  1085  	 */
57e3869cfaaec7 arch/mips/kvm/emulate.c       James Hogan   2016-10-08  1086  	kvm_mips_host_tlb_inv(vcpu, tlb->tlb_hi, user, true);
91e4f1b6073dd6 arch/mips/kvm/emulate.c       James Hogan   2016-09-15  1087  
91e4f1b6073dd6 arch/mips/kvm/emulate.c       James Hogan   2016-09-15  1088  	/* Invalidate the whole ASID on other CPUs */
91e4f1b6073dd6 arch/mips/kvm/emulate.c       James Hogan   2016-09-15  1089  	cpu = smp_processor_id();
91e4f1b6073dd6 arch/mips/kvm/emulate.c       James Hogan   2016-09-15  1090  	for_each_possible_cpu(i) {
91e4f1b6073dd6 arch/mips/kvm/emulate.c       James Hogan   2016-09-15  1091  		if (i == cpu)
91e4f1b6073dd6 arch/mips/kvm/emulate.c       James Hogan   2016-09-15  1092  			continue;
91e4f1b6073dd6 arch/mips/kvm/emulate.c       James Hogan   2016-09-15  1093  		if (user)
0b317c389c6771 arch/mips/kvm/emulate.c       Paul Burton   2019-02-02  1094  			set_cpu_context(i, user_mm, 0);
0b317c389c6771 arch/mips/kvm/emulate.c       Paul Burton   2019-02-02  1095  		set_cpu_context(i, kern_mm, 0);
91e4f1b6073dd6 arch/mips/kvm/emulate.c       James Hogan   2016-09-15  1096  	}
91e4f1b6073dd6 arch/mips/kvm/emulate.c       James Hogan   2016-09-15  1097  
91e4f1b6073dd6 arch/mips/kvm/emulate.c       James Hogan   2016-09-15  1098  	preempt_enable();
91e4f1b6073dd6 arch/mips/kvm/emulate.c       James Hogan   2016-09-15  1099  }
91e4f1b6073dd6 arch/mips/kvm/emulate.c       James Hogan   2016-09-15  1100  
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21  1101  /* Write Guest TLB Entry @ Index */
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21 @1102  enum emulation_result kvm_mips_emul_tlbwi(struct kvm_vcpu *vcpu)
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21  1103  {
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21  1104  	struct mips_coproc *cop0 = vcpu->arch.cop0;
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21  1105  	int index = kvm_read_c0_guest_index(cop0);
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21  1106  	struct kvm_mips_tlb *tlb = NULL;
8cffd197485122 arch/mips/kvm/emulate.c       James Hogan   2016-06-09  1107  	unsigned long pc = vcpu->arch.pc;
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21  1108  
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21  1109  	if (index < 0 || index >= KVM_MIPS_GUEST_TLB_SIZE) {
6ad78a5c75c5bc arch/mips/kvm/kvm_mips_emul.c Dengcheng Zhu 2014-06-26  1110  		kvm_debug("%s: illegal index: %d\n", __func__, index);
8cffd197485122 arch/mips/kvm/emulate.c       James Hogan   2016-06-09  1111  		kvm_debug("[%#lx] COP0_TLBWI [%d] (entryhi: %#lx, entrylo0: %#lx entrylo1: %#lx, mask: %#lx)\n",
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21  1112  			  pc, index, kvm_read_c0_guest_entryhi(cop0),
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21  1113  			  kvm_read_c0_guest_entrylo0(cop0),
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21  1114  			  kvm_read_c0_guest_entrylo1(cop0),
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21  1115  			  kvm_read_c0_guest_pagemask(cop0));
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21  1116  		index = (index & ~0x80000000) % KVM_MIPS_GUEST_TLB_SIZE;
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21  1117  	}
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21  1118  
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21  1119  	tlb = &vcpu->arch.guest_tlb[index];
91e4f1b6073dd6 arch/mips/kvm/emulate.c       James Hogan   2016-09-15  1120  
91e4f1b6073dd6 arch/mips/kvm/emulate.c       James Hogan   2016-09-15  1121  	kvm_mips_invalidate_guest_tlb(vcpu, tlb);
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21  1122  
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21  1123  	tlb->tlb_mask = kvm_read_c0_guest_pagemask(cop0);
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21  1124  	tlb->tlb_hi = kvm_read_c0_guest_entryhi(cop0);
9fbfb06a406577 arch/mips/kvm/emulate.c       James Hogan   2016-06-09  1125  	tlb->tlb_lo[0] = kvm_read_c0_guest_entrylo0(cop0);
9fbfb06a406577 arch/mips/kvm/emulate.c       James Hogan   2016-06-09  1126  	tlb->tlb_lo[1] = kvm_read_c0_guest_entrylo1(cop0);
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21  1127  
8cffd197485122 arch/mips/kvm/emulate.c       James Hogan   2016-06-09  1128  	kvm_debug("[%#lx] COP0_TLBWI [%d] (entryhi: %#lx, entrylo0: %#lx entrylo1: %#lx, mask: %#lx)\n",
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21  1129  		  pc, index, kvm_read_c0_guest_entryhi(cop0),
d116e812f9026e arch/mips/kvm/kvm_mips_emul.c Dengcheng Zhu 2014-06-26  1130  		  kvm_read_c0_guest_entrylo0(cop0),
d116e812f9026e arch/mips/kvm/kvm_mips_emul.c Dengcheng Zhu 2014-06-26  1131  		  kvm_read_c0_guest_entrylo1(cop0),
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21  1132  		  kvm_read_c0_guest_pagemask(cop0));
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21  1133  
d98403a525fe16 arch/mips/kvm/kvm_mips_emul.c Dengcheng Zhu 2014-06-26  1134  	return EMULATE_DONE;
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21  1135  }
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21  1136  
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21  1137  /* Write Guest TLB Entry @ Random Index */
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21 @1138  enum emulation_result kvm_mips_emul_tlbwr(struct kvm_vcpu *vcpu)
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21  1139  {
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21  1140  	struct mips_coproc *cop0 = vcpu->arch.cop0;
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21  1141  	struct kvm_mips_tlb *tlb = NULL;
8cffd197485122 arch/mips/kvm/emulate.c       James Hogan   2016-06-09  1142  	unsigned long pc = vcpu->arch.pc;
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21  1143  	int index;
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21  1144  
e6331a321aafcc arch/mips/kvm/emulate.c       Paul Burton   2019-03-22  1145  	index = prandom_u32_max(KVM_MIPS_GUEST_TLB_SIZE);
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21  1146  	tlb = &vcpu->arch.guest_tlb[index];
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21  1147  
91e4f1b6073dd6 arch/mips/kvm/emulate.c       James Hogan   2016-09-15  1148  	kvm_mips_invalidate_guest_tlb(vcpu, tlb);
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21  1149  
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21  1150  	tlb->tlb_mask = kvm_read_c0_guest_pagemask(cop0);
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21  1151  	tlb->tlb_hi = kvm_read_c0_guest_entryhi(cop0);
9fbfb06a406577 arch/mips/kvm/emulate.c       James Hogan   2016-06-09  1152  	tlb->tlb_lo[0] = kvm_read_c0_guest_entrylo0(cop0);
9fbfb06a406577 arch/mips/kvm/emulate.c       James Hogan   2016-06-09  1153  	tlb->tlb_lo[1] = kvm_read_c0_guest_entrylo1(cop0);
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21  1154  
8cffd197485122 arch/mips/kvm/emulate.c       James Hogan   2016-06-09  1155  	kvm_debug("[%#lx] COP0_TLBWR[%d] (entryhi: %#lx, entrylo0: %#lx entrylo1: %#lx)\n",
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21  1156  		  pc, index, kvm_read_c0_guest_entryhi(cop0),
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21  1157  		  kvm_read_c0_guest_entrylo0(cop0),
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21  1158  		  kvm_read_c0_guest_entrylo1(cop0));
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21  1159  
d98403a525fe16 arch/mips/kvm/kvm_mips_emul.c Dengcheng Zhu 2014-06-26  1160  	return EMULATE_DONE;
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21  1161  }
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21  1162  

:::::: The code at line 946 was first introduced by commit
:::::: e685c689f3a84e5e24a5867afc5e7b5857efa3e4 KVM/MIPS32: Privileged instruction/target branch emulation.

:::::: TO: Sanjay Lal <sanjayl@kymasys.com>
:::::: CC: Ralf Baechle <ralf@linux-mips.org>

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org

[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 32728 bytes --]

WARNING: multiple messages have this Message-ID (diff)
From: kernel test robot <lkp@intel.com>
To: kbuild-all@lists.01.org
Subject: arch/mips/kvm/emulate.c:946:23: warning: no previous prototype for function 'kvm_mips_emul_eret'
Date: Tue, 04 May 2021 05:05:23 +0800	[thread overview]
Message-ID: <202105040513.FKoNq7QG-lkp@intel.com> (raw)

[-- Attachment #1: Type: text/plain, Size: 40798 bytes --]

Hi Huacai,

First bad commit (maybe != root cause):

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head:   d835ff6c96ae6fa1ea474b0290a46e514ab6742b
commit: 0f78355c450835053fed85828c9d6526594c0921 KVM: MIPS: Enable KVM support for Loongson-3
date:   11 months ago
config: mips-randconfig-r026-20210504 (attached as .config)
compiler: clang version 13.0.0 (https://github.com/llvm/llvm-project 8f5a2a5836cc8e4c1def2bdeb022e7b496623439)
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
        # install mips cross compiling tool for clang build
        # apt-get install binutils-mips-linux-gnu
        # https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=0f78355c450835053fed85828c9d6526594c0921
        git remote add linus https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
        git fetch --no-tags linus master
        git checkout 0f78355c450835053fed85828c9d6526594c0921
        # save the attached .config to linux build tree
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 ARCH=mips 

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>

All warnings (new ones prefixed by >>):

   In file included from include/linux/thread_info.h:38:
   In file included from arch/mips/include/asm/thread_info.h:16:
   In file included from arch/mips/include/asm/processor.h:14:
   In file included from include/linux/atomic.h:7:
   arch/mips/include/asm/atomic.h:262:1: warning: converting the result of '<<' to a boolean always evaluates to true [-Wtautological-constant-compare]
   ATOMIC_SIP_OP(atomic64, s64, dsubu, lld, scd)
   ^
   arch/mips/include/asm/atomic.h:252:7: note: expanded from macro 'ATOMIC_SIP_OP'
           if (!__SYNC_loongson3_war)                                      \
                ^
   arch/mips/include/asm/sync.h:147:34: note: expanded from macro '__SYNC_loongson3_war'
   # define __SYNC_loongson3_war   (1 << 31)
                                      ^
   In file included from arch/mips/kvm/emulate.c:14:
   In file included from include/linux/ktime.h:24:
   In file included from include/linux/time.h:6:
   In file included from include/linux/seqlock.h:36:
   In file included from include/linux/spinlock.h:83:
   In file included from include/linux/spinlock_types.h:18:
   In file included from include/linux/lockdep.h:44:
   include/linux/debug_locks.h:17:9: warning: converting the result of '<<' to a boolean always evaluates to true [-Wtautological-constant-compare]
           return xchg(&debug_locks, 0);
                  ^
   arch/mips/include/asm/cmpxchg.h:102:7: note: expanded from macro 'xchg'
           if (!__SYNC_loongson3_war)                                      \
                ^
   arch/mips/include/asm/sync.h:147:34: note: expanded from macro '__SYNC_loongson3_war'
   # define __SYNC_loongson3_war   (1 << 31)
                                      ^
   In file included from arch/mips/kvm/emulate.c:14:
   In file included from include/linux/ktime.h:24:
   In file included from include/linux/time.h:74:
   In file included from include/linux/time32.h:13:
   In file included from include/linux/timex.h:65:
   In file included from arch/mips/include/asm/timex.h:19:
   In file included from arch/mips/include/asm/cpu-type.h:12:
   In file included from include/linux/smp.h:15:
   include/linux/llist.h:222:9: warning: converting the result of '<<' to a boolean always evaluates to true [-Wtautological-constant-compare]
           return xchg(&head->first, NULL);
                  ^
   arch/mips/include/asm/cmpxchg.h:102:7: note: expanded from macro 'xchg'
           if (!__SYNC_loongson3_war)                                      \
                ^
   arch/mips/include/asm/sync.h:147:34: note: expanded from macro '__SYNC_loongson3_war'
   # define __SYNC_loongson3_war   (1 << 31)
                                      ^
   In file included from arch/mips/kvm/emulate.c:15:
   In file included from include/linux/kvm_host.h:14:
   In file included from include/linux/mm.h:95:
   arch/mips/include/asm/pgtable.h:210:3: warning: converting the result of '<<' to a boolean always evaluates to true [-Wtautological-constant-compare]
                   cmpxchg64(&buddy->pte, 0, _PAGE_GLOBAL);
                   ^
   arch/mips/include/asm/cmpxchg.h:220:2: note: expanded from macro 'cmpxchg64'
           cmpxchg((ptr), (o), (n));                                       \
           ^
   arch/mips/include/asm/cmpxchg.h:194:7: note: expanded from macro 'cmpxchg'
           if (!__SYNC_loongson3_war)                                      \
                ^
   arch/mips/include/asm/sync.h:147:34: note: expanded from macro '__SYNC_loongson3_war'
   # define __SYNC_loongson3_war   (1 << 31)
                                      ^
   In file included from arch/mips/kvm/emulate.c:15:
   In file included from include/linux/kvm_host.h:14:
   In file included from include/linux/mm.h:95:
   arch/mips/include/asm/pgtable.h:210:3: warning: converting the result of '<<' to a boolean always evaluates to true [-Wtautological-constant-compare]
   arch/mips/include/asm/cmpxchg.h:220:2: note: expanded from macro 'cmpxchg64'
           cmpxchg((ptr), (o), (n));                                       \
           ^
   arch/mips/include/asm/cmpxchg.h:204:7: note: expanded from macro 'cmpxchg'
           if (!__SYNC_loongson3_war)                                      \
                ^
   arch/mips/include/asm/sync.h:147:34: note: expanded from macro '__SYNC_loongson3_war'
   # define __SYNC_loongson3_war   (1 << 31)
                                      ^
   In file included from arch/mips/kvm/emulate.c:15:
   include/linux/kvm_host.h:331:9: warning: converting the result of '<<' to a boolean always evaluates to true [-Wtautological-constant-compare]
           return cmpxchg(&vcpu->mode, IN_GUEST_MODE, EXITING_GUEST_MODE);
                  ^
   arch/mips/include/asm/cmpxchg.h:194:7: note: expanded from macro 'cmpxchg'
           if (!__SYNC_loongson3_war)                                      \
                ^
   arch/mips/include/asm/sync.h:147:34: note: expanded from macro '__SYNC_loongson3_war'
   # define __SYNC_loongson3_war   (1 << 31)
                                      ^
   In file included from arch/mips/kvm/emulate.c:15:
   include/linux/kvm_host.h:331:9: warning: converting the result of '<<' to a boolean always evaluates to true [-Wtautological-constant-compare]
   arch/mips/include/asm/cmpxchg.h:204:7: note: expanded from macro 'cmpxchg'
           if (!__SYNC_loongson3_war)                                      \
                ^
   arch/mips/include/asm/sync.h:147:34: note: expanded from macro '__SYNC_loongson3_war'
   # define __SYNC_loongson3_war   (1 << 31)
                                      ^
   In file included from arch/mips/kvm/emulate.c:24:
   In file included from arch/mips/include/asm/mmu_context.h:23:
   arch/mips/include/asm/ginvt.h:41:20: warning: shifting a negative signed value is undefined [-Wshift-negative-value]
           addr &= PAGE_MASK << 1;
                   ~~~~~~~~~ ^
   arch/mips/include/asm/ginvt.h:52:20: warning: shifting a negative signed value is undefined [-Wshift-negative-value]
           addr &= PAGE_MASK << 1;
                   ~~~~~~~~~ ^
>> arch/mips/kvm/emulate.c:946:23: warning: no previous prototype for function 'kvm_mips_emul_eret' [-Wmissing-prototypes]
   enum emulation_result kvm_mips_emul_eret(struct kvm_vcpu *vcpu)
                         ^
   arch/mips/kvm/emulate.c:946:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
   enum emulation_result kvm_mips_emul_eret(struct kvm_vcpu *vcpu)
   ^
   static 
>> arch/mips/kvm/emulate.c:1029:23: warning: no previous prototype for function 'kvm_mips_emul_tlbr' [-Wmissing-prototypes]
   enum emulation_result kvm_mips_emul_tlbr(struct kvm_vcpu *vcpu)
                         ^
   arch/mips/kvm/emulate.c:1029:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
   enum emulation_result kvm_mips_emul_tlbr(struct kvm_vcpu *vcpu)
   ^
   static 
>> arch/mips/kvm/emulate.c:1102:23: warning: no previous prototype for function 'kvm_mips_emul_tlbwi' [-Wmissing-prototypes]
   enum emulation_result kvm_mips_emul_tlbwi(struct kvm_vcpu *vcpu)
                         ^
   arch/mips/kvm/emulate.c:1102:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
   enum emulation_result kvm_mips_emul_tlbwi(struct kvm_vcpu *vcpu)
   ^
   static 
>> arch/mips/kvm/emulate.c:1138:23: warning: no previous prototype for function 'kvm_mips_emul_tlbwr' [-Wmissing-prototypes]
   enum emulation_result kvm_mips_emul_tlbwr(struct kvm_vcpu *vcpu)
                         ^
   arch/mips/kvm/emulate.c:1138:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
   enum emulation_result kvm_mips_emul_tlbwr(struct kvm_vcpu *vcpu)
   ^
   static 
>> arch/mips/kvm/emulate.c:1163:23: warning: no previous prototype for function 'kvm_mips_emul_tlbp' [-Wmissing-prototypes]
   enum emulation_result kvm_mips_emul_tlbp(struct kvm_vcpu *vcpu)
                         ^
   arch/mips/kvm/emulate.c:1163:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
   enum emulation_result kvm_mips_emul_tlbp(struct kvm_vcpu *vcpu)
   ^
   static 
   21 warnings generated.
   Assembler messages:
   Fatal error: invalid -march= option: `mips64r2'
   clang-13: error: assembler command failed with exit code 1 (use -v to see invocation)
--
           if (!__SYNC_loongson3_war)                                      \
                ^
   arch/mips/include/asm/sync.h:147:34: note: expanded from macro '__SYNC_loongson3_war'
   # define __SYNC_loongson3_war   (1 << 31)
                                      ^
   In file included from arch/mips/kvm/loongson_ipi.c:11:
   In file included from include/linux/kvm_host.h:7:
   In file included from include/linux/hardirq.h:5:
   In file included from include/linux/context_tracking_state.h:5:
   In file included from include/linux/percpu.h:6:
   In file included from include/linux/preempt.h:78:
   In file included from ./arch/mips/include/generated/asm/preempt.h:1:
   In file included from include/asm-generic/preempt.h:5:
   In file included from include/linux/thread_info.h:38:
   In file included from arch/mips/include/asm/thread_info.h:16:
   In file included from arch/mips/include/asm/processor.h:14:
   In file included from include/linux/atomic.h:7:
   arch/mips/include/asm/atomic.h:262:1: warning: converting the result of '<<' to a boolean always evaluates to true [-Wtautological-constant-compare]
   ATOMIC_SIP_OP(atomic64, s64, dsubu, lld, scd)
   ^
   arch/mips/include/asm/atomic.h:252:7: note: expanded from macro 'ATOMIC_SIP_OP'
           if (!__SYNC_loongson3_war)                                      \
                ^
   arch/mips/include/asm/sync.h:147:34: note: expanded from macro '__SYNC_loongson3_war'
   # define __SYNC_loongson3_war   (1 << 31)
                                      ^
   In file included from arch/mips/kvm/loongson_ipi.c:11:
   In file included from include/linux/kvm_host.h:7:
   In file included from include/linux/hardirq.h:5:
   In file included from include/linux/context_tracking_state.h:5:
   In file included from include/linux/percpu.h:7:
   In file included from include/linux/smp.h:15:
   include/linux/llist.h:222:9: warning: converting the result of '<<' to a boolean always evaluates to true [-Wtautological-constant-compare]
           return xchg(&head->first, NULL);
                  ^
   arch/mips/include/asm/cmpxchg.h:102:7: note: expanded from macro 'xchg'
           if (!__SYNC_loongson3_war)                                      \
                ^
   arch/mips/include/asm/sync.h:147:34: note: expanded from macro '__SYNC_loongson3_war'
   # define __SYNC_loongson3_war   (1 << 31)
                                      ^
   In file included from arch/mips/kvm/loongson_ipi.c:11:
   In file included from include/linux/kvm_host.h:7:
   In file included from include/linux/hardirq.h:7:
   In file included from include/linux/lockdep.h:44:
   include/linux/debug_locks.h:17:9: warning: converting the result of '<<' to a boolean always evaluates to true [-Wtautological-constant-compare]
           return xchg(&debug_locks, 0);
                  ^
   arch/mips/include/asm/cmpxchg.h:102:7: note: expanded from macro 'xchg'
           if (!__SYNC_loongson3_war)                                      \
                ^
   arch/mips/include/asm/sync.h:147:34: note: expanded from macro '__SYNC_loongson3_war'
   # define __SYNC_loongson3_war   (1 << 31)
                                      ^
   In file included from arch/mips/kvm/loongson_ipi.c:11:
   In file included from include/linux/kvm_host.h:14:
   In file included from include/linux/mm.h:95:
   arch/mips/include/asm/pgtable.h:210:3: warning: converting the result of '<<' to a boolean always evaluates to true [-Wtautological-constant-compare]
                   cmpxchg64(&buddy->pte, 0, _PAGE_GLOBAL);
                   ^
   arch/mips/include/asm/cmpxchg.h:220:2: note: expanded from macro 'cmpxchg64'
           cmpxchg((ptr), (o), (n));                                       \
           ^
   arch/mips/include/asm/cmpxchg.h:194:7: note: expanded from macro 'cmpxchg'
           if (!__SYNC_loongson3_war)                                      \
                ^
   arch/mips/include/asm/sync.h:147:34: note: expanded from macro '__SYNC_loongson3_war'
   # define __SYNC_loongson3_war   (1 << 31)
                                      ^
   In file included from arch/mips/kvm/loongson_ipi.c:11:
   In file included from include/linux/kvm_host.h:14:
   In file included from include/linux/mm.h:95:
   arch/mips/include/asm/pgtable.h:210:3: warning: converting the result of '<<' to a boolean always evaluates to true [-Wtautological-constant-compare]
   arch/mips/include/asm/cmpxchg.h:220:2: note: expanded from macro 'cmpxchg64'
           cmpxchg((ptr), (o), (n));                                       \
           ^
   arch/mips/include/asm/cmpxchg.h:204:7: note: expanded from macro 'cmpxchg'
           if (!__SYNC_loongson3_war)                                      \
                ^
   arch/mips/include/asm/sync.h:147:34: note: expanded from macro '__SYNC_loongson3_war'
   # define __SYNC_loongson3_war   (1 << 31)
                                      ^
   In file included from arch/mips/kvm/loongson_ipi.c:11:
   include/linux/kvm_host.h:331:9: warning: converting the result of '<<' to a boolean always evaluates to true [-Wtautological-constant-compare]
           return cmpxchg(&vcpu->mode, IN_GUEST_MODE, EXITING_GUEST_MODE);
                  ^
   arch/mips/include/asm/cmpxchg.h:194:7: note: expanded from macro 'cmpxchg'
           if (!__SYNC_loongson3_war)                                      \
                ^
   arch/mips/include/asm/sync.h:147:34: note: expanded from macro '__SYNC_loongson3_war'
   # define __SYNC_loongson3_war   (1 << 31)
                                      ^
   In file included from arch/mips/kvm/loongson_ipi.c:11:
   include/linux/kvm_host.h:331:9: warning: converting the result of '<<' to a boolean always evaluates to true [-Wtautological-constant-compare]
   arch/mips/include/asm/cmpxchg.h:204:7: note: expanded from macro 'cmpxchg'
           if (!__SYNC_loongson3_war)                                      \
                ^
   arch/mips/include/asm/sync.h:147:34: note: expanded from macro '__SYNC_loongson3_war'
   # define __SYNC_loongson3_war   (1 << 31)
                                      ^
>> arch/mips/kvm/loongson_ipi.c:190:6: warning: no previous prototype for function 'kvm_init_loongson_ipi' [-Wmissing-prototypes]
   void kvm_init_loongson_ipi(struct kvm *kvm)
        ^
   arch/mips/kvm/loongson_ipi.c:190:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
   void kvm_init_loongson_ipi(struct kvm *kvm)
   ^
   static 
   15 warnings generated.
   Assembler messages:
   Fatal error: invalid -march= option: `mips64r2'
   clang-13: error: assembler command failed with exit code 1 (use -v to see invocation)


vim +/kvm_mips_emul_eret +946 arch/mips/kvm/emulate.c

e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21   945  
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21  @946  enum emulation_result kvm_mips_emul_eret(struct kvm_vcpu *vcpu)
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21   947  {
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21   948  	struct mips_coproc *cop0 = vcpu->arch.cop0;
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21   949  	enum emulation_result er = EMULATE_DONE;
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21   950  
ede5f3e7b54a43 arch/mips/kvm/emulate.c       James Hogan   2016-10-25   951  	if (kvm_read_c0_guest_status(cop0) & ST0_ERL) {
ede5f3e7b54a43 arch/mips/kvm/emulate.c       James Hogan   2016-10-25   952  		kvm_clear_c0_guest_status(cop0, ST0_ERL);
ede5f3e7b54a43 arch/mips/kvm/emulate.c       James Hogan   2016-10-25   953  		vcpu->arch.pc = kvm_read_c0_guest_errorepc(cop0);
ede5f3e7b54a43 arch/mips/kvm/emulate.c       James Hogan   2016-10-25   954  	} else if (kvm_read_c0_guest_status(cop0) & ST0_EXL) {
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21   955  		kvm_debug("[%#lx] ERET to %#lx\n", vcpu->arch.pc,
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21   956  			  kvm_read_c0_guest_epc(cop0));
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21   957  		kvm_clear_c0_guest_status(cop0, ST0_EXL);
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21   958  		vcpu->arch.pc = kvm_read_c0_guest_epc(cop0);
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21   959  
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21   960  	} else {
6ad78a5c75c5bc arch/mips/kvm/kvm_mips_emul.c Dengcheng Zhu 2014-06-26   961  		kvm_err("[%#lx] ERET when MIPS_SR_EXL|MIPS_SR_ERL == 0\n",
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21   962  			vcpu->arch.pc);
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21   963  		er = EMULATE_FAIL;
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21   964  	}
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21   965  
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21   966  	return er;
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21   967  }
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21   968  
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21   969  enum emulation_result kvm_mips_emul_wait(struct kvm_vcpu *vcpu)
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21   970  {
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21   971  	kvm_debug("[%#lx] !!!WAIT!!! (%#lx)\n", vcpu->arch.pc,
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21   972  		  vcpu->arch.pending_exceptions);
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21   973  
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21   974  	++vcpu->stat.wait_exits;
1e09e86ac13747 arch/mips/kvm/emulate.c       James Hogan   2016-06-14   975  	trace_kvm_exit(vcpu, KVM_TRACE_EXIT_WAIT);
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21   976  	if (!vcpu->arch.pending_exceptions) {
f4474d50c7d483 arch/mips/kvm/emulate.c       James Hogan   2017-03-14   977  		kvm_vz_lose_htimer(vcpu);
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21   978  		vcpu->arch.wait = 1;
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21   979  		kvm_vcpu_block(vcpu);
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21   980  
d116e812f9026e arch/mips/kvm/kvm_mips_emul.c Dengcheng Zhu 2014-06-26   981  		/*
d116e812f9026e arch/mips/kvm/kvm_mips_emul.c Dengcheng Zhu 2014-06-26   982  		 * We we are runnable, then definitely go off to user space to
d116e812f9026e arch/mips/kvm/kvm_mips_emul.c Dengcheng Zhu 2014-06-26   983  		 * check if any I/O interrupts are pending.
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21   984  		 */
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21   985  		if (kvm_check_request(KVM_REQ_UNHALT, vcpu)) {
72875d8a4d92f6 arch/mips/kvm/emulate.c       Radim Krčmář  2017-04-26   986  			kvm_clear_request(KVM_REQ_UNHALT, vcpu);
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21   987  			vcpu->run->exit_reason = KVM_EXIT_IRQ_WINDOW_OPEN;
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21   988  		}
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21   989  	}
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21   990  
d98403a525fe16 arch/mips/kvm/kvm_mips_emul.c Dengcheng Zhu 2014-06-26   991  	return EMULATE_DONE;
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21   992  }
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21   993  
dc44abd6aad224 arch/mips/kvm/emulate.c       James Hogan   2017-03-14   994  static void kvm_mips_change_entryhi(struct kvm_vcpu *vcpu,
dc44abd6aad224 arch/mips/kvm/emulate.c       James Hogan   2017-03-14   995  				    unsigned long entryhi)
dc44abd6aad224 arch/mips/kvm/emulate.c       James Hogan   2017-03-14   996  {
dc44abd6aad224 arch/mips/kvm/emulate.c       James Hogan   2017-03-14   997  	struct mips_coproc *cop0 = vcpu->arch.cop0;
dc44abd6aad224 arch/mips/kvm/emulate.c       James Hogan   2017-03-14   998  	struct mm_struct *kern_mm = &vcpu->arch.guest_kernel_mm;
dc44abd6aad224 arch/mips/kvm/emulate.c       James Hogan   2017-03-14   999  	int cpu, i;
dc44abd6aad224 arch/mips/kvm/emulate.c       James Hogan   2017-03-14  1000  	u32 nasid = entryhi & KVM_ENTRYHI_ASID;
dc44abd6aad224 arch/mips/kvm/emulate.c       James Hogan   2017-03-14  1001  
dc44abd6aad224 arch/mips/kvm/emulate.c       James Hogan   2017-03-14  1002  	if (((kvm_read_c0_guest_entryhi(cop0) & KVM_ENTRYHI_ASID) != nasid)) {
dc44abd6aad224 arch/mips/kvm/emulate.c       James Hogan   2017-03-14  1003  		trace_kvm_asid_change(vcpu, kvm_read_c0_guest_entryhi(cop0) &
dc44abd6aad224 arch/mips/kvm/emulate.c       James Hogan   2017-03-14  1004  				      KVM_ENTRYHI_ASID, nasid);
dc44abd6aad224 arch/mips/kvm/emulate.c       James Hogan   2017-03-14  1005  
d116e812f9026e arch/mips/kvm/kvm_mips_emul.c Dengcheng Zhu 2014-06-26  1006  		/*
dc44abd6aad224 arch/mips/kvm/emulate.c       James Hogan   2017-03-14  1007  		 * Flush entries from the GVA page tables.
dc44abd6aad224 arch/mips/kvm/emulate.c       James Hogan   2017-03-14  1008  		 * Guest user page table will get flushed lazily on re-entry to
dc44abd6aad224 arch/mips/kvm/emulate.c       James Hogan   2017-03-14  1009  		 * guest user if the guest ASID actually changes.
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21  1010  		 */
dc44abd6aad224 arch/mips/kvm/emulate.c       James Hogan   2017-03-14  1011  		kvm_mips_flush_gva_pt(kern_mm->pgd, KMF_KERN);
dc44abd6aad224 arch/mips/kvm/emulate.c       James Hogan   2017-03-14  1012  
dc44abd6aad224 arch/mips/kvm/emulate.c       James Hogan   2017-03-14  1013  		/*
dc44abd6aad224 arch/mips/kvm/emulate.c       James Hogan   2017-03-14  1014  		 * Regenerate/invalidate kernel MMU context.
dc44abd6aad224 arch/mips/kvm/emulate.c       James Hogan   2017-03-14  1015  		 * The user MMU context will be regenerated lazily on re-entry
dc44abd6aad224 arch/mips/kvm/emulate.c       James Hogan   2017-03-14  1016  		 * to guest user if the guest ASID actually changes.
dc44abd6aad224 arch/mips/kvm/emulate.c       James Hogan   2017-03-14  1017  		 */
dc44abd6aad224 arch/mips/kvm/emulate.c       James Hogan   2017-03-14  1018  		preempt_disable();
dc44abd6aad224 arch/mips/kvm/emulate.c       James Hogan   2017-03-14  1019  		cpu = smp_processor_id();
4739f7dd99d757 arch/mips/kvm/emulate.c       Paul Burton   2019-02-02  1020  		get_new_mmu_context(kern_mm);
dc44abd6aad224 arch/mips/kvm/emulate.c       James Hogan   2017-03-14  1021  		for_each_possible_cpu(i)
dc44abd6aad224 arch/mips/kvm/emulate.c       James Hogan   2017-03-14  1022  			if (i != cpu)
0b317c389c6771 arch/mips/kvm/emulate.c       Paul Burton   2019-02-02  1023  				set_cpu_context(i, kern_mm, 0);
dc44abd6aad224 arch/mips/kvm/emulate.c       James Hogan   2017-03-14  1024  		preempt_enable();
dc44abd6aad224 arch/mips/kvm/emulate.c       James Hogan   2017-03-14  1025  	}
dc44abd6aad224 arch/mips/kvm/emulate.c       James Hogan   2017-03-14  1026  	kvm_write_c0_guest_entryhi(cop0, entryhi);
dc44abd6aad224 arch/mips/kvm/emulate.c       James Hogan   2017-03-14  1027  }
dc44abd6aad224 arch/mips/kvm/emulate.c       James Hogan   2017-03-14  1028  
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21 @1029  enum emulation_result kvm_mips_emul_tlbr(struct kvm_vcpu *vcpu)
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21  1030  {
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21  1031  	struct mips_coproc *cop0 = vcpu->arch.cop0;
dc44abd6aad224 arch/mips/kvm/emulate.c       James Hogan   2017-03-14  1032  	struct kvm_mips_tlb *tlb;
8cffd197485122 arch/mips/kvm/emulate.c       James Hogan   2016-06-09  1033  	unsigned long pc = vcpu->arch.pc;
dc44abd6aad224 arch/mips/kvm/emulate.c       James Hogan   2017-03-14  1034  	int index;
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21  1035  
dc44abd6aad224 arch/mips/kvm/emulate.c       James Hogan   2017-03-14  1036  	index = kvm_read_c0_guest_index(cop0);
dc44abd6aad224 arch/mips/kvm/emulate.c       James Hogan   2017-03-14  1037  	if (index < 0 || index >= KVM_MIPS_GUEST_TLB_SIZE) {
dc44abd6aad224 arch/mips/kvm/emulate.c       James Hogan   2017-03-14  1038  		/* UNDEFINED */
dc44abd6aad224 arch/mips/kvm/emulate.c       James Hogan   2017-03-14  1039  		kvm_debug("[%#lx] TLBR Index %#x out of range\n", pc, index);
dc44abd6aad224 arch/mips/kvm/emulate.c       James Hogan   2017-03-14  1040  		index &= KVM_MIPS_GUEST_TLB_SIZE - 1;
dc44abd6aad224 arch/mips/kvm/emulate.c       James Hogan   2017-03-14  1041  	}
dc44abd6aad224 arch/mips/kvm/emulate.c       James Hogan   2017-03-14  1042  
dc44abd6aad224 arch/mips/kvm/emulate.c       James Hogan   2017-03-14  1043  	tlb = &vcpu->arch.guest_tlb[index];
dc44abd6aad224 arch/mips/kvm/emulate.c       James Hogan   2017-03-14  1044  	kvm_write_c0_guest_pagemask(cop0, tlb->tlb_mask);
dc44abd6aad224 arch/mips/kvm/emulate.c       James Hogan   2017-03-14  1045  	kvm_write_c0_guest_entrylo0(cop0, tlb->tlb_lo[0]);
dc44abd6aad224 arch/mips/kvm/emulate.c       James Hogan   2017-03-14  1046  	kvm_write_c0_guest_entrylo1(cop0, tlb->tlb_lo[1]);
dc44abd6aad224 arch/mips/kvm/emulate.c       James Hogan   2017-03-14  1047  	kvm_mips_change_entryhi(vcpu, tlb->tlb_hi);
dc44abd6aad224 arch/mips/kvm/emulate.c       James Hogan   2017-03-14  1048  
dc44abd6aad224 arch/mips/kvm/emulate.c       James Hogan   2017-03-14  1049  	return EMULATE_DONE;
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21  1050  }
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21  1051  
91e4f1b6073dd6 arch/mips/kvm/emulate.c       James Hogan   2016-09-15  1052  /**
91e4f1b6073dd6 arch/mips/kvm/emulate.c       James Hogan   2016-09-15  1053   * kvm_mips_invalidate_guest_tlb() - Indicates a change in guest MMU map.
91e4f1b6073dd6 arch/mips/kvm/emulate.c       James Hogan   2016-09-15  1054   * @vcpu:	VCPU with changed mappings.
91e4f1b6073dd6 arch/mips/kvm/emulate.c       James Hogan   2016-09-15  1055   * @tlb:	TLB entry being removed.
91e4f1b6073dd6 arch/mips/kvm/emulate.c       James Hogan   2016-09-15  1056   *
91e4f1b6073dd6 arch/mips/kvm/emulate.c       James Hogan   2016-09-15  1057   * This is called to indicate a single change in guest MMU mappings, so that we
91e4f1b6073dd6 arch/mips/kvm/emulate.c       James Hogan   2016-09-15  1058   * can arrange TLB flushes on this and other CPUs.
91e4f1b6073dd6 arch/mips/kvm/emulate.c       James Hogan   2016-09-15  1059   */
91e4f1b6073dd6 arch/mips/kvm/emulate.c       James Hogan   2016-09-15  1060  static void kvm_mips_invalidate_guest_tlb(struct kvm_vcpu *vcpu,
91e4f1b6073dd6 arch/mips/kvm/emulate.c       James Hogan   2016-09-15  1061  					  struct kvm_mips_tlb *tlb)
91e4f1b6073dd6 arch/mips/kvm/emulate.c       James Hogan   2016-09-15  1062  {
c550d53934d821 arch/mips/kvm/emulate.c       James Hogan   2016-10-11  1063  	struct mm_struct *kern_mm = &vcpu->arch.guest_kernel_mm;
c550d53934d821 arch/mips/kvm/emulate.c       James Hogan   2016-10-11  1064  	struct mm_struct *user_mm = &vcpu->arch.guest_user_mm;
91e4f1b6073dd6 arch/mips/kvm/emulate.c       James Hogan   2016-09-15  1065  	int cpu, i;
91e4f1b6073dd6 arch/mips/kvm/emulate.c       James Hogan   2016-09-15  1066  	bool user;
91e4f1b6073dd6 arch/mips/kvm/emulate.c       James Hogan   2016-09-15  1067  
91e4f1b6073dd6 arch/mips/kvm/emulate.c       James Hogan   2016-09-15  1068  	/* No need to flush for entries which are already invalid */
91e4f1b6073dd6 arch/mips/kvm/emulate.c       James Hogan   2016-09-15  1069  	if (!((tlb->tlb_lo[0] | tlb->tlb_lo[1]) & ENTRYLO_V))
91e4f1b6073dd6 arch/mips/kvm/emulate.c       James Hogan   2016-09-15  1070  		return;
aba8592950f1c6 arch/mips/kvm/emulate.c       James Hogan   2016-12-16  1071  	/* Don't touch host kernel page tables or TLB mappings */
aba8592950f1c6 arch/mips/kvm/emulate.c       James Hogan   2016-12-16  1072  	if ((unsigned long)tlb->tlb_hi > 0x7fffffff)
aba8592950f1c6 arch/mips/kvm/emulate.c       James Hogan   2016-12-16  1073  		return;
91e4f1b6073dd6 arch/mips/kvm/emulate.c       James Hogan   2016-09-15  1074  	/* User address space doesn't need flushing for KSeg2/3 changes */
91e4f1b6073dd6 arch/mips/kvm/emulate.c       James Hogan   2016-09-15  1075  	user = tlb->tlb_hi < KVM_GUEST_KSEG0;
91e4f1b6073dd6 arch/mips/kvm/emulate.c       James Hogan   2016-09-15  1076  
91e4f1b6073dd6 arch/mips/kvm/emulate.c       James Hogan   2016-09-15  1077  	preempt_disable();
91e4f1b6073dd6 arch/mips/kvm/emulate.c       James Hogan   2016-09-15  1078  
aba8592950f1c6 arch/mips/kvm/emulate.c       James Hogan   2016-12-16  1079  	/* Invalidate page table entries */
aba8592950f1c6 arch/mips/kvm/emulate.c       James Hogan   2016-12-16  1080  	kvm_trap_emul_invalidate_gva(vcpu, tlb->tlb_hi & VPN2_MASK, user);
aba8592950f1c6 arch/mips/kvm/emulate.c       James Hogan   2016-12-16  1081  
91e4f1b6073dd6 arch/mips/kvm/emulate.c       James Hogan   2016-09-15  1082  	/*
91e4f1b6073dd6 arch/mips/kvm/emulate.c       James Hogan   2016-09-15  1083  	 * Probe the shadow host TLB for the entry being overwritten, if one
91e4f1b6073dd6 arch/mips/kvm/emulate.c       James Hogan   2016-09-15  1084  	 * matches, invalidate it
91e4f1b6073dd6 arch/mips/kvm/emulate.c       James Hogan   2016-09-15  1085  	 */
57e3869cfaaec7 arch/mips/kvm/emulate.c       James Hogan   2016-10-08  1086  	kvm_mips_host_tlb_inv(vcpu, tlb->tlb_hi, user, true);
91e4f1b6073dd6 arch/mips/kvm/emulate.c       James Hogan   2016-09-15  1087  
91e4f1b6073dd6 arch/mips/kvm/emulate.c       James Hogan   2016-09-15  1088  	/* Invalidate the whole ASID on other CPUs */
91e4f1b6073dd6 arch/mips/kvm/emulate.c       James Hogan   2016-09-15  1089  	cpu = smp_processor_id();
91e4f1b6073dd6 arch/mips/kvm/emulate.c       James Hogan   2016-09-15  1090  	for_each_possible_cpu(i) {
91e4f1b6073dd6 arch/mips/kvm/emulate.c       James Hogan   2016-09-15  1091  		if (i == cpu)
91e4f1b6073dd6 arch/mips/kvm/emulate.c       James Hogan   2016-09-15  1092  			continue;
91e4f1b6073dd6 arch/mips/kvm/emulate.c       James Hogan   2016-09-15  1093  		if (user)
0b317c389c6771 arch/mips/kvm/emulate.c       Paul Burton   2019-02-02  1094  			set_cpu_context(i, user_mm, 0);
0b317c389c6771 arch/mips/kvm/emulate.c       Paul Burton   2019-02-02  1095  		set_cpu_context(i, kern_mm, 0);
91e4f1b6073dd6 arch/mips/kvm/emulate.c       James Hogan   2016-09-15  1096  	}
91e4f1b6073dd6 arch/mips/kvm/emulate.c       James Hogan   2016-09-15  1097  
91e4f1b6073dd6 arch/mips/kvm/emulate.c       James Hogan   2016-09-15  1098  	preempt_enable();
91e4f1b6073dd6 arch/mips/kvm/emulate.c       James Hogan   2016-09-15  1099  }
91e4f1b6073dd6 arch/mips/kvm/emulate.c       James Hogan   2016-09-15  1100  
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21  1101  /* Write Guest TLB Entry @ Index */
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21 @1102  enum emulation_result kvm_mips_emul_tlbwi(struct kvm_vcpu *vcpu)
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21  1103  {
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21  1104  	struct mips_coproc *cop0 = vcpu->arch.cop0;
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21  1105  	int index = kvm_read_c0_guest_index(cop0);
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21  1106  	struct kvm_mips_tlb *tlb = NULL;
8cffd197485122 arch/mips/kvm/emulate.c       James Hogan   2016-06-09  1107  	unsigned long pc = vcpu->arch.pc;
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21  1108  
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21  1109  	if (index < 0 || index >= KVM_MIPS_GUEST_TLB_SIZE) {
6ad78a5c75c5bc arch/mips/kvm/kvm_mips_emul.c Dengcheng Zhu 2014-06-26  1110  		kvm_debug("%s: illegal index: %d\n", __func__, index);
8cffd197485122 arch/mips/kvm/emulate.c       James Hogan   2016-06-09  1111  		kvm_debug("[%#lx] COP0_TLBWI [%d] (entryhi: %#lx, entrylo0: %#lx entrylo1: %#lx, mask: %#lx)\n",
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21  1112  			  pc, index, kvm_read_c0_guest_entryhi(cop0),
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21  1113  			  kvm_read_c0_guest_entrylo0(cop0),
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21  1114  			  kvm_read_c0_guest_entrylo1(cop0),
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21  1115  			  kvm_read_c0_guest_pagemask(cop0));
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21  1116  		index = (index & ~0x80000000) % KVM_MIPS_GUEST_TLB_SIZE;
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21  1117  	}
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21  1118  
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21  1119  	tlb = &vcpu->arch.guest_tlb[index];
91e4f1b6073dd6 arch/mips/kvm/emulate.c       James Hogan   2016-09-15  1120  
91e4f1b6073dd6 arch/mips/kvm/emulate.c       James Hogan   2016-09-15  1121  	kvm_mips_invalidate_guest_tlb(vcpu, tlb);
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21  1122  
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21  1123  	tlb->tlb_mask = kvm_read_c0_guest_pagemask(cop0);
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21  1124  	tlb->tlb_hi = kvm_read_c0_guest_entryhi(cop0);
9fbfb06a406577 arch/mips/kvm/emulate.c       James Hogan   2016-06-09  1125  	tlb->tlb_lo[0] = kvm_read_c0_guest_entrylo0(cop0);
9fbfb06a406577 arch/mips/kvm/emulate.c       James Hogan   2016-06-09  1126  	tlb->tlb_lo[1] = kvm_read_c0_guest_entrylo1(cop0);
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21  1127  
8cffd197485122 arch/mips/kvm/emulate.c       James Hogan   2016-06-09  1128  	kvm_debug("[%#lx] COP0_TLBWI [%d] (entryhi: %#lx, entrylo0: %#lx entrylo1: %#lx, mask: %#lx)\n",
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21  1129  		  pc, index, kvm_read_c0_guest_entryhi(cop0),
d116e812f9026e arch/mips/kvm/kvm_mips_emul.c Dengcheng Zhu 2014-06-26  1130  		  kvm_read_c0_guest_entrylo0(cop0),
d116e812f9026e arch/mips/kvm/kvm_mips_emul.c Dengcheng Zhu 2014-06-26  1131  		  kvm_read_c0_guest_entrylo1(cop0),
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21  1132  		  kvm_read_c0_guest_pagemask(cop0));
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21  1133  
d98403a525fe16 arch/mips/kvm/kvm_mips_emul.c Dengcheng Zhu 2014-06-26  1134  	return EMULATE_DONE;
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21  1135  }
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21  1136  
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21  1137  /* Write Guest TLB Entry @ Random Index */
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21 @1138  enum emulation_result kvm_mips_emul_tlbwr(struct kvm_vcpu *vcpu)
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21  1139  {
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21  1140  	struct mips_coproc *cop0 = vcpu->arch.cop0;
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21  1141  	struct kvm_mips_tlb *tlb = NULL;
8cffd197485122 arch/mips/kvm/emulate.c       James Hogan   2016-06-09  1142  	unsigned long pc = vcpu->arch.pc;
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21  1143  	int index;
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21  1144  
e6331a321aafcc arch/mips/kvm/emulate.c       Paul Burton   2019-03-22  1145  	index = prandom_u32_max(KVM_MIPS_GUEST_TLB_SIZE);
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21  1146  	tlb = &vcpu->arch.guest_tlb[index];
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21  1147  
91e4f1b6073dd6 arch/mips/kvm/emulate.c       James Hogan   2016-09-15  1148  	kvm_mips_invalidate_guest_tlb(vcpu, tlb);
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21  1149  
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21  1150  	tlb->tlb_mask = kvm_read_c0_guest_pagemask(cop0);
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21  1151  	tlb->tlb_hi = kvm_read_c0_guest_entryhi(cop0);
9fbfb06a406577 arch/mips/kvm/emulate.c       James Hogan   2016-06-09  1152  	tlb->tlb_lo[0] = kvm_read_c0_guest_entrylo0(cop0);
9fbfb06a406577 arch/mips/kvm/emulate.c       James Hogan   2016-06-09  1153  	tlb->tlb_lo[1] = kvm_read_c0_guest_entrylo1(cop0);
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21  1154  
8cffd197485122 arch/mips/kvm/emulate.c       James Hogan   2016-06-09  1155  	kvm_debug("[%#lx] COP0_TLBWR[%d] (entryhi: %#lx, entrylo0: %#lx entrylo1: %#lx)\n",
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21  1156  		  pc, index, kvm_read_c0_guest_entryhi(cop0),
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21  1157  		  kvm_read_c0_guest_entrylo0(cop0),
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21  1158  		  kvm_read_c0_guest_entrylo1(cop0));
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21  1159  
d98403a525fe16 arch/mips/kvm/kvm_mips_emul.c Dengcheng Zhu 2014-06-26  1160  	return EMULATE_DONE;
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21  1161  }
e685c689f3a84e arch/mips/kvm/kvm_mips_emul.c Sanjay Lal    2012-11-21  1162  

:::::: The code at line 946 was first introduced by commit
:::::: e685c689f3a84e5e24a5867afc5e7b5857efa3e4 KVM/MIPS32: Privileged instruction/target branch emulation.

:::::: TO: Sanjay Lal <sanjayl@kymasys.com>
:::::: CC: Ralf Baechle <ralf@linux-mips.org>

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org

[-- Attachment #2: config.gz --]
[-- Type: application/gzip, Size: 32728 bytes --]

             reply	other threads:[~2021-05-03 21:05 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-05-03 21:05 kernel test robot [this message]
2021-05-03 21:05 ` arch/mips/kvm/emulate.c:946:23: warning: no previous prototype for function 'kvm_mips_emul_eret' kernel test robot

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=202105040513.FKoNq7QG-lkp@intel.com \
    --to=lkp@intel.com \
    --cc=aleksandar.qemu.devel@gmail.com \
    --cc=chenhc@lemote.com \
    --cc=clang-built-linux@googlegroups.com \
    --cc=kbuild-all@lists.01.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=pbonzini@redhat.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.