diff options
author | Keir Fraser <keir.fraser@citrix.com> | 2008-04-04 16:25:52 +0100 |
---|---|---|
committer | Keir Fraser <keir.fraser@citrix.com> | 2008-04-04 16:25:52 +0100 |
commit | 86559edc28f0b0f4fb9d09649193b0aab41b0165 (patch) | |
tree | 2046adac3c4440cfdda71fdace2a93e45074535c /xen/arch/x86/hvm/intercept.c | |
parent | 1a86889a32bce735d66f530129912bbc2b73c042 (diff) | |
download | xen-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.c | 72 |
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; } } |