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,
>> 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