From: Cornelia Huck <cohuck@redhat.com>
To: Michael Mueller <mimu@linux.ibm.com>
Cc: Pierre Morel <pmorel@linux.ibm.com>,
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>
Subject: Re: [PATCH v5 10/15] KVM: s390: add functions to (un)register GISC with GISA
Date: Tue, 8 Jan 2019 14:35:27 +0100 [thread overview]
Message-ID: <20190108143527.7a727521.cohuck@redhat.com> (raw)
In-Reply-To: <d845b44f-b06d-47ca-220c-ffe546342a5e@linux.ibm.com>
On Tue, 8 Jan 2019 14:07:06 +0100
Michael Mueller <mimu@linux.ibm.com> wrote:
> On 08.01.19 11:34, Cornelia Huck wrote:
> > On Mon, 7 Jan 2019 18:38:02 +0100
> > Michael Mueller <mimu@linux.ibm.com> wrote:
> >
> >> On 04.01.19 14:19, Cornelia Huck wrote:
> >>> On Wed, 2 Jan 2019 18:29:00 +0100
> >>> Pierre Morel <pmorel@linux.ibm.com> wrote:
> >>>
> >>>> On 19/12/2018 20:17, Michael Mueller wrote:
> >>>>> Add the IAM (Interruption Alert Mask) to the architecture specific
> >>>>> kvm struct. This mask in the GISA is used to define for which ISC
> >>>>> a GIB alert can 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 | 9 ++++++
> >>>>> arch/s390/kvm/interrupt.c | 66 ++++++++++++++++++++++++++++++++++++++++
> >>>>> 2 files changed, 75 insertions(+)
> >>>>>
> >>>
> >>>>> +int kvm_s390_gisc_register(struct kvm *kvm, u32 gisc)
> >>>>> +{
> >>>>> + if (!kvm->arch.gib_in_use)
> >>>>> + return -ENODEV;
> >>>>> + if (gisc > MAX_ISC)
> >>>>> + return -ERANGE;
> >>>>> +
> >>>>> + spin_lock(&kvm->arch.iam_ref_lock);
> >>>>> + if (kvm->arch.iam_ref_count[gisc] == 0)
> >>>>> + kvm->arch.iam |= 0x80 >> gisc;
> >>>>> + kvm->arch.iam_ref_count[gisc]++;
> >>>>> + if (kvm->arch.iam_ref_count[gisc] == 1)
> >>>>> + set_iam(kvm->arch.gisa, kvm->arch.iam);
> >>>>
> >>>> testing the set_iam return value?
> >>>> Even it should be fine if the caller works correctly, this is done
> >>>> before GISA is ever used.
> >>
> >> There is a rc but a check here is not required.
> >>
> >> There are three cases:
> >>
> >> a) This is the first ISC that gets registered, then the GISA is
> >> not in use and IAM is set in the GISA.
> >>
> >> b) A second ISC gets registered and the GISA is *not* in the
> >> alert list. Then the IAM is set here as well.
> >>
> >> c) A second ISC gets registered and the GISA is in the
> >> alert list. Then the IAM is intentionally not set here
> >> by set_iam(). It will be restored by get_ipm() with
> >> the new IAM value by the gib alert processing code.
> >>
> >>
> >>>
> >>> My feeling is that checking the return code is a good idea, even if it
> >>> Should Never Fail(tm).
> >>>
> >>>>
> >>>>> + spin_unlock(&kvm->arch.iam_ref_lock);
> >>>>> +
> >>>>> + return gib->nisc;
> >>>>> +}
> >>>>> +EXPORT_SYMBOL_GPL(kvm_s390_gisc_register);
> >>>>> +
> >>>>> +int kvm_s390_gisc_unregister(struct kvm *kvm, u32 gisc)
> >>>>> +{
> >>>>> + int rc = 0;
> >>>>> +
> >>>>> + if (!kvm->arch.gib_in_use)
> >>>>> + return -ENODEV;
> >>>>> + if (gisc > MAX_ISC)
> >>>>> + return -ERANGE;
> >>>>> +
> >>>>> + spin_lock(&kvm->arch.iam_ref_lock);
> >>>>> + if (kvm->arch.iam_ref_count[gisc] == 0) {
> >>>>> + rc = -EINVAL;
> >>>>> + goto out;
> >>>>> + }
> >>>>> + kvm->arch.iam_ref_count[gisc]--;
> >>>>> + if (kvm->arch.iam_ref_count[gisc] == 0) {
> >>>>> + kvm->arch.iam &= ~(0x80 >> gisc);
> >>>>> + set_iam(kvm->arch.gisa, kvm->arch.iam);
> >>>
> >>> Any chance of this function failing here? If yes, would there be any
> >>> implications?
> >>
> >> It is the same here.
> >
> > I'm not sure that I follow: This is the reverse operation
> > (unregistering the gisc). Can we rely on get_ipm() to do any fixup
> > later? Is that a problem for the caller?
> >
> > Apologies if I sound confused (well, that's because I probably am);
> > this is hard to review without access to the hardware specification.
>
> I think nothing will happen because the AP CLR IRQ call (Pierre?)
> has already taken offline the last AP device.
But doesn't that rely on behaviour by the caller?
If the caller does weird and broken stuff, this function should return
an error, shouldn't it?
>
>
> >
> >>
> >>>
> >>>>> + }
> >>>>> +out:
> >>>>> + spin_unlock(&kvm->arch.iam_ref_lock);
> >>>>> +
> >>>>> + return rc;
> >>>>> +}
> >>>>> +EXPORT_SYMBOL_GPL(kvm_s390_gisc_unregister);
> >>>>> +
> >>>>> void kvm_s390_gib_destroy(void)
> >>>>> {
> >>>>> if (!gib)
> >>>>>
> >>>>
> >>>>
> >>>
> >>
> >
>
next prev parent reply other threads:[~2019-01-08 13:35 UTC|newest]
Thread overview: 72+ 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
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 [this message]
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 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=20190108143527.7a727521.cohuck@redhat.com \
--to=cohuck@redhat.com \
--cc=borntraeger@de.ibm.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=mimu@linux.ibm.com \
--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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox