[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH] virtio-pci: replace byte swap hack
From: |
Alexander Graf |
Subject: |
Re: [Qemu-devel] [PATCH] virtio-pci: replace byte swap hack |
Date: |
Sun, 6 Jan 2013 14:17:15 +0100 |
On 30.12.2012, at 13:55, Blue Swirl wrote:
> Remove byte swaps by declaring the config space
> as native endian.
This is wrong. Virtio-pci config space is split into 2 regions. One with native
endianness, the other one with little endian.
Alex
>
> Signed-off-by: Blue Swirl <address@hidden>
> ---
> exec.c | 18 ------------------
> hw/virtio-pci.c | 17 +----------------
> 2 files changed, 1 insertions(+), 34 deletions(-)
>
> diff --git a/exec.c b/exec.c
> index a6923ad..140eb56 100644
> --- a/exec.c
> +++ b/exec.c
> @@ -2587,24 +2587,6 @@ int cpu_memory_rw_debug(CPUArchState *env,
> target_ulong addr,
> }
> #endif
>
> -#if !defined(CONFIG_USER_ONLY)
> -
> -/*
> - * A helper function for the _utterly broken_ virtio device model to find
> out if
> - * it's running on a big endian machine. Don't do this at home kids!
> - */
> -bool virtio_is_big_endian(void);
> -bool virtio_is_big_endian(void)
> -{
> -#if defined(TARGET_WORDS_BIGENDIAN)
> - return true;
> -#else
> - return false;
> -#endif
> -}
> -
> -#endif
> -
> #ifndef CONFIG_USER_ONLY
> bool cpu_physical_memory_is_io(hwaddr phys_addr)
> {
> diff --git a/hw/virtio-pci.c b/hw/virtio-pci.c
> index d2d2454..df78a3b 100644
> --- a/hw/virtio-pci.c
> +++ b/hw/virtio-pci.c
> @@ -92,9 +92,6 @@
> */
> #define wmb() do { } while (0)
>
> -/* HACK for virtio to determine if it's running a big endian guest */
> -bool virtio_is_big_endian(void);
> -
> /* virtio device */
>
> static void virtio_pci_notify(void *opaque, uint16_t vector)
> @@ -390,15 +387,9 @@ static uint64_t virtio_pci_config_read(void *opaque,
> hwaddr addr,
> break;
> case 2:
> val = virtio_config_readw(proxy->vdev, addr);
> - if (virtio_is_big_endian()) {
> - val = bswap16(val);
> - }
> break;
> case 4:
> val = virtio_config_readl(proxy->vdev, addr);
> - if (virtio_is_big_endian()) {
> - val = bswap32(val);
> - }
> break;
> }
> return val;
> @@ -423,15 +414,9 @@ static void virtio_pci_config_write(void *opaque, hwaddr
> addr,
> virtio_config_writeb(proxy->vdev, addr, val);
> break;
> case 2:
> - if (virtio_is_big_endian()) {
> - val = bswap16(val);
> - }
> virtio_config_writew(proxy->vdev, addr, val);
> break;
> case 4:
> - if (virtio_is_big_endian()) {
> - val = bswap32(val);
> - }
> virtio_config_writel(proxy->vdev, addr, val);
> break;
> }
> @@ -444,7 +429,7 @@ static const MemoryRegionOps virtio_pci_config_ops = {
> .min_access_size = 1,
> .max_access_size = 4,
> },
> - .endianness = DEVICE_LITTLE_ENDIAN,
> + .endianness = DEVICE_NATIVE_ENDIAN,
> };
>
> static void virtio_write_config(PCIDevice *pci_dev, uint32_t address,
> --
> 1.7.2.5
>
>
- Re: [Qemu-devel] [PATCH] virtio-pci: replace byte swap hack,
Alexander Graf <=
Re: [Qemu-devel] [PATCH] virtio-pci: replace byte swap hack, Blue Swirl, 2013/01/06