qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH 1/1] s390/ipl: sync back loadparm


From: Cornelia Huck
Subject: Re: [PATCH 1/1] s390/ipl: sync back loadparm
Date: Tue, 25 Feb 2020 15:47:50 +0100

On Tue, 25 Feb 2020 15:35:47 +0100
Viktor Mihajlovski <address@hidden> wrote:

> On 2/25/20 12:56 PM, Halil Pasic wrote:
> > On Tue, 25 Feb 2020 10:39:40 +0100
> > David Hildenbrand <address@hidden> wrote:
> >   
> >> On 24.02.20 16:02, Halil Pasic wrote:  
> >>> We expose loadparm as a r/w machine property, but if loadparm is set by
> >>> the guest via DIAG 308, we don't update the property. Having a
> >>> disconnect between the guest view and the QEMU property is not nice in
> >>> itself, but things get even worse for SCSI, where under certain
> >>> circumstances (see 789b5a401b "s390: Ensure IPL from SCSI works as
> >>> expected" for details) we call s390_gen_initial_iplb() on resets
> >>> effectively overwriting the guest/user supplied loadparm with the stale
> >>> value.
> >>>
> >>> Signed-off-by: Halil Pasic <address@hidden>
> >>> Fixes: 7104bae9de "hw/s390x: provide loadparm property for the machine"

Please use the format

Fixes: <hash> ("subject")

> >>> Reported-by: Marc Hartmayer <address@hidden>
> >>> Reviewed-by: Janosch Frank <address@hidden>
> >>> Reviewed-by: Viktor Mihajlovski <address@hidden>
> >>> Tested-by: Marc Hartmayer <address@hidden>
> >>> ---
> >>>   hw/s390x/ipl.c | 21 +++++++++++++++++++++
> >>>   1 file changed, 21 insertions(+)
> >>>
> >>> diff --git a/hw/s390x/ipl.c b/hw/s390x/ipl.c  
> [...]
> >>> +
> >>> +    /* Sync loadparm */
> >>> +    if (iplb->flags & DIAG308_FLAGS_LP_VALID) {
> >>> +        char ascii_loadparm[8];
> >>> +        uint8_t *ebcdic_loadparm = iplb->loadparm;
> >>> +        int i;
> >>> +
> >>> +        for (i = 0; i < 8 && ebcdic_loadparm[i]; i++) {
> >>> +            ascii_loadparm[i] = ebcdic2ascii[(uint8_t) 
> >>> ebcdic_loadparm[i]];
> >>> +        }
> >>> +        ascii_loadparm[i] = 0;
> >>> +        object_property_set_str(mo, ascii_loadparm, "loadparm", NULL);
> >>> +    } else {
> >>> +        object_property_set_str(mo, "", "loadparm", NULL);
> >>> +    }  
> >>
> >> &error_abort instead of NULL, we certainly want to know if this would
> >> ever surprisingly fail.  
> > 
> > IMHO this is a typical assert() situation where one would like to have
> > a fast and obvious failure when testing, but not in production.
> > 
> > AFAIU the guest can trigger this code at any time, and crashing the
> > whole (production) system seems a bit heavy handed to me. The setter
> > should only fail if something is buggy.
> > 
> > But if the majority says &error_abort I can certainly do. Other opinions?
> >   
> We might consider to return 0x0402 (invalid parameter) from the diag308 
> "set", which is less drastic and would allow the OS to do whatever it 
> finds appropriate to deal with the failure. Not that Linux would care 
> about that today :-).

I'm not sure if we could actually get there in any other way than via a
QEMU coding error... not sure if I would trust QEMU to inject a return
code if it already had a code logic fail right before that :)




reply via email to

[Prev in Thread] Current Thread [Next in Thread]