On Tue, 2008-09-02 at 15:29 +0800, Liu Yu-B13201 wrote:
> Hollis,
> 
> I noticed fuction virtio_blk_update_config() (qemu/hw/virtio-blk.c) in
> qemu
> updated the virtio disk's capacity in little endian.
> But virtblk_probe() (drivers/block/virtio_blk.c) in kernel read the
> capacity from I/O space without convertion.

Sigh, I don't remember why this works any more.

There was discussion on this on kvm-ppc-devel in April (unfortunately it
was right at the month line, so the threading is broken, but see e.g.
http://marc.info/?l=kvm-ppc&m=120716463602156), and ultimately
cpu_to_le64() was added to qemu. However, a couple weeks later, the
swapping that the kernel was doing was removed (see
http://thread.gmane.org/gmane.linux.kernel.virtualization/5776/focus=5801).

However, the code is actually working today on 440 (and reporting a sane
number of blocks). Also, this patch
(http://article.gmane.org/gmane.linux.kernel.virtualization/6126/match=virtio%5fblk+fix+endianess+annotations)
 suggests that struct virtio_blk_config is no longer LE, so I'm thinking your 
problem must be in qemu. AFAICS the kernel is basically just doing memcpy in a 
few places.

> Since E500 is big endian, this bring the misunderstanding between qemu
> and guest.

What are you using for PCI emulation in qemu? I don't think it should
matter in this case, since the kernel is doing 1-byte reads in vp_get(),
but endianness gets very convoluted wherever qemu is involved. :(

-- 
Hollis Blanchard
IBM Linux Technology Center

--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to