diff options
Diffstat (limited to 'drivers/firmware/dcdbas.c')
| -rw-r--r-- | drivers/firmware/dcdbas.c | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/drivers/firmware/dcdbas.c b/drivers/firmware/dcdbas.c index 777fba48d2d3..3009e0171e54 100644 --- a/drivers/firmware/dcdbas.c +++ b/drivers/firmware/dcdbas.c | |||
| @@ -244,7 +244,7 @@ static ssize_t host_control_on_shutdown_store(struct device *dev, | |||
| 244 | */ | 244 | */ |
| 245 | int dcdbas_smi_request(struct smi_cmd *smi_cmd) | 245 | int dcdbas_smi_request(struct smi_cmd *smi_cmd) |
| 246 | { | 246 | { |
| 247 | cpumask_t old_mask; | 247 | cpumask_var_t old_mask; |
| 248 | int ret = 0; | 248 | int ret = 0; |
| 249 | 249 | ||
| 250 | if (smi_cmd->magic != SMI_CMD_MAGIC) { | 250 | if (smi_cmd->magic != SMI_CMD_MAGIC) { |
| @@ -254,8 +254,11 @@ int dcdbas_smi_request(struct smi_cmd *smi_cmd) | |||
| 254 | } | 254 | } |
| 255 | 255 | ||
| 256 | /* SMI requires CPU 0 */ | 256 | /* SMI requires CPU 0 */ |
| 257 | old_mask = current->cpus_allowed; | 257 | if (!alloc_cpumask_var(&old_mask, GFP_KERNEL)) |
| 258 | set_cpus_allowed_ptr(current, &cpumask_of_cpu(0)); | 258 | return -ENOMEM; |
| 259 | |||
| 260 | cpumask_copy(old_mask, ¤t->cpus_allowed); | ||
| 261 | set_cpus_allowed_ptr(current, cpumask_of(0)); | ||
| 259 | if (smp_processor_id() != 0) { | 262 | if (smp_processor_id() != 0) { |
| 260 | dev_dbg(&dcdbas_pdev->dev, "%s: failed to get CPU 0\n", | 263 | dev_dbg(&dcdbas_pdev->dev, "%s: failed to get CPU 0\n", |
| 261 | __func__); | 264 | __func__); |
| @@ -275,7 +278,8 @@ int dcdbas_smi_request(struct smi_cmd *smi_cmd) | |||
| 275 | ); | 278 | ); |
| 276 | 279 | ||
| 277 | out: | 280 | out: |
| 278 | set_cpus_allowed_ptr(current, &old_mask); | 281 | set_cpus_allowed_ptr(current, old_mask); |
| 282 | free_cpumask_var(old_mask); | ||
| 279 | return ret; | 283 | return ret; |
| 280 | } | 284 | } |
| 281 | 285 | ||
