On 02/19/2018 03:15 PM, Christian Borntraeger wrote:
> 
> 
> On 02/16/2018 11:07 PM, Collin L. Walling wrote:
>> It is possible while waiting for multiple types of external
>> interrupts that we might have pending irqs remaining between
>> irq consumption and irq-type disabling. Those interrupts
>> could potentially propagate to the guest after IPL completes
>> and cause unwanted behavior.
>>
>> As it is today, the SCLP will only recognize write events that
>> are enabled by the control program's send and receive masks. To
>> limit the window for, and prevent further irqs from, ASCII
>> console events (specifically keystrokes), we should only enable
>> the control program's receive mask when we need it.
>>
>> As an additional measure, once we've disabled/cleared the control
>> program's receive mask, we will print an empty string in order
>> to consume any pending service interrupt.
>>
>> Signed-off-by: Collin L. Walling <wall...@linux.vnet.ibm.com>
> 
> This should work some comments below:
> 
>> ---
>>  pc-bios/s390-ccw/menu.c     |  5 +++++
>>  pc-bios/s390-ccw/s390-ccw.h |  1 +
>>  pc-bios/s390-ccw/sclp.c     | 10 ++++------
>>  3 files changed, 10 insertions(+), 6 deletions(-)
>>
>> diff --git a/pc-bios/s390-ccw/menu.c b/pc-bios/s390-ccw/menu.c
>> index 9601043..14410a8 100644
>> --- a/pc-bios/s390-ccw/menu.c
>> +++ b/pc-bios/s390-ccw/menu.c
>> @@ -11,6 +11,7 @@
>>
>>  #include "menu.h"
>>  #include "s390-ccw.h"
>> +#include "sclp.h"
>>
>>  #define KEYCODE_NO_INP '\0'
>>  #define KEYCODE_ESCAPE '\033'
>> @@ -117,8 +118,12 @@ static int get_index(void)
>>
>>      memset(buf, 0, sizeof(buf));
>>
>> +    sclp_set_write_mask(SCLP_EVENT_MASK_MSG_ASCII, 
>> SCLP_EVENT_MASK_MSG_ASCII);
>>      len = read_prompt(buf, sizeof(buf));
>>
>> +    sclp_set_write_mask(0, SCLP_EVENT_MASK_MSG_ASCII);
>> +    sclp_print(""); /* Clear any pending service int */
>> +
> 
> Why cant you use consume_sclp_int from start.S and not do any printing?
> Shouldnt sclp_set_write_mask always make an interrupt pending?

In fact sclp_set_write_mask should already call consume_sclp_int. Have you seen 
spurious
interrupts?


Reply via email to