All of lore.kernel.org
 help / color / mirror / Atom feed
From: Pierre Morel <pmorel@linux.ibm.com>
To: Cornelia Huck <cohuck@redhat.com>
Cc: kvm@vger.kernel.org, linux-s390@vger.kernel.org,
	frankja@linux.ibm.com, david@redhat.com, thuth@redhat.com
Subject: Re: [kvm-unit-tests PATCH v4 7/9] s390x: css: msch, enable test
Date: Thu, 12 Dec 2019 17:05:09 +0100	[thread overview]
Message-ID: <a29048f4-1783-54c6-8bf3-91d573b2d49d@linux.ibm.com> (raw)
In-Reply-To: <20191212153303.6444697e.cohuck@redhat.com>



On 2019-12-12 15:33, Cornelia Huck wrote:
> On Thu, 12 Dec 2019 15:21:21 +0100
> Pierre Morel <pmorel@linux.ibm.com> wrote:
> 
>> On 2019-12-12 15:10, Cornelia Huck wrote:
>>> On Thu, 12 Dec 2019 15:01:07 +0100
>>> Pierre Morel <pmorel@linux.ibm.com> wrote:
>>>    
>>>> On 2019-12-12 13:01, Cornelia Huck wrote:
>>>>> On Wed, 11 Dec 2019 16:46:08 +0100
>>>>> Pierre Morel <pmorel@linux.ibm.com> wrote:
>>>>>       
>>>>>> A second step when testing the channel subsystem is to prepare a channel
>>>>>> for use.
>>>>>> This includes:
>>>>>> - Get the current SubCHannel Information Block (SCHIB) using STSCH
>>>>>> - Update it in memory to set the ENABLE bit
>>>>>> - Tell the CSS that the SCHIB has been modified using MSCH
>>>>>> - Get the SCHIB from the CSS again to verify that the subchannel is
>>>>>>      enabled.
>>>>>>
>>>>>> This tests the success of the MSCH instruction by enabling a channel.
>>>>>>
>>>>>> Signed-off-by: Pierre Morel <pmorel@linux.ibm.com>
>>>>>> ---
>>>>>>     s390x/css.c | 65 +++++++++++++++++++++++++++++++++++++++++++++++++++++
>>>>>>     1 file changed, 65 insertions(+)
>>>    
>>>>>> +	/* Read the SCHIB for this subchannel */
>>>>>> +	cc = stsch(test_device_sid, &schib);
>>>>>> +	if (cc) {
>>>>>> +		report(0, "stsch cc=%d", cc);
>>>>>> +		return;
>>>>>> +	}
>>>>>> +
>>>>>> +	/* Update the SCHIB to enable the channel */
>>>>>> +	pmcw->flags |= PMCW_ENABLE;
>>>>>> +
>>>>>> +	/* Tell the CSS we want to modify the subchannel */
>>>>>> +	cc = msch(test_device_sid, &schib);
>>>>>> +	if (cc) {
>>>>>> +		/*
>>>>>> +		 * If the subchannel is status pending or
>>>>>> +		 * if a function is in progress,
>>>>>> +		 * we consider both cases as errors.
>>>>>> +		 */
>>>>>> +		report(0, "msch cc=%d", cc);
>>>>>> +		return;
>>>>>> +	}
>>>>>> +
>>>>>> +	/*
>>>>>> +	 * Read the SCHIB again to verify the enablement
>>>>>> +	 * insert a little delay and try 5 times.
>>>>>> +	 */
>>>>>> +	do {
>>>>>> +		cc = stsch(test_device_sid, &schib);
>>>>>> +		if (cc) {
>>>>>> +			report(0, "stsch cc=%d", cc);
>>>>>> +			return;
>>>>>> +		}
>>>>>> +		delay(10);
>>>>>
>>>>> That's just a short delay to avoid a busy loop, right? msch should be
>>>>> immediate,
>>>>
>>>> Thought you told to me that it may not be immediate in zVM did I
>>>> misunderstand?
>>>
>>> Maybe I have been confusing... what I'm referring to is this
>>> programming note for msch:
>>>
>>> "It is recommended that the program inspect the
>>> contents of the subchannel by subsequently
>>> issuing STORE SUBCHANNEL when MODIFY
>>> SUBCHANNEL sets condition code 0. Use of
>>> STORE SUBCHANNEL is a method for deter-
>>> mining if the designated subchannel was
>>> changed or not. Failure to inspect the subchan-
>>> nel following the setting of condition code 0 by
>>> MODIFY SUBCHANNEL may result in conditions
>>> that the program does not expect to occur."
>>>
>>> That's exactly what we had to do under z/VM back then: do the msch,
>>> check via stsch, redo the msch if needed, check again via stsch. It
>>> usually worked with the second msch the latest.
>>
>> OK, I understand, then it is a bug in zVM that this test could enlighten.
> 
> Probably more a quirk than a bug... the explanation there is not
> explicit about that :)
> 
>>
>> I think we should keep it so, it allows to recognize 3 cases (after I
>> change to test ENABLE in the loop as I said I will):
>> - immediate ENABLE
> 
> This is the good case.
> 
>> - asynchrone ENABLE
> 
> This one I would consider an architecture violation.
> 
>> - failure to ENABLE
> 
> This is the quirk above.
> 
> But I'm not quite sure how you would be able to distinguish the last
> two cases?

