Esempio n. 1
0
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;
}
Esempio n. 2
0
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;
}