[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen-unstable] x86-64/hvm: pio result storing
# HG changeset patch # User kfraser@xxxxxxxxxxxxxxxxxxxxx # Date 1179220391 -3600 # Node ID eb027b704dc55bb7f6e01a4b068c1ac407331ec1 # Parent 807f374e720d57210e60ef4611e8abe22f49e043 x86-64/hvm: pio result storing Don't clear upper 32 bits on 8- and 16-bit PIO reads. Signed-off-by: Jan Beulich <jbeulich@xxxxxxxxxx> --- xen/arch/x86/hvm/io.c | 12 ++++++------ 1 files changed, 6 insertions(+), 6 deletions(-) diff -r 807f374e720d -r eb027b704dc5 xen/arch/x86/hvm/io.c --- a/xen/arch/x86/hvm/io.c Tue May 15 10:12:02 2007 +0100 +++ b/xen/arch/x86/hvm/io.c Tue May 15 10:13:11 2007 +0100 @@ -418,11 +418,10 @@ static void hvm_pio_assist(struct cpu_us static void hvm_pio_assist(struct cpu_user_regs *regs, ioreq_t *p, struct hvm_io_op *pio_opp) { - unsigned long old_eax; - int sign = p->df ? -1 : 1; - if ( p->data_is_ptr || (pio_opp->flags & OVERLAP) ) { + int sign = p->df ? -1 : 1; + if ( pio_opp->flags & REPZ ) regs->ecx -= p->count; @@ -459,14 +458,15 @@ static void hvm_pio_assist(struct cpu_us } else if ( p->dir == IOREQ_READ ) { - old_eax = regs->eax; + unsigned long old_eax = regs->eax; + switch ( p->size ) { case 1: - regs->eax = (old_eax & 0xffffff00) | (p->data & 0xff); + regs->eax = (old_eax & ~0xff) | (p->data & 0xff); break; case 2: - regs->eax = (old_eax & 0xffff0000) | (p->data & 0xffff); + regs->eax = (old_eax & ~0xffff) | (p->data & 0xffff); break; case 4: regs->eax = (p->data & 0xffffffff); _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |