Lines Matching refs:gi

280  * @gi: gisa interrupt struct to work on
287 static inline u8 gisa_get_ipm_or_restore_iam(struct kvm_s390_gisa_interrupt *gi)
293 word = READ_ONCE(gi->origin->u64.word[0]);
294 alert_mask = READ_ONCE(gi->alert.mask);
299 } while (cmpxchg(&gi->origin->u64.word[0], word, _word) != word);
340 struct kvm_s390_gisa_interrupt *gi = &vcpu->kvm->arch.gisa_int;
344 if (gi->origin)
345 pending_mask |= gisa_get_ipm(gi->origin) << IRQ_PEND_IO_ISC_7;
1174 struct kvm_s390_gisa_interrupt *gi = &vcpu->kvm->arch.gisa_int;
1217 if (gi->origin && gisa_tac_ipm_gisc(gi->origin, isc)) {
1307 struct kvm_s390_gisa_interrupt *gi = &vcpu->kvm->arch.gisa_int;
1321 if (gi->origin &&
1322 (gisa_get_ipm_or_restore_iam(gi) &
1742 struct kvm_s390_gisa_interrupt *gi = &kvm->arch.gisa_int;
1748 if (!gi->origin)
1751 active_mask = (isc_mask & gisa_get_ipm(gi->origin) << 24) << 32;
1754 if (gisa_tac_ipm_gisc(gi->origin, isc))
1777 struct kvm_s390_gisa_interrupt *gi = &kvm->arch.gisa_int;
1795 gisa_set_ipm_gisc(gi->origin, isc);
1807 gisa_set_ipm_gisc(gi->origin, isc);
1898 struct kvm_s390_gisa_interrupt *gi = &kvm->arch.gisa_int;
1913 gi->origin && inti->type & KVM_S390_INT_IO_AI_MASK) {
1915 gisa_set_ipm_gisc(gi->origin, isc);
2246 struct kvm_s390_gisa_interrupt *gi = &kvm->arch.gisa_int;
2270 if (gi->origin && gisa_get_ipm(gi->origin)) {
2277 if (gisa_tac_ipm_gisc(gi->origin, i)) {
3065 struct kvm_s390_gisa_interrupt *gi = &kvm->arch.gisa_int;
3076 if (test_and_set_bit(vcpu_idx, gi->kicked_mask))
3086 struct kvm_s390_gisa_interrupt *gi =
3089 container_of(gi->origin, struct sie_page2, gisa)->kvm;
3092 pending_mask = gisa_get_ipm_or_restore_iam(gi);
3095 hrtimer_forward_now(timer, ns_to_ktime(gi->expires));
3108 struct kvm_s390_gisa_interrupt *gi;
3141 gi = &kvm->arch.gisa_int;
3142 if (hrtimer_active(&gi->timer))
3143 hrtimer_cancel(&gi->timer);
3144 hrtimer_start(&gi->timer, 0, HRTIMER_MODE_REL);
3152 struct kvm_s390_gisa_interrupt *gi = &kvm->arch.gisa_int;
3154 if (!gi->origin)
3156 gisa_clear_ipm(gi->origin);
3157 VM_EVENT(kvm, 3, "gisa 0x%pK cleared", gi->origin);
3162 struct kvm_s390_gisa_interrupt *gi = &kvm->arch.gisa_int;
3166 gi->origin = &kvm->arch.sie_page2->gisa;
3167 gi->alert.mask = 0;
3168 spin_lock_init(&gi->alert.ref_lock);
3169 gi->expires = 50 * 1000; /* 50 usec */
3170 hrtimer_init(&gi->timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL);
3171 gi->timer.function = gisa_vcpu_kicker;
3172 memset(gi->origin, 0, sizeof(struct kvm_s390_gisa));
3173 gi->origin->next_alert = (u32)(u64)gi->origin;
3174 VM_EVENT(kvm, 3, "gisa 0x%pK initialized", gi->origin);
3179 struct kvm_s390_gisa_interrupt *gi = &kvm->arch.gisa_int;
3181 if (!gi->origin)
3183 if (gi->alert.mask)
3185 kvm, gi->alert.mask);
3186 while (gisa_in_alert_list(gi->origin))
3188 hrtimer_cancel(&gi->timer);
3189 gi->origin = NULL;
3211 struct kvm_s390_gisa_interrupt *gi = &kvm->arch.gisa_int;
3213 if (!gi->origin)
3218 spin_lock(&gi->alert.ref_lock);
3219 gi->alert.ref_count[gisc]++;
3220 if (gi->alert.ref_count[gisc] == 1) {
3221 gi->alert.mask |= 0x80 >> gisc;
3222 gisa_set_iam(gi->origin, gi->alert.mask);
3224 spin_unlock(&gi->alert.ref_lock);
3250 struct kvm_s390_gisa_interrupt *gi = &kvm->arch.gisa_int;
3253 if (!gi->origin)
3258 spin_lock(&gi->alert.ref_lock);
3259 if (gi->alert.ref_count[gisc] == 0) {
3263 gi->alert.ref_count[gisc]--;
3264 if (gi->alert.ref_count[gisc] == 0) {
3265 gi->alert.mask &= ~(0x80 >> gisc);
3266 gisa_set_iam(gi->origin, gi->alert.mask);
3269 spin_unlock(&gi->alert.ref_lock);