From: Greg Kroah-Hartman Date: Mon, 11 Apr 2011 23:07:58 +0000 (-0700) Subject: .38 patches X-Git-Tag: v2.6.38.3~7 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=84aff3c3f5ca0e36453116f5bda894558d4e75fe;p=thirdparty%2Fkernel%2Fstable-queue.git .38 patches --- diff --git a/queue-2.6.38/acer-wmi-does-not-set-persistence-state-by-rfkill_init_sw_state.patch b/queue-2.6.38/acer-wmi-does-not-set-persistence-state-by-rfkill_init_sw_state.patch new file mode 100644 index 00000000000..6585fb24c3b --- /dev/null +++ b/queue-2.6.38/acer-wmi-does-not-set-persistence-state-by-rfkill_init_sw_state.patch @@ -0,0 +1,94 @@ +From 8215af019040ce9182728afee9642d8fdeb17f59 Mon Sep 17 00:00:00 2001 +From: Lee, Chun-Yi +Date: Mon, 28 Mar 2011 16:52:02 +0800 +Subject: acer-wmi: does not set persistence state by rfkill_init_sw_state +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +From: Lee, Chun-Yi + +commit 8215af019040ce9182728afee9642d8fdeb17f59 upstream. + +Acer BIOS keeps devices state when system reboot, but reset to default +device states (Wlan on, Bluetooth off, wwan on) if system cold boot. +That means BIOS's initial state is not always real persistence. + +So, removed rfkill_init_sw_state because it sets initial state to +persistence then replicate to other new killswitch when rfkill-input +enabled. +After removed it, acer-wmi set initial soft-block state after rfkill +register, and doesn't allow set_block until rfkill initial finished. + +Reference: bko#31002 + https://bugzilla.kernel.org/show_bug.cgi?id=31002 + +Cc: Carlos Corbacho +Cc: Matthew Garrett +Cc: Dmitry Torokhov +Cc: Corentin Chary +Cc: Oldřich Jedlička +Cc: Johannes Berg +Signed-off-by: Lee, Chun-Yi +Signed-off-by: Matthew Garrett +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/platform/x86/acer-wmi.c | 19 ++++++++++++++----- + 1 file changed, 14 insertions(+), 5 deletions(-) + +--- a/drivers/platform/x86/acer-wmi.c ++++ b/drivers/platform/x86/acer-wmi.c +@@ -222,6 +222,7 @@ struct acer_debug { + static struct rfkill *wireless_rfkill; + static struct rfkill *bluetooth_rfkill; + static struct rfkill *threeg_rfkill; ++static bool rfkill_inited; + + /* Each low-level interface must define at least some of the following */ + struct wmi_interface { +@@ -1161,9 +1162,13 @@ static int acer_rfkill_set(void *data, b + { + acpi_status status; + u32 cap = (unsigned long)data; +- status = set_u32(!blocked, cap); +- if (ACPI_FAILURE(status)) +- return -ENODEV; ++ ++ if (rfkill_inited) { ++ status = set_u32(!blocked, cap); ++ if (ACPI_FAILURE(status)) ++ return -ENODEV; ++ } ++ + return 0; + } + +@@ -1187,14 +1192,16 @@ static struct rfkill *acer_rfkill_regist + return ERR_PTR(-ENOMEM); + + status = get_device_status(&state, cap); +- if (ACPI_SUCCESS(status)) +- rfkill_init_sw_state(rfkill_dev, !state); + + err = rfkill_register(rfkill_dev); + if (err) { + rfkill_destroy(rfkill_dev); + return ERR_PTR(err); + } ++ ++ if (ACPI_SUCCESS(status)) ++ rfkill_set_sw_state(rfkill_dev, !state); ++ + return rfkill_dev; + } + +@@ -1229,6 +1236,8 @@ static int acer_rfkill_init(struct devic + } + } + ++ rfkill_inited = true; ++ + schedule_delayed_work(&acer_rfkill_work, round_jiffies_relative(HZ)); + + return 0; diff --git a/queue-2.6.38/revert-x86-cleanup-highmap-after-brk-is-concluded.patch b/queue-2.6.38/revert-x86-cleanup-highmap-after-brk-is-concluded.patch new file mode 100644 index 00000000000..282d251227b --- /dev/null +++ b/queue-2.6.38/revert-x86-cleanup-highmap-after-brk-is-concluded.patch @@ -0,0 +1,117 @@ +From a056dab5800b78dd284c8a6252fcd53e220003c3 Mon Sep 17 00:00:00 2001 +From: Greg Kroah-Hartman +Date: Mon, 11 Apr 2011 16:01:32 -0700 +Subject: [PATCH] Revert "x86: Cleanup highmap after brk is concluded" + +This reverts upstream commit e5f15b45ddf3afa2bbbb10c7ea34fb32b6de0a0e + +It caused problems in the stable tree and should not have been there. + +Cc: Yinghai Lu +Cc: Stefano Stabellini +Cc: H. Peter Anvin +Cc: Ingo Molnar +Signed-off-by: Greg Kroah-Hartman + +--- + arch/x86/kernel/head64.c | 3 +++ + arch/x86/kernel/setup.c | 5 ----- + arch/x86/mm/init.c | 19 +++++++++++++++++++ + arch/x86/mm/init_64.c | 11 +++++------ + 4 files changed, 27 insertions(+), 11 deletions(-) + +--- a/arch/x86/kernel/head64.c ++++ b/arch/x86/kernel/head64.c +@@ -77,6 +77,9 @@ void __init x86_64_start_kernel(char * r + /* Make NULL pointers segfault */ + zap_identity_mappings(); + ++ /* Cleanup the over mapped high alias */ ++ cleanup_highmap(); ++ + max_pfn_mapped = KERNEL_IMAGE_SIZE >> PAGE_SHIFT; + + for (i = 0; i < NUM_EXCEPTION_VECTORS; i++) { +--- a/arch/x86/kernel/setup.c ++++ b/arch/x86/kernel/setup.c +@@ -297,9 +297,6 @@ static void __init init_gbpages(void) + static inline void init_gbpages(void) + { + } +-static void __init cleanup_highmap(void) +-{ +-} + #endif + + static void __init reserve_brk(void) +@@ -925,8 +922,6 @@ void __init setup_arch(char **cmdline_p) + */ + reserve_brk(); + +- cleanup_highmap(); +- + memblock.current_limit = get_max_mapped(); + memblock_x86_fill(); + +--- a/arch/x86/mm/init.c ++++ b/arch/x86/mm/init.c +@@ -276,6 +276,25 @@ unsigned long __init_refok init_memory_m + load_cr3(swapper_pg_dir); + #endif + ++#ifdef CONFIG_X86_64 ++ if (!after_bootmem && !start) { ++ pud_t *pud; ++ pmd_t *pmd; ++ ++ mmu_cr4_features = read_cr4(); ++ ++ /* ++ * _brk_end cannot change anymore, but it and _end may be ++ * located on different 2M pages. cleanup_highmap(), however, ++ * can only consider _end when it runs, so destroy any ++ * mappings beyond _brk_end here. ++ */ ++ pud = pud_offset(pgd_offset_k(_brk_end), _brk_end); ++ pmd = pmd_offset(pud, _brk_end - 1); ++ while (++pmd <= pmd_offset(pud, (unsigned long)_end - 1)) ++ pmd_clear(pmd); ++ } ++#endif + __flush_tlb_all(); + + if (!after_bootmem && e820_table_end > e820_table_start) +--- a/arch/x86/mm/init_64.c ++++ b/arch/x86/mm/init_64.c +@@ -51,7 +51,6 @@ + #include + #include + #include +-#include + + static int __init parse_direct_gbpages_off(char *arg) + { +@@ -294,18 +293,18 @@ void __init init_extra_mapping_uc(unsign + * to the compile time generated pmds. This results in invalid pmds up + * to the point where we hit the physaddr 0 mapping. + * +- * We limit the mappings to the region from _text to _brk_end. _brk_end +- * is rounded up to the 2MB boundary. This catches the invalid pmds as ++ * We limit the mappings to the region from _text to _end. _end is ++ * rounded up to the 2MB boundary. This catches the invalid pmds as + * well, as they are located before _text: + */ + void __init cleanup_highmap(void) + { + unsigned long vaddr = __START_KERNEL_map; +- unsigned long vaddr_end = __START_KERNEL_map + (max_pfn_mapped << PAGE_SHIFT); +- unsigned long end = roundup((unsigned long)_brk_end, PMD_SIZE) - 1; ++ unsigned long end = roundup((unsigned long)_end, PMD_SIZE) - 1; + pmd_t *pmd = level2_kernel_pgt; ++ pmd_t *last_pmd = pmd + PTRS_PER_PMD; + +- for (; vaddr + PMD_SIZE - 1 < vaddr_end; pmd++, vaddr += PMD_SIZE) { ++ for (; pmd < last_pmd; pmd++, vaddr += PMD_SIZE) { + if (pmd_none(*pmd)) + continue; + if (vaddr < (unsigned long) _text || vaddr > end) diff --git a/queue-2.6.38/series b/queue-2.6.38/series index 634599cf672..7a28181a891 100644 --- a/queue-2.6.38/series +++ b/queue-2.6.38/series @@ -93,3 +93,5 @@ econet-4-byte-infoleak-to-the-network.patch netfilter-h323-bug-in-parsing-of-asn1-seqof-field.patch sound-oss-remove-offset-from-load_patch-callbacks.patch drivers-media-video-tlg2300-pd-video.c-remove-second-mutex_unlock-in-pd_vidioc_s_fmt.patch +acer-wmi-does-not-set-persistence-state-by-rfkill_init_sw_state.patch +revert-x86-cleanup-highmap-after-brk-is-concluded.patch