diff options
| author | Jan Beulich <jbeulich@suse.com> | 2012-12-10 11:18:25 +0100 | 
|---|---|---|
| committer | Jan Beulich <jbeulich@suse.com> | 2012-12-10 11:18:25 +0100 | 
| commit | e93e0d9d73ce77bd1f3471af68a194b47e0e8c45 (patch) | |
| tree | be7768d89381228bc3ed5f4867db23f631a78054 /xen/arch/x86/physdev.c | |
| parent | edaa3f893f8f046e05099bc0d087b276a90451d4 (diff) | |
| download | xen-e93e0d9d73ce77bd1f3471af68a194b47e0e8c45.tar.gz xen-e93e0d9d73ce77bd1f3471af68a194b47e0e8c45.tar.bz2 xen-e93e0d9d73ce77bd1f3471af68a194b47e0e8c45.zip | |
streamline guest copy operations
- use the variants not validating the VA range when writing back
  structures/fields to the same space that they were previously read
  from
- when only a single field of a structure actually changed, copy back
  just that field where possible
- consolidate copying back results in a few places
Signed-off-by: Jan Beulich <jbeulich@suse.com>
Acked-by: Keir Fraser <keir@xen.org>
Diffstat (limited to 'xen/arch/x86/physdev.c')
| -rw-r--r-- | xen/arch/x86/physdev.c | 10 | 
1 files changed, 5 insertions, 5 deletions
| diff --git a/xen/arch/x86/physdev.c b/xen/arch/x86/physdev.c index 751cbd49b5..a041783022 100644 --- a/xen/arch/x86/physdev.c +++ b/xen/arch/x86/physdev.c @@ -384,7 +384,7 @@ ret_t do_physdev_op(int cmd, XEN_GUEST_HANDLE_PARAM(void) arg)          irq_status_query.flags |= XENIRQSTAT_needs_eoi;          if ( pirq_shared(v->domain, irq) )              irq_status_query.flags |= XENIRQSTAT_shared; -        ret = copy_to_guest(arg, &irq_status_query, 1) ? -EFAULT : 0; +        ret = __copy_to_guest(arg, &irq_status_query, 1) ? -EFAULT : 0;          break;      } @@ -412,7 +412,7 @@ ret_t do_physdev_op(int cmd, XEN_GUEST_HANDLE_PARAM(void) arg)          ret = physdev_map_pirq(map.domid, map.type, &map.index, &map.pirq,                                 &msi); -        if ( copy_to_guest(arg, &map, 1) != 0 ) +        if ( __copy_to_guest(arg, &map, 1) )              ret = -EFAULT;          break;      } @@ -440,7 +440,7 @@ ret_t do_physdev_op(int cmd, XEN_GUEST_HANDLE_PARAM(void) arg)          if ( ret )              break;          ret = ioapic_guest_read(apic.apic_physbase, apic.reg, &apic.value); -        if ( copy_to_guest(arg, &apic, 1) != 0 ) +        if ( __copy_to_guest(arg, &apic, 1) )              ret = -EFAULT;          break;      } @@ -478,7 +478,7 @@ ret_t do_physdev_op(int cmd, XEN_GUEST_HANDLE_PARAM(void) arg)          irq_op.vector = irq_op.irq;          ret = 0; -        if ( copy_to_guest(arg, &irq_op, 1) != 0 ) +        if ( __copy_to_guest(arg, &irq_op, 1) )              ret = -EFAULT;          break;      } @@ -714,7 +714,7 @@ ret_t do_physdev_op(int cmd, XEN_GUEST_HANDLE_PARAM(void) arg)          if ( ret >= 0 )          {              out.pirq = ret; -            ret = copy_to_guest(arg, &out, 1) ? -EFAULT : 0; +            ret = __copy_to_guest(arg, &out, 1) ? -EFAULT : 0;          }          break; | 
