aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/xen/gntalloc.c
diff options
context:
space:
mode:
authorJohan Hovold <johan@kernel.org>2014-09-15 12:07:37 -0400
committerJohan Hovold <johan@kernel.org>2014-09-15 12:10:34 -0400
commit4b7154ba70bb20a3c024faabdd2bc207b550a813 (patch)
tree99a6e1204ec5deaca27bcbfc75ca16d3633433f2 /drivers/xen/gntalloc.c
parentadceac14166da8c466223a35ec59c4a4adeef976 (diff)
parent9e82bf014195d6f0054982c463575cdce24292be (diff)
Merge tag 'v3.17-rc5' into usb-next
USB fixes in Linux 3.17-rc5 are needed to build on top of for 3.18. Signed-off-by: Johan Hovold <johan@kernel.org>
Diffstat (limited to 'drivers/xen/gntalloc.c')
-rw-r--r--drivers/xen/gntalloc.c16
1 files changed, 7 insertions, 9 deletions
diff --git a/drivers/xen/gntalloc.c b/drivers/xen/gntalloc.c
index 787d17945418..e53fe191738c 100644
--- a/drivers/xen/gntalloc.c
+++ b/drivers/xen/gntalloc.c
@@ -124,7 +124,7 @@ static int add_grefs(struct ioctl_gntalloc_alloc_gref *op,
124 int i, rc, readonly; 124 int i, rc, readonly;
125 LIST_HEAD(queue_gref); 125 LIST_HEAD(queue_gref);
126 LIST_HEAD(queue_file); 126 LIST_HEAD(queue_file);
127 struct gntalloc_gref *gref; 127 struct gntalloc_gref *gref, *next;
128 128
129 readonly = !(op->flags & GNTALLOC_FLAG_WRITABLE); 129 readonly = !(op->flags & GNTALLOC_FLAG_WRITABLE);
130 rc = -ENOMEM; 130 rc = -ENOMEM;
@@ -141,13 +141,11 @@ static int add_grefs(struct ioctl_gntalloc_alloc_gref *op,
141 goto undo; 141 goto undo;
142 142
143 /* Grant foreign access to the page. */ 143 /* Grant foreign access to the page. */
144 gref->gref_id = gnttab_grant_foreign_access(op->domid, 144 rc = gnttab_grant_foreign_access(op->domid,
145 pfn_to_mfn(page_to_pfn(gref->page)), readonly); 145 pfn_to_mfn(page_to_pfn(gref->page)), readonly);
146 if ((int)gref->gref_id < 0) { 146 if (rc < 0)
147 rc = gref->gref_id;
148 goto undo; 147 goto undo;
149 } 148 gref_ids[i] = gref->gref_id = rc;
150 gref_ids[i] = gref->gref_id;
151 } 149 }
152 150
153 /* Add to gref lists. */ 151 /* Add to gref lists. */
@@ -162,8 +160,8 @@ undo:
162 mutex_lock(&gref_mutex); 160 mutex_lock(&gref_mutex);
163 gref_size -= (op->count - i); 161 gref_size -= (op->count - i);
164 162
165 list_for_each_entry(gref, &queue_file, next_file) { 163 list_for_each_entry_safe(gref, next, &queue_file, next_file) {
166 /* __del_gref does not remove from queue_file */ 164 list_del(&gref->next_file);
167 __del_gref(gref); 165 __del_gref(gref);
168 } 166 }
169 167
@@ -193,7 +191,7 @@ static void __del_gref(struct gntalloc_gref *gref)
193 191
194 gref->notify.flags = 0; 192 gref->notify.flags = 0;
195 193
196 if (gref->gref_id > 0) { 194 if (gref->gref_id) {
197 if (gnttab_query_foreign_access(gref->gref_id)) 195 if (gnttab_query_foreign_access(gref->gref_id))
198 return; 196 return;
199 197