Merge branch 'parisc-3.18-2' of git://git.kernel.org/pub/scm/linux/kernel/git/deller/parisc-linux

Pull parisc updates from Helge Deller:
 "Changes include:
   - wire up the bpf syscall
   - remove CONFIG_64BIT usage from some userspace-exported header files
   - use compat functions for msgctl, shmat, shmctl and semtimedop
     syscalls"

* 'parisc-3.18-2' of git://git.kernel.org/pub/scm/linux/kernel/git/deller/parisc-linux:
  parisc: Avoid using CONFIG_64BIT in userspace exported headers
  parisc: Use compat layer for msgctl, shmat, shmctl and semtimedop syscalls
  parisc: Use BUILD_BUG() instead of undefined functions
  parisc: Wire up bpf syscall
This commit is contained in:
Linus Torvalds 2014-11-15 15:26:48 -08:00
commit 555e5986ba
8 changed files with 41 additions and 49 deletions

View File

@ -9,6 +9,8 @@
#include <asm/errno.h> #include <asm/errno.h>
#include <asm-generic/uaccess-unaligned.h> #include <asm-generic/uaccess-unaligned.h>
#include <linux/bug.h>
#define VERIFY_READ 0 #define VERIFY_READ 0
#define VERIFY_WRITE 1 #define VERIFY_WRITE 1
@ -28,11 +30,6 @@
* that put_user is the same as __put_user, etc. * that put_user is the same as __put_user, etc.
*/ */
extern int __get_kernel_bad(void);
extern int __get_user_bad(void);
extern int __put_kernel_bad(void);
extern int __put_user_bad(void);
static inline long access_ok(int type, const void __user * addr, static inline long access_ok(int type, const void __user * addr,
unsigned long size) unsigned long size)
{ {
@ -43,8 +40,8 @@ static inline long access_ok(int type, const void __user * addr,
#define get_user __get_user #define get_user __get_user
#if !defined(CONFIG_64BIT) #if !defined(CONFIG_64BIT)
#define LDD_KERNEL(ptr) __get_kernel_bad(); #define LDD_KERNEL(ptr) BUILD_BUG()
#define LDD_USER(ptr) __get_user_bad(); #define LDD_USER(ptr) BUILD_BUG()
#define STD_KERNEL(x, ptr) __put_kernel_asm64(x,ptr) #define STD_KERNEL(x, ptr) __put_kernel_asm64(x,ptr)
#define STD_USER(x, ptr) __put_user_asm64(x,ptr) #define STD_USER(x, ptr) __put_user_asm64(x,ptr)
#define ASM_WORD_INSN ".word\t" #define ASM_WORD_INSN ".word\t"
@ -94,7 +91,7 @@ struct exception_data {
case 2: __get_kernel_asm("ldh",ptr); break; \ case 2: __get_kernel_asm("ldh",ptr); break; \
case 4: __get_kernel_asm("ldw",ptr); break; \ case 4: __get_kernel_asm("ldw",ptr); break; \
case 8: LDD_KERNEL(ptr); break; \ case 8: LDD_KERNEL(ptr); break; \
default: __get_kernel_bad(); break; \ default: BUILD_BUG(); break; \
} \ } \
} \ } \
else { \ else { \
@ -103,7 +100,7 @@ struct exception_data {
case 2: __get_user_asm("ldh",ptr); break; \ case 2: __get_user_asm("ldh",ptr); break; \
case 4: __get_user_asm("ldw",ptr); break; \ case 4: __get_user_asm("ldw",ptr); break; \
case 8: LDD_USER(ptr); break; \ case 8: LDD_USER(ptr); break; \
default: __get_user_bad(); break; \ default: BUILD_BUG(); break; \
} \ } \
} \ } \
\ \
@ -136,7 +133,7 @@ struct exception_data {
case 2: __put_kernel_asm("sth",__x,ptr); break; \ case 2: __put_kernel_asm("sth",__x,ptr); break; \
case 4: __put_kernel_asm("stw",__x,ptr); break; \ case 4: __put_kernel_asm("stw",__x,ptr); break; \
case 8: STD_KERNEL(__x,ptr); break; \ case 8: STD_KERNEL(__x,ptr); break; \
default: __put_kernel_bad(); break; \ default: BUILD_BUG(); break; \
} \ } \
} \ } \
else { \ else { \
@ -145,7 +142,7 @@ struct exception_data {
case 2: __put_user_asm("sth",__x,ptr); break; \ case 2: __put_user_asm("sth",__x,ptr); break; \
case 4: __put_user_asm("stw",__x,ptr); break; \ case 4: __put_user_asm("stw",__x,ptr); break; \
case 8: STD_USER(__x,ptr); break; \ case 8: STD_USER(__x,ptr); break; \
default: __put_user_bad(); break; \ default: BUILD_BUG(); break; \
} \ } \
} \ } \
\ \

