Skip to content

Commit

Permalink
cpumask: use work_on_cpu in acpi-cpufreq.c for drv_read and drv_write
Browse files Browse the repository at this point in the history
Impact: use new cpumask API to reduce stack usage

Replace the saving of current->cpus_allowed and set_cpus_allowed_ptr() with
a work_on_cpu function for drv_read() and drv_write().

Basically converts do_drv_{read,write} into "work_on_cpu" functions that
are now called by drv_read and drv_write.

Signed-off-by: Mike Travis <travis@sgi.com>
Acked-by: Rusty Russell <rusty@rustcorp.com.au>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
  • Loading branch information
Mike Travis authored and Ingo Molnar committed Jan 6, 2009
1 parent 4d8bb53 commit 7503bfb
Showing 1 changed file with 13 additions and 12 deletions.
25 changes: 13 additions & 12 deletions arch/x86/kernel/cpu/cpufreq/acpi-cpufreq.c
Original file line number Diff line number Diff line change
Expand Up @@ -150,8 +150,9 @@ struct drv_cmd {
u32 val;
};

static void do_drv_read(struct drv_cmd *cmd)
static long do_drv_read(void *_cmd)
{
struct drv_cmd *cmd = _cmd;
u32 h;

switch (cmd->type) {
Expand All @@ -166,10 +167,12 @@ static void do_drv_read(struct drv_cmd *cmd)
default:
break;
}
return 0;
}

static void do_drv_write(struct drv_cmd *cmd)
static long do_drv_write(void *_cmd)
{
struct drv_cmd *cmd = _cmd;
u32 lo, hi;

switch (cmd->type) {
Expand All @@ -186,30 +189,23 @@ static void do_drv_write(struct drv_cmd *cmd)
default:
break;
}
return 0;
}

static void drv_read(struct drv_cmd *cmd)
{
cpumask_t saved_mask = current->cpus_allowed;
cmd->val = 0;

set_cpus_allowed_ptr(current, cmd->mask);
do_drv_read(cmd);
set_cpus_allowed_ptr(current, &saved_mask);
work_on_cpu(cpumask_any(cmd->mask), do_drv_read, cmd);
}

static void drv_write(struct drv_cmd *cmd)
{
cpumask_t saved_mask = current->cpus_allowed;
unsigned int i;

for_each_cpu(i, cmd->mask) {
set_cpus_allowed_ptr(current, cpumask_of(i));
do_drv_write(cmd);
work_on_cpu(i, do_drv_write, cmd);
}

set_cpus_allowed_ptr(current, &saved_mask);
return;
}

static u32 get_cur_val(const struct cpumask *mask)
Expand All @@ -235,10 +231,15 @@ static u32 get_cur_val(const struct cpumask *mask)
return 0;
}

if (unlikely(!alloc_cpumask_var(&cmd.mask, GFP_KERNEL)))
return 0;

cpumask_copy(cmd.mask, mask);

drv_read(&cmd);

free_cpumask_var(cmd.mask);

dprintk("get_cur_val = %u\n", cmd.val);

return cmd.val;
Expand Down

0 comments on commit 7503bfb

Please sign in to comment.