KVM: s390: abstract conversion between isc and enum irq_types
The abstraction of the conversion between an isc value and an irq_type by means of functions isc_to_irq_type() and irq_type_to_isc() allows to clarify the respective operations where used. Signed-off-by: Michael Mueller <mimu@linux.vnet.ibm.com> Reviewed-by: Halil Pasic <pasic@linux.vnet.ibm.com> Reviewed-by: Pierre Morel <pmorel@linux.vnet.ibm.com> Reviewed-by: Christian Borntraeger <borntraeger@de.ibm.com> Reviewed-by: Cornelia Huck <cohuck@redhat.com> Reviewed-by: David Hildenbrand <david@redhat.com> Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com>
This commit is contained in:
parent
f7a6509fe0
commit
ee739f4b21
@ -213,6 +213,16 @@ static inline unsigned long pending_irqs(struct kvm_vcpu *vcpu)
|
|||||||
vcpu->arch.local_int.pending_irqs;
|
vcpu->arch.local_int.pending_irqs;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline int isc_to_irq_type(unsigned long isc)
|
||||||
|
{
|
||||||
|
return IRQ_PEND_IO_ISC_0 + isc;
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline int irq_type_to_isc(unsigned long irq_type)
|
||||||
|
{
|
||||||
|
return irq_type - IRQ_PEND_IO_ISC_0;
|
||||||
|
}
|
||||||
|
|
||||||
static unsigned long disable_iscs(struct kvm_vcpu *vcpu,
|
static unsigned long disable_iscs(struct kvm_vcpu *vcpu,
|
||||||
unsigned long active_mask)
|
unsigned long active_mask)
|
||||||
{
|
{
|
||||||
@ -220,7 +230,7 @@ static unsigned long disable_iscs(struct kvm_vcpu *vcpu,
|
|||||||
|
|
||||||
for (i = 0; i <= MAX_ISC; i++)
|
for (i = 0; i <= MAX_ISC; i++)
|
||||||
if (!(vcpu->arch.sie_block->gcr[6] & isc_to_isc_bits(i)))
|
if (!(vcpu->arch.sie_block->gcr[6] & isc_to_isc_bits(i)))
|
||||||
active_mask &= ~(1UL << (IRQ_PEND_IO_ISC_0 + i));
|
active_mask &= ~(1UL << (isc_to_irq_type(i)));
|
||||||
|
|
||||||
return active_mask;
|
return active_mask;
|
||||||
}
|
}
|
||||||
@ -901,7 +911,7 @@ static int __must_check __deliver_io(struct kvm_vcpu *vcpu,
|
|||||||
fi = &vcpu->kvm->arch.float_int;
|
fi = &vcpu->kvm->arch.float_int;
|
||||||
|
|
||||||
spin_lock(&fi->lock);
|
spin_lock(&fi->lock);
|
||||||
isc_list = &fi->lists[irq_type - IRQ_PEND_IO_ISC_0];
|
isc_list = &fi->lists[irq_type_to_isc(irq_type)];
|
||||||
inti = list_first_entry_or_null(isc_list,
|
inti = list_first_entry_or_null(isc_list,
|
||||||
struct kvm_s390_interrupt_info,
|
struct kvm_s390_interrupt_info,
|
||||||
list);
|
list);
|
||||||
@ -1401,7 +1411,7 @@ static struct kvm_s390_interrupt_info *get_io_int(struct kvm *kvm,
|
|||||||
list_del_init(&iter->list);
|
list_del_init(&iter->list);
|
||||||
fi->counters[FIRQ_CNTR_IO] -= 1;
|
fi->counters[FIRQ_CNTR_IO] -= 1;
|
||||||
if (list_empty(isc_list))
|
if (list_empty(isc_list))
|
||||||
clear_bit(IRQ_PEND_IO_ISC_0 + isc, &fi->pending_irqs);
|
clear_bit(isc_to_irq_type(isc), &fi->pending_irqs);
|
||||||
spin_unlock(&fi->lock);
|
spin_unlock(&fi->lock);
|
||||||
return iter;
|
return iter;
|
||||||
}
|
}
|
||||||
@ -1528,7 +1538,7 @@ static int __inject_io(struct kvm *kvm, struct kvm_s390_interrupt_info *inti)
|
|||||||
isc = int_word_to_isc(inti->io.io_int_word);
|
isc = int_word_to_isc(inti->io.io_int_word);
|
||||||
list = &fi->lists[FIRQ_LIST_IO_ISC_0 + isc];
|
list = &fi->lists[FIRQ_LIST_IO_ISC_0 + isc];
|
||||||
list_add_tail(&inti->list, list);
|
list_add_tail(&inti->list, list);
|
||||||
set_bit(IRQ_PEND_IO_ISC_0 + isc, &fi->pending_irqs);
|
set_bit(isc_to_irq_type(isc), &fi->pending_irqs);
|
||||||
spin_unlock(&fi->lock);
|
spin_unlock(&fi->lock);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user