View File

@ -1,13 +1,7 @@
#ifndef __ASM_PARISC_BITSPERLONG_H #ifndef __ASM_PARISC_BITSPERLONG_H
#define __ASM_PARISC_BITSPERLONG_H #define __ASM_PARISC_BITSPERLONG_H
/* #if defined(__LP64__)
* using CONFIG_* outside of __KERNEL__ is wrong,
* __LP64__ was also removed from headers, so what
* is the right approach on parisc?
* -arnd
*/
#if (defined(__KERNEL__) && defined(CONFIG_64BIT)) || defined (__LP64__)
#define __BITS_PER_LONG 64 #define __BITS_PER_LONG 64
#define SHIFT_PER_LONG 6 #define SHIFT_PER_LONG 6
#else #else

View File

@ -1,6 +1,8 @@
#ifndef _PARISC_MSGBUF_H #ifndef _PARISC_MSGBUF_H
#define _PARISC_MSGBUF_H #define _PARISC_MSGBUF_H
#include <asm/bitsperlong.h>
/* /*
* The msqid64_ds structure for parisc architecture, copied from sparc. * The msqid64_ds structure for parisc architecture, copied from sparc.
* Note extra padding because this structure is passed back and forth * Note extra padding because this structure is passed back and forth
@ -13,15 +15,15 @@
struct msqid64_ds { struct msqid64_ds {
struct ipc64_perm msg_perm; struct ipc64_perm msg_perm;
#ifndef CONFIG_64BIT #if __BITS_PER_LONG != 64
unsigned int __pad1; unsigned int __pad1;
#endif #endif
__kernel_time_t msg_stime; /* last msgsnd time */ __kernel_time_t msg_stime; /* last msgsnd time */
#ifndef CONFIG_64BIT #if __BITS_PER_LONG != 64
unsigned int __pad2; unsigned int __pad2;
#endif #endif
__kernel_time_t msg_rtime; /* last msgrcv time */ __kernel_time_t msg_rtime; /* last msgrcv time */
#ifndef CONFIG_64BIT #if __BITS_PER_LONG != 64
unsigned int __pad3; unsigned int __pad3;
#endif #endif
__kernel_time_t msg_ctime; /* last change time */ __kernel_time_t msg_ctime; /* last change time */

View File

@ -1,6 +1,8 @@
#ifndef _PARISC_SEMBUF_H #ifndef _PARISC_SEMBUF_H
#define _PARISC_SEMBUF_H #define _PARISC_SEMBUF_H
#include <asm/bitsperlong.h>
/* /*
* The semid64_ds structure for parisc architecture. * The semid64_ds structure for parisc architecture.
* Note extra padding because this structure is passed back and forth * Note extra padding because this structure is passed back and forth
@ -13,11 +15,11 @@
struct semid64_ds { struct semid64_ds {
struct ipc64_perm sem_perm; /* permissions .. see ipc.h */ struct ipc64_perm sem_perm; /* permissions .. see ipc.h */
#ifndef CONFIG_64BIT #if __BITS_PER_LONG != 64
unsigned int __pad1; unsigned int __pad1;
#endif #endif
__kernel_time_t sem_otime; /* last semop time */ __kernel_time_t sem_otime; /* last semop time */
#ifndef CONFIG_64BIT #if __BITS_PER_LONG != 64
unsigned int __pad2; unsigned int __pad2;
#endif #endif
__kernel_time_t sem_ctime; /* last change time */ __kernel_time_t sem_ctime; /* last change time */

View File

