diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2012-10-26 14:23:35 -0700 | 
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2012-10-26 14:23:35 -0700 | 
| commit | 64b1cbaa1068f38994230df2aa0fee7033008399 (patch) | |
| tree | 287d08359f68a00af62bdb68c786fa397a0b5575 | |
| parent | f54c77dd9953241be8b63f9239facdde82b3eb18 (diff) | |
| parent | 879dca019dc43a1622edca3e7dde644b14b5acc5 (diff) | |
Merge tag 'pm+acpi-for-3.7-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm
Pull power management and ACPI fixes from Rafael J Wysocki:
 - Fix for a memory leak in acpi_bind_one() from Jesper Juhl.
 - Fix for an error code path memory leak in pm_genpd_attach_cpuidle()
   from Jonghwan Choi.
 - Fix for smp_processor_id() usage in preemptible code in powernow-k8
   from Andreas Herrmann.
 - Fix for a suspend-related memory leak in cpufreq stats from Xiaobing
   Tu.
 - Freezer fix for failure to clear PF_NOFREEZE along with PF_KTHREAD in
   flush_old_exec() from Oleg Nesterov.
 - acpi_processor_notify() fix from Alan Cox.
* tag 'pm+acpi-for-3.7-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm:
  ACPI: missing break
  freezer: exec should clear PF_NOFREEZE along with PF_KTHREAD
  Fix memory leak in cpufreq stats.
  cpufreq / powernow-k8: Remove usage of smp_processor_id() in preemptible code
  PM / Domains: Fix memory leak on error path in pm_genpd_attach_cpuidle
  ACPI: Fix memory leak in acpi_bind_one()
| -rw-r--r-- | drivers/acpi/glue.c | 1 | ||||
| -rw-r--r-- | drivers/acpi/processor_driver.c | 1 | ||||
| -rw-r--r-- | drivers/base/power/domain.c | 5 | ||||
| -rw-r--r-- | drivers/cpufreq/cpufreq_stats.c | 1 | ||||
| -rw-r--r-- | drivers/cpufreq/powernow-k8.c | 9 | ||||
| -rw-r--r-- | fs/exec.c | 3 | 
6 files changed, 10 insertions, 10 deletions
diff --git a/drivers/acpi/glue.c b/drivers/acpi/glue.c index d1a2d74033e9..08373086cd7e 100644 --- a/drivers/acpi/glue.c +++ b/drivers/acpi/glue.c @@ -159,6 +159,7 @@ static int acpi_bind_one(struct device *dev, acpi_handle handle)  	if (physical_node->node_id >= ACPI_MAX_PHYSICAL_NODE) {  		retval = -ENOSPC;  		mutex_unlock(&acpi_dev->physical_node_lock); +		kfree(physical_node);  		goto err;  	} diff --git a/drivers/acpi/processor_driver.c b/drivers/acpi/processor_driver.c index e78c2a52ea46..bd4e5dca3ff7 100644 --- a/drivers/acpi/processor_driver.c +++ b/drivers/acpi/processor_driver.c @@ -409,6 +409,7 @@ static void acpi_processor_notify(struct acpi_device *device, u32 event)  		acpi_bus_generate_proc_event(device, event, 0);  		acpi_bus_generate_netlink_event(device->pnp.device_class,  						  dev_name(&device->dev), event, 0); +		break;  	default:  		ACPI_DEBUG_PRINT((ACPI_DB_INFO,  				  "Unsupported event [0x%x]\n", event)); diff --git a/drivers/base/power/domain.c b/drivers/base/power/domain.c index c22b869245d9..96b71b6536d6 100644 --- a/drivers/base/power/domain.c +++ b/drivers/base/power/domain.c @@ -1862,7 +1862,7 @@ int pm_genpd_attach_cpuidle(struct generic_pm_domain *genpd, int state)  	cpuidle_drv = cpuidle_driver_ref();  	if (!cpuidle_drv) {  		ret = -ENODEV; -		goto out; +		goto err_drv;  	}  	if (cpuidle_drv->state_count <= state) {  		ret = -EINVAL; @@ -1884,6 +1884,9 @@ int pm_genpd_attach_cpuidle(struct generic_pm_domain *genpd, int state)   err:  	cpuidle_driver_unref(); + + err_drv: +	kfree(cpu_data);  	goto out;  } diff --git a/drivers/cpufreq/cpufreq_stats.c b/drivers/cpufreq/cpufreq_stats.c index b40ee1403be9..399831690fed 100644 --- a/drivers/cpufreq/cpufreq_stats.c +++ b/drivers/cpufreq/cpufreq_stats.c @@ -328,6 +328,7 @@ static int __cpuinit cpufreq_stat_cpu_callback(struct notifier_block *nfb,  		cpufreq_update_policy(cpu);  		break;  	case CPU_DOWN_PREPARE: +	case CPU_DOWN_PREPARE_FROZEN:  		cpufreq_stats_free_sysfs(cpu);  		break;  	case CPU_DEAD: diff --git a/drivers/cpufreq/powernow-k8.c b/drivers/cpufreq/powernow-k8.c index 129e80bfff22..c16a3a593ba4 100644 --- a/drivers/cpufreq/powernow-k8.c +++ b/drivers/cpufreq/powernow-k8.c @@ -1052,14 +1052,7 @@ static int powernowk8_target(struct cpufreq_policy *pol,  	struct powernowk8_target_arg pta = { .pol = pol, .targfreq = targfreq,  					     .relation = relation }; -	/* -	 * Must run on @pol->cpu.  cpufreq core is responsible for ensuring -	 * that we're bound to the current CPU and pol->cpu stays online. -	 */ -	if (smp_processor_id() == pol->cpu) -		return powernowk8_target_fn(&pta); -	else -		return work_on_cpu(pol->cpu, powernowk8_target_fn, &pta); +	return work_on_cpu(pol->cpu, powernowk8_target_fn, &pta);  }  /* Driver entry point to verify the policy and range of frequencies */ diff --git a/fs/exec.c b/fs/exec.c index 8b9011b67041..0039055b1fc6 100644 --- a/fs/exec.c +++ b/fs/exec.c @@ -1083,7 +1083,8 @@ int flush_old_exec(struct linux_binprm * bprm)  	bprm->mm = NULL;		/* We're using it now */  	set_fs(USER_DS); -	current->flags &= ~(PF_RANDOMIZE | PF_FORKNOEXEC | PF_KTHREAD); +	current->flags &= +		~(PF_RANDOMIZE | PF_FORKNOEXEC | PF_KTHREAD | PF_NOFREEZE);  	flush_thread();  	current->personality &= ~bprm->per_clear;  | 
