--- - branch: MAIN date: Thu May 26 07:24:55 UTC 2016 files: - new: '1.94' old: '1.93' path: src/sys/arch/amd64/amd64/locore.S pathrev: src/sys/arch/amd64/amd64/locore.S@1.94 type: modified - new: '1.125' old: '1.124' path: src/sys/arch/i386/i386/locore.S pathrev: src/sys/arch/i386/i386/locore.S@1.125 type: modified id: 20160526T072455Z.2cb547cb1d633a333c5608da50fa53959e3b1fd1 log: "There is an issue in the way the fillkpt macro sets up pages on both\namd64 and i386.\n\nThe fillkpt loop is equivalent to the following:\n\n\tdo {\n\t\t/* fill in the slot */\n\t\t/* increment %ebx to the next slot */\n\t\t/* increment %eax to the next pa */\n\t} while (%ecx > 0)\n\nThe issue here is that if %ecx = 0 (i.e., the chunk we are trying to\nmap is zero-sized), there is still one entry created in the page table.\nThe kernel expects the va<->pa translation to be linear in low memory.\nIf there is a zero-sized chunk, the dead entry creates a +4096 offset in\nthe virtual space, with two consecutive entries that point to the same\nphysical address. In other words, the mappings are not linear anymore,\nwhich causes the kernel to die.\n\nBefore my recent changes, there were only two big chunks that were\nmapped, and neither of these could be zero-sized. Now, with multiple,\nfine-grained chunks, it is possible that the [SYMS]+[PRELOADED_MODULES]\nchunk could be zero-sized.\n\n[PRELOADED_MODULES] is almost never here, and [SYMS] is always here on\ndefault kernels. Except for floppies, where the bootloader does not load\n[SYMS].\n\nShould fix PR 51148.\n" module: src subject: 'CVS commit: src/sys/arch' unixtime: '1464247495' user: maxv