|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [linux-2.6.18-xen] gntdev: adjust indentation (and fix bugs noticed by doing so)
# HG changeset patch
# User Jan Beulich <jbeulich@xxxxxxxx>
# Date 1336749568 -7200
# Node ID 1f738f0b706cfb76cb6d9077188f9d3a3ca498f2
# Parent c0e1133a1fc113be9c756c80167f8f55613d1ac9
gntdev: adjust indentation (and fix bugs noticed by doing so)
By inverting two conditions, indentation can be decreased by one level
for large code portions, thus improving legibility.
In gntdev_mmap(), this made obvious that failure of vm_insert_page()
was silently ignored rather than being propagated to the caller.
In gntdev_clear_pte(), the final set_phys_to_machine() must not be
called for the auto-translated case.
Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx>
---
diff -r c0e1133a1fc1 -r 1f738f0b706c drivers/xen/gntdev/gntdev.c
--- a/drivers/xen/gntdev/gntdev.c Fri May 11 17:17:40 2012 +0200
+++ b/drivers/xen/gntdev/gntdev.c Fri May 11 17:19:28 2012 +0200
@@ -577,85 +577,85 @@ static int gntdev_mmap (struct file *fli
GNTDEV_INVALID_HANDLE;
/* Now perform the mapping to user space. */
- if (!xen_feature(XENFEAT_auto_translated_physmap)) {
-
- /* NOT USING SHADOW PAGE TABLES. */
- /* In this case, we map the grant(s) straight into user
- * space.
- */
-
- /* Get the machine address of the PTE for the user
- * page.
- */
- if ((ret = create_lookup_pte_addr(vma->vm_mm,
- vma->vm_start
- + (i << PAGE_SHIFT),
- &ptep)))
- {
- printk(KERN_ERR "Error obtaining PTE pointer "
- "(%d).\n", ret);
- goto undo_map_out;
- }
-
- /* Configure the map operation. */
-
- /* The reference is to be used by host CPUs. */
- flags = GNTMAP_host_map;
-
- /* Specifies a user space mapping. */
- flags |= GNTMAP_application_map;
-
- /* The map request contains the machine address of the
- * PTE to update.
- */
- flags |= GNTMAP_contains_pte;
-
- if (!(vma->vm_flags & VM_WRITE))
- flags |= GNTMAP_readonly;
-
- gnttab_set_map_op(&op, ptep, flags,
- private_data->grants[slot_index+i]
- .u.valid.ref,
- private_data->grants[slot_index+i]
- .u.valid.domid);
-
- /* Carry out the mapping of the grant reference. */
- ret = HYPERVISOR_grant_table_op(GNTTABOP_map_grant_ref,
- &op, 1);
- BUG_ON(ret);
- if (op.status != GNTST_okay) {
- printk(KERN_ERR "Error mapping the grant "
- "reference into user space (%d). domid "
- "= %d; ref = %d\n", op.status,
- private_data->grants[slot_index+i].u
- .valid.domid,
- private_data->grants[slot_index+i].u
- .valid.ref);
- /* This should never happen after we've mapped
into
- * the kernel space. */
- BUG_ON(op.status == GNTST_eagain);
- goto undo_map_out;
- }
-
- /* Record the grant handle, for use in the unmap
- * operation.
- */
- private_data->grants[slot_index+i].u.
- valid.user_handle = op.handle;
-
- /* Update p2m structure with the new mapping. */
- set_phys_to_machine(__pa(kernel_vaddr) >> PAGE_SHIFT,
- FOREIGN_FRAME(private_data->
- grants[slot_index+i]
- .u.valid.dev_bus_addr
- >> PAGE_SHIFT));
- } else {
+ if (xen_feature(XENFEAT_auto_translated_physmap)) {
/* USING SHADOW PAGE TABLES. */
/* In this case, we simply insert the page into the VM
* area. */
ret = vm_insert_page(vma, user_vaddr, page);
+ if (!ret)
+ continue;
+ exit_ret = ret;
+ goto undo_map_out;
}
+ /* NOT USING SHADOW PAGE TABLES. */
+ /* In this case, we map the grant(s) straight into user
+ * space.
+ */
+
+ /* Get the machine address of the PTE for the user page. */
+ if ((ret = create_lookup_pte_addr(vma->vm_mm,
+ vma->vm_start
+ + (i << PAGE_SHIFT),
+ &ptep)))
+ {
+ printk(KERN_ERR "Error obtaining PTE pointer (%d)\n",
+ ret);
+ goto undo_map_out;
+ }
+
+ /* Configure the map operation. */
+
+ /* The reference is to be used by host CPUs. */
+ flags = GNTMAP_host_map;
+
+ /* Specifies a user space mapping. */
+ flags |= GNTMAP_application_map;
+
+ /* The map request contains the machine address of the
+ * PTE to update.
+ */
+ flags |= GNTMAP_contains_pte;
+
+ if (!(vma->vm_flags & VM_WRITE))
+ flags |= GNTMAP_readonly;
+
+ gnttab_set_map_op(&op, ptep, flags,
+ private_data->grants[slot_index+i]
+ .u.valid.ref,
+ private_data->grants[slot_index+i]
+ .u.valid.domid);
+
+ /* Carry out the mapping of the grant reference. */
+ ret = HYPERVISOR_grant_table_op(GNTTABOP_map_grant_ref,
+ &op, 1);
+ BUG_ON(ret);
+ if (op.status != GNTST_okay) {
+ printk(KERN_ERR "Error mapping the grant reference "
+ "into user space (%d). domid = %d; ref = %d\n",
+ op.status,
+ private_data->grants[slot_index+i].u
+ .valid.domid,
+ private_data->grants[slot_index+i].u
+ .valid.ref);
+ /* This should never happen after we've mapped into
+ * the kernel space. */
+ BUG_ON(op.status == GNTST_eagain);
+ goto undo_map_out;
+ }
+
+ /* Record the grant handle, for use in the unmap
+ * operation.
+ */
+ private_data->grants[slot_index+i].u.valid.user_handle
+ = op.handle;
+
+ /* Update p2m structure with the new mapping. */
+ set_phys_to_machine(__pa(kernel_vaddr) >> PAGE_SHIFT,
+ FOREIGN_FRAME(private_data->
+ grants[slot_index+i]
+ .u.valid.dev_bus_addr
+ >> PAGE_SHIFT));
}
exit_ret = 0;
@@ -715,55 +715,52 @@ static pte_t gntdev_clear_pte(struct vm_
/* Only unmap grants if the slot has been mapped. This could be being
* called from a failing mmap().
*/
- if (private_data->grants[slot_index].state == GNTDEV_SLOT_MAPPED) {
+ if (private_data->grants[slot_index].state != GNTDEV_SLOT_MAPPED) {
+ pte_clear_full(vma->vm_mm, addr, ptep, is_fullmm);
+ return copy;
+ }
- /* First, we clear the user space mapping, if it has been made.
- */
- if (private_data->grants[slot_index].u.valid.user_handle !=
- GNTDEV_INVALID_HANDLE &&
- !xen_feature(XENFEAT_auto_translated_physmap)) {
- /* NOT USING SHADOW PAGE TABLES. */
- gnttab_set_unmap_op(&op, ptep_to_machine(ptep),
- GNTMAP_contains_pte,
- private_data->grants[slot_index]
- .u.valid.user_handle);
- ret = HYPERVISOR_grant_table_op(
- GNTTABOP_unmap_grant_ref, &op, 1);
- BUG_ON(ret);
- if (op.status != GNTST_okay)
- printk("User unmap grant status = %d\n",
- op.status);
- } else {
- /* USING SHADOW PAGE TABLES. */
- pte_clear_full(vma->vm_mm, addr, ptep, is_fullmm);
- }
-
- /* Finally, we unmap the grant from kernel space. */
- gnttab_set_unmap_op(&op,
- get_kernel_vaddr(private_data, slot_index),
- GNTMAP_host_map,
+ /* First, we clear the user space mapping, if it has been made.
+ */
+ if (private_data->grants[slot_index].u.valid.user_handle !=
+ GNTDEV_INVALID_HANDLE &&
+ !xen_feature(XENFEAT_auto_translated_physmap)) {
+ /* NOT USING SHADOW PAGE TABLES. */
+ gnttab_set_unmap_op(&op, ptep_to_machine(ptep),
+ GNTMAP_contains_pte,
private_data->grants[slot_index].u.valid
- .kernel_handle);
- ret = HYPERVISOR_grant_table_op(GNTTABOP_unmap_grant_ref,
+ .user_handle);
+ ret = HYPERVISOR_grant_table_op(GNTTABOP_unmap_grant_ref,
&op, 1);
BUG_ON(ret);
if (op.status != GNTST_okay)
- printk("Kernel unmap grant status = %d\n", op.status);
+ printk("User unmap grant status = %d\n", op.status);
+ } else {
+ /* USING SHADOW PAGE TABLES. */
+ pte_clear_full(vma->vm_mm, addr, ptep, is_fullmm);
+ }
+ /* Finally, we unmap the grant from kernel space. */
+ gnttab_set_unmap_op(&op,
+ get_kernel_vaddr(private_data, slot_index),
+ GNTMAP_host_map,
+ private_data->grants[slot_index].u.valid
+ .kernel_handle);
+ ret = HYPERVISOR_grant_table_op(GNTTABOP_unmap_grant_ref, &op, 1);
+ BUG_ON(ret);
+ if (op.status != GNTST_okay)
+ printk("Kernel unmap grant status = %d\n", op.status);
- /* Return slot to the not-yet-mapped state, so that it may be
- * mapped again, or removed by a subsequent ioctl.
- */
- private_data->grants[slot_index].state =
- GNTDEV_SLOT_NOT_YET_MAPPED;
+ /* Return slot to the not-yet-mapped state, so that it may be
+ * mapped again, or removed by a subsequent ioctl.
+ */
+ private_data->grants[slot_index].state = GNTDEV_SLOT_NOT_YET_MAPPED;
+ if (!xen_feature(XENFEAT_auto_translated_physmap)) {
/* Invalidate the physical to machine mapping for this page. */
set_phys_to_machine(
page_to_pfn(private_data->foreign_pages[slot_index]),
INVALID_P2M_ENTRY);
-
- } else {
- pte_clear_full(vma->vm_mm, addr, ptep, is_fullmm);
}
return copy;
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |