On 05/02/2018 02:52 PM, Cornelia Huck wrote: > We currently pass an integer as the subcode parameter. However, > the upper bits of the register containing the subcode need to > be 0, which is not guaranteed unless we explicitly specify the > subcode to be an unsigned long value. > > Fixes: d046c51dad3 ("pc-bios/s390-ccw: Get device address via diag 308/6") > Cc: qemu-sta...@nongnu.org > Signed-off-by: Cornelia Huck <coh...@redhat.com> > --- > pc-bios/s390-ccw/iplb.h | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) > > diff --git a/pc-bios/s390-ccw/iplb.h b/pc-bios/s390-ccw/iplb.h > index 5357a36d51..ded20c834e 100644 > --- a/pc-bios/s390-ccw/iplb.h > +++ b/pc-bios/s390-ccw/iplb.h > @@ -101,10 +101,11 @@ static inline bool manage_iplb(IplParameterBlock *iplb, > bool store) > { > register unsigned long addr asm("0") = (unsigned long) iplb; > register unsigned long rc asm("1") = 0; > + unsigned long subcode = store ? 6 : 5; > > asm volatile ("diag %0,%2,0x308\n" > : "+d" (addr), "+d" (rc) > - : "d" (store ? 6 : 5) > + : "d" (subcode)
We could also use 6UL : 5UL instead of a local variable, but I certainly do not care enough. Acked-by: Christian Borntraeger <borntrae...@de.ibm.com> > : "memory", "cc"); > return rc == 0x01; > } >