On Tue, Nov 03, 2009 at 08:08:25AM +0200, Avi Kivity wrote: > On 11/03/2009 08:02 AM, Kevin O'Connor wrote: >> On Tue, Nov 03, 2009 at 07:01:52AM +0200, Avi Kivity wrote: >> --- a/src/paravirt.c >> +++ b/src/paravirt.c >> @@ -23,8 +23,7 @@ qemu_cfg_select(u16 f) >> static void >> qemu_cfg_read(u8 *buf, int len) >> { >> - while (len--) >> - *(buf++) = inb(PORT_QEMU_CFG_DATA); >> + insb(PORT_QEMU_CFG_DATA, buf, len); >> } > > Should make sure to use the 32-bit address size version so we use ecx, > not cx, in case len doesn't fit in 16 bits.
I think SeaBIOS has the 32bit version as of commit 7edaa658: static inline void insb(u16 port, u8 *data, u32 count) { asm volatile("rep insb (%%dx), %%es:(%%edi)" : "+c"(count), "+D"(data) : "d"(port) : "memory"); } -Kevin