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 'm68k-for-v6.3-tag2' of git://git.kernel.org/pub/scm/linux/kernel/git/geert/linux-m68k

Pull m68k fixes from Geert Uytterhoeven:

- Fix systems with memory at end of 32-bit address space

- Fix initrd on systems where memory does not start at address zero

- Fix 68030 handling of bus errors for addresses in exception tables

* tag 'm68k-for-v6.3-tag2' of git://git.kernel.org/pub/scm/linux/kernel/git/geert/linux-m68k:
m68k: Only force 030 bus error if PC not in exception table
m68k: mm: Move initrd phys_to_virt handling after paging_init()
m68k: mm: Fix systems with memory at end of 32-bit address space

+13 -11
+5 -5
arch/m68k/kernel/setup_mm.c
··· 326 326 panic("No configuration setup"); 327 327 } 328 328 329 - #ifdef CONFIG_BLK_DEV_INITRD 330 - if (m68k_ramdisk.size) { 329 + if (IS_ENABLED(CONFIG_BLK_DEV_INITRD) && m68k_ramdisk.size) 331 330 memblock_reserve(m68k_ramdisk.addr, m68k_ramdisk.size); 331 + 332 + paging_init(); 333 + 334 + if (IS_ENABLED(CONFIG_BLK_DEV_INITRD) && m68k_ramdisk.size) { 332 335 initrd_start = (unsigned long)phys_to_virt(m68k_ramdisk.addr); 333 336 initrd_end = initrd_start + m68k_ramdisk.size; 334 337 pr_info("initrd: %08lx - %08lx\n", initrd_start, initrd_end); 335 338 } 336 - #endif 337 - 338 - paging_init(); 339 339 340 340 #ifdef CONFIG_NATFEAT 341 341 nf_init();
+3 -1
arch/m68k/kernel/traps.c
··· 30 30 #include <linux/init.h> 31 31 #include <linux/ptrace.h> 32 32 #include <linux/kallsyms.h> 33 + #include <linux/extable.h> 33 34 34 35 #include <asm/setup.h> 35 36 #include <asm/fpu.h> ··· 546 545 errorcode |= 2; 547 546 548 547 if (mmusr & (MMU_I | MMU_WP)) { 549 - if (ssw & 4) { 548 + /* We might have an exception table for this PC */ 549 + if (ssw & 4 && !search_exception_tables(fp->ptregs.pc)) { 550 550 pr_err("Data %s fault at %#010lx in %s (pc=%#lx)\n", 551 551 ssw & RW ? "read" : "write", 552 552 fp->un.fmtb.daddr,
+5 -5
arch/m68k/mm/motorola.c
··· 437 437 } 438 438 439 439 min_addr = m68k_memory[0].addr; 440 - max_addr = min_addr + m68k_memory[0].size; 440 + max_addr = min_addr + m68k_memory[0].size - 1; 441 441 memblock_add_node(m68k_memory[0].addr, m68k_memory[0].size, 0, 442 442 MEMBLOCK_NONE); 443 443 for (i = 1; i < m68k_num_memory;) { ··· 452 452 } 453 453 memblock_add_node(m68k_memory[i].addr, m68k_memory[i].size, i, 454 454 MEMBLOCK_NONE); 455 - addr = m68k_memory[i].addr + m68k_memory[i].size; 455 + addr = m68k_memory[i].addr + m68k_memory[i].size - 1; 456 456 if (addr > max_addr) 457 457 max_addr = addr; 458 458 i++; 459 459 } 460 460 m68k_memoffset = min_addr - PAGE_OFFSET; 461 - m68k_virt_to_node_shift = fls(max_addr - min_addr - 1) - 6; 461 + m68k_virt_to_node_shift = fls(max_addr - min_addr) - 6; 462 462 463 463 module_fixup(NULL, __start_fixup, __stop_fixup); 464 464 flush_icache(); 465 465 466 - high_memory = phys_to_virt(max_addr); 466 + high_memory = phys_to_virt(max_addr) + 1; 467 467 468 468 min_low_pfn = availmem >> PAGE_SHIFT; 469 - max_pfn = max_low_pfn = max_addr >> PAGE_SHIFT; 469 + max_pfn = max_low_pfn = (max_addr >> PAGE_SHIFT) + 1; 470 470 471 471 /* Reserve kernel text/data/bss and the memory allocated in head.S */ 472 472 memblock_reserve(m68k_memory[0].addr, availmem - m68k_memory[0].addr);