2020-01-10 03:15:23

by Alex Shi

[permalink] [raw]
Subject: [PATCH] KVM: remove unused guest_enter/exit

After commit 6edaa5307f3f ("KVM: remove kvm_guest_enter/exit wrappers")
no one uses guest_enter/exit anymore.

So better to remove them to simplify code and reduced a bit of object
size.

Signed-off-by: Alex Shi <[email protected]>
Cc: Paolo Bonzini <[email protected]>
Cc: Peter Zijlstra <[email protected]>
Cc: Ingo Molnar <[email protected]>
Cc: Frederic Weisbecker <[email protected]>
Cc: [email protected]
---
include/linux/context_tracking.h | 19 -------------------
1 file changed, 19 deletions(-)

diff --git a/include/linux/context_tracking.h b/include/linux/context_tracking.h
index 64ec82851aa3..238ada39ac2e 100644
--- a/include/linux/context_tracking.h
+++ b/include/linux/context_tracking.h
@@ -153,23 +153,4 @@ static inline void guest_exit_irqoff(void)
current->flags &= ~PF_VCPU;
}
#endif /* CONFIG_VIRT_CPU_ACCOUNTING_GEN */
-
-static inline void guest_enter(void)
-{
- unsigned long flags;
-
- local_irq_save(flags);
- guest_enter_irqoff();
- local_irq_restore(flags);
-}
-
-static inline void guest_exit(void)
-{
- unsigned long flags;
-
- local_irq_save(flags);
- guest_exit_irqoff();
- local_irq_restore(flags);
-}
-
#endif
--
1.8.3.1


2020-01-10 23:12:40

by kernel test robot

[permalink] [raw]
Subject: Re: [PATCH] KVM: remove unused guest_enter/exit

Hi Alex,

I love your patch! Yet something to improve:

