All of lore.kernel.org
 help / color / mirror / Atom feed
From: Michael Mueller <mimu@linux.ibm.com>
To: Cornelia Huck <cohuck@redhat.com>
Cc: KVM Mailing List <kvm@vger.kernel.org>,
	Linux-S390 Mailing List <linux-s390@vger.kernel.org>,
	linux-kernel@vger.kernel.org,
	Martin Schwidefsky <schwidefsky@de.ibm.com>,
	Heiko Carstens <heiko.carstens@de.ibm.com>,
	Christian Borntraeger <borntraeger@de.ibm.com>,
	Janosch Frank <frankja@linux.ibm.com>,
	David Hildenbrand <david@redhat.com>,
	Halil Pasic <pasic@linux.ibm.com>,
	Pierre Morel <pmorel@linux.ibm.com>
Subject: Re: [PATCH v5 05/15] KVM: s390: unify pending_irqs() and pending_irqs_no_gisa()
Date: Thu, 20 Dec 2018 12:49:56 +0100	[thread overview]
Message-ID: <62bf4bcf-585f-ddfc-e7a5-18fc946819d9@linux.ibm.com> (raw)
In-Reply-To: <20181220120614.65acacac.cohuck@redhat.com>



On 20.12.18 12:06, Cornelia Huck wrote:
> On Wed, 19 Dec 2018 20:17:46 +0100
> Michael Mueller <mimu@linux.ibm.com> wrote:
> 
>> Use a single function with parameter irq_flags to differentiate
>> between cases.
>>
>> New irq flag:
>>     IRQ_FLAG_LOCAL: include vcpu local interruptions pending
>>     IRQ_FLAG_FLOATING: include vcpu floating interruptions pending
>>     IRQ_FLAG_GISA: include GISA interruptions pending in IPM
> 
> I presume that means that irqs may be in more than one set? Or are gisa
> irqs not considered floating irqs, because they use a different
> mechanism?

Currently, the interruptions managed in GISA are floating only. But
that might change in future. The idea is not to subsume IRQ_FLAG_GISA
in IRQ_FLAG_FLOATING but to be able to address the right set of 
procedures to determine the irq pending set for a given subset of irq
types that have different implementations.

There might be a better name for IRQ_FLAG_FLOATING then?

> 
>>
>> New irq masks:
>>     IRQ_MASK_ALL: include all types
>>     IRQ_MASK_NO_GISA: include all types but GISA
>>
>> Examples:
>>     pending_irqs(vcpu, IRQ_MASK_ALL)
>>     pending_irqs(vcpu, IRQ_MASK_NO_GISA)
>>
>> There will be more irq flags with upcoming patches.
>>
>> Signed-off-by: Michael Mueller <mimu@linux.ibm.com>
>> ---
>>   arch/s390/kvm/interrupt.c | 33 +++++++++++++++++++++------------
>>   1 file changed, 21 insertions(+), 12 deletions(-)
>>
>> diff --git a/arch/s390/kvm/interrupt.c b/arch/s390/kvm/interrupt.c
>> index 093b568b6356..4ab20d2eb180 100644
>> --- a/arch/s390/kvm/interrupt.c
>> +++ b/arch/s390/kvm/interrupt.c
>> @@ -31,6 +31,13 @@
>>   #define PFAULT_DONE 0x0680
>>   #define VIRTIO_PARAM 0x0d00
>>   
>> +#define IRQ_FLAG_LOCAL    0x8000 /* include local interruption pending mask */
>> +#define IRQ_FLAG_FLOATING 0x4000 /* include float interruption pending mask */
>> +#define IRQ_FLAG_GISA     0x2000 /* include GISA interruption pending mask */
>> +
>> +#define IRQ_MASK_ALL      (IRQ_FLAG_LOCAL | IRQ_FLAG_FLOATING | IRQ_FLAG_GISA)
>> +#define IRQ_MASK_NO_GISA  (IRQ_MASK_ALL & ~IRQ_FLAG_GISA)
>> +
>>   /* handle external calls via sigp interpretation facility */
>>   static int sca_ext_call_pending(struct kvm_vcpu *vcpu, int *src_id)
>>   {
>> @@ -237,16 +244,18 @@ static inline int kvm_s390_gisa_tac_ipm_gisc(struct kvm_s390_gisa *gisa, u32 gis
>>   	return test_and_clear_bit_inv(IPM_BIT_OFFSET + gisc, (unsigned long *) gisa);
>>   }
>>   
>> -static inline unsigned long pending_irqs_no_gisa(struct kvm_vcpu *vcpu)
>> +static inline unsigned long pending_irqs(struct kvm_vcpu *vcpu, u16 irq_flags)
> 
> Any deeper reason why this is a u16? 16 bits should be enough for
> everyone? :)

