s390x/pci: fix endianness issues
authorCornelia Huck <cohuck@redhat.com>
Wed, 18 Nov 2020 10:42:02 +0000 (11:42 +0100)
committerCornelia Huck <cohuck@redhat.com>
Wed, 18 Nov 2020 15:59:29 +0000 (16:59 +0100)
commita4e2fff1b104f2b235ea2673968d0b0383f541dc
tree0e5f7d2ce5be747e1605ddaddab0cd389f02a0ba
parente67ad058e45aa8b23e9b94e793b9fcf66e70ebb0
s390x/pci: fix endianness issues

The zPCI group and function structures are big endian. However, we do
not consistently store them as big endian locally, and are missing some
conversions.

Let's just store the structures as host endian instead and convert to
big endian when actually handling the instructions retrieving the data.

Also fix the layout of ClpReqQueryPciGrp: g is actually only 8 bit. This
also fixes accesses on little endian hosts, and makes accesses on big
endian hosts consistent.

Fixes: 28dc86a07299 ("s390x/pci: use a PCI Group structure")
Fixes: 9670ee752727 ("s390x/pci: use a PCI Function structure")
Fixes: 1e7552ff5c34 ("s390x/pci: get zPCI function info from host")
Signed-off-by: Cornelia Huck <cohuck@redhat.com>
Tested-by: Matthew Rosato <mjrosato@linux.ibm.com>
Tested-by: Thomas Huth <thuth@redhat.com>
Reviewed-by: Matthew Rosato <mjrosato@linux.ibm.com>
Reviewed-by: Thomas Huth <thuth@redhat.com>
Message-Id: <20201118104202.1301363-1-cohuck@redhat.com>
hw/s390x/s390-pci-bus.c
hw/s390x/s390-pci-inst.c
hw/s390x/s390-pci-vfio.c
include/hw/s390x/s390-pci-clp.h