All of lore.kernel.org
 help / color / mirror / Atom feed
From: Cornelia Huck <cornelia.huck@de.ibm.com>
To: Alexander Graf <agraf@suse.de>
Cc: Marcelo Tosatti <mtosatti@redhat.com>,
	Gleb Natapov <gleb@redhat.com>, KVM <kvm@vger.kernel.org>,
	linux-s390 <linux-s390@vger.kernel.org>,
	Avi Kivity <avi.kivity@gmail.com>,
	Christian Borntraeger <borntraeger@de.ibm.com>,
	Carsten Otte <cotte@de.ibm.com>,
	Heiko Carstens <heiko.carstens@de.ibm.com>,
	Martin Schwidefsky <schwidefsky@de.ibm.com>,
	Sebastian Ott <sebott@linux.vnet.ibm.com>
Subject: Re: [PATCH 1/5] KVM: s390: Support for I/O interrupts.
Date: Tue, 11 Dec 2012 13:46:25 +0100	[thread overview]
Message-ID: <20121211134625.79288f0f@BR9GNB5Z> (raw)
In-Reply-To: <A3FC0CA6-45AE-46D0-A772-BCA34F128F0C@suse.de>

On Tue, 11 Dec 2012 11:22:04 +0100
Alexander Graf <agraf@suse.de> wrote:

> 
> On 10.12.2012, at 11:09, Cornelia Huck wrote:
> 
> > On Mon, 10 Dec 2012 08:33:10 +0100
> > Alexander Graf <agraf@suse.de> wrote:
> > 
> >> 
> >> On 07.12.2012, at 13:30, Cornelia Huck wrote:
> >> 
> >>> Add support for handling I/O interrupts (standard, subchannel-related
> >>> ones and rudimentary adapter interrupts).
> >>> 
> >>> The subchannel-identifying parameters are encoded into the interrupt
> >>> type.
> >>> 
> >>> I/O interrupts are floating, so they can't be injected on a specific
> >>> vcpu.
> >>> 
> >>> Reviewed-by: Marcelo Tosatti <mtosatti@redhat.com>
> >>> Signed-off-by: Cornelia Huck <cornelia.huck@de.ibm.com>
> >>> ---
> >>> Documentation/virtual/kvm/api.txt |   4 ++
> >>> arch/s390/include/asm/kvm_host.h  |   2 +
> >>> arch/s390/kvm/interrupt.c         | 115 ++++++++++++++++++++++++++++++++++++--
> >>> include/uapi/linux/kvm.h          |   6 ++
> >>> 4 files changed, 122 insertions(+), 5 deletions(-)
> >>> 
> >>> diff --git a/Documentation/virtual/kvm/api.txt b/Documentation/virtual/kvm/api.txt
> >>> index 6671fdc..e298a72 100644
> >>> --- a/Documentation/virtual/kvm/api.txt
> >>> +++ b/Documentation/virtual/kvm/api.txt
> >>> @@ -2068,6 +2068,10 @@ KVM_S390_INT_VIRTIO (vm) - virtio external interrupt; external interrupt
> >>> KVM_S390_INT_SERVICE (vm) - sclp external interrupt; sclp parameter in parm
> >>> KVM_S390_INT_EMERGENCY (vcpu) - sigp emergency; source cpu in parm
> >>> KVM_S390_INT_EXTERNAL_CALL (vcpu) - sigp external call; source cpu in parm
> >>> +KVM_S390_INT_IO(ai,cssid,ssid,schid) (vm) - compound value to indicate an
> >>> +    I/O interrupt (ai - adapter interrupt; cssid,ssid,schid - subchannel);
> >>> +    I/O interruption parameters in parm (subchannel) and parm64 (intparm,
> >>> +    interruption subclass)
> >>> 
> >>> Note that the vcpu ioctl is asynchronous to vcpu execution.
> >>> 
> >>> diff --git a/arch/s390/include/asm/kvm_host.h b/arch/s390/include/asm/kvm_host.h
> >>> index b784154..e47f697 100644
> >>> --- a/arch/s390/include/asm/kvm_host.h
> >>> +++ b/arch/s390/include/asm/kvm_host.h
> >>> @@ -76,6 +76,7 @@ struct kvm_s390_sie_block {
> >>> 	__u64	epoch;			/* 0x0038 */
> >>> 	__u8	reserved40[4];		/* 0x0040 */
> >>> #define LCTL_CR0	0x8000
> >>> +#define LCTL_CR6	0x0200
> >>> 	__u16   lctl;			/* 0x0044 */
> >>> 	__s16	icpua;			/* 0x0046 */
> >>> 	__u32	ictl;			/* 0x0048 */
> >>> @@ -127,6 +128,7 @@ struct kvm_vcpu_stat {
> >>> 	u32 deliver_prefix_signal;
> >>> 	u32 deliver_restart_signal;
> >>> 	u32 deliver_program_int;
> >>> +	u32 deliver_io_int;
> >>> 	u32 exit_wait_state;
> >>> 	u32 instruction_stidp;
> >>> 	u32 instruction_spx;
> >>> diff --git a/arch/s390/kvm/interrupt.c b/arch/s390/kvm/interrupt.c
> >>> index c30615e..070ba22 100644
> >>> --- a/arch/s390/kvm/interrupt.c
> >>> +++ b/arch/s390/kvm/interrupt.c
> >>> @@ -21,11 +21,26 @@
> >>> #include "gaccess.h"
> >>> #include "trace-s390.h"
> >>> 
> >>> +#define IOINT_SCHID_MASK 0x0000ffff
> >>> +#define IOINT_SSID_MASK 0x00030000
> >>> +#define IOINT_CSSID_MASK 0x03fc0000
> >>> +#define IOINT_AI_MASK 0x04000000
> >>> +
> >>> +static int is_ioint(u64 type)
> >>> +{
> >>> +	return ((type & 0xfffe0000u) != 0xfffe0000u);
> >>> +}
> >>> +
> >>> static int psw_extint_disabled(struct kvm_vcpu *vcpu)
> >>> {
> >>> 	return !(vcpu->arch.sie_block->gpsw.mask & PSW_MASK_EXT);
> >>> }
> >>> 
> >>> +static int psw_ioint_disabled(struct kvm_vcpu *vcpu)
> >>> +{
> >>> +	return !(vcpu->arch.sie_block->gpsw.mask & PSW_MASK_IO);
> >>> +}
> >>> +
> >>> static int psw_interrupts_disabled(struct kvm_vcpu *vcpu)
> >>> {
> >>> 	if ((vcpu->arch.sie_block->gpsw.mask & PSW_MASK_PER) ||
> >>> @@ -68,7 +83,18 @@ static int __interrupt_is_deliverable(struct kvm_vcpu *vcpu,
> >>> 	case KVM_S390_RESTART:
> >>> 		return 1;
> >>> 	default:
> >>> -		BUG();
> >>> +		if (is_ioint(inti->type)) {
> >> 
> >> Though I usually like if (...) { positive) } else { abort(); } coding style in general, it makes code quite hard to read when you are limited to 80 characters per line :)
> >> 
> >> I think it'd really help readability if you instead would write
> >> 
> >> if (!is_ioint(...)) {
> >>    BUG();
> >> }
> >> 
> >> and then continue without indent. That problem gets even more obvious further down the file.
> > 
> > Hm, "bad state last" seems to parse, though.
> 
> Fine with me. Extract the io bits into a separate function then :). Or maybe better even just use gcc switch magic:
> 
>   case 0x0 ... 0xfffdffff:

What, magic numbers? ;)

I'll check how this works out. Adding a #define for that range might
even define better what INT_IO is.

  reply	other threads:[~2012-12-11 12:46 UTC|newest]

Thread overview: 24+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-12-07 12:30 [PATCH v4 0/5] s390: Host support for channel I/O Cornelia Huck
2012-12-07 12:30 ` [PATCH 1/5] KVM: s390: Support for I/O interrupts Cornelia Huck
2012-12-10  7:33   ` Alexander Graf
2012-12-10 10:09     ` Cornelia Huck
2012-12-11 10:22       ` Alexander Graf
2012-12-11 12:46         ` Cornelia Huck [this message]
2012-12-12  0:36           ` Alexander Graf
2012-12-07 12:30 ` [PATCH 2/5] KVM: s390: Add support for machine checks Cornelia Huck
2012-12-10  7:51   ` Alexander Graf
2012-12-10 10:12     ` Cornelia Huck
2012-12-19  9:44   ` Heiko Carstens
2012-12-19  9:44     ` Heiko Carstens
2012-12-19 10:20     ` Christian Borntraeger
2012-12-19 13:07       ` Heiko Carstens
2012-12-07 12:30 ` [PATCH 3/5] KVM: s390: In-kernel handling of I/O instructions Cornelia Huck
2012-12-10  7:53   ` Alexander Graf
2012-12-10 10:14     ` Cornelia Huck
2012-12-07 12:30 ` [PATCH 4/5] KVM: s390: Base infrastructure for enabling capabilities Cornelia Huck
2012-12-10  7:54   ` Alexander Graf
2012-12-10 10:16     ` Cornelia Huck
2012-12-11 10:24       ` Alexander Graf
2012-12-07 12:30 ` [PATCH 5/5] KVM: s390: Add support for channel I/O instructions Cornelia Huck
2012-12-10  8:01   ` Alexander Graf
  -- strict thread matches above, loose matches on Subject: below --
2012-10-31 16:24 [RFC PATCH v3 0/5] s390: Host support for channel I/O Cornelia Huck
2012-10-31 16:24 ` [PATCH 1/5] KVM: s390: Support for I/O interrupts Cornelia Huck

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=20121211134625.79288f0f@BR9GNB5Z \
    --to=cornelia.huck@de.ibm.com \
    --cc=agraf@suse.de \
    --cc=avi.kivity@gmail.com \
    --cc=borntraeger@de.ibm.com \
    --cc=cotte@de.ibm.com \
    --cc=gleb@redhat.com \
    --cc=heiko.carstens@de.ibm.com \
    --cc=kvm@vger.kernel.org \
    --cc=linux-s390@vger.kernel.org \
    --cc=mtosatti@redhat.com \
    --cc=schwidefsky@de.ibm.com \
    --cc=sebott@linux.vnet.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.