I want to use the 8 bits for the IRQ type and the other 8 for additional 
controls, see: "KVM: s390: restore IAM in get_ipm() when IPM is clean"

> 
>>   {
>> -	return vcpu->kvm->arch.float_int.pending_irqs |
>> -		vcpu->arch.local_int.pending_irqs;
>> -}
>> +	unsigned long pending_irqs = 0;
>>   
>> -static inline unsigned long pending_irqs(struct kvm_vcpu *vcpu)
>> -{
>> -	return pending_irqs_no_gisa(vcpu) |
>> -		kvm_s390_gisa_get_ipm(vcpu->kvm->arch.gisa) << IRQ_PEND_IO_ISC_7;
>> +	if (irq_flags & IRQ_FLAG_LOCAL)
>> +		pending_irqs |= vcpu->arch.local_int.pending_irqs;
>> +	if (irq_flags & IRQ_FLAG_FLOATING)
>> +		pending_irqs |= vcpu->kvm->arch.float_int.pending_irqs;
>> +	if (irq_flags & IRQ_FLAG_GISA)
>> +		pending_irqs |= kvm_s390_gisa_get_ipm(vcpu->kvm->arch.gisa) <<
>> +			IRQ_PEND_IO_ISC_7;
>> +	return pending_irqs;
>>   }
>>   
>>   static inline int isc_to_irq_type(unsigned long isc)
>> @@ -275,7 +284,7 @@ static unsigned long deliverable_irqs(struct kvm_vcpu *vcpu)
>>   {
>>   	unsigned long active_mask;
>>   
>> -	active_mask = pending_irqs(vcpu);
>> +	active_mask = pending_irqs(vcpu, IRQ_MASK_ALL);
>>   	if (!active_mask)
>>   		return 0;
>>   
>> @@ -343,7 +352,7 @@ static void __reset_intercept_indicators(struct kvm_vcpu *vcpu)
>>   
>>   static void set_intercept_indicators_io(struct kvm_vcpu *vcpu)
>>   {
>> -	if (!(pending_irqs_no_gisa(vcpu) & IRQ_PEND_IO_MASK))
>> +	if (!(pending_irqs(vcpu, IRQ_MASK_NO_GISA) & IRQ_PEND_IO_MASK))
> 
> I/O interrupts are always floating, so you probably could check for
> only floating (excluding gisa) irqs here.

That's right.

> 
>>   		return;
>>   	else if (psw_ioint_disabled(vcpu))
>>   		kvm_s390_set_cpuflags(vcpu, CPUSTAT_IO_INT);Store Data
>> @@ -353,7 +362,7 @@ static void set_intercept_indicators_io(struct kvm_vcpu *vcpu)
>>   

  reply	other threads:[~2018-12-20 11:49 UTC|newest]

Thread overview: 73+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-12-19 19:17 [PATCH v5 00/15] KVM: s390: make use of the GIB Michael Mueller
2018-12-19 19:17 ` [PATCH v5 01/15] KVM: s390: unregister debug feature on failing arch init Michael Mueller
2018-12-19 20:10   ` Cornelia Huck
2018-12-20  7:49     ` Michael Mueller
2018-12-20  7:55       ` Christian Borntraeger
2018-12-19 19:17 ` [PATCH v5 02/15] KVM: s390: coding style issue kvm_s390_gisa_init/clear() Michael Mueller
2018-12-19 20:13   ` Cornelia Huck
2019-01-02 16:50   ` Pierre Morel
2019-01-07 16:16     ` Michael Mueller
2018-12-19 19:17 ` [PATCH v5 03/15] KVM: s390: factor out nullify_gisa() Michael Mueller
2018-12-19 19:17 ` [PATCH v5 04/15] KVM: s390: use pending_irqs_no_gisa() where appropriate Michael Mueller
2018-12-19 20:16   ` Cornelia Huck
2019-01-02 16:52   ` Pierre Morel
2018-12-19 19:17 ` [PATCH v5 05/15] KVM: s390: unify pending_irqs() and pending_irqs_no_gisa() Michael Mueller
2018-12-20 10:09   ` Michael Mueller
2018-12-20 11:06   ` Cornelia Huck
2018-12-20 11:49     ` Michael Mueller [this message]
2018-12-20 12:15       ` Halil Pasic
2018-12-20 12:21       ` Cornelia Huck
2018-12-20 12:33         ` Michael Mueller
2018-12-20 15:43           ` pierre morel
2018-12-20 16:40             ` Michael Mueller
2018-12-19 19:17 ` [PATCH v5 06/15] KVM: s390: remove prefix kvm_s390_gisa_ from static inline functions Michael Mueller
2018-12-20 12:24   ` Cornelia Huck
2018-12-20 14:37     ` Michael Mueller
2018-12-19 19:17 ` [PATCH v5 07/15] s390/cio: add function chsc_sgib() Michael Mueller
2018-12-19 19:17 ` [PATCH v5 08/15] KVM: s390: add the GIB and its related life-cyle functions Michael Mueller
2018-12-20 12:28   ` Cornelia Huck
2019-01-03  9:49   ` Pierre Morel
2019-01-07 16:25     ` Michael Mueller
2018-12-19 19:17 ` [PATCH v5 09/15] KVM: s390: add kvm reference to struct sie_page2 Michael Mueller
2018-12-19 19:17 ` [PATCH v5 10/15] KVM: s390: add functions to (un)register GISC with GISA Michael Mueller
2018-12-20 14:32   ` Michael Mueller
2019-01-02 17:29   ` Pierre Morel
2019-01-02 18:26     ` Pierre Morel
2019-01-04 13:19     ` Cornelia Huck
2019-01-07 17:38       ` Michael Mueller
2019-01-08 10:34         ` Cornelia Huck
2019-01-08 13:07           ` Michael Mueller
2019-01-08 13:35             ` Cornelia Huck
2019-01-08 13:36           ` Halil Pasic
2019-01-08 13:41             ` Cornelia Huck
2019-01-08 14:23               ` Halil Pasic
2018-12-19 19:17 ` [PATCH v5 11/15] KVM: s390: restore IAM in get_ipm() when IPM is clean Michael Mueller
2019-01-03 15:06   ` Pierre Morel
2019-01-07 18:17     ` Michael Mueller
2019-01-06 23:32   ` Halil Pasic
2019-01-08  8:06     ` Michael Mueller
2018-12-19 19:17 ` [PATCH v5 12/15] KVM: s390: do not restore IAM immediately before SIE entry Michael Mueller
2019-01-03 15:00   ` Pierre Morel
2019-01-07 17:53     ` Michael Mueller
2018-12-19 19:17 ` [PATCH v5 13/15] KVM: s390: add function process_gib_alert_list() Michael Mueller
2019-01-03 14:43   ` Pierre Morel
2019-01-07 19:18     ` Michael Mueller
2019-01-08 14:27       ` Halil Pasic
2019-01-09 11:39       ` Pierre Morel
2019-01-07 19:19     ` Michael Mueller
2019-01-08  6:37       ` Heiko Carstens
2019-01-08 12:59   ` Halil Pasic
2019-01-08 12:59     ` Halil Pasic
2019-01-08 15:21     ` Michael Mueller
2019-01-08 18:34       ` Halil Pasic
2019-01-09 12:14       ` Pierre Morel
2019-01-09 13:10         ` Halil Pasic
2019-01-09 14:49           ` Pierre Morel
2019-01-09 16:18             ` Halil Pasic
2018-12-19 19:17 ` [PATCH v5 14/15] KVM: s390: add and wire function gib_alert_irq_handler() Michael Mueller
2019-01-03 15:16   ` Pierre Morel
2019-01-08 10:06     ` Michael Mueller
2019-01-09 12:35       ` Pierre Morel
2018-12-19 19:17 ` [PATCH v5 15/15] KVM: s390: start using the GIB Michael Mueller
2019-01-02 17:45   ` Pierre Morel
2019-01-08  9:03     ` Michael Mueller

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=62bf4bcf-585f-ddfc-e7a5-18fc946819d9@linux.ibm.com \
    --to=mimu@linux.ibm.com \
    --cc=borntraeger@de.ibm.com \
    --cc=cohuck@redhat.com \
    --cc=david@redhat.com \
    --cc=frankja@linux.ibm.com \
    --cc=heiko.carstens@de.ibm.com \
    --cc=kvm@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-s390@vger.kernel.org \
    --cc=pasic@linux.ibm.com \
    --cc=pmorel@linux.ibm.com \
    --cc=schwidefsky@de.ibm.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.