diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2009-01-03 12:04:39 -0800 | 
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2009-01-03 12:04:39 -0800 | 
| commit | 7d3b56ba37a95f1f370f50258ed3954c304c524b (patch) | |
| tree | 86102527b92f02450aa245f084ffb491c18d2e0a /kernel/irq/proc.c | |
| parent | 269b012321f2f1f8e4648c43a93bf432b42c6668 (diff) | |
| parent | ab14398abd195af91a744c320a52a1bce814dd1e (diff) | |
| download | olio-linux-3.10-7d3b56ba37a95f1f370f50258ed3954c304c524b.tar.xz olio-linux-3.10-7d3b56ba37a95f1f370f50258ed3954c304c524b.zip  | |
Merge branch 'cpus4096-for-linus-3' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip
* 'cpus4096-for-linus-3' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip: (77 commits)
  x86: setup_per_cpu_areas() cleanup
  cpumask: fix compile error when CONFIG_NR_CPUS is not defined
  cpumask: use alloc_cpumask_var_node where appropriate
  cpumask: convert shared_cpu_map in acpi_processor* structs to cpumask_var_t
  x86: use cpumask_var_t in acpi/boot.c
  x86: cleanup some remaining usages of NR_CPUS where s/b nr_cpu_ids
  sched: put back some stack hog changes that were undone in kernel/sched.c
  x86: enable cpus display of kernel_max and offlined cpus
  ia64: cpumask fix for is_affinity_mask_valid()
  cpumask: convert RCU implementations, fix
  xtensa: define __fls
  mn10300: define __fls
  m32r: define __fls
  h8300: define __fls
  frv: define __fls
  cris: define __fls
  cpumask: CONFIG_DISABLE_OBSOLETE_CPUMASK_FUNCTIONS
  cpumask: zero extra bits in alloc_cpumask_var_node
  cpumask: replace for_each_cpu_mask_nr with for_each_cpu in kernel/time/
  cpumask: convert mm/
  ...
Diffstat (limited to 'kernel/irq/proc.c')
| -rw-r--r-- | kernel/irq/proc.c | 34 | 
1 files changed, 22 insertions, 12 deletions
diff --git a/kernel/irq/proc.c b/kernel/irq/proc.c index d2c0e5ee53c..aae3f742bce 100644 --- a/kernel/irq/proc.c +++ b/kernel/irq/proc.c @@ -20,7 +20,7 @@ static struct proc_dir_entry *root_irq_dir;  static int irq_affinity_proc_show(struct seq_file *m, void *v)  {  	struct irq_desc *desc = irq_to_desc((long)m->private); -	cpumask_t *mask = &desc->affinity; +	const struct cpumask *mask = &desc->affinity;  #ifdef CONFIG_GENERIC_PENDING_IRQ  	if (desc->status & IRQ_MOVE_PENDING) @@ -54,7 +54,7 @@ static ssize_t irq_affinity_proc_write(struct file *file,  	if (err)  		goto free_cpumask; -	if (!is_affinity_mask_valid(*new_value)) { +	if (!is_affinity_mask_valid(new_value)) {  		err = -EINVAL;  		goto free_cpumask;  	} @@ -93,7 +93,7 @@ static const struct file_operations irq_affinity_proc_fops = {  static int default_affinity_show(struct seq_file *m, void *v)  { -	seq_cpumask(m, &irq_default_affinity); +	seq_cpumask(m, irq_default_affinity);  	seq_putc(m, '\n');  	return 0;  } @@ -101,27 +101,37 @@ static int default_affinity_show(struct seq_file *m, void *v)  static ssize_t default_affinity_write(struct file *file,  		const char __user *buffer, size_t count, loff_t *ppos)  { -	cpumask_t new_value; +	cpumask_var_t new_value;  	int err; -	err = cpumask_parse_user(buffer, count, &new_value); +	if (!alloc_cpumask_var(&new_value, GFP_KERNEL)) +		return -ENOMEM; + +	err = cpumask_parse_user(buffer, count, new_value);  	if (err) -		return err; +		goto out; -	if (!is_affinity_mask_valid(new_value)) -		return -EINVAL; +	if (!is_affinity_mask_valid(new_value)) { +		err = -EINVAL; +		goto out; +	}  	/*  	 * Do not allow disabling IRQs completely - it's a too easy  	 * way to make the system unusable accidentally :-) At least  	 * one online CPU still has to be targeted.  	 */ -	if (!cpus_intersects(new_value, cpu_online_map)) -		return -EINVAL; +	if (!cpumask_intersects(new_value, cpu_online_mask)) { +		err = -EINVAL; +		goto out; +	} -	irq_default_affinity = new_value; +	cpumask_copy(irq_default_affinity, new_value); +	err = count; -	return count; +out: +	free_cpumask_var(new_value); +	return err;  }  static int default_affinity_open(struct inode *inode, struct file *file)  |