Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge tag 'arc-4.4-rc7-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/vgupta/arc

Pull ARC fixes from Vineet Gupta:
"Sorry for this late pull request, but these are all important fixes
for code introduced/updated in this release which we will otherwise
end up back porting.

- Unwinder rework (A revert followed by better fix)
- Build errors: MMUv2, modules with -Os
- highmem section mismatch build splat"

* tag 'arc-4.4-rc7-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/vgupta/arc:
ARC: dw2 unwind: Catch Dwarf SNAFUs early
ARC: dw2 unwind: Don't bail for CIE.version != 1
Revert "ARC: dw2 unwind: Ignore CIE version !=1 gracefully instead of bailing"
ARC: Fix linking errors with CONFIG_MODULE + CONFIG_CC_OPTIMIZE_FOR_SIZE
ARC: mm: fix building for MMU v2
ARC: mm: HIGHMEM: Fix section mismatch splat

+14 -22
+1 -1
arch/arc/Makefile
··· 81 81 LIBGCC := $(shell $(CC) $(cflags-y) --print-libgcc-file-name) 82 82 83 83 # Modules with short calls might break for calls into builtin-kernel 84 - KBUILD_CFLAGS_MODULE += -mlong-calls 84 + KBUILD_CFLAGS_MODULE += -mlong-calls -mno-millicode 85 85 86 86 # Finally dump eveything into kernel build system 87 87 KBUILD_CFLAGS += $(cflags-y)
-2
arch/arc/include/asm/cache.h
··· 62 62 #define ARC_REG_IC_IVIC 0x10 63 63 #define ARC_REG_IC_CTRL 0x11 64 64 #define ARC_REG_IC_IVIL 0x19 65 - #if defined(CONFIG_ARC_MMU_V3) || defined(CONFIG_ARC_MMU_V4) 66 65 #define ARC_REG_IC_PTAG 0x1E 67 - #endif 68 66 #define ARC_REG_IC_PTAG_HI 0x1F 69 67 70 68 /* Bit val in IC_CTRL */
+11 -17
arch/arc/kernel/unwind.c
··· 293 293 const u32 *cie = cie_for_fde(fde, table); 294 294 signed ptrType; 295 295 296 - if (cie == &not_fde) /* only process FDE here */ 296 + if (cie == &not_fde) 297 297 continue; 298 298 if (cie == NULL || cie == &bad_cie) 299 - continue; /* say FDE->CIE.version != 1 */ 299 + goto ret_err; 300 300 ptrType = fde_pointer_type(cie); 301 301 if (ptrType < 0) 302 - continue; 302 + goto ret_err; 303 303 304 304 ptr = (const u8 *)(fde + 2); 305 305 if (!read_pointer(&ptr, (const u8 *)(fde + 1) + *fde, ··· 315 315 } 316 316 317 317 if (tableSize || !n) 318 - return; 318 + goto ret_err; 319 319 320 320 hdrSize = 4 + sizeof(unsigned long) + sizeof(unsigned int) 321 321 + 2 * n * sizeof(unsigned long); 322 322 323 323 header = alloc(hdrSize); 324 324 if (!header) 325 - return; 325 + goto ret_err; 326 326 327 327 header->version = 1; 328 328 header->eh_frame_ptr_enc = DW_EH_PE_abs | DW_EH_PE_native; ··· 343 343 344 344 if (fde[1] == 0xffffffff) 345 345 continue; /* this is a CIE */ 346 - 347 - if (*(u8 *)(cie + 2) != 1) 348 - continue; /* FDE->CIE.version not supported */ 349 - 350 346 ptr = (const u8 *)(fde + 2); 351 347 header->table[n].start = read_pointer(&ptr, 352 348 (const u8 *)(fde + 1) + ··· 361 365 table->hdrsz = hdrSize; 362 366 smp_wmb(); 363 367 table->header = (const void *)header; 368 + return; 369 + 370 + ret_err: 371 + panic("Attention !!! Dwarf FDE parsing errors\n");; 364 372 } 365 373 366 374 #ifdef CONFIG_MODULES ··· 523 523 524 524 if (*cie <= sizeof(*cie) + 4 || *cie >= fde[1] - sizeof(*fde) 525 525 || (*cie & (sizeof(*cie) - 1)) 526 - || (cie[1] != 0xffffffff) 527 - || ( *(u8 *)(cie + 2) != 1)) /* version 1 supported */ 526 + || (cie[1] != 0xffffffff)) 528 527 return NULL; /* this is not a (valid) CIE */ 529 528 return cie; 530 529 } ··· 603 604 { 604 605 const u8 *ptr = (const u8 *)(cie + 2); 605 606 unsigned version = *ptr; 606 - 607 - if (version != 1) 608 - return -1; /* unsupported */ 609 607 610 608 if (*++ptr) { 611 609 const char *aug; ··· 1015 1019 ptr = (const u8 *)(cie + 2); 1016 1020 end = (const u8 *)(cie + 1) + *cie; 1017 1021 frame->call_frame = 1; 1018 - if ((state.version = *ptr) != 1) 1019 - cie = NULL; /* unsupported version */ 1020 - else if (*++ptr) { 1022 + if (*++ptr) { 1021 1023 /* check if augmentation size is first (thus present) */ 1022 1024 if (*ptr == 'z') { 1023 1025 while (++ptr < end && *ptr) {
+2 -2
arch/arc/mm/highmem.c
··· 111 111 } 112 112 EXPORT_SYMBOL(__kunmap_atomic); 113 113 114 - noinline pte_t *alloc_kmap_pgtable(unsigned long kvaddr) 114 + static noinline pte_t * __init alloc_kmap_pgtable(unsigned long kvaddr) 115 115 { 116 116 pgd_t *pgd_k; 117 117 pud_t *pud_k; ··· 127 127 return pte_k; 128 128 } 129 129 130 - void kmap_init(void) 130 + void __init kmap_init(void) 131 131 { 132 132 /* Due to recursive include hell, we can't do this in processor.h */ 133 133 BUILD_BUG_ON(PAGE_OFFSET < (VMALLOC_END + FIXMAP_SIZE + PKMAP_SIZE));