@ -1,6 +1,8 @@
#ifndef _PARISC_SHMBUF_H #ifndef _PARISC_SHMBUF_H
#define _PARISC_SHMBUF_H #define _PARISC_SHMBUF_H
#include <asm/bitsperlong.h>
/* /*
* The shmid64_ds structure for parisc architecture. * The shmid64_ds structure for parisc architecture.
* Note extra padding because this structure is passed back and forth * Note extra padding because this structure is passed back and forth
@ -13,19 +15,19 @@
struct shmid64_ds { struct shmid64_ds {
struct ipc64_perm shm_perm; /* operation perms */ struct ipc64_perm shm_perm; /* operation perms */
#ifndef CONFIG_64BIT #if __BITS_PER_LONG != 64
unsigned int __pad1; unsigned int __pad1;
#endif #endif
__kernel_time_t shm_atime; /* last attach time */ __kernel_time_t shm_atime; /* last attach time */
#ifndef CONFIG_64BIT #if __BITS_PER_LONG != 64
unsigned int __pad2; unsigned int __pad2;
#endif #endif
__kernel_time_t shm_dtime; /* last detach time */ __kernel_time_t shm_dtime; /* last detach time */
#ifndef CONFIG_64BIT #if __BITS_PER_LONG != 64
unsigned int __pad3; unsigned int __pad3;
#endif #endif
__kernel_time_t shm_ctime; /* last change time */ __kernel_time_t shm_ctime; /* last change time */
#ifndef CONFIG_64BIT #if __BITS_PER_LONG != 64
unsigned int __pad4; unsigned int __pad4;
#endif #endif
size_t shm_segsz; /* size of segment (bytes) */ size_t shm_segsz; /* size of segment (bytes) */
@ -36,23 +38,16 @@ struct shmid64_ds {
unsigned int __unused2; unsigned int __unused2;
}; };
#ifdef CONFIG_64BIT
/* The 'unsigned int' (formerly 'unsigned long') data types below will
* ensure that a 32-bit app calling shmctl(*,IPC_INFO,*) will work on
* a wide kernel, but if some of these values are meant to contain pointers
* they may need to be 'long long' instead. -PB XXX FIXME
*/
#endif
struct shminfo64 { struct shminfo64 {
unsigned int shmmax; unsigned long shmmax;
unsigned int shmmin; unsigned long shmmin;
unsigned int shmmni; unsigned long shmmni;
unsigned int shmseg; unsigned long shmseg;
unsigned int shmall; unsigned long shmall;
unsigned int __unused1; unsigned long __unused1;
unsigned int __unused2; unsigned long __unused2;
unsigned int __unused3; unsigned long __unused3;
unsigned int __unused4; unsigned long __unused4;
}; };
#endif /* _PARISC_SHMBUF_H */ #endif /* _PARISC_SHMBUF_H */

View File

@ -85,7 +85,7 @@
struct siginfo; struct siginfo;
/* Type of a signal handler. */ /* Type of a signal handler. */
#ifdef CONFIG_64BIT #if defined(__LP64__)
/* function pointers on 64-bit parisc are pointers to little structs and the /* function pointers on 64-bit parisc are pointers to little structs and the
* compiler doesn't support code which changes or tests the address of * compiler doesn't support code which changes or tests the address of
* the function in the little struct. This is really ugly -PB * the function in the little struct. This is really ugly -PB

View File

@ -833,8 +833,9 @@
#define __NR_seccomp (__NR_Linux + 338) #define __NR_seccomp (__NR_Linux + 338)
#define __NR_getrandom (__NR_Linux + 339) #define __NR_getrandom (__NR_Linux + 339)
#define __NR_memfd_create (__NR_Linux + 340) #define __NR_memfd_create (__NR_Linux + 340)
#define __NR_bpf (__NR_Linux + 341)
#define __NR_Linux_syscalls (__NR_memfd_create + 1) #define __NR_Linux_syscalls (__NR_bpf + 1)
#define __IGNORE_select /* newselect */ #define __IGNORE_select /* newselect */

View File

@ -286,11 +286,11 @@
ENTRY_COMP(msgsnd) ENTRY_COMP(msgsnd)
ENTRY_COMP(msgrcv) ENTRY_COMP(msgrcv)
ENTRY_SAME(msgget) /* 190 */ ENTRY_SAME(msgget) /* 190 */
ENTRY_SAME(msgctl) ENTRY_COMP(msgctl)
ENTRY_SAME(shmat) ENTRY_COMP(shmat)
ENTRY_SAME(shmdt) ENTRY_SAME(shmdt)
ENTRY_SAME(shmget) ENTRY_SAME(shmget)
ENTRY_SAME(shmctl) /* 195 */ ENTRY_COMP(shmctl) /* 195 */
ENTRY_SAME(ni_syscall) /* streams1 */ ENTRY_SAME(ni_syscall) /* streams1 */
ENTRY_SAME(ni_syscall) /* streams2 */ ENTRY_SAME(ni_syscall) /* streams2 */
ENTRY_SAME(lstat64) ENTRY_SAME(lstat64)
@ -323,7 +323,7 @@
ENTRY_SAME(epoll_ctl) /* 225 */ ENTRY_SAME(epoll_ctl) /* 225 */
ENTRY_SAME(epoll_wait) ENTRY_SAME(epoll_wait)
ENTRY_SAME(remap_file_pages) ENTRY_SAME(remap_file_pages)
ENTRY_SAME(semtimedop) ENTRY_COMP(semtimedop)
ENTRY_COMP(mq_open) ENTRY_COMP(mq_open)
ENTRY_SAME(mq_unlink) /* 230 */ ENTRY_SAME(mq_unlink) /* 230 */
ENTRY_COMP(mq_timedsend) ENTRY_COMP(mq_timedsend)
@ -436,6 +436,7 @@
ENTRY_SAME(seccomp) ENTRY_SAME(seccomp)
ENTRY_SAME(getrandom) ENTRY_SAME(getrandom)
ENTRY_SAME(memfd_create) /* 340 */ ENTRY_SAME(memfd_create) /* 340 */
ENTRY_SAME(bpf)
/* Nothing yet */ /* Nothing yet */