nios2 update for nios2-5.12-rc1
nios2: Don't use _end for calculating min_low_pfn nios2: fixed broken sys_clone syscall Take mmap lock in cacheflush syscall -----BEGIN PGP SIGNATURE----- Version: GnuPG v1 iQIcBAABAgAGBQJgMyDxAAoJEFWoEK+e3syC8ZMP/1v4sFuFyzWMpQsr3pyoY/vA 21/iupUTBtbeheint8Nvx+CEKph6WDXPLffhMTy5/5cy59wi02FkaRsm4oUGMRPL tHe4GjAYO74V6+NXpG3vf6XYEH8R6oylDMyP+2mBo+QOhg/XQdCxzfqMIgSqg8aV twPtRRgZMsTtpFuAsL7N3bQBY2Q2wUGJcnZMI0e3yhwDSYKPhdl+XwHr5sBmVTam G1WFDuh0WSilrpDt7d+zPfwkSuUUHoT+Zq+kRjr1oT1gQjZzLrDrbfzqEHMxwAhD S0xt6o7mDoKlDdyk5YN9MpFCfSZaJSBo/NgxO0jLkguqg5rf5WSKk+4jRm414z6a JeO9i+zsQp0PAbmbm2R/B1AvNYeilUCrx77icYR+kuMk227SQ0sBi/+nMOFAJzXF e/1tMitWzTPUoc8ZDbsxXbBOho0gY5m7rGYdvAwNHHm2a5r2kW8NP12wApFe2NpB 1dx5tsVqDJVCE3B0MLU5/nC/yvGWLQZpIW9+1CxY8ey60dOYxjwlxwwRSgtkXfFZ ZFAS9jU7lQVeGJ9C3S6hzPl5bfJe4Pn4YrQOn3nnhAx4G55JXefHe3fQM2rdQVCi X07nU9ktBSpy7apybPIX/jGW4I73i8xyRTX4calcHR6aN2oxhvELIa7cdPOJW1nA tL9JtGhACeL7InAVdkVD =2rmJ -----END PGP SIGNATURE----- Merge tag 'nios2-5.12-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/lftan/nios2 Pull arch/nios2 updates from Ley Foon Tan: - don't use _end for calculating min_low_pfn - fix broken sys_clone syscall - take mmap lock in cacheflush syscall * tag 'nios2-5.12-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/lftan/nios2: nios2: Don't use _end for calculating min_low_pfn nios2: fixed broken sys_clone syscall Take mmap lock in cacheflush syscall
This commit is contained in:
commit
b866bc5fe0
arch/nios2/kernel
@ -389,7 +389,10 @@ ENTRY(ret_from_interrupt)
|
|||||||
*/
|
*/
|
||||||
ENTRY(sys_clone)
|
ENTRY(sys_clone)
|
||||||
SAVE_SWITCH_STACK
|
SAVE_SWITCH_STACK
|
||||||
|
subi sp, sp, 4 /* make space for tls pointer */
|
||||||
|
stw r8, 0(sp) /* pass tls pointer (r8) via stack (5th argument) */
|
||||||
call nios2_clone
|
call nios2_clone
|
||||||
|
addi sp, sp, 4
|
||||||
RESTORE_SWITCH_STACK
|
RESTORE_SWITCH_STACK
|
||||||
ret
|
ret
|
||||||
|
|
||||||
|
@ -32,8 +32,6 @@ EXPORT_SYMBOL(memory_start);
|
|||||||
unsigned long memory_end;
|
unsigned long memory_end;
|
||||||
EXPORT_SYMBOL(memory_end);
|
EXPORT_SYMBOL(memory_end);
|
||||||
|
|
||||||
unsigned long memory_size;
|
|
||||||
|
|
||||||
static struct pt_regs fake_regs = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
static struct pt_regs fake_regs = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0,
|
||||||
0};
|
0};
|
||||||
@ -141,16 +139,22 @@ asmlinkage void __init nios2_boot_init(unsigned r4, unsigned r5, unsigned r6,
|
|||||||
parse_early_param();
|
parse_early_param();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void __init find_limits(unsigned long *min, unsigned long *max_low,
|
||||||
|
unsigned long *max_high)
|
||||||
|
{
|
||||||
|
*max_low = PFN_DOWN(memblock_get_current_limit());
|
||||||
|
*min = PFN_UP(memblock_start_of_DRAM());
|
||||||
|
*max_high = PFN_DOWN(memblock_end_of_DRAM());
|
||||||
|
}
|
||||||
|
|
||||||
void __init setup_arch(char **cmdline_p)
|
void __init setup_arch(char **cmdline_p)
|
||||||
{
|
{
|
||||||
int dram_start;
|
int dram_start;
|
||||||
|
|
||||||
console_verbose();
|
console_verbose();
|
||||||
|
|
||||||
dram_start = memblock_start_of_DRAM();
|
memory_start = memblock_start_of_DRAM();
|
||||||
memory_size = memblock_phys_mem_size();
|
memory_end = memblock_end_of_DRAM();
|
||||||
memory_start = PAGE_ALIGN((unsigned long)__pa(_end));
|
|
||||||
memory_end = (unsigned long) CONFIG_NIOS2_MEM_BASE + memory_size;
|
|
||||||
|
|
||||||
init_mm.start_code = (unsigned long) _stext;
|
init_mm.start_code = (unsigned long) _stext;
|
||||||
init_mm.end_code = (unsigned long) _etext;
|
init_mm.end_code = (unsigned long) _etext;
|
||||||
@ -161,11 +165,10 @@ void __init setup_arch(char **cmdline_p)
|
|||||||
/* Keep a copy of command line */
|
/* Keep a copy of command line */
|
||||||
*cmdline_p = boot_command_line;
|
*cmdline_p = boot_command_line;
|
||||||
|
|
||||||
min_low_pfn = PFN_UP(memory_start);
|
find_limits(&min_low_pfn, &max_low_pfn, &max_pfn);
|
||||||
max_low_pfn = PFN_DOWN(memory_end);
|
|
||||||
max_mapnr = max_low_pfn;
|
max_mapnr = max_low_pfn;
|
||||||
|
|
||||||
memblock_reserve(dram_start, memory_start - dram_start);
|
memblock_reserve(__pa_symbol(_stext), _end - _stext);
|
||||||
#ifdef CONFIG_BLK_DEV_INITRD
|
#ifdef CONFIG_BLK_DEV_INITRD
|
||||||
if (initrd_start) {
|
if (initrd_start) {
|
||||||
memblock_reserve(virt_to_phys((void *)initrd_start),
|
memblock_reserve(virt_to_phys((void *)initrd_start),
|
||||||
|
@ -22,6 +22,7 @@ asmlinkage int sys_cacheflush(unsigned long addr, unsigned long len,
|
|||||||
unsigned int op)
|
unsigned int op)
|
||||||
{
|
{
|
||||||
struct vm_area_struct *vma;
|
struct vm_area_struct *vma;
|
||||||
|
struct mm_struct *mm = current->mm;
|
||||||
|
|
||||||
if (len == 0)
|
if (len == 0)
|
||||||
return 0;
|
return 0;
|
||||||
@ -34,16 +35,22 @@ asmlinkage int sys_cacheflush(unsigned long addr, unsigned long len,
|
|||||||
if (addr + len < addr)
|
if (addr + len < addr)
|
||||||
return -EFAULT;
|
return -EFAULT;
|
||||||
|
|
||||||
|
if (mmap_read_lock_killable(mm))
|
||||||
|
return -EINTR;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Verify that the specified address region actually belongs
|
* Verify that the specified address region actually belongs
|
||||||
* to this process.
|
* to this process.
|
||||||
*/
|
*/
|
||||||
vma = find_vma(current->mm, addr);
|
vma = find_vma(mm, addr);
|
||||||
if (vma == NULL || addr < vma->vm_start || addr + len > vma->vm_end)
|
if (vma == NULL || addr < vma->vm_start || addr + len > vma->vm_end) {
|
||||||
|
mmap_read_unlock(mm);
|
||||||
return -EFAULT;
|
return -EFAULT;
|
||||||
|
}
|
||||||
|
|
||||||
flush_cache_range(vma, addr, addr + len);
|
flush_cache_range(vma, addr, addr + len);
|
||||||
|
|
||||||
|
mmap_read_unlock(mm);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user