aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/lguest/lguest_user.c
diff options
context:
space:
mode:
authorRusty Russell <rusty@rustcorp.com.au>2007-10-21 21:03:27 -0400
committerRusty Russell <rusty@rustcorp.com.au>2007-10-23 01:49:51 -0400
commit48245cc0708d49d1d0566b9fa617ad6c5f4c6934 (patch)
treeb396fd2d1ab185aab20894570e7e84bd4f656355 /drivers/lguest/lguest_user.c
parent3c6b5bfa3cf3b4057788e08482a468cc3bc00780 (diff)
Remove fixed limit on number of guests, and lguests array.
Back when we had all the Guest state in the switcher, we had a fixed array of them. This is no longer necessary. If we switch the network code to using random_ether_addr (46 bits is enough to avoid clashes), we can get rid of the concept of "guest id" altogether. Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
Diffstat (limited to 'drivers/lguest/lguest_user.c')
-rw-r--r--drivers/lguest/lguest_user.c17
1 files changed, 6 insertions, 11 deletions
diff --git a/drivers/lguest/lguest_user.c b/drivers/lguest/lguest_user.c
index 816d4d12a801..5632ed82798a 100644
--- a/drivers/lguest/lguest_user.c
+++ b/drivers/lguest/lguest_user.c
@@ -167,11 +167,11 @@ static int initialize(struct file *file, const u32 __user *input)
167 /* "struct lguest" contains everything we (the Host) know about a 167 /* "struct lguest" contains everything we (the Host) know about a
168 * Guest. */ 168 * Guest. */
169 struct lguest *lg; 169 struct lguest *lg;
170 int err, i; 170 int err;
171 u32 args[5]; 171 u32 args[5];
172 172
173 /* We grab the Big Lguest lock, which protects the global array 173 /* We grab the Big Lguest lock, which protects against multiple
174 * "lguests" and multiple simultaneous initializations. */ 174 * simultaneous initializations. */
175 mutex_lock(&lguest_lock); 175 mutex_lock(&lguest_lock);
176 /* You can't initialize twice! Close the device and start again... */ 176 /* You can't initialize twice! Close the device and start again... */
177 if (file->private_data) { 177 if (file->private_data) {
@@ -184,18 +184,13 @@ static int initialize(struct file *file, const u32 __user *input)
184 goto unlock; 184 goto unlock;
185 } 185 }
186 186
187 /* Find an unused guest. */ 187 lg = kzalloc(sizeof(*lg), GFP_KERNEL);
188 i = find_free_guest(); 188 if (!lg) {
189 if (i < 0) { 189 err = -ENOMEM;
190 err = -ENOSPC;
191 goto unlock; 190 goto unlock;
192 } 191 }
193 /* OK, we have an index into the "lguest" array: "lg" is a convenient
194 * pointer. */
195 lg = &lguests[i];
196 192
197 /* Populate the easy fields of our "struct lguest" */ 193 /* Populate the easy fields of our "struct lguest" */
198 lg->guestid = i;
199 lg->mem_base = (void __user *)(long)args[0]; 194 lg->mem_base = (void __user *)(long)args[0];
200 lg->pfn_limit = args[1]; 195 lg->pfn_limit = args[1];
201 lg->page_offset = args[4]; 196 lg->page_offset = args[4];