Hello Rusty,
while playing with your virtio descriptor code, I realized that the desc_pages
data structure is not 64 bit safe. struct lguest_desc desc[NUM_DESCS] can be
smaller than a page, as struct lguest_desc is 24 bytes on 64bit systems. Lets
add a char padding to make the next page really page aligned.
Btw. the new_io_desc.patch does not apply on current git. What base should I
use?
--- lguest_virtio.c.old 2007-08-17 10:15:05.000000000 +0200
+++ lguest_virtio.c 2007-08-17 10:16:00.000000000 +0200
@@ -31,15 +31,16 @@
struct desc_pages
{
/* Page of descriptors. */
struct lguest_desc desc[NUM_DESCS];
+ char pad0[PAGE_SIZE - NUM_DESCS * sizeof(struct lguest_desc)];
/* Next page: how we tell other side what buffers are available. */
unsigned int avail_idx;
unsigned int available[NUM_DESCS];
- char pad[PAGE_SIZE - (NUM_DESCS+1) * sizeof(unsigned int)];
+ char pad1[PAGE_SIZE - (NUM_DESCS+1) * sizeof(unsigned int)];
/* Third page: how other side tells us what's used. */
unsigned int used_idx;
struct lguest_used used[NUM_DESCS];
};
cheers
Christian
On Fri, 2007-08-17 at 10:22 +0200, Christian Borntraeger wrote:> Hello Rusty, > > while playing with your virtio descriptor code, I realized that the desc_pages > data structure is not 64 bit safe. struct lguest_desc desc[NUM_DESCS] can be > smaller than a page, as struct lguest_desc is 24 bytes on 64bit systems. Lets > add a char padding to make the next page really page aligned.Indeed. This is something which would need fixing for a non-32 bit platform.> Btw. the new_io_desc.patch does not apply on current git. What base should I > use?Unfortunately, the lguest tree is undergoing a significant reshuffle as files get moved (non-i386 support). The lguest patch queue as a whole should apply tho. Thanks! Rusty.