aboutsummaryrefslogtreecommitdiffstats
path: root/xen/arch/x86/hvm/intercept.c
diff options
context:
space:
mode:
authorKeir Fraser <keir.fraser@citrix.com>2008-04-04 16:25:52 +0100
committerKeir Fraser <keir.fraser@citrix.com>2008-04-04 16:25:52 +0100
commit86559edc28f0b0f4fb9d09649193b0aab41b0165 (patch)
tree2046adac3c4440cfdda71fdace2a93e45074535c /xen/arch/x86/hvm/intercept.c
parent1a86889a32bce735d66f530129912bbc2b73c042 (diff)
downloadxen-86559edc28f0b0f4fb9d09649193b0aab41b0165.tar.gz
xen-86559edc28f0b0f4fb9d09649193b0aab41b0165.tar.bz2
xen-86559edc28f0b0f4fb9d09649193b0aab41b0165.zip
x86: Avoid use of domain_crash_synchronous() in C code.
We continue to use it in asm where it is a greater convenience and where also it is much more clearly correct. Signed-off-by: Keir Fraser <keir.fraser@citrix.com>
Diffstat (limited to 'xen/arch/x86/hvm/intercept.c')
-rw-r--r--xen/arch/x86/hvm/intercept.c72
1 files changed, 36 insertions, 36 deletions
diff --git a/xen/arch/x86/hvm/intercept.c b/xen/arch/x86/hvm/intercept.c
index 04c5da7b6f..8084214d1f 100644
--- a/xen/arch/x86/hvm/intercept.c
+++ b/xen/arch/x86/hvm/intercept.c
@@ -52,45 +52,45 @@ static inline void hvm_mmio_access(struct vcpu *v,
{
unsigned long data;
- switch ( p->type )
+ if ( !p->data_is_ptr )
{
- case IOREQ_TYPE_COPY:
- if ( !p->data_is_ptr ) {
- if ( p->dir == IOREQ_READ )
- p->data = read_handler(v, p->addr, p->size);
- else /* p->dir == IOREQ_WRITE */
- write_handler(v, p->addr, p->size, p->data);
- } else { /* p->data_is_ptr */
- int i, sign = (p->df) ? -1 : 1;
-
- if ( p->dir == IOREQ_READ ) {
- for ( i = 0; i < p->count; i++ ) {
- data = read_handler(v,
- p->addr + (sign * i * p->size),
- p->size);
- (void)hvm_copy_to_guest_phys(
- p->data + (sign * i * p->size),
- &data,
- p->size);
- }
- } else {/* p->dir == IOREQ_WRITE */
- for ( i = 0; i < p->count; i++ ) {
- (void)hvm_copy_from_guest_phys(
- &data,
- p->data + (sign * i * p->size),
- p->size);
- write_handler(v,
- p->addr + (sign * i * p->size),
- p->size, data);
- }
+ if ( p->dir == IOREQ_READ )
+ p->data = read_handler(v, p->addr, p->size);
+ else /* p->dir == IOREQ_WRITE */
+ write_handler(v, p->addr, p->size, p->data);
+ }
+ else
+ {
+ int i, sign = (p->df) ? -1 : 1;
+
+ if ( p->dir == IOREQ_READ )
+ {
+ for ( i = 0; i < p->count; i++ )
+ {
+ data = read_handler(
+ v,
+ p->addr + (sign * i * p->size),
+ p->size);
+ (void)hvm_copy_to_guest_phys(
+ p->data + (sign * i * p->size),
+ &data,
+ p->size);
+ }
+ }
+ else
+ {
+ for ( i = 0; i < p->count; i++ )
+ {
+ (void)hvm_copy_from_guest_phys(
+ &data,
+ p->data + (sign * i * p->size),
+ p->size);
+ write_handler(
+ v,
+ p->addr + (sign * i * p->size),
+ p->size, data);
}
}
- break;
-
- default:
- printk("hvm_mmio_access: error ioreq type %x\n", p->type);
- domain_crash_synchronous();
- break;
}
}