64-bit hvm on 32-bit dom0 - ioemu adjustments
PATCH 1/1 64-bit hvm on 32-bit dom0 - ioemu adjustments
Don't mask off data bits when running 64-bit hvm guests on 32-bit dom0.
Signed-off-by Jan Beulich <[email protected]>
tools/ioemu/target-i386-dm/helper2.c +15 -14
@@ -322,7 +322,7 @@ void cpu_ioreq_pio(CPUState *env, ioreq_do_outp (env, req->addr, req->size, req->data); }else {for (i =0 ; i < req->count; i++) { -unsigned long tmp; +unsigned long tmp =0 ; read_physical((target_phys_addr_t) req->data + (sign * i * req->size),
@@ -354,7 +354,7 @@ void cpu_ioreq_move(CPUState *env, ioreq } } }else { -unsigned long tmp; +target_ulong tmp;if (req->dir ==IOREQ_READ ) {for (i =0 ; i < req->count; i++) {
@@ -380,14 +380,14 @@ void cpu_ioreq_move(CPUState *env, ioreqvoid cpu_ioreq_and (CPUState *env,ioreq_t *req) { -unsigned long tmp1, tmp2; +target_ulong tmp1, tmp2;if (req->data_is_ptr !=0 )hw_error ("expected scalar value" );read_physical (req->addr, req->size, &tmp1);if (req->dir ==IOREQ_WRITE ) { - tmp2 = tmp1 & (unsigned long ) req->data; + tmp2 = tmp1 & (target_ulong ) req->data;write_physical (req->addr, req->size, &tmp2); } req->data = tmp1;
@@ -395,14 +395,14 @@ void cpu_ioreq_and(CPUState *env, ioreq_void cpu_ioreq_add (CPUState *env,ioreq_t *req) { -unsigned long tmp1, tmp2; +target_ulong tmp1, tmp2;if (req->data_is_ptr !=0 )hw_error ("expected scalar value" );read_physical (req->addr, req->size, &tmp1);if (req->dir ==IOREQ_WRITE ) { - tmp2 = tmp1 + (unsigned long ) req->data; + tmp2 = tmp1 + (target_ulong ) req->data;write_physical (req->addr, req->size, &tmp2); } req->data = tmp1;
@@ -410,14 +410,14 @@ void cpu_ioreq_add(CPUState *env, ioreq_void cpu_ioreq_sub (CPUState *env,ioreq_t *req) { -unsigned long tmp1, tmp2; +target_ulong tmp1, tmp2;if (req->data_is_ptr !=0 )hw_error ("expected scalar value" );read_physical (req->addr, req->size, &tmp1);if (req->dir ==IOREQ_WRITE ) { - tmp2 = tmp1 - (unsigned long ) req->data; + tmp2 = tmp1 - (target_ulong ) req->data;write_physical (req->addr, req->size, &tmp2); } req->data = tmp1;
@@ -425,14 +425,14 @@ void cpu_ioreq_sub(CPUState *env, ioreq_void cpu_ioreq_or (CPUState *env,ioreq_t *req) { -unsigned long tmp1, tmp2; +target_ulong tmp1, tmp2;if (req->data_is_ptr !=0 )hw_error ("expected scalar value" );read_physical (req->addr, req->size, &tmp1);if (req->dir ==IOREQ_WRITE ) { - tmp2 = tmp1 | (unsigned long ) req->data; + tmp2 = tmp1 | (target_ulong ) req->data;write_physical (req->addr, req->size, &tmp2); } req->data = tmp1;
@@ -440,14 +440,14 @@ void cpu_ioreq_or(CPUState *env, ioreq_tvoid cpu_ioreq_xor (CPUState *env,ioreq_t *req) { -unsigned long tmp1, tmp2; +target_ulong tmp1, tmp2;if (req->data_is_ptr !=0 )hw_error ("expected scalar value" );read_physical (req->addr, req->size, &tmp1);if (req->dir ==IOREQ_WRITE ) { - tmp2 = tmp1 ^ (unsigned long ) req->data; + tmp2 = tmp1 ^ (target_ulong ) req->data;write_physical (req->addr, req->size, &tmp2); } req->data = tmp1;
@@ -495,8 +495,9 @@ void cpu_ioreq_xchg(CPUState *env, ioreqvoid __handle_ioreq (CPUState *env,ioreq_t *req) { -if (!req->data_is_ptr && req->dir ==IOREQ_WRITE && req->size !=4 ) - req->data &= (1UL << (8 * req->size)) -1 ; +if (!req->data_is_ptr && req->dir ==IOREQ_WRITE && + req->size <sizeof (target_ulong)) + req->data &= ((target_ulong )1 << (8 * req->size)) -1 ;switch (req->type) {case IOREQ_TYPE_PIO :
Quoted 10 lines · On Mon, 14 May 2007 17:07:09 +0200 "Jan Beulich" <[email protected]> wrote:
Don't mask off data bits when running 64-bit hvm guests on 32-bit dom0.
Signed-off-by Jan Beulich <[email protected]>Index:
2007-04-27/tools/ioemu/target-i386-dm/helper2.c
===================================================================
tools/ioemu/target-i386-dm/helper2.c void cpu_ioreq_pio(CPUState *env, ioreq_ · line 328
Quoted 8 lines
tools/ioemu/target-i386-dm/helper2.c +1
-1@@ -322,7 +322,7 @@ void cpu_ioreq_pio(CPUState *env, ioreq_do_outp (env, req->addr, req->size, req->data); }else {for (i =0 ; i < req->count; i++) { -unsigned long tmp; +unsigned long tmp =0 ; read_physical((target_phys_addr_t) req->data + (sign * i * req->size),
I think tmp also should have the type target_ulong.
Stephan
Signature · 1 line
PHP - it's "training wheels without the bike" -- Randal L. Schwartz
_______________________________________________
Xen-devel mailing list
[email protected]
http://lists.xensource.com/xen-devel