This is where the delay can help.
But yes, not sure that we can differentiate this without to know how 
long we should delay.


> 
>>>    
>>>>   
>>>>> and you probably should not delay on success?
>>>>
>>>> yes, it is not optimized, I can test PMCW_ENABLE in the loop this way we
>>>> can see if, in the zVM case we need to do retries or not.
>>>>
>>>>   
>>>>>       
>>>>>> +	} while (!(pmcw->flags & PMCW_ENABLE) && count++ < 5);
>>>>>
>>>>> How is this supposed to work? Doesn't the stsch overwrite the control
>>>>> block again, so you need to re-set the enable bit before you retry?
>>>>
>>>> I do not think so, there is no msch() in the loop.
>>>> Do I miss something?
>>>
>>> Well, _I_ missed that the msch() was missing :) You need it (see above);
>>> just waiting and re-doing the stsch is useless, as msch is a
>>> synchronous instruction which has finished its processing after the cc
>>> has been set.
>>>    
>>
>> Since kvm-unit-test is a test system, not an OS so I think that here we
>> have one more point to leverage the enable function:
>> - We need to test the enable (what I did (partially))
> 
> Maybe also log if you needed to retry? Not as an error, but as
> additional information?

Yes.

Regards,
Pierre

-- 
Pierre Morel
IBM Lab Boeblingen

  reply	other threads:[~2019-12-12 16:05 UTC|newest]

Thread overview: 42+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-12-11 15:46 [kvm-unit-tests PATCH v4 0/9] s390x: Testing the Channel Subsystem I/O Pierre Morel
2019-12-11 15:46 ` [kvm-unit-tests PATCH v4 1/9] s390x: saving regs for interrupts Pierre Morel
2019-12-12  9:24   ` Janosch Frank
2019-12-12 13:32     ` Pierre Morel
2019-12-11 15:46 ` [kvm-unit-tests PATCH v4 2/9] s390x: Use PSW bits definitions in cstart Pierre Morel
2019-12-12  9:31   ` Janosch Frank
2019-12-12 13:34     ` Pierre Morel
2019-12-11 15:46 ` [kvm-unit-tests PATCH v4 3/9] s390x: interrupt registration Pierre Morel
2019-12-12  9:39   ` Janosch Frank
2019-12-12 13:35     ` Pierre Morel
2019-12-12  9:41   ` Janosch Frank
2019-12-12 13:35     ` Pierre Morel
2019-12-11 15:46 ` [kvm-unit-tests PATCH v4 4/9] s390x: export the clock get_clock_ms() utility Pierre Morel
2019-12-12  9:40   ` Janosch Frank
2019-12-12 13:36     ` Pierre Morel
2019-12-11 15:46 ` [kvm-unit-tests PATCH v4 5/9] s390x: Library resources for CSS tests Pierre Morel
2019-12-12  9:51   ` Janosch Frank
2019-12-12 13:43     ` Pierre Morel
2019-12-11 15:46 ` [kvm-unit-tests PATCH v4 6/9] s390x: css: stsch, enumeration test Pierre Morel
2019-12-12 10:18   ` Cornelia Huck
2019-12-12 13:50     ` Pierre Morel
2019-12-11 15:46 ` [kvm-unit-tests PATCH v4 7/9] s390x: css: msch, enable test Pierre Morel
2019-12-12 12:01   ` Cornelia Huck
2019-12-12 14:01     ` Pierre Morel
2019-12-12 14:10       ` Cornelia Huck
2019-12-12 14:21         ` Pierre Morel
2019-12-12 14:33           ` Cornelia Huck
2019-12-12 16:05             ` Pierre Morel [this message]
2019-12-12 17:33               ` Pierre Morel
2019-12-13  9:33                 ` Cornelia Huck
2019-12-13 14:40                   ` Pierre Morel
2019-12-11 15:46 ` [kvm-unit-tests PATCH v4 8/9] s390x: css: ssch/tsch with sense and interrupt Pierre Morel
2019-12-12 12:26   ` Cornelia Huck
2019-12-12 14:10     ` Pierre Morel
2019-12-12 18:20       ` Pierre Morel
2019-12-13  9:43         ` Cornelia Huck
2019-12-13 15:24           ` Pierre Morel
2019-12-13 15:53             ` Cornelia Huck
2019-12-11 15:46 ` [kvm-unit-tests PATCH v4 9/9] s390x: css: ping pong Pierre Morel
2019-12-13  9:50   ` Cornelia Huck
2019-12-13 16:50     ` Pierre Morel
2019-12-16 10:54       ` 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=a29048f4-1783-54c6-8bf3-91d573b2d49d@linux.ibm.com \
    --to=pmorel@linux.ibm.com \
    --cc=cohuck@redhat.com \
    --cc=david@redhat.com \
    --cc=frankja@linux.ibm.com \
    --cc=kvm@vger.kernel.org \
    --cc=linux-s390@vger.kernel.org \
    --cc=thuth@redhat.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.