aboutsummaryrefslogtreecommitdiff
path: root/trace
diff options
context:
space:
mode:
authorThomas Huth <thuth@redhat.com>2023-08-02 15:57:19 +0200
committerMichael S. Tsirkin <mst@redhat.com>2023-08-03 16:06:49 -0400
commit642ba89672279fbdd14016a90da239c85e845d18 (patch)
treef051c67c9bb7c9c3d703555fa36bf7bc173589e5 /trace
parentcc2a08480e19007c05be8fe5b6893e20448954dc (diff)
downloadqemu-642ba89672279fbdd14016a90da239c85e845d18.zip
qemu-642ba89672279fbdd14016a90da239c85e845d18.tar.gz
qemu-642ba89672279fbdd14016a90da239c85e845d18.tar.bz2
hw/i386/intel_iommu: Fix endianness problems related to VTD_IR_TableEntry
The code already tries to do some endianness handling here, but currently fails badly: - While it already swaps the data when logging errors / tracing, it fails to byteswap the value before e.g. accessing entry->irte.present - entry->irte.source_id is swapped with le32_to_cpu(), though this is a 16-bit value - The whole union is apparently supposed to be swapped via the 64-bit data[2] array, but the struct is a mixture between 32 bit values (the first 8 bytes) and 64 bit values (the second 8 bytes), so this cannot work as expected. Fix it by converting the struct to two proper 64-bit bitfields, and by swapping the values only once for everybody right after reading the data from memory. Signed-off-by: Thomas Huth <thuth@redhat.com> Message-Id: <20230802135723.178083-3-thuth@redhat.com> Reviewed-by: Michael S. Tsirkin <mst@redhat.com> Signed-off-by: Michael S. Tsirkin <mst@redhat.com> Reviewed-by: Peter Xu <peterx@redhat.com>
Diffstat (limited to 'trace')
0 files changed, 0 insertions, 0 deletions