On Thu, Sep 04, 2014 at 06:24:39PM +0200, Marc MarĂ wrote: > +QVirtioMMIODevice *qvirtio_mmio_init_device(uint64_t addr, uint32_t > page_size) > +{ > + QVirtioMMIODevice *dev; > + union { uint32_t magic; char bytes[5]; } magic_value; > + dev = g_malloc0(sizeof(*dev)); > + magic_value.bytes[4] = '\0'; > + > + magic_value.magic = readl(addr + QVIRTIO_MMIO_MAGIC_VALUE); > + g_assert_cmpstr(magic_value.bytes, ==, "virt");
Endianness trouble here. Please do what the Linux virtio_mmio driver does: magic = readl(vm_dev->base + VIRTIO_MMIO_MAGIC_VALUE); if (magic != ('v' | 'i' << 8 | 'r' << 16 | 't' << 24)) {
pgp2zriPbqqDa.pgp
Description: PGP signature