s390/uv: Fix handling of length extensions
authorChristian Borntraeger <borntraeger@de.ibm.com>
Mon, 10 Feb 2020 16:27:37 +0000 (11:27 -0500)
committerVasily Gorbik <gor@linux.ibm.com>
Tue, 11 Feb 2020 19:15:42 +0000 (20:15 +0100)
The query parameter block might contain additional information and can
be extended in the future. If the size of the block does not suffice we
get an error code of rc=0x100.  The buffer will contain all information
up to the specified size and the hypervisor/guest simply do not need the
additional information as they do not know about the new data.  That
means that we can (and must) accept rc=0x100 as success.

Cc: stable@vger.kernel.org
Reviewed-by: Cornelia Huck <cohuck@redhat.com>
Fixes: 5abb9351dfd9 ("s390/uv: introduce guest side ultravisor code")
Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com>
Signed-off-by: Vasily Gorbik <gor@linux.ibm.com>
arch/s390/boot/uv.c

index ed007f4a6444ff84b7c7abac01b442459e619458..3f501159ee9fc2ac1200219337859a03bb02c99f 100644 (file)
@@ -15,7 +15,8 @@ void uv_query_info(void)
        if (!test_facility(158))
                return;
 
-       if (uv_call(0, (uint64_t)&uvcb))
+       /* rc==0x100 means that there is additional data we do not process */
+       if (uv_call(0, (uint64_t)&uvcb) && uvcb.header.rc != 0x100)
                return;
 
        if (test_bit_inv(BIT_UVC_CMD_SET_SHARED_ACCESS, (unsigned long *)uvcb.inst_calls_list) &&