]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
3.4-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 30 Jan 2013 09:20:02 +0000 (10:20 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 30 Jan 2013 09:20:02 +0000 (10:20 +0100)
added patches:
arm-7627-1-predicate-preempt-logic-on-preemp_count-not-preempt-alone.patch
arm-at91-rm9200-remake-the-bga-as-default-version.patch
arm-dma-fix-struct-page-iterator-in-dma_cache_maint-to-work-with-sparsemem.patch
bluetooth-fix-sending-hci-commands-after-reset.patch

queue-3.4/arm-7627-1-predicate-preempt-logic-on-preemp_count-not-preempt-alone.patch [new file with mode: 0644]
queue-3.4/arm-at91-rm9200-remake-the-bga-as-default-version.patch [new file with mode: 0644]
queue-3.4/arm-dma-fix-struct-page-iterator-in-dma_cache_maint-to-work-with-sparsemem.patch [new file with mode: 0644]
queue-3.4/bluetooth-fix-sending-hci-commands-after-reset.patch [new file with mode: 0644]
queue-3.4/series

diff --git a/queue-3.4/arm-7627-1-predicate-preempt-logic-on-preemp_count-not-preempt-alone.patch b/queue-3.4/arm-7627-1-predicate-preempt-logic-on-preemp_count-not-preempt-alone.patch
new file mode 100644 (file)
index 0000000..de477ab
--- /dev/null
@@ -0,0 +1,82 @@
+From 568dca15aa2a0f4ddee255894ec393a159f13147 Mon Sep 17 00:00:00 2001
+From: Stephen Boyd <sboyd@codeaurora.org>
+Date: Mon, 14 Jan 2013 19:50:42 +0100
+Subject: ARM: 7627/1: Predicate preempt logic on PREEMP_COUNT not PREEMPT alone
+
+From: Stephen Boyd <sboyd@codeaurora.org>
+
+commit 568dca15aa2a0f4ddee255894ec393a159f13147 upstream.
+
+Patrik Kluba reports that the preempt count becomes invalid due
+to the preempt_enable() call being unbalanced with a
+preempt_disable() call in the vfp assembly routines. This happens
+because preempt_enable() and preempt_disable() update preempt
+counts under PREEMPT_COUNT=y but the vfp assembly routines do so
+under PREEMPT=y. In a configuration where PREEMPT=n and
+DEBUG_ATOMIC_SLEEP=y, PREEMPT_COUNT=y and so the preempt_enable()
+call in VFP_bounce() keeps subtracting from the preempt count
+until it goes negative.
+
+Fix this by always using PREEMPT_COUNT to decided when to update
+preempt counts in the ARM assembly code.
+
+Signed-off-by: Stephen Boyd <sboyd@codeaurora.org>
+Reported-by: Patrik Kluba <pkluba@dension.com>
+Tested-by: Patrik Kluba <pkluba@dension.com>
+Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ arch/arm/vfp/entry.S |    6 +++---
+ arch/arm/vfp/vfphw.S |    4 ++--
+ 2 files changed, 5 insertions(+), 5 deletions(-)
+
+--- a/arch/arm/vfp/entry.S
++++ b/arch/arm/vfp/entry.S
+@@ -22,7 +22,7 @@
+ @  IRQs disabled.
+ @
+ ENTRY(do_vfp)
+-#ifdef CONFIG_PREEMPT
++#ifdef CONFIG_PREEMPT_COUNT
+       ldr     r4, [r10, #TI_PREEMPT]  @ get preempt count
+       add     r11, r4, #1             @ increment it
+       str     r11, [r10, #TI_PREEMPT]
+@@ -35,7 +35,7 @@ ENTRY(do_vfp)
+ ENDPROC(do_vfp)
+ ENTRY(vfp_null_entry)
+-#ifdef CONFIG_PREEMPT
++#ifdef CONFIG_PREEMPT_COUNT
+       get_thread_info r10
+       ldr     r4, [r10, #TI_PREEMPT]  @ get preempt count
+       sub     r11, r4, #1             @ decrement it
+@@ -53,7 +53,7 @@ ENDPROC(vfp_null_entry)
+       __INIT
+ ENTRY(vfp_testing_entry)
+-#ifdef CONFIG_PREEMPT
++#ifdef CONFIG_PREEMPT_COUNT
+       get_thread_info r10
+       ldr     r4, [r10, #TI_PREEMPT]  @ get preempt count
+       sub     r11, r4, #1             @ decrement it
+--- a/arch/arm/vfp/vfphw.S
++++ b/arch/arm/vfp/vfphw.S
+@@ -167,7 +167,7 @@ vfp_hw_state_valid:
+                                       @ else it's one 32-bit instruction, so
+                                       @ always subtract 4 from the following
+                                       @ instruction address.
+-#ifdef CONFIG_PREEMPT
++#ifdef CONFIG_PREEMPT_COUNT
+       get_thread_info r10
+       ldr     r4, [r10, #TI_PREEMPT]  @ get preempt count
+       sub     r11, r4, #1             @ decrement it
+@@ -191,7 +191,7 @@ look_for_VFP_exceptions:
+       @ not recognised by VFP
+       DBGSTR  "not VFP"
+-#ifdef CONFIG_PREEMPT
++#ifdef CONFIG_PREEMPT_COUNT
+       get_thread_info r10
+       ldr     r4, [r10, #TI_PREEMPT]  @ get preempt count
+       sub     r11, r4, #1             @ decrement it
diff --git a/queue-3.4/arm-at91-rm9200-remake-the-bga-as-default-version.patch b/queue-3.4/arm-at91-rm9200-remake-the-bga-as-default-version.patch
new file mode 100644 (file)
index 0000000..db8392e
--- /dev/null
@@ -0,0 +1,34 @@
+From 36224d0fe0f34cdde66a381708853ebadeac799c Mon Sep 17 00:00:00 2001
+From: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
+Date: Sun, 23 Dec 2012 18:07:49 +0000
+Subject: ARM: at91: rm9200: remake the BGA as default version
+
+From: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
+
+commit 36224d0fe0f34cdde66a381708853ebadeac799c upstream.
+
+Make BGA as the default version as we are supposed to just have
+to specify when we use the PQFP version.
+
+Issue was existing since commit:
+3e90772 (ARM: at91: fix at91rm9200 soc subtype handling).
+
+Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
+Signed-off-by: Nicolas Ferre <nicolas.ferre@atmel.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ arch/arm/mach-at91/setup.c |    2 ++
+ 1 file changed, 2 insertions(+)
+
+--- a/arch/arm/mach-at91/setup.c
++++ b/arch/arm/mach-at91/setup.c
+@@ -104,6 +104,8 @@ static void __init soc_detect(u32 dbgu_b
+       switch (socid) {
+       case ARCH_ID_AT91RM9200:
+               at91_soc_initdata.type = AT91_SOC_RM9200;
++              if (at91_soc_initdata.subtype == AT91_SOC_SUBTYPE_NONE)
++                      at91_soc_initdata.subtype = AT91_SOC_RM9200_BGA;
+               at91_boot_soc = at91rm9200_soc;
+               break;
diff --git a/queue-3.4/arm-dma-fix-struct-page-iterator-in-dma_cache_maint-to-work-with-sparsemem.patch b/queue-3.4/arm-dma-fix-struct-page-iterator-in-dma_cache_maint-to-work-with-sparsemem.patch
new file mode 100644 (file)
index 0000000..4f80e49
--- /dev/null
@@ -0,0 +1,76 @@
+From 15653371c67c3fbe359ae37b720639dd4c7b42c5 Mon Sep 17 00:00:00 2001
+From: Russell King <rmk+kernel@arm.linux.org.uk>
+Date: Sat, 19 Jan 2013 11:05:57 +0000
+Subject: ARM: DMA: Fix struct page iterator in dma_cache_maint() to work with sparsemem
+
+From: Russell King <rmk+kernel@arm.linux.org.uk>
+
+commit 15653371c67c3fbe359ae37b720639dd4c7b42c5 upstream.
+
+Subhash Jadavani reported this partial backtrace:
+  Now consider this call stack from MMC block driver (this is on the ARMv7
+  based board):
+
+  [<c001b50c>] (v7_dma_inv_range+0x30/0x48) from [<c0017b8c>] (dma_cache_maint_page+0x1c4/0x24c)
+  [<c0017b8c>] (dma_cache_maint_page+0x1c4/0x24c) from [<c0017c28>] (___dma_page_cpu_to_dev+0x14/0x1c)
+  [<c0017c28>] (___dma_page_cpu_to_dev+0x14/0x1c) from [<c0017ff8>] (dma_map_sg+0x3c/0x114)
+
+This is caused by incrementing the struct page pointer, and running off
+the end of the sparsemem page array.  Fix this by incrementing by pfn
+instead, and convert the pfn to a struct page.
+
+Suggested-by: James Bottomley <JBottomley@Parallels.com>
+Tested-by: Subhash Jadavani <subhashj@codeaurora.org>
+Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ arch/arm/mm/dma-mapping.c |   18 ++++++++++--------
+ 1 file changed, 10 insertions(+), 8 deletions(-)
+
+--- a/arch/arm/mm/dma-mapping.c
++++ b/arch/arm/mm/dma-mapping.c
+@@ -503,25 +503,27 @@ static void dma_cache_maint_page(struct
+       size_t size, enum dma_data_direction dir,
+       void (*op)(const void *, size_t, int))
+ {
++      unsigned long pfn;
++      size_t left = size;
++
++      pfn = page_to_pfn(page) + offset / PAGE_SIZE;
++      offset %= PAGE_SIZE;
++
+       /*
+        * A single sg entry may refer to multiple physically contiguous
+        * pages.  But we still need to process highmem pages individually.
+        * If highmem is not configured then the bulk of this loop gets
+        * optimized out.
+        */
+-      size_t left = size;
+       do {
+               size_t len = left;
+               void *vaddr;
++              page = pfn_to_page(pfn);
++
+               if (PageHighMem(page)) {
+-                      if (len + offset > PAGE_SIZE) {
+-                              if (offset >= PAGE_SIZE) {
+-                                      page += offset / PAGE_SIZE;
+-                                      offset %= PAGE_SIZE;
+-                              }
++                      if (len + offset > PAGE_SIZE)
+                               len = PAGE_SIZE - offset;
+-                      }
+                       vaddr = kmap_high_get(page);
+                       if (vaddr) {
+                               vaddr += offset;
+@@ -538,7 +540,7 @@ static void dma_cache_maint_page(struct
+                       op(vaddr, len, dir);
+               }
+               offset = 0;
+-              page++;
++              pfn++;
+               left -= len;
+       } while (left);
+ }
diff --git a/queue-3.4/bluetooth-fix-sending-hci-commands-after-reset.patch b/queue-3.4/bluetooth-fix-sending-hci-commands-after-reset.patch
new file mode 100644 (file)
index 0000000..8e0d264
--- /dev/null
@@ -0,0 +1,47 @@
+From dbccd791a3fbbdac12c33834b73beff3984988e9 Mon Sep 17 00:00:00 2001
+From: Szymon Janc <szymon.janc@tieto.com>
+Date: Tue, 11 Dec 2012 08:51:19 +0100
+Subject: Bluetooth: Fix sending HCI commands after reset
+
+From: Szymon Janc <szymon.janc@tieto.com>
+
+commit dbccd791a3fbbdac12c33834b73beff3984988e9 upstream.
+
+After sending reset command wait for its command complete event before
+sending next command. Some chips sends CC event for command received
+before reset if reset was send before chip replied with CC.
+
+This is also required by specification that host shall not send
+additional HCI commands before receiving CC for reset.
+
+< HCI Command: Reset (0x03|0x0003) plen 0                              [hci0] 18.404612
+> HCI Event: Command Complete (0x0e) plen 4                            [hci0] 18.405850
+      Write Extended Inquiry Response (0x03|0x0052) ncmd 1
+        Status: Success (0x00)
+< HCI Command: Read Local Supported Features (0x04|0x0003) plen 0      [hci0] 18.406079
+> HCI Event: Command Complete (0x0e) plen 4                            [hci0] 18.407864
+      Reset (0x03|0x0003) ncmd 1
+        Status: Success (0x00)
+< HCI Command: Read Local Supported Features (0x04|0x0003) plen 0      [hci0] 18.408062
+> HCI Event: Command Complete (0x0e) plen 12                           [hci0] 18.408835
+
+Signed-off-by: Szymon Janc <szymon.janc@tieto.com>
+Acked-by: Johan Hedberg <johan.hedberg@intel.com>
+Signed-off-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ net/bluetooth/hci_event.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/net/bluetooth/hci_event.c
++++ b/net/bluetooth/hci_event.c
+@@ -2366,7 +2366,7 @@ static inline void hci_cmd_complete_evt(
+       if (ev->opcode != HCI_OP_NOP)
+               del_timer(&hdev->cmd_timer);
+-      if (ev->ncmd) {
++      if (ev->ncmd && !test_bit(HCI_RESET, &hdev->flags)) {
+               atomic_set(&hdev->cmd_cnt, 1);
+               if (!skb_queue_empty(&hdev->cmd_q))
+                       queue_work(hdev->workqueue, &hdev->cmd_work);
index 9fbc4f0c222afa2bfced0782b17498be89d9303a..f4cca5bfa78140c223208029d41d6ddd625c707e 100644 (file)
@@ -2,3 +2,7 @@ can-c_can-fix-invalid-error-codes.patch
 can-ti_hecc-fix-invalid-error-codes.patch
 can-pch_can-fix-invalid-error-codes.patch
 fs-cifs-cifs_dfs_ref.c-fix-potential-memory-leakage.patch
+arm-dma-fix-struct-page-iterator-in-dma_cache_maint-to-work-with-sparsemem.patch
+arm-at91-rm9200-remake-the-bga-as-default-version.patch
+arm-7627-1-predicate-preempt-logic-on-preemp_count-not-preempt-alone.patch
+bluetooth-fix-sending-hci-commands-after-reset.patch