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 v6 11/13] KVM: s390: add functions to (un)register GISC with GISA
Date: Tue, 29 Jan 2019 14:32:21 +0100	[thread overview]
Message-ID: <b323fd49-0a72-fe78-0cdb-42a23f264811@linux.ibm.com> (raw)
In-Reply-To: <20190129140905.288d750a.cohuck@redhat.com>



On 29.01.19 14:09, Cornelia Huck wrote:
> On Thu, 24 Jan 2019 13:59:37 +0100
> Michael Mueller <mimu@linux.ibm.com> wrote:
> 
>> Add the Interruption Alert Mask (IAM) to the architecture specific
>> kvm struct. This mask in the GISA is used to define for which ISC
>> a GIB alert will be issued.
>>
>> The functions kvm_s390_gisc_register() and kvm_s390_gisc_unregister()
>> are used to (un)register a GISC (guest ISC) with a virtual machine and
>> its GISA.
>>
>> Upon successful completion, kvm_s390_gisc_register() returns the
>> ISC to be used for GIB alert interruptions. A negative return code
>> indicates an error during registration.
>>
>> Theses functions will be used by other adapter types like AP and PCI to
>> request pass-through interruption support.
>>
>> Signed-off-by: Michael Mueller <mimu@linux.ibm.com>
>> ---
>>   arch/s390/include/asm/kvm_host.h |  13 +++++
>>   arch/s390/kvm/interrupt.c        | 117 +++++++++++++++++++++++++++++++++++++++
>>   2 files changed, 130 insertions(+)
>>
> 
>> +int kvm_s390_gisc_register(struct kvm *kvm, u32 gisc)
>> +{
>> +	struct kvm_s390_gisa_interrupt *gi = &kvm->arch.gisa_int;
>> +	u8 alert_mask;
>> +
>> +	if (!gi->origin)
>> +		return -ENODEV;
>> +	if (gisc > MAX_ISC)
>> +		return -ERANGE;
>> +
>> +	spin_lock(&gi->alert.ref_lock);
>> +	if (gi->alert.ref_count[gisc] == 0) {
> 
> If the ref_count is 0 here...
> 
>> +		alert_mask = gi->alert.mask | 0x80 >> gisc;
>> +		WRITE_ONCE(gi->alert.mask, alert_mask);
>> +	}
>> +	gi->alert.ref_count[gisc]++;
>> +	if (gi->alert.ref_count[gisc] == 1)
> 
> ...it will certainly be 1 here, won't it?

Sure, the increment is unconditional and can be done right away.
Thus it is logically the same and now symmetric to the unregister
function:

diff --git a/arch/s390/kvm/interrupt.c b/arch/s390/kvm/interrupt.c
index ba314da746b7..f37dfb01c63c 100644
--- a/arch/s390/kvm/interrupt.c
+++ b/arch/s390/kvm/interrupt.c
@@ -2976,11 +2976,11 @@ int kvm_s390_gisc_register(struct kvm *kvm, u32 
gisc)
                 return -ERANGE;

         spin_lock(&gi->alert.ref_lock);
-       if (gi->alert.ref_count[gisc] == 0)
-               gi->alert.mask |= 0x80 >> gisc;
         gi->alert.ref_count[gisc]++;
-       if (gi->alert.ref_count[gisc] == 1)
+       if (gi->alert.ref_count[gisc] == 1) {
+               gi->alert.mask |= 0x80 >> gisc;
                 gisa_set_iam(gi->origin, gi->alert.mask);
+       }
         spin_unlock(&gi->alert.ref_lock);

         return gib->nisc;


> 
> Can you do all of the manipulations in a single if branch?
> 
>> +		gisa_set_iam(gi->origin, alert_mask);
>> +	spin_unlock(&gi->alert.ref_lock);
>> +
>> +	return gib->nisc;
>> +}
> 

Thanks,
Michael


  reply	other threads:[~2019-01-29 13:32 UTC|newest]

Thread overview: 45+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-01-24 12:59 [PATCH v6 00/13] KVM: s390: make use of the GIB Michael Mueller
2019-01-24 12:59 ` [PATCH v6 01/13] KVM: s390: drop obsolete else path Michael Mueller
2019-01-24 14:39   ` Cornelia Huck
2019-01-28 13:57   ` Halil Pasic
2019-01-24 12:59 ` [PATCH v6 02/13] KVM: s390: make bitmap declaration consitent Michael Mueller
2019-01-24 14:11   ` Cornelia Huck
2019-01-28 13:58   ` Halil Pasic
2019-01-24 12:59 ` [PATCH v6 03/13] KVM: s390: move bitmap idle_mask into arch struct top level Michael Mueller
2019-01-28 15:30   ` Pierre Morel
2019-01-29 13:56   ` Cornelia Huck
2019-01-24 12:59 ` [PATCH v6 04/13] KVM: s390: coding style kvm_s390_gisa_init/clear() Michael Mueller
2019-01-28 14:43   ` Halil Pasic
2019-01-24 12:59 ` [PATCH v6 05/13] KVM: s390: use pending_irqs_no_gisa() where appropriate Michael Mueller
2019-01-28 15:54   ` Halil Pasic
2019-01-24 12:59 ` [PATCH v6 06/13] KVM: s390: remove kvm_s390_ from gisa static inline functions Michael Mueller
2019-01-24 14:26   ` Cornelia Huck
2019-01-25 14:22   ` Pierre Morel
2019-01-28 15:04   ` Halil Pasic
2019-01-28 15:55   ` Halil Pasic
2019-01-24 12:59 ` [PATCH v6 07/13] KVM: s390: introduce struct kvm_s390_gisa_interrupt Michael Mueller
2019-01-24 15:06   ` Cornelia Huck
2019-01-24 15:24     ` Michael Mueller
2019-01-28 16:50   ` Halil Pasic
2019-01-29 13:22     ` Cornelia Huck
2019-01-29 15:47       ` Michael Mueller
2019-01-29 16:07         ` Halil Pasic
2019-01-24 12:59 ` [PATCH v6 08/13] s390/cio: add function chsc_sgib() Michael Mueller
2019-01-24 12:59 ` [PATCH v6 09/13] KVM: s390: add the GIB and its related life-cyle functions Michael Mueller
2019-01-28 16:59   ` Halil Pasic
2019-01-24 12:59 ` [PATCH v6 10/13] KVM: s390: add kvm reference to struct sie_page2 Michael Mueller
2019-01-29 12:27   ` Halil Pasic
2019-01-24 12:59 ` [PATCH v6 11/13] KVM: s390: add functions to (un)register GISC with GISA Michael Mueller
2019-01-28 15:45   ` Pierre Morel
2019-01-28 16:04     ` Michael Mueller
2019-01-28 18:12   ` Halil Pasic
2019-01-29 13:09   ` Cornelia Huck
2019-01-29 13:32     ` Michael Mueller [this message]
2019-01-24 12:59 ` [PATCH v6 12/13] KVM: s390: add gib_alert_irq_handler() Michael Mueller
2019-01-29 13:26   ` Halil Pasic
2019-01-29 15:29     ` Michael Mueller
2019-01-29 16:45       ` Halil Pasic
2019-01-30 16:24       ` Pierre Morel
2019-01-30 16:41         ` Michael Mueller
2019-01-24 12:59 ` [PATCH v6 13/13] KVM: s390: start using the GIB Michael Mueller
2019-01-29 13:27   ` Halil Pasic

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=b323fd49-0a72-fe78-0cdb-42a23f264811@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.