All of lore.kernel.org
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH] s390x/css: disabled subchannels cannot be status pending
@ 2018-05-04 13:16 Cornelia Huck
  2018-05-04 13:39 ` Thomas Huth
                   ` (3 more replies)
  0 siblings, 4 replies; 8+ messages in thread
From: Cornelia Huck @ 2018-05-04 13:16 UTC (permalink / raw)
  To: Christian Borntraeger, Alexander Graf
  Cc: Thomas Huth, Halil Pasic, qemu-s390x, qemu-devel, Cornelia Huck

The 3270 code will try to post an attention interrupt when the
3270 emulator (e.g. x3270) attaches. If the guest has not yet
enabled the subchannel for the 3270 device, we will give it a
spurious status during msch when it does so later.

To fix this, just don't do anything in css_conditional_io_interrupt()
if the subchannel is not enabled. The 3270 code will work fine with
that, and the other user of this function (virtio-ccw) never
attempts to post an interrupt for a disabled device to begin with.

Reported-by: Thomas Huth <thuth@redhat.com>
Signed-off-by: Cornelia Huck <cohuck@redhat.com>
---
 hw/s390x/css.c | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/hw/s390x/css.c b/hw/s390x/css.c
index 301bf1772f..56c3fa8c89 100644
--- a/hw/s390x/css.c
+++ b/hw/s390x/css.c
@@ -616,6 +616,14 @@ void css_inject_io_interrupt(SubchDev *sch)
 
 void css_conditional_io_interrupt(SubchDev *sch)
 {
+    /*
+     * If the subchannel is not enabled, it is not made status pending
+     * (see PoP p. 16-17, "Status Control").
+     */
+    if (!(sch->curr_status.pmcw.flags & PMCW_FLAGS_MASK_ENA)) {
+        return;
+    }
+
     /*
      * If the subchannel is not currently status pending, make it pending
      * with alert status.
-- 
2.14.3

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* Re: [Qemu-devel] [PATCH] s390x/css: disabled subchannels cannot be status pending
  2018-05-04 13:16 [Qemu-devel] [PATCH] s390x/css: disabled subchannels cannot be status pending Cornelia Huck
@ 2018-05-04 13:39 ` Thomas Huth
  2018-05-04 13:44   ` [Qemu-devel] [qemu-s390x] " Christian Borntraeger
  2018-05-04 15:02 ` [Qemu-devel] " Halil Pasic
                   ` (2 subsequent siblings)
  3 siblings, 1 reply; 8+ messages in thread
From: Thomas Huth @ 2018-05-04 13:39 UTC (permalink / raw)
  To: Cornelia Huck, Christian Borntraeger, Alexander Graf
  Cc: Halil Pasic, qemu-s390x, qemu-devel

On 04.05.2018 15:16, Cornelia Huck wrote:
> The 3270 code will try to post an attention interrupt when the
> 3270 emulator (e.g. x3270) attaches. If the guest has not yet
> enabled the subchannel for the 3270 device, we will give it a
> spurious status during msch when it does so later.
> 
> To fix this, just don't do anything in css_conditional_io_interrupt()
> if the subchannel is not enabled. The 3270 code will work fine with
> that, and the other user of this function (virtio-ccw) never
> attempts to post an interrupt for a disabled device to begin with.
> 
> Reported-by: Thomas Huth <thuth@redhat.com>
> Signed-off-by: Cornelia Huck <cohuck@redhat.com>
> ---
>  hw/s390x/css.c | 8 ++++++++
>  1 file changed, 8 insertions(+)
> 
> diff --git a/hw/s390x/css.c b/hw/s390x/css.c
> index 301bf1772f..56c3fa8c89 100644
> --- a/hw/s390x/css.c
> +++ b/hw/s390x/css.c
> @@ -616,6 +616,14 @@ void css_inject_io_interrupt(SubchDev *sch)
>  
>  void css_conditional_io_interrupt(SubchDev *sch)
>  {
> +    /*
> +     * If the subchannel is not enabled, it is not made status pending
> +     * (see PoP p. 16-17, "Status Control").
> +     */
> +    if (!(sch->curr_status.pmcw.flags & PMCW_FLAGS_MASK_ENA)) {
> +        return;
> +    }
> +
>      /*
>       * If the subchannel is not currently status pending, make it pending
>       * with alert status.
> 

Tested-by: Thomas Huth <thuth@redhat.com>

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [Qemu-devel] [qemu-s390x] [PATCH] s390x/css: disabled subchannels cannot be status pending
  2018-05-04 13:39 ` Thomas Huth
@ 2018-05-04 13:44   ` Christian Borntraeger
  0 siblings, 0 replies; 8+ messages in thread
From: Christian Borntraeger @ 2018-05-04 13:44 UTC (permalink / raw)
  To: Thomas Huth, Cornelia Huck, Alexander Graf
  Cc: Halil Pasic, qemu-s390x, qemu-devel



On 05/04/2018 03:39 PM, Thomas Huth wrote:
> On 04.05.2018 15:16, Cornelia Huck wrote:
>> The 3270 code will try to post an attention interrupt when the
>> 3270 emulator (e.g. x3270) attaches. If the guest has not yet
>> enabled the subchannel for the 3270 device, we will give it a
>> spurious status during msch when it does so later.
>>
>> To fix this, just don't do anything in css_conditional_io_interrupt()
>> if the subchannel is not enabled. The 3270 code will work fine with
>> that, and the other user of this function (virtio-ccw) never
>> attempts to post an interrupt for a disabled device to begin with.
>>
>> Reported-by: Thomas Huth <thuth@redhat.com>
>> Signed-off-by: Cornelia Huck <cohuck@redhat.com>

I agree with your understanding of the PoP.

Acked-by: Christian Borntraeger <borntraeger@de.ibm.com>

>> ---
>>  hw/s390x/css.c | 8 ++++++++
>>  1 file changed, 8 insertions(+)
>>
>> diff --git a/hw/s390x/css.c b/hw/s390x/css.c
>> index 301bf1772f..56c3fa8c89 100644
>> --- a/hw/s390x/css.c
>> +++ b/hw/s390x/css.c
>> @@ -616,6 +616,14 @@ void css_inject_io_interrupt(SubchDev *sch)
>>  
>>  void css_conditional_io_interrupt(SubchDev *sch)
>>  {
>> +    /*
>> +     * If the subchannel is not enabled, it is not made status pending
>> +     * (see PoP p. 16-17, "Status Control").
>> +     */
>> +    if (!(sch->curr_status.pmcw.flags & PMCW_FLAGS_MASK_ENA)) {
>> +        return;
>> +    }
>> +
>>      /*
>>       * If the subchannel is not currently status pending, make it pending
>>       * with alert status.
>>
> 
> Tested-by: Thomas Huth <thuth@redhat.com>
> 

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [Qemu-devel] [PATCH] s390x/css: disabled subchannels cannot be status pending
  2018-05-04 13:16 [Qemu-devel] [PATCH] s390x/css: disabled subchannels cannot be status pending Cornelia Huck
  2018-05-04 13:39 ` Thomas Huth
@ 2018-05-04 15:02 ` Halil Pasic
  2018-05-07 10:12   ` Cornelia Huck
  2018-05-07  8:41 ` [Qemu-devel] [qemu-s390x] " David Hildenbrand
  2018-05-08  9:55 ` [Qemu-devel] " Cornelia Huck
  3 siblings, 1 reply; 8+ messages in thread
From: Halil Pasic @ 2018-05-04 15:02 UTC (permalink / raw)
  To: Cornelia Huck, Christian Borntraeger, Alexander Graf
  Cc: Thomas Huth, qemu-s390x, qemu-devel

Could we somehow get 'fix' or something similar into the title?

Also do we need cc stable for this? I guess this is broken
for a while now.

On 05/04/2018 03:16 PM, Cornelia Huck wrote:
> The 3270 code will try to post an attention interrupt when the
> 3270 emulator (e.g. x3270) attaches. If the guest has not yet
> enabled the subchannel for the 3270 device, we will give it a
> spurious status during msch when it does so later.

Maybe something like 'The spurious status will preclude the successful
execution of msch (e.g. when the guest later tries to enable
the subchannel).' I had difficulties getting your sentence right-away.

> 
> To fix this, just don't do anything in css_conditional_io_interrupt()
> if the subchannel is not enabled. The 3270 code will work fine with
> that, and the other user of this function (virtio-ccw) never
> attempts to post an interrupt for a disabled device to begin with.
> 

And I guess vfio-ccw is also unaffected, as the passed through
stuff is going to handle this correctly on the lower levels.

> Reported-by: Thomas Huth <thuth@redhat.com>
> Signed-off-by: Cornelia Huck <cohuck@redhat.com>

Overall I agree with the patch.

Acked-by: Halil Pasic <pasic@linux.ibm.com>

> ---
>   hw/s390x/css.c | 8 ++++++++
>   1 file changed, 8 insertions(+)
> 
> diff --git a/hw/s390x/css.c b/hw/s390x/css.c
> index 301bf1772f..56c3fa8c89 100644
> --- a/hw/s390x/css.c
> +++ b/hw/s390x/css.c
> @@ -616,6 +616,14 @@ void css_inject_io_interrupt(SubchDev *sch)
>   
>   void css_conditional_io_interrupt(SubchDev *sch)

Loosely related:
What is the semantic difference between css_inject_io_interrupt and
this css_conditional_io_interrup? The css_conditional_io_interrupt
could be 'unsolicited' or 'virtio notification'. This function also
relies on the serialization of io instructions or?

Also there is this paragraph to be considered if this is indeed
about unsolicited:
"""
The subchannel and device status associated with
an unsolicited interruption condition is never merged
with that of any currently existing interruption condi-
tion. If the subchannel is currently status pending, the
unsolicited interruption condition is held in abeyance
in either the channel subsystem or the device, as
appropriate, until the status-pending condition has
been cleared.
"""


>   {
> +    /*
> +     * If the subchannel is not enabled, it is not made status pending
> +     * (see PoP p. 16-17, "Status Control").
> +     */

In not sure about the reference. We usually don't do that or? And the page
number may change. I would probably just drop the PoP reference.

> +    if (!(sch->curr_status.pmcw.flags & PMCW_FLAGS_MASK_ENA)) {
> +        return;
> +    }
> +

We don't have a scenario where the guest is expected to do some 'recovery'
after being educated about some condition by the means of an alert-status,
do we?

I also wonder if this is the right place to handle the problem. The
3870 also manipulates scsw.dstat before calling this. And I'm not sure
where/if is that cleared, or if it's OK to leave it set...

Regards,
Halil

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [Qemu-devel] [qemu-s390x] [PATCH] s390x/css: disabled subchannels cannot be status pending
  2018-05-04 13:16 [Qemu-devel] [PATCH] s390x/css: disabled subchannels cannot be status pending Cornelia Huck
  2018-05-04 13:39 ` Thomas Huth
  2018-05-04 15:02 ` [Qemu-devel] " Halil Pasic
@ 2018-05-07  8:41 ` David Hildenbrand
  2018-05-08  9:55 ` [Qemu-devel] " Cornelia Huck
  3 siblings, 0 replies; 8+ messages in thread
From: David Hildenbrand @ 2018-05-07  8:41 UTC (permalink / raw)
  To: Cornelia Huck, Christian Borntraeger, Alexander Graf
  Cc: Halil Pasic, Thomas Huth, qemu-s390x, qemu-devel

On 04.05.2018 15:16, Cornelia Huck wrote:
> The 3270 code will try to post an attention interrupt when the
> 3270 emulator (e.g. x3270) attaches. If the guest has not yet
> enabled the subchannel for the 3270 device, we will give it a
> spurious status during msch when it does so later.
> 
> To fix this, just don't do anything in css_conditional_io_interrupt()
> if the subchannel is not enabled. The 3270 code will work fine with
> that, and the other user of this function (virtio-ccw) never
> attempts to post an interrupt for a disabled device to begin with.
> 
> Reported-by: Thomas Huth <thuth@redhat.com>
> Signed-off-by: Cornelia Huck <cohuck@redhat.com>
> ---
>  hw/s390x/css.c | 8 ++++++++
>  1 file changed, 8 insertions(+)
> 
> diff --git a/hw/s390x/css.c b/hw/s390x/css.c
> index 301bf1772f..56c3fa8c89 100644
> --- a/hw/s390x/css.c
> +++ b/hw/s390x/css.c
> @@ -616,6 +616,14 @@ void css_inject_io_interrupt(SubchDev *sch)
>  
>  void css_conditional_io_interrupt(SubchDev *sch)
>  {
> +    /*
> +     * If the subchannel is not enabled, it is not made status pending
> +     * (see PoP p. 16-17, "Status Control").
> +     */
> +    if (!(sch->curr_status.pmcw.flags & PMCW_FLAGS_MASK_ENA)) {
> +        return;
> +    }
> +
>      /*
>       * If the subchannel is not currently status pending, make it pending
>       * with alert status.
> 

Reviewed-by: David Hildenbrand <david@redhat.com>

-- 

Thanks,

David / dhildenb

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [Qemu-devel] [PATCH] s390x/css: disabled subchannels cannot be status pending
  2018-05-04 15:02 ` [Qemu-devel] " Halil Pasic
@ 2018-05-07 10:12   ` Cornelia Huck
  2018-05-07 11:08     ` Halil Pasic
  0 siblings, 1 reply; 8+ messages in thread
From: Cornelia Huck @ 2018-05-07 10:12 UTC (permalink / raw)
  To: Halil Pasic
  Cc: Christian Borntraeger, Alexander Graf, Thomas Huth, qemu-s390x,
	qemu-devel

On Fri, 4 May 2018 17:02:07 +0200
Halil Pasic <pasic@linux.ibm.com> wrote:

> Could we somehow get 'fix' or something similar into the title?

Frankly, I have no idea how to do so in a readable way.

> 
> Also do we need cc stable for this? I guess this is broken
> for a while now.

The function has been like that since its introduction, but only 3270
tries to do something on non-enabled subchannels, and this is the
easiest place to fence it off. Stable probably doesn't hurt.

> 
> On 05/04/2018 03:16 PM, Cornelia Huck wrote:
> > The 3270 code will try to post an attention interrupt when the
> > 3270 emulator (e.g. x3270) attaches. If the guest has not yet
> > enabled the subchannel for the 3270 device, we will give it a
> > spurious status during msch when it does so later.  
> 
> Maybe something like 'The spurious status will preclude the successful
> execution of msch (e.g. when the guest later tries to enable
> the subchannel).' I had difficulties getting your sentence right-away.

I would have problems parsing your sentence :)

"..., we will present a spurious cc 1 (status pending) when it uses
msch on it later on, e.g. when trying to enable the subchannel."

?

> 
> > 
> > To fix this, just don't do anything in css_conditional_io_interrupt()
> > if the subchannel is not enabled. The 3270 code will work fine with
> > that, and the other user of this function (virtio-ccw) never
> > attempts to post an interrupt for a disabled device to begin with.
> >   
> 
> And I guess vfio-ccw is also unaffected, as the passed through
> stuff is going to handle this correctly on the lower levels.

Yes, vfio-ccw does not use this code path at all.

> 
> > Reported-by: Thomas Huth <thuth@redhat.com>
> > Signed-off-by: Cornelia Huck <cohuck@redhat.com>  
> 
> Overall I agree with the patch.
> 
> Acked-by: Halil Pasic <pasic@linux.ibm.com>
> 
> > ---
> >   hw/s390x/css.c | 8 ++++++++
> >   1 file changed, 8 insertions(+)
> > 
> > diff --git a/hw/s390x/css.c b/hw/s390x/css.c
> > index 301bf1772f..56c3fa8c89 100644
> > --- a/hw/s390x/css.c
> > +++ b/hw/s390x/css.c
> > @@ -616,6 +616,14 @@ void css_inject_io_interrupt(SubchDev *sch)
> >   
> >   void css_conditional_io_interrupt(SubchDev *sch)  
> 
> Loosely related:
> What is the semantic difference between css_inject_io_interrupt and
> this css_conditional_io_interrup? The css_conditional_io_interrupt
> could be 'unsolicited' or 'virtio notification'. This function also
> relies on the serialization of io instructions or?

I introduced the "conditional interrupt" function to inject virtio
notifications. 3270 started using this interface later on. I had not
intended it to be a "generic unsolicited interrupt" interface.

> 
> Also there is this paragraph to be considered if this is indeed
> about unsolicited:
> """
> The subchannel and device status associated with
> an unsolicited interruption condition is never merged
> with that of any currently existing interruption condi-
> tion. If the subchannel is currently status pending, the
> unsolicited interruption condition is held in abeyance
> in either the channel subsystem or the device, as
> appropriate, until the status-pending condition has
> been cleared.
> """
> 
> 
> >   {
> > +    /*
> > +     * If the subchannel is not enabled, it is not made status pending
> > +     * (see PoP p. 16-17, "Status Control").
> > +     */  
> 
> In not sure about the reference. We usually don't do that or? And the page
> number may change. I would probably just drop the PoP reference.

I did not spot it immediately, that's why I added it.

> 
> > +    if (!(sch->curr_status.pmcw.flags & PMCW_FLAGS_MASK_ENA)) {
> > +        return;
> > +    }
> > +  
> 
> We don't have a scenario where the guest is expected to do some 'recovery'
> after being educated about some condition by the means of an alert-status,
> do we?

As said, this function was initially introduced for virtio
notifications, not as a generic interface.

> 
> I also wonder if this is the right place to handle the problem. The
> 3870 also manipulates scsw.dstat before calling this. And I'm not sure
> where/if is that cleared, or if it's OK to leave it set...

It's the easiest way to fix this. 3270 probably wants some review
regarding its interaction with the css as well, but that's something
for another day.

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [Qemu-devel] [PATCH] s390x/css: disabled subchannels cannot be status pending
  2018-05-07 10:12   ` Cornelia Huck
@ 2018-05-07 11:08     ` Halil Pasic
  0 siblings, 0 replies; 8+ messages in thread
From: Halil Pasic @ 2018-05-07 11:08 UTC (permalink / raw)
  To: Cornelia Huck
  Cc: Christian Borntraeger, Alexander Graf, Thomas Huth, qemu-s390x,
	qemu-devel



On 05/07/2018 12:12 PM, Cornelia Huck wrote:
> On Fri, 4 May 2018 17:02:07 +0200
> Halil Pasic <pasic@linux.ibm.com> wrote:
> 
>> Could we somehow get 'fix' or something similar into the title?
> 
> Frankly, I have no idea how to do so in a readable way.
> 

OK. Neither do I have a competitive counter proposal.

>>
>> Also do we need cc stable for this? I guess this is broken
>> for a while now.
> 
> The function has been like that since its introduction, but only 3270
> tries to do something on non-enabled subchannels, and this is the
> easiest place to fence it off. Stable probably doesn't hurt.
> 
>>
>> On 05/04/2018 03:16 PM, Cornelia Huck wrote:
>>> The 3270 code will try to post an attention interrupt when the
>>> 3270 emulator (e.g. x3270) attaches. If the guest has not yet
>>> enabled the subchannel for the 3270 device, we will give it a
>>> spurious status during msch when it does so later.
>>
>> Maybe something like 'The spurious status will preclude the successful
>> execution of msch (e.g. when the guest later tries to enable
>> the subchannel).' I had difficulties getting your sentence right-away.
> 
> I would have problems parsing your sentence :)
> 
> "..., we will present a spurious cc 1 (status pending) when it uses
> msch on it later on, e.g. when trying to enable the subchannel."
> 
> ?

I think this is better.

> 
>>
>>>
>>> To fix this, just don't do anything in css_conditional_io_interrupt()
>>> if the subchannel is not enabled. The 3270 code will work fine with
>>> that, and the other user of this function (virtio-ccw) never
>>> attempts to post an interrupt for a disabled device to begin with.
>>>    
>>
>> And I guess vfio-ccw is also unaffected, as the passed through
>> stuff is going to handle this correctly on the lower levels.
> 
> Yes, vfio-ccw does not use this code path at all.
> 
>>
>>> Reported-by: Thomas Huth <thuth@redhat.com>
>>> Signed-off-by: Cornelia Huck <cohuck@redhat.com>
>>
>> Overall I agree with the patch.
>>
>> Acked-by: Halil Pasic <pasic@linux.ibm.com>
>>
>>> ---
>>>    hw/s390x/css.c | 8 ++++++++
>>>    1 file changed, 8 insertions(+)
>>>
>>> diff --git a/hw/s390x/css.c b/hw/s390x/css.c
>>> index 301bf1772f..56c3fa8c89 100644
>>> --- a/hw/s390x/css.c
>>> +++ b/hw/s390x/css.c
>>> @@ -616,6 +616,14 @@ void css_inject_io_interrupt(SubchDev *sch)
>>>    
>>>    void css_conditional_io_interrupt(SubchDev *sch)
>>
>> Loosely related:
>> What is the semantic difference between css_inject_io_interrupt and
>> this css_conditional_io_interrup? The css_conditional_io_interrupt
>> could be 'unsolicited' or 'virtio notification'. This function also
>> relies on the serialization of io instructions or?
> 
> I introduced the "conditional interrupt" function to inject virtio
> notifications. 3270 started using this interface later on. I had not
> intended it to be a "generic unsolicited interrupt" interface.
>

Thanks for sharing. I think what 3270 does is a bit weird.
  
[..]
  
>>
>> I also wonder if this is the right place to handle the problem. The
>> 3870 also manipulates scsw.dstat before calling this. And I'm not sure
>> where/if is that cleared, or if it's OK to leave it set...
> 
> It's the easiest way to fix this. 3270 probably wants some review
> regarding its interaction with the css as well, but that's something
> for another day.
>

Nod.

Regards,
Halil
  

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [Qemu-devel] [PATCH] s390x/css: disabled subchannels cannot be status pending
  2018-05-04 13:16 [Qemu-devel] [PATCH] s390x/css: disabled subchannels cannot be status pending Cornelia Huck
                   ` (2 preceding siblings ...)
  2018-05-07  8:41 ` [Qemu-devel] [qemu-s390x] " David Hildenbrand
@ 2018-05-08  9:55 ` Cornelia Huck
  3 siblings, 0 replies; 8+ messages in thread
From: Cornelia Huck @ 2018-05-08  9:55 UTC (permalink / raw)
  To: Christian Borntraeger, Alexander Graf
  Cc: Thomas Huth, Halil Pasic, qemu-s390x, qemu-devel

On Fri,  4 May 2018 15:16:05 +0200
Cornelia Huck <cohuck@redhat.com> wrote:

> The 3270 code will try to post an attention interrupt when the
> 3270 emulator (e.g. x3270) attaches. If the guest has not yet
> enabled the subchannel for the 3270 device, we will give it a
> spurious status during msch when it does so later.
> 
> To fix this, just don't do anything in css_conditional_io_interrupt()
> if the subchannel is not enabled. The 3270 code will work fine with
> that, and the other user of this function (virtio-ccw) never
> attempts to post an interrupt for a disabled device to begin with.
> 
> Reported-by: Thomas Huth <thuth@redhat.com>
> Signed-off-by: Cornelia Huck <cohuck@redhat.com>
> ---
>  hw/s390x/css.c | 8 ++++++++
>  1 file changed, 8 insertions(+)

Queued to s390-next (with commit message tweaked and cc:stable added).

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2018-05-08  9:55 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-05-04 13:16 [Qemu-devel] [PATCH] s390x/css: disabled subchannels cannot be status pending Cornelia Huck
2018-05-04 13:39 ` Thomas Huth
2018-05-04 13:44   ` [Qemu-devel] [qemu-s390x] " Christian Borntraeger
2018-05-04 15:02 ` [Qemu-devel] " Halil Pasic
2018-05-07 10:12   ` Cornelia Huck
2018-05-07 11:08     ` Halil Pasic
2018-05-07  8:41 ` [Qemu-devel] [qemu-s390x] " David Hildenbrand
2018-05-08  9:55 ` [Qemu-devel] " Cornelia Huck

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.