static int affinity_write_proc(struct file *file, const char __user * buffer, unsigned long count, void *data) { char *end, buf[16]; unsigned long val; xnarch_cpumask_t new_affinity; int n, cpu; n = count > sizeof(buf) - 1 ? sizeof(buf) - 1 : count; if (copy_from_user(buf, buffer, n)) return -EFAULT; buf[n] = '\0'; val = simple_strtol(buf, &end, 0); if (*end != '\0' && !isspace(*end)) return -EINVAL; xnarch_cpus_clear(new_affinity); for (cpu = 0; cpu < sizeof(val) * 8; cpu++, val >>= 1) if (val & 1) xnarch_cpu_set(cpu, new_affinity); xnarch_cpus_and(nkaffinity, new_affinity, xnarch_supported_cpus); return count; }
static ssize_t affinity_vfile_store(struct xnvfile_input *input) { xnarch_cpumask_t new_affinity; ssize_t ret; long val; int cpu; ret = xnvfile_get_integer(input, &val); if (ret < 0) return ret; xnarch_cpus_clear(new_affinity); for (cpu = 0; cpu < BITS_PER_LONG; cpu++, val >>= 1) if (val & 1) xnarch_cpu_set(cpu, new_affinity); xnarch_cpus_and(nkaffinity, new_affinity, xnarch_supported_cpus); return ret; }