aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGlauber de Oliveira Costa <gcosta@redhat.com>2008-01-07 08:05:26 -0500
committerRusty Russell <rusty@rustcorp.com.au>2008-01-30 06:50:07 -0500
commit7ea07a1500f05e06ebf0136763c781244f77a2a1 (patch)
tree3b0e4f64c87c4d668a49d6f979ed4d5ac0137a4f
parentd0953d42c3445a120299fac9ad70e672d77898e9 (diff)
lguest: make write() operation smp aware
This patch makes the write() file operation smp aware. Which means, receiving the vcpu_id value through the offset parameter, and being well aware to which vcpu we're talking to. Signed-off-by: Glauber de Oliveira Costa <gcosta@redhat.com> Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
-rw-r--r--drivers/lguest/lguest_user.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/drivers/lguest/lguest_user.c b/drivers/lguest/lguest_user.c
index 9f0a44329947..2562082a3ea3 100644
--- a/drivers/lguest/lguest_user.c
+++ b/drivers/lguest/lguest_user.c
@@ -227,14 +227,21 @@ static ssize_t write(struct file *file, const char __user *in,
227 struct lguest *lg = file->private_data; 227 struct lguest *lg = file->private_data;
228 const unsigned long __user *input = (const unsigned long __user *)in; 228 const unsigned long __user *input = (const unsigned long __user *)in;
229 unsigned long req; 229 unsigned long req;
230 struct lg_cpu *cpu;
231 unsigned int cpu_id = *off;
230 232
231 if (get_user(req, input) != 0) 233 if (get_user(req, input) != 0)
232 return -EFAULT; 234 return -EFAULT;
233 input++; 235 input++;
234 236
235 /* If you haven't initialized, you must do that first. */ 237 /* If you haven't initialized, you must do that first. */
236 if (req != LHREQ_INITIALIZE && !lg) 238 if (req != LHREQ_INITIALIZE) {
237 return -EINVAL; 239 if (!lg || (cpu_id >= lg->nr_cpus))
240 return -EINVAL;
241 cpu = &lg->cpus[cpu_id];
242 if (!cpu)
243 return -EINVAL;
244 }
238 245
239 /* Once the Guest is dead, all you can do is read() why it died. */ 246 /* Once the Guest is dead, all you can do is read() why it died. */
240 if (lg && lg->dead) 247 if (lg && lg->dead)