]> rtime.felk.cvut.cz Git - hercules2020/nv-tegra/linux-4.4.git/commitdiff
Add PREM-related syscalls
authorMichal Sojka <michal.sojka@cvut.cz>
Sat, 26 May 2018 10:39:37 +0000 (12:39 +0200)
committerMichal Sojka <michal.sojka@cvut.cz>
Sat, 26 May 2018 10:39:37 +0000 (12:39 +0200)
These are the changes made by Joel for his experiments. I stole them
from his repo on grid :)

arch/arm64/kernel/sys.c
include/uapi/asm-generic/unistd.h

index 75151aaf1a52025237be5e0becc8ffac514bae2c..b4ab54752677d67759de53144cc6e5ac86f5746a 100644 (file)
@@ -26,6 +26,8 @@
 #include <linux/slab.h>
 #include <linux/syscalls.h>
 
+#include <asm-generic/irq_regs.h>
+
 asmlinkage long sys_mmap(unsigned long addr, unsigned long len,
                         unsigned long prot, unsigned long flags,
                         unsigned long fd, off_t off)
@@ -42,6 +44,41 @@ asmlinkage long sys_mmap(unsigned long addr, unsigned long len,
 asmlinkage long sys_rt_sigreturn_wrapper(void);
 #define sys_rt_sigreturn       sys_rt_sigreturn_wrapper
 
+/* Added functions for PREM support */
+
+/*
+ * Disable IRQ syscall (__NR_prem_irq_disable)
+ */
+asmlinkage long sys_prem_irq_disable(void)
+{
+       /* We need to update userspace pstate that is going to be recovered.
+       * If we call any system call, the irq enabled on OS level */
+       struct pt_regs * regs = task_pt_regs(current);
+       regs->pstate |= (PSR_I_BIT | PSR_F_BIT);
+       return 0;
+}
+
+/*
+ * Enable IRQ syscall (__NR_prem_irq_enable)
+ */
+asmlinkage long sys_prem_irq_enable(void)
+{
+       struct pt_regs * regs = task_pt_regs(current);
+       regs->pstate &= ~(PSR_I_BIT | PSR_F_BIT);
+       return 0;
+}
+
+extern void __flush_dcache_all(void);
+
+/*
+ * Flush and invalidate entire cache (__NR_prem_flush)
+ */
+asmlinkage long sys_prem_flush(void)
+{
+       __flush_dcache_all();
+       return 0;
+}
+
 #undef __SYSCALL
 #define __SYSCALL(nr, sym)     [nr] = sym,
 
index 1324b0292ec28ed7ed61f1dc875d1fd84503a6d1..797ec63f3ac617cd162149ac7e6f2bff51042dca 100644 (file)
@@ -716,8 +716,15 @@ __SYSCALL(__NR_membarrier, sys_membarrier)
 #define __NR_mlock2 284
 __SYSCALL(__NR_mlock2, sys_mlock2)
 
+#define __NR_prem_flush 789
+__SYSCALL(__NR_prem_flush, sys_prem_flush)
+#define __NR_prem_irq_enable 790
+__SYSCALL(__NR_prem_irq_enable, sys_prem_irq_enable)
+#define __NR_prem_irq_disable 791
+__SYSCALL(__NR_prem_irq_disable, sys_prem_irq_disable)
+
 #undef __NR_syscalls
-#define __NR_syscalls 285
+#define __NR_syscalls 792
 
 /*
  * All syscalls below here should go away really,