summaryrefslogtreecommitdiffstats
path: root/arch/csky/kernel/syscall.c
blob: 3d30e58a45d21c2087b3dcc5d469dc206a9ba2e6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
// SPDX-License-Identifier: GPL-2.0
// Copyright (C) 2018 Hangzhou C-SKY Microsystems co.,ltd.

#include <linux/syscalls.h>

SYSCALL_DEFINE1(set_thread_area, unsigned long, addr)
{
	struct thread_info *ti = task_thread_info(current);
	struct pt_regs *reg = current_pt_regs();

	reg->tls = addr;
	ti->tp_value = addr;

	return 0;
}

SYSCALL_DEFINE6(mmap2,
	unsigned long, addr,
	unsigned long, len,
	unsigned long, prot,
	unsigned long, flags,
	unsigned long, fd,
	off_t, offset)
{
	if (unlikely(offset & (~PAGE_MASK >> 12)))
		return -EINVAL;

	return ksys_mmap_pgoff(addr, len, prot, flags, fd,
			       offset >> (PAGE_SHIFT - 12));
}

/*
 * for abiv1 the 64bits args should be even th, So we need mov the advice
 * forward.
 */
SYSCALL_DEFINE4(csky_fadvise64_64,
	int, fd,
	int, advice,
	loff_t, offset,
	loff_t, len)
{
	return ksys_fadvise64_64(fd, offset, len, advice);
}