Lines Matching +full:- +full:kvm

1 /* SPDX-License-Identifier: GPL-2.0 */
3 * definition for kvm on s390
16 #include <linux/kvm.h>
24 #define IS_TE_ENABLED(vcpu) ((vcpu->arch.sie_block->ecb & ECB_TE))
27 ((*(char *)phys_to_virt((vcpu)->arch.sie_block->itdba) == TDB_FORMAT1))
34 debug_sprintf_event((d_kvm)->arch.dbf, d_loglevel, d_string "\n", \
37 "%d: " d_string "\n", (d_kvm)->userspace_pid, \
49 debug_sprintf_event(d_kvm->arch.dbf, d_loglevel, d_string "\n", \
55 debug_sprintf_event(d_vcpu->kvm->arch.dbf, d_loglevel, \
56 "%02d[%016lx-%016lx]: " d_string "\n", d_vcpu->vcpu_id, \
57 d_vcpu->arch.sie_block->gpsw.mask, d_vcpu->arch.sie_block->gpsw.addr,\
63 atomic_or(flags, &vcpu->arch.sie_block->cpuflags); in kvm_s390_set_cpuflags()
68 atomic_andnot(flags, &vcpu->arch.sie_block->cpuflags); in kvm_s390_clear_cpuflags()
73 return (atomic_read(&vcpu->arch.sie_block->cpuflags) & flags) == flags; in kvm_s390_test_cpuflags()
83 return test_bit(vcpu->vcpu_idx, vcpu->kvm->arch.idle_mask); in is_vcpu_idle()
86 static inline int kvm_is_ucontrol(struct kvm *kvm) in kvm_is_ucontrol() argument
89 if (kvm->arch.gmap) in kvm_is_ucontrol()
100 return vcpu->arch.sie_block->prefix << GUEST_PREFIX_SHIFT; in kvm_s390_get_prefix()
105 VCPU_EVENT(vcpu, 3, "set prefix of cpu %03u to 0x%x", vcpu->vcpu_id, in kvm_s390_set_prefix()
107 vcpu->arch.sie_block->prefix = prefix >> GUEST_PREFIX_SHIFT; in kvm_s390_set_prefix()
114 u32 base2 = vcpu->arch.sie_block->ipb >> 28; in kvm_s390_get_base_disp_s()
115 u32 disp2 = ((vcpu->arch.sie_block->ipb & 0x0fff0000) >> 16); in kvm_s390_get_base_disp_s()
120 return (base2 ? vcpu->run->s.regs.gprs[base2] : 0) + disp2; in kvm_s390_get_base_disp_s()
125 u32 base1 = vcpu->arch.sie_block->ipb >> 28; in kvm_s390_get_base_disp_siy()
129 disp1 = sign_extend64(((vcpu->arch.sie_block->ipb & 0x0fff0000) >> 16) + in kvm_s390_get_base_disp_siy()
130 ((vcpu->arch.sie_block->ipb & 0xff00) << 4), 19); in kvm_s390_get_base_disp_siy()
135 return (base1 ? vcpu->run->s.regs.gprs[base1] : 0) + disp1; in kvm_s390_get_base_disp_siy()
142 u32 base1 = (vcpu->arch.sie_block->ipb & 0xf0000000) >> 28; in kvm_s390_get_base_disp_sse()
143 u32 disp1 = (vcpu->arch.sie_block->ipb & 0x0fff0000) >> 16; in kvm_s390_get_base_disp_sse()
144 u32 base2 = (vcpu->arch.sie_block->ipb & 0xf000) >> 12; in kvm_s390_get_base_disp_sse()
145 u32 disp2 = vcpu->arch.sie_block->ipb & 0x0fff; in kvm_s390_get_base_disp_sse()
147 *address1 = (base1 ? vcpu->run->s.regs.gprs[base1] : 0) + disp1; in kvm_s390_get_base_disp_sse()
148 *address2 = (base2 ? vcpu->run->s.regs.gprs[base2] : 0) + disp2; in kvm_s390_get_base_disp_sse()
159 *r1 = (vcpu->arch.sie_block->ipb & 0x00f00000) >> 20; in kvm_s390_get_regs_rre()
161 *r2 = (vcpu->arch.sie_block->ipb & 0x000f0000) >> 16; in kvm_s390_get_regs_rre()
166 u32 base2 = vcpu->arch.sie_block->ipb >> 28; in kvm_s390_get_base_disp_rsy()
167 u32 disp2 = ((vcpu->arch.sie_block->ipb & 0x0fff0000) >> 16) + in kvm_s390_get_base_disp_rsy()
168 ((vcpu->arch.sie_block->ipb & 0xff00) << 4); in kvm_s390_get_base_disp_rsy()
176 return (base2 ? vcpu->run->s.regs.gprs[base2] : 0) + (long)(int)disp2; in kvm_s390_get_base_disp_rsy()
181 u32 base2 = vcpu->arch.sie_block->ipb >> 28; in kvm_s390_get_base_disp_rs()
182 u32 disp2 = ((vcpu->arch.sie_block->ipb & 0x0fff0000) >> 16); in kvm_s390_get_base_disp_rs()
187 return (base2 ? vcpu->run->s.regs.gprs[base2] : 0) + disp2; in kvm_s390_get_base_disp_rs()
193 vcpu->arch.sie_block->gpsw.mask &= ~(3UL << 44); in kvm_s390_set_psw_cc()
194 vcpu->arch.sie_block->gpsw.mask |= cc << 44; in kvm_s390_set_psw_cc()
197 /* test availability of facility in a kvm instance */
198 static inline int test_kvm_facility(struct kvm *kvm, unsigned long nr) in test_kvm_facility() argument
200 return __test_facility(nr, kvm->arch.model.fac_mask) && in test_kvm_facility()
201 __test_facility(nr, kvm->arch.model.fac_list); in test_kvm_facility()
209 return -EINVAL; in set_kvm_facility()
215 static inline int test_kvm_cpu_feat(struct kvm *kvm, unsigned long nr) in test_kvm_cpu_feat() argument
218 return test_bit_inv(nr, kvm->arch.cpu_feat); in test_kvm_cpu_feat()
222 static inline int kvm_s390_user_cpu_state_ctrl(struct kvm *kvm) in kvm_s390_user_cpu_state_ctrl() argument
224 return kvm->arch.user_cpu_state_ctrl != 0; in kvm_s390_user_cpu_state_ctrl()
227 static inline void kvm_s390_set_user_cpu_state_ctrl(struct kvm *kvm) in kvm_s390_set_user_cpu_state_ctrl() argument
229 if (kvm->arch.user_cpu_state_ctrl) in kvm_s390_set_user_cpu_state_ctrl()
232 VM_EVENT(kvm, 3, "%s", "ENABLE: Userspace CPU state control"); in kvm_s390_set_user_cpu_state_ctrl()
233 kvm->arch.user_cpu_state_ctrl = 1; in kvm_s390_set_user_cpu_state_ctrl()
245 node = rb_last(&slots->gfn_tree); in kvm_s390_get_gfn_end()
246 ms = container_of(node, struct kvm_memory_slot, gfn_node[slots->node_idx]); in kvm_s390_get_gfn_end()
247 return ms->base_gfn + ms->npages; in kvm_s390_get_gfn_end()
250 static inline u32 kvm_s390_get_gisa_desc(struct kvm *kvm) in kvm_s390_get_gisa_desc() argument
254 if (!kvm->arch.gisa_int.origin) in kvm_s390_get_gisa_desc()
257 gd = virt_to_phys(kvm->arch.gisa_int.origin); in kvm_s390_get_gisa_desc()
267 int kvm_s390_pv_set_aside(struct kvm *kvm, u16 *rc, u16 *rrc);
268 int kvm_s390_pv_deinit_aside_vm(struct kvm *kvm, u16 *rc, u16 *rrc);
269 int kvm_s390_pv_deinit_cleanup_all(struct kvm *kvm, u16 *rc, u16 *rrc);
270 int kvm_s390_pv_deinit_vm(struct kvm *kvm, u16 *rc, u16 *rrc);
271 int kvm_s390_pv_init_vm(struct kvm *kvm, u16 *rc, u16 *rrc);
272 int kvm_s390_pv_set_sec_parms(struct kvm *kvm, void *hdr, u64 length, u16 *rc,
274 int kvm_s390_pv_unpack(struct kvm *kvm, unsigned long addr, unsigned long size,
278 int kvm_s390_pv_dump_stor_state(struct kvm *kvm, void __user *buff_user,
280 int kvm_s390_pv_dump_complete(struct kvm *kvm, void __user *buff_user,
283 static inline u64 kvm_s390_pv_get_handle(struct kvm *kvm) in kvm_s390_pv_get_handle() argument
285 return kvm->arch.pv.handle; in kvm_s390_pv_get_handle()
290 return vcpu->arch.pv.handle; in kvm_s390_pv_cpu_get_handle()
299 void kvm_s390_clear_float_irqs(struct kvm *kvm);
300 int __must_check kvm_s390_inject_vm(struct kvm *kvm,
323 struct kvm_s390_interrupt_info *kvm_s390_get_io_int(struct kvm *kvm,
325 int kvm_s390_reinject_io_int(struct kvm *kvm,
327 int kvm_s390_mask_adapter(struct kvm *kvm, unsigned int id, bool masked);
334 struct kvm_s390_sie_block *sie_block = vcpu->arch.sie_block; in kvm_s390_rewind_psw()
336 sie_block->gpsw.addr = __rewind_psw(sie_block->gpsw, ilen); in kvm_s390_rewind_psw()
340 kvm_s390_rewind_psw(vcpu, -ilen); in kvm_s390_forward_psw()
344 /* don't inject PER events if we re-execute the instruction */ in kvm_s390_retry_instr()
345 vcpu->arch.sie_block->icptstatus &= ~0x02; in kvm_s390_retry_instr()
370 void kvm_s390_vsie_init(struct kvm *kvm);
371 void kvm_s390_vsie_destroy(struct kvm *kvm);
377 /* implemented in kvm-s390.c */
378 int kvm_s390_try_set_tod_clock(struct kvm *kvm, const struct kvm_s390_vm_tod_clock *gtod);
393 int kvm_s390_cpus_from_pv(struct kvm *kvm, u16 *rc, u16 *rrc);
398 static inline void kvm_s390_vcpu_block_all(struct kvm *kvm) in kvm_s390_vcpu_block_all() argument
403 WARN_ON(!mutex_is_locked(&kvm->lock)); in kvm_s390_vcpu_block_all()
404 kvm_for_each_vcpu(i, vcpu, kvm) in kvm_s390_vcpu_block_all()
408 static inline void kvm_s390_vcpu_unblock_all(struct kvm *kvm) in kvm_s390_vcpu_unblock_all() argument
413 kvm_for_each_vcpu(i, vcpu, kvm) in kvm_s390_vcpu_unblock_all()
417 static inline u64 kvm_s390_get_tod_clock_fast(struct kvm *kvm) in kvm_s390_get_tod_clock_fast() argument
422 rc = get_tod_clock_fast() + kvm->arch.epoch; in kvm_s390_get_tod_clock_fast()
428 * kvm_s390_inject_prog_cond - conditionally inject a program check
445 * has been stored in vcpu->arch.pgm and can be injected with
448 * Returns: - the original @rc value if @rc was negative (internal error)
449 * - zero if @rc was already zero
450 * - zero or error code from injecting if @rc was positive
457 return kvm_s390_inject_prog_irq(vcpu, &vcpu->arch.pgm); in kvm_s390_inject_prog_cond()
466 void kvm_s390_destroy_adapters(struct kvm *kvm);
476 void kvm_s390_gisa_init(struct kvm *kvm);
477 void kvm_s390_gisa_clear(struct kvm *kvm);
478 void kvm_s390_gisa_destroy(struct kvm *kvm);
479 void kvm_s390_gisa_disable(struct kvm *kvm);
480 void kvm_s390_gisa_enable(struct kvm *kvm);
496 static inline union ipte_control *kvm_s390_get_ipte_control(struct kvm *kvm) in kvm_s390_get_ipte_control() argument
498 struct bsca_block *sca = kvm->arch.sca; /* SCA version doesn't matter */ in kvm_s390_get_ipte_control()
500 return &sca->ipte_control; in kvm_s390_get_ipte_control()
521 * Note: The kvm->lock must be held while calling this function
523 * @kvm: the KVM guest
525 void kvm_s390_vcpu_crypto_reset_all(struct kvm *kvm);
533 * @kvm: the KVM guest
535 void kvm_s390_vcpu_pci_enable_interp(struct kvm *kvm);