浏览代码

Merge branch 'release' of git://git.kernel.org/pub/scm/linux/kernel/git/lenb/linux-acpi-2.6

* 'release' of git://git.kernel.org/pub/scm/linux/kernel/git/lenb/linux-acpi-2.6:
  ACPI: Be in TS_POLLING state during mwait based C-state entry
  ACPI: Fix regression where _PPC is not read at boot even when ignore_ppc=0
  acer-wmi: Respect current backlight level when loading
Linus Torvalds 15 年之前
父节点
当前提交
be64c970f6
共有 3 个文件被更改,包括 22 次插入14 次删除
  1. 16 12
      drivers/acpi/processor_idle.c
  2. 5 1
      drivers/acpi/processor_perflib.c
  3. 1 1
      drivers/platform/x86/acer-wmi.c

+ 16 - 12
drivers/acpi/processor_idle.c

@@ -880,12 +880,14 @@ static int acpi_idle_enter_simple(struct cpuidle_device *dev,
 		return(acpi_idle_enter_c1(dev, state));
 		return(acpi_idle_enter_c1(dev, state));
 
 
 	local_irq_disable();
 	local_irq_disable();
-	current_thread_info()->status &= ~TS_POLLING;
-	/*
-	 * TS_POLLING-cleared state must be visible before we test
-	 * NEED_RESCHED:
-	 */
-	smp_mb();
+	if (cx->entry_method != ACPI_CSTATE_FFH) {
+		current_thread_info()->status &= ~TS_POLLING;
+		/*
+		 * TS_POLLING-cleared state must be visible before we test
+		 * NEED_RESCHED:
+		 */
+		smp_mb();
+	}
 
 
 	if (unlikely(need_resched())) {
 	if (unlikely(need_resched())) {
 		current_thread_info()->status |= TS_POLLING;
 		current_thread_info()->status |= TS_POLLING;
@@ -965,12 +967,14 @@ static int acpi_idle_enter_bm(struct cpuidle_device *dev,
 	}
 	}
 
 
 	local_irq_disable();
 	local_irq_disable();
-	current_thread_info()->status &= ~TS_POLLING;
-	/*
-	 * TS_POLLING-cleared state must be visible before we test
-	 * NEED_RESCHED:
-	 */
-	smp_mb();
+	if (cx->entry_method != ACPI_CSTATE_FFH) {
+		current_thread_info()->status &= ~TS_POLLING;
+		/*
+		 * TS_POLLING-cleared state must be visible before we test
+		 * NEED_RESCHED:
+		 */
+		smp_mb();
+	}
 
 
 	if (unlikely(need_resched())) {
 	if (unlikely(need_resched())) {
 		current_thread_info()->status |= TS_POLLING;
 		current_thread_info()->status |= TS_POLLING;

+ 5 - 1
drivers/acpi/processor_perflib.c

@@ -413,7 +413,11 @@ static int acpi_processor_get_performance_info(struct acpi_processor *pr)
 	if (result)
 	if (result)
 		goto update_bios;
 		goto update_bios;
 
 
-	return 0;
+	/* We need to call _PPC once when cpufreq starts */
+	if (ignore_ppc != 1)
+		result = acpi_processor_get_platform_limit(pr);
+
+	return result;
 
 
 	/*
 	/*
 	 * Having _PPC but missing frequencies (_PSS, _PCT) is a very good hint that
 	 * Having _PPC but missing frequencies (_PSS, _PCT) is a very good hint that

+ 1 - 1
drivers/platform/x86/acer-wmi.c

@@ -934,7 +934,7 @@ static int __devinit acer_backlight_init(struct device *dev)
 	acer_backlight_device = bd;
 	acer_backlight_device = bd;
 
 
 	bd->props.power = FB_BLANK_UNBLANK;
 	bd->props.power = FB_BLANK_UNBLANK;
-	bd->props.brightness = max_brightness;
+	bd->props.brightness = read_brightness(bd);
 	bd->props.max_brightness = max_brightness;
 	bd->props.max_brightness = max_brightness;
 	backlight_update_status(bd);
 	backlight_update_status(bd);
 	return 0;
 	return 0;