Commit b618336a authored by Kevin D. Kissell's avatar Kevin D. Kissell Committed by Ralf Baechle

[MIPS] Fixes necessary for non-SMP kernels and non-relocatable binaries

Signed-off-by: default avatarKevin D. Kissell <kevink@mips.com>
Signed-off-by: default avatarRalf Baechle <ralf@linux-mips.org>
parent 8e07c2c6
...@@ -781,10 +781,15 @@ static int vpe_run(struct vpe * v) ...@@ -781,10 +781,15 @@ static int vpe_run(struct vpe * v)
/* take system out of configuration state */ /* take system out of configuration state */
clear_c0_mvpcontrol(MVPCONTROL_VPC); clear_c0_mvpcontrol(MVPCONTROL_VPC);
/*
* SMTC/SMVP kernels manage VPE enable independently,
* but uniprocessor kernels need to turn it on, even
* if that wasn't the pre-dvpe() state.
*/
#ifdef CONFIG_SMP #ifdef CONFIG_SMP
evpe(EVPE_ENABLE);
#else
evpe(vpeflags); evpe(vpeflags);
#else
evpe(EVPE_ENABLE);
#endif #endif
emt(dmt_flag); emt(dmt_flag);
local_irq_restore(flags); local_irq_restore(flags);
...@@ -947,12 +952,14 @@ static int vpe_elfload(struct vpe * v) ...@@ -947,12 +952,14 @@ static int vpe_elfload(struct vpe * v)
struct elf_phdr *phdr = (struct elf_phdr *) ((char *)hdr + hdr->e_phoff); struct elf_phdr *phdr = (struct elf_phdr *) ((char *)hdr + hdr->e_phoff);
for (i = 0; i < hdr->e_phnum; i++) { for (i = 0; i < hdr->e_phnum; i++) {
if (phdr->p_type != PT_LOAD) if (phdr->p_type == PT_LOAD) {
continue; memcpy((void *)phdr->p_paddr,
(char *)hdr + phdr->p_offset,
memcpy((void *)phdr->p_paddr, (char *)hdr + phdr->p_offset, phdr->p_filesz); phdr->p_filesz);
memset((void *)phdr->p_paddr + phdr->p_filesz, 0, phdr->p_memsz - phdr->p_filesz); memset((void *)phdr->p_paddr + phdr->p_filesz,
phdr++; 0, phdr->p_memsz - phdr->p_filesz);
}
phdr++;
} }
for (i = 0; i < hdr->e_shnum; i++) { for (i = 0; i < hdr->e_shnum; i++) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment