mirror of
https://github.com/followmsi/android_kernel_google_msm.git
synced 2024-11-06 23:17:41 +00:00
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/sparc-2.6
* git://git.kernel.org/pub/scm/linux/kernel/git/davem/sparc-2.6: sparc64: Fix atomic64_t routine return values. sparc64: Fix rwsem constant bug leading to hangs. sparc: Hook up new fanotify and prlimit64 syscalls. sparc: Really fix "console=" for serial consoles.
This commit is contained in:
commit
19147d0eb1
8 changed files with 36 additions and 14 deletions
|
@ -25,9 +25,9 @@ extern void atomic_sub(int, atomic_t *);
|
||||||
extern void atomic64_sub(int, atomic64_t *);
|
extern void atomic64_sub(int, atomic64_t *);
|
||||||
|
|
||||||
extern int atomic_add_ret(int, atomic_t *);
|
extern int atomic_add_ret(int, atomic_t *);
|
||||||
extern int atomic64_add_ret(int, atomic64_t *);
|
extern long atomic64_add_ret(int, atomic64_t *);
|
||||||
extern int atomic_sub_ret(int, atomic_t *);
|
extern int atomic_sub_ret(int, atomic_t *);
|
||||||
extern int atomic64_sub_ret(int, atomic64_t *);
|
extern long atomic64_sub_ret(int, atomic64_t *);
|
||||||
|
|
||||||
#define atomic_dec_return(v) atomic_sub_ret(1, v)
|
#define atomic_dec_return(v) atomic_sub_ret(1, v)
|
||||||
#define atomic64_dec_return(v) atomic64_sub_ret(1, v)
|
#define atomic64_dec_return(v) atomic64_sub_ret(1, v)
|
||||||
|
@ -91,7 +91,7 @@ static inline int atomic_add_unless(atomic_t *v, int a, int u)
|
||||||
((__typeof__((v)->counter))cmpxchg(&((v)->counter), (o), (n)))
|
((__typeof__((v)->counter))cmpxchg(&((v)->counter), (o), (n)))
|
||||||
#define atomic64_xchg(v, new) (xchg(&((v)->counter), new))
|
#define atomic64_xchg(v, new) (xchg(&((v)->counter), new))
|
||||||
|
|
||||||
static inline int atomic64_add_unless(atomic64_t *v, long a, long u)
|
static inline long atomic64_add_unless(atomic64_t *v, long a, long u)
|
||||||
{
|
{
|
||||||
long c, old;
|
long c, old;
|
||||||
c = atomic64_read(v);
|
c = atomic64_read(v);
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
#ifndef _SPARC_FB_H_
|
#ifndef _SPARC_FB_H_
|
||||||
#define _SPARC_FB_H_
|
#define _SPARC_FB_H_
|
||||||
|
#include <linux/console.h>
|
||||||
#include <linux/fb.h>
|
#include <linux/fb.h>
|
||||||
#include <linux/fs.h>
|
#include <linux/fs.h>
|
||||||
#include <asm/page.h>
|
#include <asm/page.h>
|
||||||
|
@ -18,6 +19,9 @@ static inline int fb_is_primary_device(struct fb_info *info)
|
||||||
struct device *dev = info->device;
|
struct device *dev = info->device;
|
||||||
struct device_node *node;
|
struct device_node *node;
|
||||||
|
|
||||||
|
if (console_set_on_cmdline)
|
||||||
|
return 0;
|
||||||
|
|
||||||
node = dev->of_node;
|
node = dev->of_node;
|
||||||
if (node &&
|
if (node &&
|
||||||
node == of_console_device)
|
node == of_console_device)
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
#define RWSEM_UNLOCKED_VALUE 0x00000000
|
#define RWSEM_UNLOCKED_VALUE 0x00000000
|
||||||
#define RWSEM_ACTIVE_BIAS 0x00000001
|
#define RWSEM_ACTIVE_BIAS 0x00000001
|
||||||
#define RWSEM_ACTIVE_MASK 0x0000ffff
|
#define RWSEM_ACTIVE_MASK 0x0000ffff
|
||||||
#define RWSEM_WAITING_BIAS 0xffff0000
|
#define RWSEM_WAITING_BIAS (-0x00010000)
|
||||||
#define RWSEM_ACTIVE_READ_BIAS RWSEM_ACTIVE_BIAS
|
#define RWSEM_ACTIVE_READ_BIAS RWSEM_ACTIVE_BIAS
|
||||||
#define RWSEM_ACTIVE_WRITE_BIAS (RWSEM_WAITING_BIAS + RWSEM_ACTIVE_BIAS)
|
#define RWSEM_ACTIVE_WRITE_BIAS (RWSEM_WAITING_BIAS + RWSEM_ACTIVE_BIAS)
|
||||||
|
|
||||||
|
|
|
@ -397,8 +397,11 @@
|
||||||
#define __NR_rt_tgsigqueueinfo 326
|
#define __NR_rt_tgsigqueueinfo 326
|
||||||
#define __NR_perf_event_open 327
|
#define __NR_perf_event_open 327
|
||||||
#define __NR_recvmmsg 328
|
#define __NR_recvmmsg 328
|
||||||
|
#define __NR_fanotify_init 329
|
||||||
|
#define __NR_fanotify_mark 330
|
||||||
|
#define __NR_prlimit64 331
|
||||||
|
|
||||||
#define NR_syscalls 329
|
#define NR_syscalls 332
|
||||||
|
|
||||||
#ifdef __32bit_syscall_numbers__
|
#ifdef __32bit_syscall_numbers__
|
||||||
/* Sparc 32-bit only has the "setresuid32", "getresuid32" variants,
|
/* Sparc 32-bit only has the "setresuid32", "getresuid32" variants,
|
||||||
|
|
|
@ -330,6 +330,15 @@ do_sys_accept4: /* sys_accept4(int, struct sockaddr *, int *, int) */
|
||||||
nop
|
nop
|
||||||
nop
|
nop
|
||||||
|
|
||||||
|
.globl sys32_fanotify_mark
|
||||||
|
sys32_fanotify_mark:
|
||||||
|
sethi %hi(sys_fanotify_mark), %g1
|
||||||
|
sllx %o2, 32, %o2
|
||||||
|
or %o2, %o3, %o2
|
||||||
|
mov %o4, %o3
|
||||||
|
jmpl %g1 + %lo(sys_fanotify_mark), %g0
|
||||||
|
mov %o5, %o4
|
||||||
|
|
||||||
.section __ex_table,"a"
|
.section __ex_table,"a"
|
||||||
.align 4
|
.align 4
|
||||||
.word 1b, __retl_efault, 2b, __retl_efault
|
.word 1b, __retl_efault, 2b, __retl_efault
|
||||||
|
|
|
@ -82,5 +82,6 @@ sys_call_table:
|
||||||
/*310*/ .long sys_utimensat, sys_signalfd, sys_timerfd_create, sys_eventfd, sys_fallocate
|
/*310*/ .long sys_utimensat, sys_signalfd, sys_timerfd_create, sys_eventfd, sys_fallocate
|
||||||
/*315*/ .long sys_timerfd_settime, sys_timerfd_gettime, sys_signalfd4, sys_eventfd2, sys_epoll_create1
|
/*315*/ .long sys_timerfd_settime, sys_timerfd_gettime, sys_signalfd4, sys_eventfd2, sys_epoll_create1
|
||||||
/*320*/ .long sys_dup3, sys_pipe2, sys_inotify_init1, sys_accept4, sys_preadv
|
/*320*/ .long sys_dup3, sys_pipe2, sys_inotify_init1, sys_accept4, sys_preadv
|
||||||
/*325*/ .long sys_pwritev, sys_rt_tgsigqueueinfo, sys_perf_event_open, sys_recvmmsg
|
/*325*/ .long sys_pwritev, sys_rt_tgsigqueueinfo, sys_perf_event_open, sys_recvmmsg, sys_fanotify_init
|
||||||
|
/*330*/ .long sys_fanotify_mark, sys_prlimit64
|
||||||
|
|
||||||
|
|
|
@ -83,7 +83,8 @@ sys_call_table32:
|
||||||
/*310*/ .word compat_sys_utimensat, compat_sys_signalfd, sys_timerfd_create, sys_eventfd, compat_sys_fallocate
|
/*310*/ .word compat_sys_utimensat, compat_sys_signalfd, sys_timerfd_create, sys_eventfd, compat_sys_fallocate
|
||||||
.word compat_sys_timerfd_settime, compat_sys_timerfd_gettime, compat_sys_signalfd4, sys_eventfd2, sys_epoll_create1
|
.word compat_sys_timerfd_settime, compat_sys_timerfd_gettime, compat_sys_signalfd4, sys_eventfd2, sys_epoll_create1
|
||||||
/*320*/ .word sys_dup3, sys_pipe2, sys_inotify_init1, sys_accept4, compat_sys_preadv
|
/*320*/ .word sys_dup3, sys_pipe2, sys_inotify_init1, sys_accept4, compat_sys_preadv
|
||||||
.word compat_sys_pwritev, compat_sys_rt_tgsigqueueinfo, sys_perf_event_open, compat_sys_recvmmsg
|
.word compat_sys_pwritev, compat_sys_rt_tgsigqueueinfo, sys_perf_event_open, compat_sys_recvmmsg, sys_fanotify_init
|
||||||
|
/*330*/ .word sys32_fanotify_mark, sys_prlimit64
|
||||||
|
|
||||||
#endif /* CONFIG_COMPAT */
|
#endif /* CONFIG_COMPAT */
|
||||||
|
|
||||||
|
@ -158,4 +159,5 @@ sys_call_table:
|
||||||
/*310*/ .word sys_utimensat, sys_signalfd, sys_timerfd_create, sys_eventfd, sys_fallocate
|
/*310*/ .word sys_utimensat, sys_signalfd, sys_timerfd_create, sys_eventfd, sys_fallocate
|
||||||
.word sys_timerfd_settime, sys_timerfd_gettime, sys_signalfd4, sys_eventfd2, sys_epoll_create1
|
.word sys_timerfd_settime, sys_timerfd_gettime, sys_signalfd4, sys_eventfd2, sys_epoll_create1
|
||||||
/*320*/ .word sys_dup3, sys_pipe2, sys_inotify_init1, sys_accept4, sys_preadv
|
/*320*/ .word sys_dup3, sys_pipe2, sys_inotify_init1, sys_accept4, sys_preadv
|
||||||
.word sys_pwritev, sys_rt_tgsigqueueinfo, sys_perf_event_open, sys_recvmmsg
|
.word sys_pwritev, sys_rt_tgsigqueueinfo, sys_perf_event_open, sys_recvmmsg, sys_fanotify_init
|
||||||
|
/*330*/ .word sys_fanotify_mark, sys_prlimit64
|
||||||
|
|
|
@ -55,7 +55,12 @@ EXPORT_SYMBOL(sunserial_unregister_minors);
|
||||||
int sunserial_console_match(struct console *con, struct device_node *dp,
|
int sunserial_console_match(struct console *con, struct device_node *dp,
|
||||||
struct uart_driver *drv, int line, bool ignore_line)
|
struct uart_driver *drv, int line, bool ignore_line)
|
||||||
{
|
{
|
||||||
if (!con || of_console_device != dp)
|
if (!con)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
drv->cons = con;
|
||||||
|
|
||||||
|
if (of_console_device != dp)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
if (!ignore_line) {
|
if (!ignore_line) {
|
||||||
|
@ -69,12 +74,10 @@ int sunserial_console_match(struct console *con, struct device_node *dp,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!console_set_on_cmdline) {
|
||||||
con->index = line;
|
con->index = line;
|
||||||
drv->cons = con;
|
|
||||||
|
|
||||||
if (!console_set_on_cmdline)
|
|
||||||
add_preferred_console(con->name, line, NULL);
|
add_preferred_console(con->name, line, NULL);
|
||||||
|
}
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(sunserial_console_match);
|
EXPORT_SYMBOL(sunserial_console_match);
|
||||||
|
|
Loading…
Reference in a new issue