[auto build test ERROR on kvm/linux-next]
[also build test ERROR on linux/master linus/master v5.5-rc5 next-20200110]
[if your patch is applied to the wrong git tree, please drop us a note to help
improve the system. BTW, we also suggest to use '--base' option to specify the
base tree in git format-patch, please see https://stackoverflow.com/a/37406982]

url: https://github.com/0day-ci/linux/commits/Alex-Shi/KVM-remove-unused-guest_enter-exit/20200111-004903
base: https://git.kernel.org/pub/scm/virt/kvm/kvm.git linux-next
config: powerpc-ppc64_defconfig (attached as .config)
compiler: powerpc64-linux-gcc (GCC) 7.5.0
reproduce:
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# save the attached .config to linux build tree
GCC_VERSION=7.5.0 make.cross ARCH=powerpc

If you fix the issue, kindly add following tag
Reported-by: kbuild test robot <[email protected]>

All errors (new ones prefixed by >>):

arch/powerpc/kvm/book3s_hv.c: In function 'kvmppc_run_core':
>> arch/powerpc/kvm/book3s_hv.c:3360:2: error: implicit declaration of function 'guest_exit'; did you mean 'user_exit'? [-Werror=implicit-function-declaration]
guest_exit();
^~~~~~~~~~
user_exit
cc1: all warnings being treated as errors

vim +3360 arch/powerpc/kvm/book3s_hv.c

8b24e69fc47e43 Paul Mackerras 2017-06-26 3040
371fefd6f2dc46 Paul Mackerras 2011-06-29 3041 /*
371fefd6f2dc46 Paul Mackerras 2011-06-29 3042 * Run a set of guest threads on a physical core.
371fefd6f2dc46 Paul Mackerras 2011-06-29 3043 * Called with vc->lock held.
371fefd6f2dc46 Paul Mackerras 2011-06-29 3044 */
66feed61cdf6ee Paul Mackerras 2015-03-28 3045 static noinline void kvmppc_run_core(struct kvmppc_vcore *vc)
371fefd6f2dc46 Paul Mackerras 2011-06-29 3046 {
7b5f8272c792d4 Suraj Jitindar Singh 2016-08-02 3047 struct kvm_vcpu *vcpu;
d911f0beddc2a9 Paul Mackerras 2015-03-28 3048 int i;
2c9097e4c13402 Paul Mackerras 2012-09-11 3049 int srcu_idx;
ec257165082616 Paul Mackerras 2015-06-24 3050 struct core_info core_info;
898b25b202f350 Paul Mackerras 2017-06-22 3051 struct kvmppc_vcore *pvc;
b4deba5c41e9f6 Paul Mackerras 2015-07-02 3052 struct kvm_split_mode split_info, *sip;
b4deba5c41e9f6 Paul Mackerras 2015-07-02 3053 int split, subcore_size, active;
b4deba5c41e9f6 Paul Mackerras 2015-07-02 3054 int sub;
b4deba5c41e9f6 Paul Mackerras 2015-07-02 3055 bool thr0_done;
b4deba5c41e9f6 Paul Mackerras 2015-07-02 3056 unsigned long cmd_bit, stat_bit;
ec257165082616 Paul Mackerras 2015-06-24 3057 int pcpu, thr;
ec257165082616 Paul Mackerras 2015-06-24 3058 int target_threads;
45c940ba490df2 Paul Mackerras 2016-11-18 3059 int controlled_threads;
8b24e69fc47e43 Paul Mackerras 2017-06-26 3060 int trap;
516f7898ae20d9 Paul Mackerras 2017-10-16 3061 bool is_power8;
c01015091a7703 Paul Mackerras 2017-10-19 3062 bool hpt_on_radix;
371fefd6f2dc46 Paul Mackerras 2011-06-29 3063
d911f0beddc2a9 Paul Mackerras 2015-03-28 3064 /*
d911f0beddc2a9 Paul Mackerras 2015-03-28 3065 * Remove from the list any threads that have a signal pending
d911f0beddc2a9 Paul Mackerras 2015-03-28 3066 * or need a VPA update done
d911f0beddc2a9 Paul Mackerras 2015-03-28 3067 */
d911f0beddc2a9 Paul Mackerras 2015-03-28 3068 prepare_threads(vc);
d911f0beddc2a9 Paul Mackerras 2015-03-28 3069
d911f0beddc2a9 Paul Mackerras 2015-03-28 3070 /* if the runner is no longer runnable, let the caller pick a new one */
d911f0beddc2a9 Paul Mackerras 2015-03-28 3071 if (vc->runner->arch.state != KVMPPC_VCPU_RUNNABLE)
913d3ff9a3c3a1 Paul Mackerras 2012-10-15 3072 return;
081f323bd3cc3a Paul Mackerras 2012-06-01 3073
081f323bd3cc3a Paul Mackerras 2012-06-01 3074 /*
d911f0beddc2a9 Paul Mackerras 2015-03-28 3075 * Initialize *vc.
081f323bd3cc3a Paul Mackerras 2012-06-01 3076 */
898b25b202f350 Paul Mackerras 2017-06-22 3077 init_vcore_to_run(vc);
2711e248a352d7 Paul Mackerras 2014-12-04 3078 vc->preempt_tb = TB_NIL;
081f323bd3cc3a Paul Mackerras 2012-06-01 3079
45c940ba490df2 Paul Mackerras 2016-11-18 3080 /*
45c940ba490df2 Paul Mackerras 2016-11-18 3081 * Number of threads that we will be controlling: the same as
45c940ba490df2 Paul Mackerras 2016-11-18 3082 * the number of threads per subcore, except on POWER9,
45c940ba490df2 Paul Mackerras 2016-11-18 3083 * where it's 1 because the threads are (mostly) independent.
45c940ba490df2 Paul Mackerras 2016-11-18 3084 */
516f7898ae20d9 Paul Mackerras 2017-10-16 3085 controlled_threads = threads_per_vcore(vc->kvm);
45c940ba490df2 Paul Mackerras 2016-11-18 3086
7b444c6710c6c4 Paul Mackerras 2012-10-15 3087 /*
3102f7843c7501 Michael Ellerman 2014-05-23 3088 * Make sure we are running on primary threads, and that secondary
3102f7843c7501 Michael Ellerman 2014-05-23 3089 * threads are offline. Also check if the number of threads in this
3102f7843c7501 Michael Ellerman 2014-05-23 3090 * guest are greater than the current system threads per guest.
c01015091a7703 Paul Mackerras 2017-10-19 3091 * On POWER9, we need to be not in independent-threads mode if
00608e1f007e4c Paul Mackerras 2018-01-11 3092 * this is a HPT guest on a radix host machine where the
00608e1f007e4c Paul Mackerras 2018-01-11 3093 * CPU threads may not be in different MMU modes.
7b444c6710c6c4 Paul Mackerras 2012-10-15 3094 */
00608e1f007e4c Paul Mackerras 2018-01-11 3095 hpt_on_radix = no_mixing_hpt_and_radix && radix_enabled() &&
00608e1f007e4c Paul Mackerras 2018-01-11 3096 !kvm_is_radix(vc->kvm);
c01015091a7703 Paul Mackerras 2017-10-19 3097 if (((controlled_threads > 1) &&
c01015091a7703 Paul Mackerras 2017-10-19 3098 ((vc->num_threads > threads_per_subcore) || !on_primary_thread())) ||
c01015091a7703 Paul Mackerras 2017-10-19 3099 (hpt_on_radix && vc->kvm->arch.threads_indep)) {
7b5f8272c792d4 Suraj Jitindar Singh 2016-08-02 3100 for_each_runnable_thread(i, vcpu, vc) {
7b444c6710c6c4 Paul Mackerras 2012-10-15 3101 vcpu->arch.ret = -EBUSY;
25fedfca94cfbf Paul Mackerras 2015-03-28 3102 kvmppc_remove_runnable(vc, vcpu);
25fedfca94cfbf Paul Mackerras 2015-03-28 3103 wake_up(&vcpu->arch.cpu_run);
25fedfca94cfbf Paul Mackerras 2015-03-28 3104 }
7b444c6710c6c4 Paul Mackerras 2012-10-15 3105 goto out;
7b444c6710c6c4 Paul Mackerras 2012-10-15 3106 }
7b444c6710c6c4 Paul Mackerras 2012-10-15 3107
ec257165082616 Paul Mackerras 2015-06-24 3108 /*
ec257165082616 Paul Mackerras 2015-06-24 3109 * See if we could run any other vcores on the physical core
ec257165082616 Paul Mackerras 2015-06-24 3110 * along with this one.
ec257165082616 Paul Mackerras 2015-06-24 3111 */
ec257165082616 Paul Mackerras 2015-06-24 3112 init_core_info(&core_info, vc);
ec257165082616 Paul Mackerras 2015-06-24 3113 pcpu = smp_processor_id();
45c940ba490df2 Paul Mackerras 2016-11-18 3114 target_threads = controlled_threads;
ec257165082616 Paul Mackerras 2015-06-24 3115 if (target_smt_mode && target_smt_mode < target_threads)
ec257165082616 Paul Mackerras 2015-06-24 3116 target_threads = target_smt_mode;
ec257165082616 Paul Mackerras 2015-06-24 3117 if (vc->num_threads < target_threads)
ec257165082616 Paul Mackerras 2015-06-24 3118 collect_piggybacks(&core_info, target_threads);
3102f7843c7501 Michael Ellerman 2014-05-23 3119
8b24e69fc47e43 Paul Mackerras 2017-06-26 3120 /*
8b24e69fc47e43 Paul Mackerras 2017-06-26 3121 * On radix, arrange for TLB flushing if necessary.
8b24e69fc47e43 Paul Mackerras 2017-06-26 3122 * This has to be done before disabling interrupts since
8b24e69fc47e43 Paul Mackerras 2017-06-26 3123 * it uses smp_call_function().
8b24e69fc47e43 Paul Mackerras 2017-06-26 3124 */
8b24e69fc47e43 Paul Mackerras 2017-06-26 3125 pcpu = smp_processor_id();
8b24e69fc47e43 Paul Mackerras 2017-06-26 3126 if (kvm_is_radix(vc->kvm)) {
8b24e69fc47e43 Paul Mackerras 2017-06-26 3127 for (sub = 0; sub < core_info.n_subcores; ++sub)
8b24e69fc47e43 Paul Mackerras 2017-06-26 3128 for_each_runnable_thread(i, vcpu, core_info.vc[sub])
8b24e69fc47e43 Paul Mackerras 2017-06-26 3129 kvmppc_prepare_radix_vcpu(vcpu, pcpu);
8b24e69fc47e43 Paul Mackerras 2017-06-26 3130 }
8b24e69fc47e43 Paul Mackerras 2017-06-26 3131
8b24e69fc47e43 Paul Mackerras 2017-06-26 3132 /*
8b24e69fc47e43 Paul Mackerras 2017-06-26 3133 * Hard-disable interrupts, and check resched flag and signals.
8b24e69fc47e43 Paul Mackerras 2017-06-26 3134 * If we need to reschedule or deliver a signal, clean up
8b24e69fc47e43 Paul Mackerras 2017-06-26 3135 * and return without going into the guest(s).
072df8130c6b60 Paul Mackerras 2017-11-09 3136 * If the mmu_ready flag has been cleared, don't go into the
38c53af853069a Paul Mackerras 2017-11-08 3137 * guest because that means a HPT resize operation is in progress.
8b24e69fc47e43 Paul Mackerras 2017-06-26 3138 */
8b24e69fc47e43 Paul Mackerras 2017-06-26 3139 local_irq_disable();
8b24e69fc47e43 Paul Mackerras 2017-06-26 3140 hard_irq_disable();
8b24e69fc47e43 Paul Mackerras 2017-06-26 3141 if (lazy_irq_pending() || need_resched() ||
d28eafc5a64045 Paul Mackerras 2019-08-27 3142 recheck_signals_and_mmu(&core_info)) {
8b24e69fc47e43 Paul Mackerras 2017-06-26 3143 local_irq_enable();
8b24e69fc47e43 Paul Mackerras 2017-06-26 3144 vc->vcore_state = VCORE_INACTIVE;
8b24e69fc47e43 Paul Mackerras 2017-06-26 3145 /* Unlock all except the primary vcore */
8b24e69fc47e43 Paul Mackerras 2017-06-26 3146 for (sub = 1; sub < core_info.n_subcores; ++sub) {
8b24e69fc47e43 Paul Mackerras 2017-06-26 3147 pvc = core_info.vc[sub];
8b24e69fc47e43 Paul Mackerras 2017-06-26 3148 /* Put back on to the preempted vcores list */
8b24e69fc47e43 Paul Mackerras 2017-06-26 3149 kvmppc_vcore_preempt(pvc);
8b24e69fc47e43 Paul Mackerras 2017-06-26 3150 spin_unlock(&pvc->lock);
8b24e69fc47e43 Paul Mackerras 2017-06-26 3151 }
8b24e69fc47e43 Paul Mackerras 2017-06-26 3152 for (i = 0; i < controlled_threads; ++i)
8b24e69fc47e43 Paul Mackerras 2017-06-26 3153 kvmppc_release_hwthread(pcpu + i);
8b24e69fc47e43 Paul Mackerras 2017-06-26 3154 return;
8b24e69fc47e43 Paul Mackerras 2017-06-26 3155 }
8b24e69fc47e43 Paul Mackerras 2017-06-26 3156
8b24e69fc47e43 Paul Mackerras 2017-06-26 3157 kvmppc_clear_host_core(pcpu);
8b24e69fc47e43 Paul Mackerras 2017-06-26 3158
b4deba5c41e9f6 Paul Mackerras 2015-07-02 3159 /* Decide on micro-threading (split-core) mode */
b4deba5c41e9f6 Paul Mackerras 2015-07-02 3160 subcore_size = threads_per_subcore;
b4deba5c41e9f6 Paul Mackerras 2015-07-02 3161 cmd_bit = stat_bit = 0;
b4deba5c41e9f6 Paul Mackerras 2015-07-02 3162 split = core_info.n_subcores;
b4deba5c41e9f6 Paul Mackerras 2015-07-02 3163 sip = NULL;
516f7898ae20d9 Paul Mackerras 2017-10-16 3164 is_power8 = cpu_has_feature(CPU_FTR_ARCH_207S)
516f7898ae20d9 Paul Mackerras 2017-10-16 3165 && !cpu_has_feature(CPU_FTR_ARCH_300);
516f7898ae20d9 Paul Mackerras 2017-10-16 3166
c01015091a7703 Paul Mackerras 2017-10-19 3167 if (split > 1 || hpt_on_radix) {
516f7898ae20d9 Paul Mackerras 2017-10-16 3168 sip = &split_info;
516f7898ae20d9 Paul Mackerras 2017-10-16 3169 memset(&split_info, 0, sizeof(split_info));
516f7898ae20d9 Paul Mackerras 2017-10-16 3170 for (sub = 0; sub < core_info.n_subcores; ++sub)
516f7898ae20d9 Paul Mackerras 2017-10-16 3171 split_info.vc[sub] = core_info.vc[sub];
516f7898ae20d9 Paul Mackerras 2017-10-16 3172
516f7898ae20d9 Paul Mackerras 2017-10-16 3173 if (is_power8) {
b4deba5c41e9f6 Paul Mackerras 2015-07-02 3174 if (split == 2 && (dynamic_mt_modes & 2)) {
b4deba5c41e9f6 Paul Mackerras 2015-07-02 3175 cmd_bit = HID0_POWER8_1TO2LPAR;
b4deba5c41e9f6 Paul Mackerras 2015-07-02 3176 stat_bit = HID0_POWER8_2LPARMODE;
b4deba5c41e9f6 Paul Mackerras 2015-07-02 3177 } else {
b4deba5c41e9f6 Paul Mackerras 2015-07-02 3178 split = 4;
b4deba5c41e9f6 Paul Mackerras 2015-07-02 3179 cmd_bit = HID0_POWER8_1TO4LPAR;
b4deba5c41e9f6 Paul Mackerras 2015-07-02 3180 stat_bit = HID0_POWER8_4LPARMODE;
b4deba5c41e9f6 Paul Mackerras 2015-07-02 3181 }
b4deba5c41e9f6 Paul Mackerras 2015-07-02 3182 subcore_size = MAX_SMT_THREADS / split;
b4deba5c41e9f6 Paul Mackerras 2015-07-02 3183 split_info.rpr = mfspr(SPRN_RPR);
b4deba5c41e9f6 Paul Mackerras 2015-07-02 3184 split_info.pmmar = mfspr(SPRN_PMMAR);
b4deba5c41e9f6 Paul Mackerras 2015-07-02 3185 split_info.ldbar = mfspr(SPRN_LDBAR);
b4deba5c41e9f6 Paul Mackerras 2015-07-02 3186 split_info.subcore_size = subcore_size;
516f7898ae20d9 Paul Mackerras 2017-10-16 3187 } else {
516f7898ae20d9 Paul Mackerras 2017-10-16 3188 split_info.subcore_size = 1;
c01015091a7703 Paul Mackerras 2017-10-19 3189 if (hpt_on_radix) {
c01015091a7703 Paul Mackerras 2017-10-19 3190 /* Use the split_info for LPCR/LPIDR changes */
c01015091a7703 Paul Mackerras 2017-10-19 3191 split_info.lpcr_req = vc->lpcr;
c01015091a7703 Paul Mackerras 2017-10-19 3192 split_info.lpidr_req = vc->kvm->arch.lpid;
c01015091a7703 Paul Mackerras 2017-10-19 3193 split_info.host_lpcr = vc->kvm->arch.host_lpcr;
c01015091a7703 Paul Mackerras 2017-10-19 3194 split_info.do_set = 1;
c01015091a7703 Paul Mackerras 2017-10-19 3195 }
516f7898ae20d9 Paul Mackerras 2017-10-16 3196 }
516f7898ae20d9 Paul Mackerras 2017-10-16 3197
b4deba5c41e9f6 Paul Mackerras 2015-07-02 3198 /* order writes to split_info before kvm_split_mode pointer */
b4deba5c41e9f6 Paul Mackerras 2015-07-02 3199 smp_wmb();
b4deba5c41e9f6 Paul Mackerras 2015-07-02 3200 }
c01015091a7703 Paul Mackerras 2017-10-19 3201
c01015091a7703 Paul Mackerras 2017-10-19 3202 for (thr = 0; thr < controlled_threads; ++thr) {
d2e60075a3d442 Nicholas Piggin 2018-02-14 3203 struct paca_struct *paca = paca_ptrs[pcpu + thr];
d2e60075a3d442 Nicholas Piggin 2018-02-14 3204
d2e60075a3d442 Nicholas Piggin 2018-02-14 3205 paca->kvm_hstate.tid = thr;
d2e60075a3d442 Nicholas Piggin 2018-02-14 3206 paca->kvm_hstate.napping = 0;
d2e60075a3d442 Nicholas Piggin 2018-02-14 3207 paca->kvm_hstate.kvm_split_mode = sip;
c01015091a7703 Paul Mackerras 2017-10-19 3208 }
3102f7843c7501 Michael Ellerman 2014-05-23 3209
516f7898ae20d9 Paul Mackerras 2017-10-16 3210 /* Initiate micro-threading (split-core) on POWER8 if required */
b4deba5c41e9f6 Paul Mackerras 2015-07-02 3211 if (cmd_bit) {
b4deba5c41e9f6 Paul Mackerras 2015-07-02 3212 unsigned long hid0 = mfspr(SPRN_HID0);
b4deba5c41e9f6 Paul Mackerras 2015-07-02 3213
b4deba5c41e9f6 Paul Mackerras 2015-07-02 3214 hid0 |= cmd_bit | HID0_POWER8_DYNLPARDIS;
b4deba5c41e9f6 Paul Mackerras 2015-07-02 3215 mb();
b4deba5c41e9f6 Paul Mackerras 2015-07-02 3216 mtspr(SPRN_HID0, hid0);
b4deba5c41e9f6 Paul Mackerras 2015-07-02 3217 isync();
b4deba5c41e9f6 Paul Mackerras 2015-07-02 3218 for (;;) {
b4deba5c41e9f6 Paul Mackerras 2015-07-02 3219 hid0 = mfspr(SPRN_HID0);
b4deba5c41e9f6 Paul Mackerras 2015-07-02 3220 if (hid0 & stat_bit)
b4deba5c41e9f6 Paul Mackerras 2015-07-02 3221 break;
b4deba5c41e9f6 Paul Mackerras 2015-07-02 3222 cpu_relax();
b4deba5c41e9f6 Paul Mackerras 2015-07-02 3223 }
b4deba5c41e9f6 Paul Mackerras 2015-07-02 3224 }
b4deba5c41e9f6 Paul Mackerras 2015-07-02 3225
7aa15842c15f8a Paul Mackerras 2018-04-20 3226 /*
7aa15842c15f8a Paul Mackerras 2018-04-20 3227 * On POWER8, set RWMR register.
7aa15842c15f8a Paul Mackerras 2018-04-20 3228 * Since it only affects PURR and SPURR, it doesn't affect
7aa15842c15f8a Paul Mackerras 2018-04-20 3229 * the host, so we don't save/restore the host value.
7aa15842c15f8a Paul Mackerras 2018-04-20 3230 */
7aa15842c15f8a Paul Mackerras 2018-04-20 3231 if (is_power8) {
7aa15842c15f8a Paul Mackerras 2018-04-20 3232 unsigned long rwmr_val = RWMR_RPA_P8_8THREAD;
7aa15842c15f8a Paul Mackerras 2018-04-20 3233 int n_online = atomic_read(&vc->online_count);
7aa15842c15f8a Paul Mackerras 2018-04-20 3234
7aa15842c15f8a Paul Mackerras 2018-04-20 3235 /*
7aa15842c15f8a Paul Mackerras 2018-04-20 3236 * Use the 8-thread value if we're doing split-core
7aa15842c15f8a Paul Mackerras 2018-04-20 3237 * or if the vcore's online count looks bogus.
7aa15842c15f8a Paul Mackerras 2018-04-20 3238 */
7aa15842c15f8a Paul Mackerras 2018-04-20 3239 if (split == 1 && threads_per_subcore == MAX_SMT_THREADS &&
7aa15842c15f8a Paul Mackerras 2018-04-20 3240 n_online >= 1 && n_online <= MAX_SMT_THREADS)
7aa15842c15f8a Paul Mackerras 2018-04-20 3241 rwmr_val = p8_rwmr_values[n_online];
7aa15842c15f8a Paul Mackerras 2018-04-20 3242 mtspr(SPRN_RWMR, rwmr_val);
7aa15842c15f8a Paul Mackerras 2018-04-20 3243 }
7aa15842c15f8a Paul Mackerras 2018-04-20 3244
b4deba5c41e9f6 Paul Mackerras 2015-07-02 3245 /* Start all the threads */
b4deba5c41e9f6 Paul Mackerras 2015-07-02 3246 active = 0;
b4deba5c41e9f6 Paul Mackerras 2015-07-02 3247 for (sub = 0; sub < core_info.n_subcores; ++sub) {
516f7898ae20d9 Paul Mackerras 2017-10-16 3248 thr = is_power8 ? subcore_thread_map[sub] : sub;
b4deba5c41e9f6 Paul Mackerras 2015-07-02 3249 thr0_done = false;
b4deba5c41e9f6 Paul Mackerras 2015-07-02 3250 active |= 1 << thr;
898b25b202f350 Paul Mackerras 2017-06-22 3251 pvc = core_info.vc[sub];
ec257165082616 Paul Mackerras 2015-06-24 3252 pvc->pcpu = pcpu + thr;
7b5f8272c792d4 Suraj Jitindar Singh 2016-08-02 3253 for_each_runnable_thread(i, vcpu, pvc) {
b4deba5c41e9f6 Paul Mackerras 2015-07-02 3254 kvmppc_start_thread(vcpu, pvc);
ec257165082616 Paul Mackerras 2015-06-24 3255 kvmppc_create_dtl_entry(vcpu, pvc);
3c78f78af95615 Suresh E. Warrier 2014-12-03 3256 trace_kvm_guest_enter(vcpu);
b4deba5c41e9f6 Paul Mackerras 2015-07-02 3257 if (!vcpu->arch.ptid)
b4deba5c41e9f6 Paul Mackerras 2015-07-02 3258 thr0_done = true;
b4deba5c41e9f6 Paul Mackerras 2015-07-02 3259 active |= 1 << (thr + vcpu->arch.ptid);
2e25aa5f64b18a Paul Mackerras 2012-02-19 3260 }
b4deba5c41e9f6 Paul Mackerras 2015-07-02 3261 /*
b4deba5c41e9f6 Paul Mackerras 2015-07-02 3262 * We need to start the first thread of each subcore
b4deba5c41e9f6 Paul Mackerras 2015-07-02 3263 * even if it doesn't have a vcpu.
b4deba5c41e9f6 Paul Mackerras 2015-07-02 3264 */
898b25b202f350 Paul Mackerras 2017-06-22 3265 if (!thr0_done)
b4deba5c41e9f6 Paul Mackerras 2015-07-02 3266 kvmppc_start_thread(NULL, pvc);
ec257165082616 Paul Mackerras 2015-06-24 3267 }
de56a948b9182f Paul Mackerras 2011-06-29 3268
7f23532866f931 Gautham R. Shenoy 2015-09-02 3269 /*
7f23532866f931 Gautham R. Shenoy 2015-09-02 3270 * Ensure that split_info.do_nap is set after setting
7f23532866f931 Gautham R. Shenoy 2015-09-02 3271 * the vcore pointer in the PACA of the secondaries.
7f23532866f931 Gautham R. Shenoy 2015-09-02 3272 */
7f23532866f931 Gautham R. Shenoy 2015-09-02 3273 smp_mb();
7f23532866f931 Gautham R. Shenoy 2015-09-02 3274
b4deba5c41e9f6 Paul Mackerras 2015-07-02 3275 /*
b4deba5c41e9f6 Paul Mackerras 2015-07-02 3276 * When doing micro-threading, poke the inactive threads as well.
b4deba5c41e9f6 Paul Mackerras 2015-07-02 3277 * This gets them to the nap instruction after kvm_do_nap,
b4deba5c41e9f6 Paul Mackerras 2015-07-02 3278 * which reduces the time taken to unsplit later.
c01015091a7703 Paul Mackerras 2017-10-19 3279 * For POWER9 HPT guest on radix host, we need all the secondary
c01015091a7703 Paul Mackerras 2017-10-19 3280 * threads woken up so they can do the LPCR/LPIDR change.
b4deba5c41e9f6 Paul Mackerras 2015-07-02 3281 */
c01015091a7703 Paul Mackerras 2017-10-19 3282 if (cmd_bit || hpt_on_radix) {
516f7898ae20d9 Paul Mackerras 2017-10-16 3283 split_info.do_nap = 1; /* ask secondaries to nap when done */
b4deba5c41e9f6 Paul Mackerras 2015-07-02 3284 for (thr = 1; thr < threads_per_subcore; ++thr)
b4deba5c41e9f6 Paul Mackerras 2015-07-02 3285 if (!(active & (1 << thr)))
b4deba5c41e9f6 Paul Mackerras 2015-07-02 3286 kvmppc_ipi_thread(pcpu + thr);
516f7898ae20d9 Paul Mackerras 2017-10-16 3287 }
e0b7ec058c0eb7 Paul Mackerras 2014-01-08 3288
2f12f03436847e Paul Mackerras 2012-10-15 3289 vc->vcore_state = VCORE_RUNNING;
19ccb76a1938ab Paul Mackerras 2011-07-23 3290 preempt_disable();
3c78f78af95615 Suresh E. Warrier 2014-12-03 3291
3c78f78af95615 Suresh E. Warrier 2014-12-03 3292 trace_kvmppc_run_core(vc, 0);
3c78f78af95615 Suresh E. Warrier 2014-12-03 3293
b4deba5c41e9f6 Paul Mackerras 2015-07-02 3294 for (sub = 0; sub < core_info.n_subcores; ++sub)
898b25b202f350 Paul Mackerras 2017-06-22 3295 spin_unlock(&core_info.vc[sub]->lock);
371fefd6f2dc46 Paul Mackerras 2011-06-29 3296
61bd0f66ff92d5 Laurent Vivier 2018-03-02 3297 guest_enter_irqoff();
2c9097e4c13402 Paul Mackerras 2012-09-11 3298
e0b7ec058c0eb7 Paul Mackerras 2014-01-08 3299 srcu_idx = srcu_read_lock(&vc->kvm->srcu);
2c9097e4c13402 Paul Mackerras 2012-09-11 3300
a4bc64d305af40 Naveen N. Rao 2018-04-19 3301 this_cpu_disable_ftrace();
a4bc64d305af40 Naveen N. Rao 2018-04-19 3302
3309bec85e60d6 Alexey Kardashevskiy 2019-03-29 3303 /*
3309bec85e60d6 Alexey Kardashevskiy 2019-03-29 3304 * Interrupts will be enabled once we get into the guest,
3309bec85e60d6 Alexey Kardashevskiy 2019-03-29 3305 * so tell lockdep that we're about to enable interrupts.
3309bec85e60d6 Alexey Kardashevskiy 2019-03-29 3306 */
3309bec85e60d6 Alexey Kardashevskiy 2019-03-29 3307 trace_hardirqs_on();
3309bec85e60d6 Alexey Kardashevskiy 2019-03-29 3308
8b24e69fc47e43 Paul Mackerras 2017-06-26 3309 trap = __kvmppc_vcore_entry();
de56a948b9182f Paul Mackerras 2011-06-29 3310
3309bec85e60d6 Alexey Kardashevskiy 2019-03-29 3311 trace_hardirqs_off();
3309bec85e60d6 Alexey Kardashevskiy 2019-03-29 3312
a4bc64d305af40 Naveen N. Rao 2018-04-19 3313 this_cpu_enable_ftrace();
a4bc64d305af40 Naveen N. Rao 2018-04-19 3314
ec257165082616 Paul Mackerras 2015-06-24 3315 srcu_read_unlock(&vc->kvm->srcu, srcu_idx);
ec257165082616 Paul Mackerras 2015-06-24 3316
8b24e69fc47e43 Paul Mackerras 2017-06-26 3317 set_irq_happened(trap);
8b24e69fc47e43 Paul Mackerras 2017-06-26 3318
ec257165082616 Paul Mackerras 2015-06-24 3319 spin_lock(&vc->lock);
371fefd6f2dc46 Paul Mackerras 2011-06-29 3320 /* prevent other vcpu threads from doing kvmppc_start_thread() now */
19ccb76a1938ab Paul Mackerras 2011-07-23 3321 vc->vcore_state = VCORE_EXITING;
371fefd6f2dc46 Paul Mackerras 2011-06-29 3322
19ccb76a1938ab Paul Mackerras 2011-07-23 3323 /* wait for secondary threads to finish writing their state to memory */
516f7898ae20d9 Paul Mackerras 2017-10-16 3324 kvmppc_wait_for_nap(controlled_threads);
b4deba5c41e9f6 Paul Mackerras 2015-07-02 3325
b4deba5c41e9f6 Paul Mackerras 2015-07-02 3326 /* Return to whole-core mode if we split the core earlier */
516f7898ae20d9 Paul Mackerras 2017-10-16 3327 if (cmd_bit) {
b4deba5c41e9f6 Paul Mackerras 2015-07-02 3328 unsigned long hid0 = mfspr(SPRN_HID0);
b4deba5c41e9f6 Paul Mackerras 2015-07-02 3329 unsigned long loops = 0;
b4deba5c41e9f6 Paul Mackerras 2015-07-02 3330
b4deba5c41e9f6 Paul Mackerras 2015-07-02 3331 hid0 &= ~HID0_POWER8_DYNLPARDIS;
b4deba5c41e9f6 Paul Mackerras 2015-07-02 3332 stat_bit = HID0_POWER8_2LPARMODE | HID0_POWER8_4LPARMODE;
b4deba5c41e9f6 Paul Mackerras 2015-07-02 3333 mb();
b4deba5c41e9f6 Paul Mackerras 2015-07-02 3334 mtspr(SPRN_HID0, hid0);
b4deba5c41e9f6 Paul Mackerras 2015-07-02 3335 isync();
b4deba5c41e9f6 Paul Mackerras 2015-07-02 3336 for (;;) {
b4deba5c41e9f6 Paul Mackerras 2015-07-02 3337 hid0 = mfspr(SPRN_HID0);
b4deba5c41e9f6 Paul Mackerras 2015-07-02 3338 if (!(hid0 & stat_bit))
b4deba5c41e9f6 Paul Mackerras 2015-07-02 3339 break;
b4deba5c41e9f6 Paul Mackerras 2015-07-02 3340 cpu_relax();
b4deba5c41e9f6 Paul Mackerras 2015-07-02 3341 ++loops;
b4deba5c41e9f6 Paul Mackerras 2015-07-02 3342 }
c01015091a7703 Paul Mackerras 2017-10-19 3343 } else if (hpt_on_radix) {
c01015091a7703 Paul Mackerras 2017-10-19 3344 /* Wait for all threads to have seen final sync */
c01015091a7703 Paul Mackerras 2017-10-19 3345 for (thr = 1; thr < controlled_threads; ++thr) {
d2e60075a3d442 Nicholas Piggin 2018-02-14 3346 struct paca_struct *paca = paca_ptrs[pcpu + thr];
d2e60075a3d442 Nicholas Piggin 2018-02-14 3347
d2e60075a3d442 Nicholas Piggin 2018-02-14 3348 while (paca->kvm_hstate.kvm_split_mode) {
c01015091a7703 Paul Mackerras 2017-10-19 3349 HMT_low();
c01015091a7703 Paul Mackerras 2017-10-19 3350 barrier();
c01015091a7703 Paul Mackerras 2017-10-19 3351 }
c01015091a7703 Paul Mackerras 2017-10-19 3352 HMT_medium();
c01015091a7703 Paul Mackerras 2017-10-19 3353 }
b4deba5c41e9f6 Paul Mackerras 2015-07-02 3354 }
c01015091a7703 Paul Mackerras 2017-10-19 3355 split_info.do_nap = 0;
b4deba5c41e9f6 Paul Mackerras 2015-07-02 3356
8b24e69fc47e43 Paul Mackerras 2017-06-26 3357 kvmppc_set_host_core(pcpu);
8b24e69fc47e43 Paul Mackerras 2017-06-26 3358
8b24e69fc47e43 Paul Mackerras 2017-06-26 3359 local_irq_enable();
61bd0f66ff92d5 Laurent Vivier 2018-03-02 @3360 guest_exit();
8b24e69fc47e43 Paul Mackerras 2017-06-26 3361
b4deba5c41e9f6 Paul Mackerras 2015-07-02 3362 /* Let secondaries go back to the offline loop */
45c940ba490df2 Paul Mackerras 2016-11-18 3363 for (i = 0; i < controlled_threads; ++i) {
b4deba5c41e9f6 Paul Mackerras 2015-07-02 3364 kvmppc_release_hwthread(pcpu + i);
b4deba5c41e9f6 Paul Mackerras 2015-07-02 3365 if (sip && sip->napped[i])
b4deba5c41e9f6 Paul Mackerras 2015-07-02 3366 kvmppc_ipi_thread(pcpu + i);
a29ebeaf5575d0 Paul Mackerras 2017-01-30 3367 cpumask_clear_cpu(pcpu + i, &vc->kvm->arch.cpu_in_guest);
b4deba5c41e9f6 Paul Mackerras 2015-07-02 3368 }
b4deba5c41e9f6 Paul Mackerras 2015-07-02 3369
371fefd6f2dc46 Paul Mackerras 2011-06-29 3370 spin_unlock(&vc->lock);
2c9097e4c13402 Paul Mackerras 2012-09-11 3371
371fefd6f2dc46 Paul Mackerras 2011-06-29 3372 /* make sure updates to secondary vcpu structs are visible now */
371fefd6f2dc46 Paul Mackerras 2011-06-29 3373 smp_mb();
de56a948b9182f Paul Mackerras 2011-06-29 3374
36ee41d161c67a Paul Mackerras 2018-01-30 3375 preempt_enable();
36ee41d161c67a Paul Mackerras 2018-01-30 3376
898b25b202f350 Paul Mackerras 2017-06-22 3377 for (sub = 0; sub < core_info.n_subcores; ++sub) {
898b25b202f350 Paul Mackerras 2017-06-22 3378 pvc = core_info.vc[sub];
ec257165082616 Paul Mackerras 2015-06-24 3379 post_guest_process(pvc, pvc == vc);
898b25b202f350 Paul Mackerras 2017-06-22 3380 }
de56a948b9182f Paul Mackerras 2011-06-29 3381
913d3ff9a3c3a1 Paul Mackerras 2012-10-15 3382 spin_lock(&vc->lock);
de56a948b9182f Paul Mackerras 2011-06-29 3383
de56a948b9182f Paul Mackerras 2011-06-29 3384 out:
19ccb76a1938ab Paul Mackerras 2011-07-23 3385 vc->vcore_state = VCORE_INACTIVE;
3c78f78af95615 Suresh E. Warrier 2014-12-03 3386 trace_kvmppc_run_core(vc, 1);
371fefd6f2dc46 Paul Mackerras 2011-06-29 3387 }
371fefd6f2dc46 Paul Mackerras 2011-06-29 3388

:::::: The code at line 3360 was first introduced by commit
:::::: 61bd0f66ff92d5ce765ff9850fd3cbfec773c560 KVM: PPC: Book3S HV: Fix guest time accounting with VIRT_CPU_ACCOUNTING_GEN

:::::: TO: Laurent Vivier <[email protected]>
:::::: CC: Paul Mackerras <[email protected]>

---
0-DAY kernel test infrastructure Open Source Technology Center
https://lists.01.org/hyperkitty/list/[email protected] Intel Corporation


Attachments:
(No filename) (29.78 kB)
.config.gz (25.04 kB)
Download all attachments

2020-01-11 05:30:57

by kernel test robot

[permalink] [raw]
Subject: Re: [PATCH] KVM: remove unused guest_enter/exit

Hi Alex,

I love your patch! Yet something to improve:

[auto build test ERROR on kvm/linux-next]
[also build test ERROR on linux/master linus/master v5.5-rc5 next-20200109]
[if your patch is applied to the wrong git tree, please drop us a note to help
improve the system. BTW, we also suggest to use '--base' option to specify the
base tree in git format-patch, please see https://stackoverflow.com/a/37406982]

url: https://github.com/0day-ci/linux/commits/Alex-Shi/KVM-remove-unused-guest_enter-exit/20200111-004903
base: https://git.kernel.org/pub/scm/virt/kvm/kvm.git linux-next
config: arm64-randconfig-a001-20200110 (attached as .config)
compiler: aarch64-linux-gcc (GCC) 7.5.0
reproduce:
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# save the attached .config to linux build tree
GCC_VERSION=7.5.0 make.cross ARCH=arm64

If you fix the issue, kindly add following tag
Reported-by: kbuild test robot <[email protected]>

All errors (new ones prefixed by >>):

arch/arm64/kvm/../../../virt/kvm/arm/arm.c: In function 'kvm_arch_vcpu_ioctl_run':
>> arch/arm64/kvm/../../../virt/kvm/arm/arm.c:861:3: error: implicit declaration of function 'guest_exit'; did you mean 'user_exit'? [-Werror=implicit-function-declaration]
guest_exit();
^~~~~~~~~~
user_exit
cc1: some warnings being treated as errors

vim +861 arch/arm64/kvm/../../../virt/kvm/arm/arm.c

0592c005622582 virt/kvm/arm/arm.c Andrew Jones 2017-06-04 687
f7ed45be3ba524 arch/arm/kvm/arm.c Christoffer Dall 2013-01-20 688 /**
f7ed45be3ba524 arch/arm/kvm/arm.c Christoffer Dall 2013-01-20 689 * kvm_arch_vcpu_ioctl_run - the main VCPU run function to execute guest code
f7ed45be3ba524 arch/arm/kvm/arm.c Christoffer Dall 2013-01-20 690 * @vcpu: The VCPU pointer
f7ed45be3ba524 arch/arm/kvm/arm.c Christoffer Dall 2013-01-20 691 * @run: The kvm_run structure pointer used for userspace state exchange
f7ed45be3ba524 arch/arm/kvm/arm.c Christoffer Dall 2013-01-20 692 *
f7ed45be3ba524 arch/arm/kvm/arm.c Christoffer Dall 2013-01-20 693 * This function is called through the VCPU_RUN ioctl called from user space. It
f7ed45be3ba524 arch/arm/kvm/arm.c Christoffer Dall 2013-01-20 694 * will execute VM code in a loop until the time slice for the process is used
f7ed45be3ba524 arch/arm/kvm/arm.c Christoffer Dall 2013-01-20 695 * or some emulation is needed from user space in which case the function will
f7ed45be3ba524 arch/arm/kvm/arm.c Christoffer Dall 2013-01-20 696 * return with return value 0 and with the kvm_run structure filled in with the
f7ed45be3ba524 arch/arm/kvm/arm.c Christoffer Dall 2013-01-20 697 * required data for the requested emulation.
f7ed45be3ba524 arch/arm/kvm/arm.c Christoffer Dall 2013-01-20 698 */
749cf76c5a363e arch/arm/kvm/arm.c Christoffer Dall 2013-01-20 699 int kvm_arch_vcpu_ioctl_run(struct kvm_vcpu *vcpu, struct kvm_run *run)
749cf76c5a363e arch/arm/kvm/arm.c Christoffer Dall 2013-01-20 700 {
f7ed45be3ba524 arch/arm/kvm/arm.c Christoffer Dall 2013-01-20 701 int ret;
f7ed45be3ba524 arch/arm/kvm/arm.c Christoffer Dall 2013-01-20 702
e8180dcaa8470c arch/arm/kvm/arm.c Andre Przywara 2013-05-09 703 if (unlikely(!kvm_vcpu_initialized(vcpu)))
f7ed45be3ba524 arch/arm/kvm/arm.c Christoffer Dall 2013-01-20 704 return -ENOEXEC;
f7ed45be3ba524 arch/arm/kvm/arm.c Christoffer Dall 2013-01-20 705
f7ed45be3ba524 arch/arm/kvm/arm.c Christoffer Dall 2013-01-20 706 ret = kvm_vcpu_first_run_init(vcpu);
f7ed45be3ba524 arch/arm/kvm/arm.c Christoffer Dall 2013-01-20 707 if (ret)
829a58635497d7 virt/kvm/arm/arm.c Christoffer Dall 2017-11-29 708 return ret;
f7ed45be3ba524 arch/arm/kvm/arm.c Christoffer Dall 2013-01-20 709
45e96ea6b36953 arch/arm/kvm/arm.c Christoffer Dall 2013-01-20 710 if (run->exit_reason == KVM_EXIT_MMIO) {
45e96ea6b36953 arch/arm/kvm/arm.c Christoffer Dall 2013-01-20 711 ret = kvm_handle_mmio_return(vcpu, vcpu->run);
45e96ea6b36953 arch/arm/kvm/arm.c Christoffer Dall 2013-01-20 712 if (ret)
829a58635497d7 virt/kvm/arm/arm.c Christoffer Dall 2017-11-29 713 return ret;
accb757d798c9b virt/kvm/arm/arm.c Christoffer Dall 2017-12-04 714 }
1eb591288b956b virt/kvm/arm/arm.c Alex Benn?e 2017-11-16 715
829a58635497d7 virt/kvm/arm/arm.c Christoffer Dall 2017-11-29 716 if (run->immediate_exit)
829a58635497d7 virt/kvm/arm/arm.c Christoffer Dall 2017-11-29 717 return -EINTR;
45e96ea6b36953 arch/arm/kvm/arm.c Christoffer Dall 2013-01-20 718
829a58635497d7 virt/kvm/arm/arm.c Christoffer Dall 2017-11-29 719 vcpu_load(vcpu);
460df4c1fc7c00 arch/arm/kvm/arm.c Paolo Bonzini 2017-02-08 720
20b7035c66bacc virt/kvm/arm/arm.c Jan H. Sch?nherr 2017-11-24 721 kvm_sigset_activate(vcpu);
f7ed45be3ba524 arch/arm/kvm/arm.c Christoffer Dall 2013-01-20 722
f7ed45be3ba524 arch/arm/kvm/arm.c Christoffer Dall 2013-01-20 723 ret = 1;
f7ed45be3ba524 arch/arm/kvm/arm.c Christoffer Dall 2013-01-20 724 run->exit_reason = KVM_EXIT_UNKNOWN;
f7ed45be3ba524 arch/arm/kvm/arm.c Christoffer Dall 2013-01-20 725 while (ret > 0) {
f7ed45be3ba524 arch/arm/kvm/arm.c Christoffer Dall 2013-01-20 726 /*
f7ed45be3ba524 arch/arm/kvm/arm.c Christoffer Dall 2013-01-20 727 * Check conditions before entering the guest
f7ed45be3ba524 arch/arm/kvm/arm.c Christoffer Dall 2013-01-20 728 */
f7ed45be3ba524 arch/arm/kvm/arm.c Christoffer Dall 2013-01-20 729 cond_resched();
f7ed45be3ba524 arch/arm/kvm/arm.c Christoffer Dall 2013-01-20 730
e329fb75d519e3 virt/kvm/arm/arm.c Christoffer Dall 2018-12-11 731 update_vmid(&vcpu->kvm->arch.vmid);
f7ed45be3ba524 arch/arm/kvm/arm.c Christoffer Dall 2013-01-20 732
0592c005622582 virt/kvm/arm/arm.c Andrew Jones 2017-06-04 733 check_vcpu_requests(vcpu);
0592c005622582 virt/kvm/arm/arm.c Andrew Jones 2017-06-04 734
abdf58438356c7 arch/arm/kvm/arm.c Marc Zyngier 2015-06-08 735 /*
abdf58438356c7 arch/arm/kvm/arm.c Marc Zyngier 2015-06-08 736 * Preparing the interrupts to be injected also
abdf58438356c7 arch/arm/kvm/arm.c Marc Zyngier 2015-06-08 737 * involves poking the GIC, which must be done in a
abdf58438356c7 arch/arm/kvm/arm.c Marc Zyngier 2015-06-08 738 * non-preemptible context.
abdf58438356c7 arch/arm/kvm/arm.c Marc Zyngier 2015-06-08 739 */
1b3d546daf85ed arch/arm/kvm/arm.c Christoffer Dall 2015-05-28 740 preempt_disable();
328e5664794491 arch/arm/kvm/arm.c Christoffer Dall 2016-03-24 741
b02386eb7dac75 arch/arm/kvm/arm.c Shannon Zhao 2016-02-26 742 kvm_pmu_flush_hwstate(vcpu);
328e5664794491 arch/arm/kvm/arm.c Christoffer Dall 2016-03-24 743
f7ed45be3ba524 arch/arm/kvm/arm.c Christoffer Dall 2013-01-20 744 local_irq_disable();
f7ed45be3ba524 arch/arm/kvm/arm.c Christoffer Dall 2013-01-20 745
abdf58438356c7 arch/arm/kvm/arm.c Marc Zyngier 2015-06-08 746 kvm_vgic_flush_hwstate(vcpu);
abdf58438356c7 arch/arm/kvm/arm.c Marc Zyngier 2015-06-08 747
f7ed45be3ba524 arch/arm/kvm/arm.c Christoffer Dall 2013-01-20 748 /*
61bbe380273347 virt/kvm/arm/arm.c Christoffer Dall 2017-10-27 749 * Exit if we have a signal pending so that we can deliver the
61bbe380273347 virt/kvm/arm/arm.c Christoffer Dall 2017-10-27 750 * signal to user space.
f7ed45be3ba524 arch/arm/kvm/arm.c Christoffer Dall 2013-01-20 751 */
61bbe380273347 virt/kvm/arm/arm.c Christoffer Dall 2017-10-27 752 if (signal_pending(current)) {
61bbe380273347 virt/kvm/arm/arm.c Christoffer Dall 2017-10-27 753 ret = -EINTR;
61bbe380273347 virt/kvm/arm/arm.c Christoffer Dall 2017-10-27 754 run->exit_reason = KVM_EXIT_INTR;
61bbe380273347 virt/kvm/arm/arm.c Christoffer Dall 2017-10-27 755 }
61bbe380273347 virt/kvm/arm/arm.c Christoffer Dall 2017-10-27 756
61bbe380273347 virt/kvm/arm/arm.c Christoffer Dall 2017-10-27 757 /*
61bbe380273347 virt/kvm/arm/arm.c Christoffer Dall 2017-10-27 758 * If we're using a userspace irqchip, then check if we need
61bbe380273347 virt/kvm/arm/arm.c Christoffer Dall 2017-10-27 759 * to tell a userspace irqchip about timer or PMU level
61bbe380273347 virt/kvm/arm/arm.c Christoffer Dall 2017-10-27 760 * changes and if so, exit to userspace (the actual level
61bbe380273347 virt/kvm/arm/arm.c Christoffer Dall 2017-10-27 761 * state gets updated in kvm_timer_update_run and
61bbe380273347 virt/kvm/arm/arm.c Christoffer Dall 2017-10-27 762 * kvm_pmu_update_run below).
61bbe380273347 virt/kvm/arm/arm.c Christoffer Dall 2017-10-27 763 */
61bbe380273347 virt/kvm/arm/arm.c Christoffer Dall 2017-10-27 764 if (static_branch_unlikely(&userspace_irqchip_in_use)) {
61bbe380273347 virt/kvm/arm/arm.c Christoffer Dall 2017-10-27 765 if (kvm_timer_should_notify_user(vcpu) ||
3dbbdf78636e66 arch/arm/kvm/arm.c Christoffer Dall 2017-02-01 766 kvm_pmu_should_notify_user(vcpu)) {
f7ed45be3ba524 arch/arm/kvm/arm.c Christoffer Dall 2013-01-20 767 ret = -EINTR;
f7ed45be3ba524 arch/arm/kvm/arm.c Christoffer Dall 2013-01-20 768 run->exit_reason = KVM_EXIT_INTR;
f7ed45be3ba524 arch/arm/kvm/arm.c Christoffer Dall 2013-01-20 769 }
61bbe380273347 virt/kvm/arm/arm.c Christoffer Dall 2017-10-27 770 }
f7ed45be3ba524 arch/arm/kvm/arm.c Christoffer Dall 2013-01-20 771
6a6d73be12fbe4 virt/kvm/arm/arm.c Andrew Jones 2017-06-04 772 /*
6a6d73be12fbe4 virt/kvm/arm/arm.c Andrew Jones 2017-06-04 773 * Ensure we set mode to IN_GUEST_MODE after we disable
6a6d73be12fbe4 virt/kvm/arm/arm.c Andrew Jones 2017-06-04 774 * interrupts and before the final VCPU requests check.
6a6d73be12fbe4 virt/kvm/arm/arm.c Andrew Jones 2017-06-04 775 * See the comment in kvm_vcpu_exiting_guest_mode() and
2f5947dfcaecb9 virt/kvm/arm/arm.c Christoph Hellwig 2019-07-24 776 * Documentation/virt/kvm/vcpu-requests.rst
6a6d73be12fbe4 virt/kvm/arm/arm.c Andrew Jones 2017-06-04 777 */
6a6d73be12fbe4 virt/kvm/arm/arm.c Andrew Jones 2017-06-04 778 smp_store_mb(vcpu->mode, IN_GUEST_MODE);
6a6d73be12fbe4 virt/kvm/arm/arm.c Andrew Jones 2017-06-04 779
e329fb75d519e3 virt/kvm/arm/arm.c Christoffer Dall 2018-12-11 780 if (ret <= 0 || need_new_vmid_gen(&vcpu->kvm->arch.vmid) ||
424c989b1a664a virt/kvm/arm/arm.c Andrew Jones 2017-06-04 781 kvm_request_pending(vcpu)) {
6a6d73be12fbe4 virt/kvm/arm/arm.c Andrew Jones 2017-06-04 782 vcpu->mode = OUTSIDE_GUEST_MODE;
771621b0e2f806 virt/kvm/arm/arm.c Christoffer Dall 2017-10-04 783 isb(); /* Ensure work in x_flush_hwstate is committed */
b02386eb7dac75 arch/arm/kvm/arm.c Shannon Zhao 2016-02-26 784 kvm_pmu_sync_hwstate(vcpu);
61bbe380273347 virt/kvm/arm/arm.c Christoffer Dall 2017-10-27 785 if (static_branch_unlikely(&userspace_irqchip_in_use))
4b4b4512da2a84 arch/arm/kvm/arm.c Christoffer Dall 2015-08-30 786 kvm_timer_sync_hwstate(vcpu);
1a89dd9113badd arch/arm/kvm/arm.c Marc Zyngier 2013-01-21 787 kvm_vgic_sync_hwstate(vcpu);
ee9bb9a1e3c6e4 virt/kvm/arm/arm.c Christoffer Dall 2016-10-16 788 local_irq_enable();
abdf58438356c7 arch/arm/kvm/arm.c Marc Zyngier 2015-06-08 789 preempt_enable();
f7ed45be3ba524 arch/arm/kvm/arm.c Christoffer Dall 2013-01-20 790 continue;
f7ed45be3ba524 arch/arm/kvm/arm.c Christoffer Dall 2013-01-20 791 }
f7ed45be3ba524 arch/arm/kvm/arm.c Christoffer Dall 2013-01-20 792
56c7f5e77f797f arch/arm/kvm/arm.c Alex Benn?e 2015-07-07 793 kvm_arm_setup_debug(vcpu);
56c7f5e77f797f arch/arm/kvm/arm.c Alex Benn?e 2015-07-07 794
f7ed45be3ba524 arch/arm/kvm/arm.c Christoffer Dall 2013-01-20 795 /**************************************************************
f7ed45be3ba524 arch/arm/kvm/arm.c Christoffer Dall 2013-01-20 796 * Enter the guest
f7ed45be3ba524 arch/arm/kvm/arm.c Christoffer Dall 2013-01-20 797 */
f7ed45be3ba524 arch/arm/kvm/arm.c Christoffer Dall 2013-01-20 798 trace_kvm_entry(*vcpu_pc(vcpu));
6edaa5307f3f51 arch/arm/kvm/arm.c Paolo Bonzini 2016-06-15 799 guest_enter_irqoff();
f7ed45be3ba524 arch/arm/kvm/arm.c Christoffer Dall 2013-01-20 800
3f5c90b890acfa virt/kvm/arm/arm.c Christoffer Dall 2017-10-03 801 if (has_vhe()) {
3f5c90b890acfa virt/kvm/arm/arm.c Christoffer Dall 2017-10-03 802 kvm_arm_vhe_guest_enter();
3f5c90b890acfa virt/kvm/arm/arm.c Christoffer Dall 2017-10-03 803 ret = kvm_vcpu_run_vhe(vcpu);
4f5abad9e826bd virt/kvm/arm/arm.c James Morse 2018-01-15 804 kvm_arm_vhe_guest_exit();
3f5c90b890acfa virt/kvm/arm/arm.c Christoffer Dall 2017-10-03 805 } else {
7aa8d14641651a virt/kvm/arm/arm.c Marc Zyngier 2019-01-05 806 ret = kvm_call_hyp_ret(__kvm_vcpu_run_nvhe, vcpu);
3f5c90b890acfa virt/kvm/arm/arm.c Christoffer Dall 2017-10-03 807 }
3f5c90b890acfa virt/kvm/arm/arm.c Christoffer Dall 2017-10-03 808
f7ed45be3ba524 arch/arm/kvm/arm.c Christoffer Dall 2013-01-20 809 vcpu->mode = OUTSIDE_GUEST_MODE;
b19e6892a90e7c arch/arm/kvm/arm.c Amit Tomar 2015-11-26 810 vcpu->stat.exits++;
1b3d546daf85ed arch/arm/kvm/arm.c Christoffer Dall 2015-05-28 811 /*
1b3d546daf85ed arch/arm/kvm/arm.c Christoffer Dall 2015-05-28 812 * Back from guest
1b3d546daf85ed arch/arm/kvm/arm.c Christoffer Dall 2015-05-28 813 *************************************************************/
1b3d546daf85ed arch/arm/kvm/arm.c Christoffer Dall 2015-05-28 814
56c7f5e77f797f arch/arm/kvm/arm.c Alex Benn?e 2015-07-07 815 kvm_arm_clear_debug(vcpu);
56c7f5e77f797f arch/arm/kvm/arm.c Alex Benn?e 2015-07-07 816
ee9bb9a1e3c6e4 virt/kvm/arm/arm.c Christoffer Dall 2016-10-16 817 /*
b103cc3f10c06f virt/kvm/arm/arm.c Christoffer Dall 2016-10-16 818 * We must sync the PMU state before the vgic state so
ee9bb9a1e3c6e4 virt/kvm/arm/arm.c Christoffer Dall 2016-10-16 819 * that the vgic can properly sample the updated state of the
ee9bb9a1e3c6e4 virt/kvm/arm/arm.c Christoffer Dall 2016-10-16 820 * interrupt line.
ee9bb9a1e3c6e4 virt/kvm/arm/arm.c Christoffer Dall 2016-10-16 821 */
ee9bb9a1e3c6e4 virt/kvm/arm/arm.c Christoffer Dall 2016-10-16 822 kvm_pmu_sync_hwstate(vcpu);
ee9bb9a1e3c6e4 virt/kvm/arm/arm.c Christoffer Dall 2016-10-16 823
b103cc3f10c06f virt/kvm/arm/arm.c Christoffer Dall 2016-10-16 824 /*
b103cc3f10c06f virt/kvm/arm/arm.c Christoffer Dall 2016-10-16 825 * Sync the vgic state before syncing the timer state because
b103cc3f10c06f virt/kvm/arm/arm.c Christoffer Dall 2016-10-16 826 * the timer code needs to know if the virtual timer
b103cc3f10c06f virt/kvm/arm/arm.c Christoffer Dall 2016-10-16 827 * interrupts are active.
b103cc3f10c06f virt/kvm/arm/arm.c Christoffer Dall 2016-10-16 828 */
ee9bb9a1e3c6e4 virt/kvm/arm/arm.c Christoffer Dall 2016-10-16 829 kvm_vgic_sync_hwstate(vcpu);
ee9bb9a1e3c6e4 virt/kvm/arm/arm.c Christoffer Dall 2016-10-16 830
b103cc3f10c06f virt/kvm/arm/arm.c Christoffer Dall 2016-10-16 831 /*
b103cc3f10c06f virt/kvm/arm/arm.c Christoffer Dall 2016-10-16 832 * Sync the timer hardware state before enabling interrupts as
b103cc3f10c06f virt/kvm/arm/arm.c Christoffer Dall 2016-10-16 833 * we don't want vtimer interrupts to race with syncing the
b103cc3f10c06f virt/kvm/arm/arm.c Christoffer Dall 2016-10-16 834 * timer virtual interrupt state.
b103cc3f10c06f virt/kvm/arm/arm.c Christoffer Dall 2016-10-16 835 */
61bbe380273347 virt/kvm/arm/arm.c Christoffer Dall 2017-10-27 836 if (static_branch_unlikely(&userspace_irqchip_in_use))
b103cc3f10c06f virt/kvm/arm/arm.c Christoffer Dall 2016-10-16 837 kvm_timer_sync_hwstate(vcpu);
b103cc3f10c06f virt/kvm/arm/arm.c Christoffer Dall 2016-10-16 838
e6b673b741ea0d virt/kvm/arm/arm.c Dave Martin 2018-04-06 839 kvm_arch_vcpu_ctxsync_fp(vcpu);
e6b673b741ea0d virt/kvm/arm/arm.c Dave Martin 2018-04-06 840
f7ed45be3ba524 arch/arm/kvm/arm.c Christoffer Dall 2013-01-20 841 /*
f7ed45be3ba524 arch/arm/kvm/arm.c Christoffer Dall 2013-01-20 842 * We may have taken a host interrupt in HYP mode (ie
f7ed45be3ba524 arch/arm/kvm/arm.c Christoffer Dall 2013-01-20 843 * while executing the guest). This interrupt is still
f7ed45be3ba524 arch/arm/kvm/arm.c Christoffer Dall 2013-01-20 844 * pending, as we haven't serviced it yet!
f7ed45be3ba524 arch/arm/kvm/arm.c Christoffer Dall 2013-01-20 845 *
f7ed45be3ba524 arch/arm/kvm/arm.c Christoffer Dall 2013-01-20 846 * We're now back in SVC mode, with interrupts
f7ed45be3ba524 arch/arm/kvm/arm.c Christoffer Dall 2013-01-20 847 * disabled. Enabling the interrupts now will have
f7ed45be3ba524 arch/arm/kvm/arm.c Christoffer Dall 2013-01-20 848 * the effect of taking the interrupt again, in SVC
f7ed45be3ba524 arch/arm/kvm/arm.c Christoffer Dall 2013-01-20 849 * mode this time.
f7ed45be3ba524 arch/arm/kvm/arm.c Christoffer Dall 2013-01-20 850 */
f7ed45be3ba524 arch/arm/kvm/arm.c Christoffer Dall 2013-01-20 851 local_irq_enable();
f7ed45be3ba524 arch/arm/kvm/arm.c Christoffer Dall 2013-01-20 852
f7ed45be3ba524 arch/arm/kvm/arm.c Christoffer Dall 2013-01-20 853 /*
6edaa5307f3f51 arch/arm/kvm/arm.c Paolo Bonzini 2016-06-15 854 * We do local_irq_enable() before calling guest_exit() so
1b3d546daf85ed arch/arm/kvm/arm.c Christoffer Dall 2015-05-28 855 * that if a timer interrupt hits while running the guest we
1b3d546daf85ed arch/arm/kvm/arm.c Christoffer Dall 2015-05-28 856 * account that tick as being spent in the guest. We enable
6edaa5307f3f51 arch/arm/kvm/arm.c Paolo Bonzini 2016-06-15 857 * preemption after calling guest_exit() so that if we get
1b3d546daf85ed arch/arm/kvm/arm.c Christoffer Dall 2015-05-28 858 * preempted we make sure ticks after that is not counted as
1b3d546daf85ed arch/arm/kvm/arm.c Christoffer Dall 2015-05-28 859 * guest time.
1b3d546daf85ed arch/arm/kvm/arm.c Christoffer Dall 2015-05-28 860 */
6edaa5307f3f51 arch/arm/kvm/arm.c Paolo Bonzini 2016-06-15 @861 guest_exit();
b5905dc12ed425 arch/arm/kvm/arm.c Christoffer Dall 2015-08-30 862 trace_kvm_exit(ret, kvm_vcpu_trap_get_class(vcpu), *vcpu_pc(vcpu));
1b3d546daf85ed arch/arm/kvm/arm.c Christoffer Dall 2015-05-28 863
3368bd809764d3 virt/kvm/arm/arm.c James Morse 2018-01-15 864 /* Exit types that need handling before we can be preempted */
3368bd809764d3 virt/kvm/arm/arm.c James Morse 2018-01-15 865 handle_exit_early(vcpu, run, ret);
3368bd809764d3 virt/kvm/arm/arm.c James Morse 2018-01-15 866
abdf58438356c7 arch/arm/kvm/arm.c Marc Zyngier 2015-06-08 867 preempt_enable();
abdf58438356c7 arch/arm/kvm/arm.c Marc Zyngier 2015-06-08 868
f7ed45be3ba524 arch/arm/kvm/arm.c Christoffer Dall 2013-01-20 869 ret = handle_exit(vcpu, run, ret);
f7ed45be3ba524 arch/arm/kvm/arm.c Christoffer Dall 2013-01-20 870 }
f7ed45be3ba524 arch/arm/kvm/arm.c Christoffer Dall 2013-01-20 871
d9e1397783765a arch/arm/kvm/arm.c Alexander Graf 2016-09-27 872 /* Tell userspace about in-kernel device output levels */
3dbbdf78636e66 arch/arm/kvm/arm.c Christoffer Dall 2017-02-01 873 if (unlikely(!irqchip_in_kernel(vcpu->kvm))) {
d9e1397783765a arch/arm/kvm/arm.c Alexander Graf 2016-09-27 874 kvm_timer_update_run(vcpu);
3dbbdf78636e66 arch/arm/kvm/arm.c Christoffer Dall 2017-02-01 875 kvm_pmu_update_run(vcpu);
3dbbdf78636e66 arch/arm/kvm/arm.c Christoffer Dall 2017-02-01 876 }
d9e1397783765a arch/arm/kvm/arm.c Alexander Graf 2016-09-27 877
20b7035c66bacc virt/kvm/arm/arm.c Jan H. Sch?nherr 2017-11-24 878 kvm_sigset_deactivate(vcpu);
20b7035c66bacc virt/kvm/arm/arm.c Jan H. Sch?nherr 2017-11-24 879
accb757d798c9b virt/kvm/arm/arm.c Christoffer Dall 2017-12-04 880 vcpu_put(vcpu);
f7ed45be3ba524 arch/arm/kvm/arm.c Christoffer Dall 2013-01-20 881 return ret;
749cf76c5a363e arch/arm/kvm/arm.c Christoffer Dall 2013-01-20 882 }
749cf76c5a363e arch/arm/kvm/arm.c Christoffer Dall 2013-01-20 883

:::::: The code at line 861 was first introduced by commit
:::::: 6edaa5307f3f51e4e56dc4c63f68a69d88c6ddf5 KVM: remove kvm_guest_enter/exit wrappers

:::::: TO: Paolo Bonzini <[email protected]>
:::::: CC: Paolo Bonzini <[email protected]>

---
0-DAY kernel test infrastructure Open Source Technology Center
https://lists.01.org/hyperkitty/list/[email protected] Intel Corporation


Attachments:
(No filename) (20.48 kB)
.config.gz (31.50 kB)
Download all attachments

2020-01-11 11:33:21

by Paolo Bonzini

[permalink] [raw]
Subject: Re: [PATCH] KVM: remove unused guest_enter/exit

On 10/01/20 04:13, Alex Shi wrote:
> After commit 6edaa5307f3f ("KVM: remove kvm_guest_enter/exit wrappers")
> no one uses guest_enter/exit anymore.
>
> So better to remove them to simplify code and reduced a bit of object
> size.

There is no reduction in object size, since these are inlines. But PPC
still uses them.

Paolo

2020-01-11 13:24:27

by Alex Shi

[permalink] [raw]
Subject: Re: [PATCH] KVM: remove unused guest_enter/exit



在 2020/1/11 下午7:32, Paolo Bonzini 写道:
> On 10/01/20 04:13, Alex Shi wrote:
>> After commit 6edaa5307f3f ("KVM: remove kvm_guest_enter/exit wrappers")
>> no one uses guest_enter/exit anymore.
>>
>> So better to remove them to simplify code and reduced a bit of object
>> size.
>
> There is no reduction in object size, since these are inlines. But PPC
> still uses them.
>
> Paolo
>

Thanks a lot Paolo. It's my fault to ommit the guest_exit checking.
Yes, guest_exit is still in using. but guest_enter isn't. no one use it.

So how about this?

Thanks
Alex

---

From 5770c6b8b43adc1e26ecfe696488ccc01896ebfd Mon Sep 17 00:00:00 2001
From: Alex Shi <[email protected]>
Date: Sat, 11 Jan 2020 20:25:45 +0800
Subject: [PATCH] KVM: remove unused guest_enter

No one uses guest_enter anymore, so better to remove it.

Signed-off-by: Alex Shi <[email protected]>
Cc: Paolo Bonzini <[email protected]>
Cc: Peter Zijlstra <[email protected]>
Cc: Ingo Molnar <[email protected]>
Cc: Frederic Weisbecker <[email protected]>
Cc: [email protected]
---
include/linux/context_tracking.h | 9 ---------
1 file changed, 9 deletions(-)

diff --git a/include/linux/context_tracking.h b/include/linux/context_tracking.h
index 64ec82851aa3..8150f5ac176c 100644
--- a/include/linux/context_tracking.h
+++ b/include/linux/context_tracking.h
@@ -154,15 +154,6 @@ static inline void guest_exit_irqoff(void)
}
#endif /* CONFIG_VIRT_CPU_ACCOUNTING_GEN */

-static inline void guest_enter(void)
-{
- unsigned long flags;
-
- local_irq_save(flags);
- guest_enter_irqoff();
- local_irq_restore(flags);
-}
-
static inline void guest_exit(void)
{
unsigned long flags;
--
1.8.3.1