History

Merge branch 'fixes' of git://ftp.arm.linux.org.uk/~rmk/linux-arm

Pull ARM fixes from Russell King: "Three fixes and a resulting cleanup for -rc2: - Andre Przywara reported that he was seeing a warning with the new cast inside DMA_ERROR_CODE's definition, and fixed the incorrect use. - Doug Anderson noticed that kgdb causes a "scheduling while atomic" bug. - OMAP5 folk noticed that their Thumb-2 compiled X servers crashed when enabling support to cover ARMv6 CPUs due to a kernel bug leaking some conditional context into the signal handler" * 'fixes' of git://ftp.arm.linux.org.uk/~rmk/linux-arm: ARM: 8425/1: kgdb: Don't try to stop the machine when setting breakpoints ARM: 8437/1: dma-mapping: fix build warning with new DMA_ERROR_CODE definition ARM: get rid of needless #if in signal handling code ARM: fix Thumb2 signal handling when ARMv6 is enabled

Linus Torvalds committed 11 years ago

Commit 99bc7212 parents 30ec568 7ae85dc3 files · +17 −10Browse files

Unified · Split

3 files
  1. arch/arm/kernel/kgdb.c +5 −3
  2. arch/arm/kernel/signal.c +9 −6
  3. arch/arm/mm/dma-mapping.c +3 −1
arch/arm/kernel/kgdb.c+5−3
@@ -259,15 +259,17 @@ int kgdb_arch_set_breakpoint(struct kgdb_bkpt *bpt) · 258 unmodified lines
259259 if (err)
260260 return err;
261261
262− patch_text((void *)bpt->bpt_addr,
263− *(unsigned int *)arch_kgdb_ops.gdb_bpt_instr);
262+ /* Machine is already stopped, so we can use __patch_text() directly */
263+ __patch_text((void *)bpt->bpt_addr,
264+ *(unsigned int *)arch_kgdb_ops.gdb_bpt_instr);
264265
265266 return err;
266267 }
267268
268269 int kgdb_arch_remove_breakpoint(struct kgdb_bkpt *bpt)
269270 {
270− patch_text((void *)bpt->bpt_addr, *(unsigned int *)bpt->saved_instr);
271+ /* Machine is already stopped, so we can use __patch_text() directly */
272+ __patch_text((void *)bpt->bpt_addr, *(unsigned int *)bpt->saved_instr);
271273
272274 return 0;
273275 }
arch/arm/kernel/signal.c+9−6
@@ -343,15 +343,18 @@ setup_return(struct pt_regs *regs, struct ksignal *ksig, · 342 unmodified lines
343343 */
344344 thumb = handler & 1;
345345
346−#if __LINUX_ARM_ARCH__ >= 7
347346 /*
348− * Clear the If-Then Thumb-2 execution state
349− * ARM spec requires this to be all 000s in ARM mode
350− * Snapdragon S4/Krait misbehaves on a Thumb=>ARM
351− * signal transition without this.
347+ * Clear the If-Then Thumb-2 execution state. ARM spec
348+ * requires this to be all 000s in ARM mode. Snapdragon
349+ * S4/Krait misbehaves on a Thumb=>ARM signal transition
350+ * without this.
351+ *
352+ * We must do this whenever we are running on a Thumb-2
353+ * capable CPU, which includes ARMv6T2. However, we elect
354+ * to always do this to simplify the code; this field is
355+ * marked UNK/SBZP for older architectures.
352356 */
353357 cpsr &= ~PSR_IT_MASK;
354−#endif
355358
356359 if (thumb) {
357360 cpsr |= PSR_T_BIT;
arch/arm/mm/dma-mapping.c+3−1
@@ -1249,7 +1249,7 @@ __iommu_create_mapping(struct device *dev, struct page **pages, size_t size) · 1248 unmodified lines
12491249 struct dma_iommu_mapping *mapping = to_dma_iommu_mapping(dev);
12501250 unsigned int count = PAGE_ALIGN(size) >> PAGE_SHIFT;
12511251 dma_addr_t dma_addr, iova;
1252− int i, ret = DMA_ERROR_CODE;
1252+ int i;
12531253
12541254 dma_addr = __alloc_iova(mapping, size);
12551255 if (dma_addr == DMA_ERROR_CODE)
@@ -1257,6 +1257,8 @@ __iommu_create_mapping(struct device *dev, struct page **pages, size_t size) · 1 unmodified line
12571257
12581258 iova = dma_addr;
12591259 for (i = 0; i < count; ) {
1260+ int ret;
1261+
12601262 unsigned int next_pfn = page_to_pfn(pages[i]) + 1;
12611263 phys_addr_t phys = page_to_phys(pages[i]);
12621264 unsigned int len, j;