WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-devel

[Xen-devel] [PATCH] linux/privcmd: cleanup

To: <xen-devel@xxxxxxxxxxxxxxxxxxx>
Subject: [Xen-devel] [PATCH] linux/privcmd: cleanup
From: "Jan Beulich" <JBeulich@xxxxxxxxxx>
Date: Mon, 18 Jan 2010 13:49:54 +0000
Delivery-date: Mon, 18 Jan 2010 05:50:24 -0800
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-devel-request@lists.xensource.com?subject=help>
List-id: Xen developer discussion <xen-devel.lists.xensource.com>
List-post: <mailto:xen-devel@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=unsubscribe>
Sender: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx
Declare repeatedly used variables just once. Fix types.

As usual, written against 2.6.32.3 and made apply to the 2.6.18
tree without further testing.

Signed-off-by: Jan Beulich <jbeulich@xxxxxxxxxx>

--- head-2010-01-07.orig/drivers/xen/privcmd/privcmd.c  2010-01-12 
10:04:39.000000000 +0100
+++ head-2010-01-07/drivers/xen/privcmd/privcmd.c       2010-01-14 
14:37:38.000000000 +0100
@@ -58,8 +58,14 @@ static inline int enforce_singleshot_map
 static long privcmd_ioctl(struct file *file,
                          unsigned int cmd, unsigned long data)
 {
-       int ret = -ENOSYS;
+       long ret;
        void __user *udata = (void __user *) data;
+       unsigned long i, addr, nr, nr_pages;
+       int paged_out;
+       struct mm_struct *mm = current->mm;
+       struct vm_area_struct *vma;
+       LIST_HEAD(pagelist);
+       struct list_head *l, *l2;
 
        switch (cmd) {
        case IOCTL_PRIVCMD_HYPERCALL: {
@@ -69,6 +77,7 @@ static long privcmd_ioctl(struct file *f
                if (copy_from_user(&hypercall, udata, sizeof(hypercall)))
                        return -EFAULT;
 
+               ret = -ENOSYS;
 #if defined(__i386__)
                if (hypercall.op >= (PAGE_SIZE >> 5))
                        break;
@@ -86,16 +95,11 @@ static long privcmd_ioctl(struct file *f
        break;
 
        case IOCTL_PRIVCMD_MMAP: {
-#define MMAP_NR_PER_PAGE (int)((PAGE_SIZE-sizeof(struct 
list_head))/sizeof(privcmd_mmap_entry_t))
+#define MMAP_NR_PER_PAGE \
+       (unsigned long)((PAGE_SIZE - sizeof(*l)) / sizeof(*msg))
                privcmd_mmap_t mmapcmd;
                privcmd_mmap_entry_t *msg;
                privcmd_mmap_entry_t __user *p;
-               struct mm_struct *mm = current->mm;
-               struct vm_area_struct *vma;
-               unsigned long va;
-               int i, rc;
-               LIST_HEAD(pagelist);
-               struct list_head *l,*l2;
 
                if (!is_initial_xendomain())
                        return -EPERM;
@@ -108,9 +112,9 @@ static long privcmd_ioctl(struct file *f
 
                p = mmapcmd.entry;
                for (i = 0; i < mmapcmd.num;) {
-                       int nr = min(mmapcmd.num - i, MMAP_NR_PER_PAGE);
+                       nr = min(mmapcmd.num - i, MMAP_NR_PER_PAGE);
 
-                       rc = -ENOMEM;
+                       ret = -ENOMEM;
                        l = (struct list_head *) __get_free_page(GFP_KERNEL);
                        if (l == NULL)
                                goto mmap_out;
@@ -119,7 +123,7 @@ static long privcmd_ioctl(struct file *f
                        list_add_tail(l, &pagelist);
                        msg = (privcmd_mmap_entry_t*)(l + 1);
 
-                       rc = -EFAULT;
+                       ret = -EFAULT;
                        if (copy_from_user(msg, p, nr*sizeof(*msg)))
                                goto mmap_out;
                        i += nr;
@@ -132,47 +136,47 @@ static long privcmd_ioctl(struct file *f
                down_write(&mm->mmap_sem);
 
                vma = find_vma(mm, msg->va);
-               rc = -EINVAL;
+               ret = -EINVAL;
                if (!vma || (msg->va != vma->vm_start))
                        goto mmap_out;
 
-               va = vma->vm_start;
+               addr = vma->vm_start;
 
                i = 0;
                list_for_each(l, &pagelist) {
-                       int nr = i + min(mmapcmd.num - i, MMAP_NR_PER_PAGE);
+                       nr = i + min(mmapcmd.num - i, MMAP_NR_PER_PAGE);
 
                        msg = (privcmd_mmap_entry_t*)(l + 1);
                        while (i<nr) {
 
                                /* Do not allow range to wrap the address 
space. */
                                if ((msg->npages > (LONG_MAX >> PAGE_SHIFT)) ||
-                                   ((unsigned long)(msg->npages << PAGE_SHIFT) 
>= -va))
+                                   (((unsigned long)msg->npages << PAGE_SHIFT) 
>= -addr))
                                        goto mmap_out;
 
                                /* Range chunks must be contiguous in va space. 
*/
-                               if ((msg->va != va) ||
+                               if ((msg->va != addr) ||
                                    ((msg->va+(msg->npages<<PAGE_SHIFT)) > 
vma->vm_end))
                                        goto mmap_out;
 
-                               va += msg->npages << PAGE_SHIFT;
+                               addr += msg->npages << PAGE_SHIFT;
                                msg++;
                                i++;
                        }
                }
 
                if (!enforce_singleshot_mapping(vma, vma->vm_start,
-                                               (va - vma->vm_start) >> 
PAGE_SHIFT))
+                                               (addr - vma->vm_start) >> 
PAGE_SHIFT))
                        goto mmap_out;
 
-               va = vma->vm_start;
+               addr = vma->vm_start;
                i = 0;
                list_for_each(l, &pagelist) {
-                       int nr = i + min(mmapcmd.num - i, MMAP_NR_PER_PAGE);
+                       nr = i + min(mmapcmd.num - i, MMAP_NR_PER_PAGE);
 
                        msg = (privcmd_mmap_entry_t*)(l + 1);
                        while (i < nr) {
-                               if ((rc = direct_remap_pfn_range(
+                               if ((ret = direct_remap_pfn_range(
                                             vma,
                                             msg->va & PAGE_MASK,
                                             msg->mfn,
@@ -181,34 +185,28 @@ static long privcmd_ioctl(struct file *f
                                             mmapcmd.dom)) < 0)
                                        goto mmap_out;
 
-                               va += msg->npages << PAGE_SHIFT;
+                               addr += msg->npages << PAGE_SHIFT;
                                msg++;
                                i++;
                        }
                }
 
-               rc = 0;
+               ret = 0;
 
        mmap_out:
                up_write(&mm->mmap_sem);
                list_for_each_safe(l,l2,&pagelist)
                        free_page((unsigned long)l);
-               ret = rc;
        }
 #undef MMAP_NR_PER_PAGE
        break;
 
        case IOCTL_PRIVCMD_MMAPBATCH: {
-#define MMAPBATCH_NR_PER_PAGE (unsigned long)((PAGE_SIZE-sizeof(struct 
list_head))/sizeof(unsigned long))
+#define MMAPBATCH_NR_PER_PAGE \
+       (unsigned long)((PAGE_SIZE - sizeof(*l)) / sizeof(*mfn))
                privcmd_mmapbatch_t m;
-               struct mm_struct *mm = current->mm;
-               struct vm_area_struct *vma;
                xen_pfn_t __user *p;
-               unsigned long addr, *mfn, nr_pages;
-               int i;
-               LIST_HEAD(pagelist);
-               struct list_head *l, *l2;
-               int paged_out = 0;
+               xen_pfn_t *mfn;
 
                if (!is_initial_xendomain())
                        return -EPERM;
@@ -224,7 +222,7 @@ static long privcmd_ioctl(struct file *f
 
                p = m.arr;
                for (i=0; i<nr_pages; ) {
-                       int nr = min(nr_pages - i, MMAPBATCH_NR_PER_PAGE);
+                       nr = min(nr_pages - i, MMAPBATCH_NR_PER_PAGE);
 
                        ret = -ENOMEM;
                        l = (struct list_head *)__get_free_page(GFP_KERNEL);
@@ -256,13 +254,14 @@ static long privcmd_ioctl(struct file *f
 
                i = 0;
                ret = 0;
+               paged_out = 0;
                list_for_each(l, &pagelist) {
-                       int nr = i + min(nr_pages - i, MMAPBATCH_NR_PER_PAGE);
-                       int rc;
-
+                       nr = i + min(nr_pages - i, MMAPBATCH_NR_PER_PAGE);
                        mfn = (unsigned long *)(l + 1);
 
                        while (i<nr) {
+                               int rc;
+
                                rc = direct_remap_pfn_range(vma, addr & 
PAGE_MASK,
                                                            *mfn, PAGE_SIZE,
                                                            vma->vm_page_prot, 
m.dom);
@@ -289,7 +288,7 @@ static long privcmd_ioctl(struct file *f
                        else
                                ret = 0;
                        list_for_each(l, &pagelist) {
-                               int nr = min(nr_pages - i, 
MMAPBATCH_NR_PER_PAGE);
+                               nr = min(nr_pages - i, MMAPBATCH_NR_PER_PAGE);
                                mfn = (unsigned long *)(l + 1);
                                if (copy_to_user(p, mfn, nr*sizeof(*mfn)))
                                        ret = -EFAULT;
@@ -304,15 +303,9 @@ static long privcmd_ioctl(struct file *f
 
        case IOCTL_PRIVCMD_MMAPBATCH_V2: {
                privcmd_mmapbatch_v2_t m;
-               struct mm_struct *mm = current->mm;
-               struct vm_area_struct *vma;
                const xen_pfn_t __user *p;
                xen_pfn_t *mfn;
-               unsigned long addr, nr_pages;
-               unsigned int i, nr;
-               LIST_HEAD(pagelist);
-               struct list_head *l, *l2;
-               int *err, paged_out;
+               int *err;
 
                if (!is_initial_xendomain())
                        return -EPERM;
@@ -360,14 +353,14 @@ static long privcmd_ioctl(struct file *f
                ret = 0;
                paged_out = 0;
                list_for_each(l, &pagelist) {
-                       int rc;
-
                        nr = i + min(nr_pages - i, MMAPBATCH_NR_PER_PAGE);
                        mfn = (void *)(l + 1);
                        err = (void *)(l + 1);
                        BUILD_BUG_ON(sizeof(*err) > sizeof(*mfn));
 
                        while (i < nr) {
+                               int rc;
+
                                rc = direct_remap_pfn_range(vma, addr & 
PAGE_MASK,
                                                            *mfn, PAGE_SIZE,
                                                            vma->vm_page_prot, 
m.dom);



_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel

<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-devel] [PATCH] linux/privcmd: cleanup, Jan Beulich <=