Merge branches 'pm-cpufreq' and 'pm-cpuidle'
[linux-2.6-microblaze.git] / include / linux / compat.h
index 14d5142..6e65be7 100644 (file)
@@ -442,6 +442,38 @@ put_compat_sigset(compat_sigset_t __user *compat, const sigset_t *set,
 #endif
 }
 
+#ifdef CONFIG_CPU_BIG_ENDIAN
+#define unsafe_put_compat_sigset(compat, set, label) do {              \
+       compat_sigset_t __user *__c = compat;                           \
+       const sigset_t *__s = set;                                      \
+                                                                       \
+       switch (_NSIG_WORDS) {                                          \
+       case 4:                                                         \
+               unsafe_put_user(__s->sig[3] >> 32, &__c->sig[7], label);        \
+               unsafe_put_user(__s->sig[3], &__c->sig[6], label);      \
+               fallthrough;                                            \
+       case 3:                                                         \
+               unsafe_put_user(__s->sig[2] >> 32, &__c->sig[5], label);        \
+               unsafe_put_user(__s->sig[2], &__c->sig[4], label);      \
+               fallthrough;                                            \
+       case 2:                                                         \
+               unsafe_put_user(__s->sig[1] >> 32, &__c->sig[3], label);        \
+               unsafe_put_user(__s->sig[1], &__c->sig[2], label);      \
+               fallthrough;                                            \
+       case 1:                                                         \
+               unsafe_put_user(__s->sig[0] >> 32, &__c->sig[1], label);        \
+               unsafe_put_user(__s->sig[0], &__c->sig[0], label);      \
+       }                                                               \
+} while (0)
+#else
+#define unsafe_put_compat_sigset(compat, set, label) do {              \
+       compat_sigset_t __user *__c = compat;                           \
+       const sigset_t *__s = set;                                      \
+                                                                       \
+       unsafe_copy_to_user(__c, __s, sizeof(*__c), label);             \
+} while (0)
+#endif
+
 extern int compat_ptrace_request(struct task_struct *child,
                                 compat_long_t request,
                                 compat_ulong_t addr, compat_ulong_t data);
@@ -505,6 +537,12 @@ asmlinkage long compat_sys_epoll_pwait(int epfd,
                        int maxevents, int timeout,
                        const compat_sigset_t __user *sigmask,
                        compat_size_t sigsetsize);
+asmlinkage long compat_sys_epoll_pwait2(int epfd,
+                       struct epoll_event __user *events,
+                       int maxevents,
+                       const struct __kernel_timespec __user *timeout,
+                       const compat_sigset_t __user *sigmask,
+                       compat_size_t sigsetsize);
 
 /* fs/fcntl.c */
 asmlinkage long compat_sys_fcntl(unsigned int fd, unsigned int cmd,