Lines Matching refs:gi
282 * @gi: gisa interrupt struct to work on
289 static inline u8 gisa_get_ipm_or_restore_iam(struct kvm_s390_gisa_interrupt *gi)
295 word = READ_ONCE(gi->origin->u64.word[0]);
296 alert_mask = READ_ONCE(gi->alert.mask);
301 } while (cmpxchg(&gi->origin->u64.word[0], word, _word) != word);
332 struct kvm_s390_gisa_interrupt *gi = &vcpu->kvm->arch.gisa_int;
336 if (gi->origin)
337 pending_mask |= gisa_get_ipm(gi->origin) << IRQ_PEND_IO_ISC_7;
1166 struct kvm_s390_gisa_interrupt *gi = &vcpu->kvm->arch.gisa_int;
1209 if (gi->origin && gisa_tac_ipm_gisc(gi->origin, isc)) {
1299 struct kvm_s390_gisa_interrupt *gi = &vcpu->kvm->arch.gisa_int;
1313 if (gi->origin &&
1314 (gisa_get_ipm_or_restore_iam(gi) &
1749 struct kvm_s390_gisa_interrupt *gi = &kvm->arch.gisa_int;
1755 if (!gi->origin)
1758 active_mask = (isc_mask & gisa_get_ipm(gi->origin) << 24) << 32;
1761 if (gisa_tac_ipm_gisc(gi->origin, isc))
1784 struct kvm_s390_gisa_interrupt *gi = &kvm->arch.gisa_int;
1802 gisa_set_ipm_gisc(gi->origin, isc);
1814 gisa_set_ipm_gisc(gi->origin, isc);
1905 struct kvm_s390_gisa_interrupt *gi = &kvm->arch.gisa_int;
1919 if (gi->origin && inti->type & KVM_S390_INT_IO_AI_MASK) {
1921 gisa_set_ipm_gisc(gi->origin, isc);
2252 struct kvm_s390_gisa_interrupt *gi = &kvm->arch.gisa_int;
2276 if (gi->origin && gisa_get_ipm(gi->origin)) {
2283 if (gisa_tac_ipm_gisc(gi->origin, i)) {
3071 struct kvm_s390_gisa_interrupt *gi = &kvm->arch.gisa_int;
3082 if (test_and_set_bit(vcpu_idx, gi->kicked_mask))
3092 struct kvm_s390_gisa_interrupt *gi =
3095 container_of(gi->origin, struct sie_page2, gisa)->kvm;
3098 pending_mask = gisa_get_ipm_or_restore_iam(gi);
3101 hrtimer_forward_now(timer, ns_to_ktime(gi->expires));
3114 struct kvm_s390_gisa_interrupt *gi;
3148 gi = &kvm->arch.gisa_int;
3149 if (hrtimer_active(&gi->timer))
3150 hrtimer_cancel(&gi->timer);
3151 hrtimer_start(&gi->timer, 0, HRTIMER_MODE_REL);
3159 struct kvm_s390_gisa_interrupt *gi = &kvm->arch.gisa_int;
3161 if (!gi->origin)
3163 gisa_clear_ipm(gi->origin);
3164 VM_EVENT(kvm, 3, "gisa 0x%pK cleared", gi->origin);
3169 struct kvm_s390_gisa_interrupt *gi = &kvm->arch.gisa_int;
3173 gi->origin = &kvm->arch.sie_page2->gisa;
3174 gi->alert.mask = 0;
3175 spin_lock_init(&gi->alert.ref_lock);
3176 gi->expires = 50 * 1000; /* 50 usec */
3177 hrtimer_init(&gi->timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL);
3178 gi->timer.function = gisa_vcpu_kicker;
3179 memset(gi->origin, 0, sizeof(struct kvm_s390_gisa));
3180 gi->origin->next_alert = (u32)virt_to_phys(gi->origin);
3181 VM_EVENT(kvm, 3, "gisa 0x%pK initialized", gi->origin);
3186 struct kvm_s390_gisa_interrupt *gi = &kvm->arch.gisa_int;
3191 if (gi->origin)
3209 struct kvm_s390_gisa_interrupt *gi = &kvm->arch.gisa_int;
3210 struct kvm_s390_gisa *gisa = gi->origin;
3212 if (!gi->origin)
3214 WARN(gi->alert.mask != 0x00,
3216 gi->alert.mask);
3217 gi->alert.mask = 0x00;
3218 if (gisa_set_iam(gi->origin, gi->alert.mask))
3220 hrtimer_cancel(&gi->timer);
3221 gi->origin = NULL;
3227 struct kvm_s390_gisa_interrupt *gi = &kvm->arch.gisa_int;
3231 if (!gi->origin)
3262 struct kvm_s390_gisa_interrupt *gi = &kvm->arch.gisa_int;
3264 if (!gi->origin)
3269 spin_lock(&gi->alert.ref_lock);
3270 gi->alert.ref_count[gisc]++;
3271 if (gi->alert.ref_count[gisc] == 1) {
3272 gi->alert.mask |= 0x80 >> gisc;
3273 gisa_set_iam(gi->origin, gi->alert.mask);
3275 spin_unlock(&gi->alert.ref_lock);
3301 struct kvm_s390_gisa_interrupt *gi = &kvm->arch.gisa_int;
3304 if (!gi->origin)
3309 spin_lock(&gi->alert.ref_lock);
3310 if (gi->alert.ref_count[gisc] == 0) {
3314 gi->alert.ref_count[gisc]--;
3315 if (gi->alert.ref_count[gisc] == 0) {
3316 gi->alert.mask &= ~(0x80 >> gisc);
3317 gisa_set_iam(gi->origin, gi->alert.mask);
3320 spin_unlock(&gi->alert.ref_lock);
3328 struct kvm_s390_gisa_interrupt *gi;
3342 gi = &kvm->arch.gisa_int;
3344 if (!(gi->origin->g1.simm & AIS_MODE_MASK(gaite->gisc)) ||
3345 !(gi->origin->g1.nimm & AIS_MODE_MASK(gaite->gisc))) {
3346 gisa_set_ipm_gisc(gi->origin, gaite->gisc);
3347 if (hrtimer_active(&gi->timer))
3348 hrtimer_cancel(&gi->timer);
3349 hrtimer_start(&gi->timer, 0, HRTIMER_MODE_REL);