new_affinity = v->cpu_affinity;
memcpy(cpus_addr(new_affinity),
&op->u.setvcpuaffinity.cpumap,
- min((int)BITS_TO_LONGS(NR_CPUS),
+ min((int)(BITS_TO_LONGS(NR_CPUS) * sizeof(long)),
(int)sizeof(op->u.setvcpuaffinity.cpumap)));
ret = vcpu_set_affinity(v, &new_affinity);
op->u.getvcpuinfo.cpumap = 0;
memcpy(&op->u.getvcpuinfo.cpumap,
cpus_addr(v->cpu_affinity),
- min((int)BITS_TO_LONGS(NR_CPUS),
+ min((int)(BITS_TO_LONGS(NR_CPUS) * sizeof(long)),
(int)sizeof(op->u.getvcpuinfo.cpumap)));
ret = 0;
int vcpu_set_affinity(struct vcpu *v, cpumask_t *affinity)
{
- if ( cpus_empty(*affinity) )
+ cpumask_t online_affinity;
+
+ cpus_and(online_affinity, *affinity, cpu_online_map);
+ if ( cpus_empty(online_affinity) )
return -EINVAL;
return SCHED_OP(set_affinity, v, affinity);