On Thu, 3 May 2018 11:25:08 -0400 Farhan Ali <al...@linux.ibm.com> wrote:
> On 05/02/2018 08:52 AM, 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> > > Sorry for my ignorance, but is there a C standard that says upper bits > of an int is not guaranteed to be 0? The value (5 resp. 6) is small enough to fit into a regular integer, and the compiler generated a lhi for the load, which did not change any upper values that might have been in the register previously. Telling the compiler to treat the value as an unsigned long makes it generate a lghi.