Merge branch 'upstream-fixes'
This commit is contained in:
commit
b04a92e160
436 changed files with 6443 additions and 4219 deletions
|
|
@ -161,5 +161,25 @@ int copy_siginfo_to_user32(struct compat_siginfo __user *to, siginfo_t *from);
|
|||
int get_compat_sigevent(struct sigevent *event,
|
||||
const struct compat_sigevent __user *u_event);
|
||||
|
||||
static inline int compat_timeval_compare(struct compat_timeval *lhs,
|
||||
struct compat_timeval *rhs)
|
||||
{
|
||||
if (lhs->tv_sec < rhs->tv_sec)
|
||||
return -1;
|
||||
if (lhs->tv_sec > rhs->tv_sec)
|
||||
return 1;
|
||||
return lhs->tv_usec - rhs->tv_usec;
|
||||
}
|
||||
|
||||
static inline int compat_timespec_compare(struct compat_timespec *lhs,
|
||||
struct compat_timespec *rhs)
|
||||
{
|
||||
if (lhs->tv_sec < rhs->tv_sec)
|
||||
return -1;
|
||||
if (lhs->tv_sec > rhs->tv_sec)
|
||||
return 1;
|
||||
return lhs->tv_nsec - rhs->tv_nsec;
|
||||
}
|
||||
|
||||
#endif /* CONFIG_COMPAT */
|
||||
#endif /* _LINUX_COMPAT_H */
|
||||
|
|
|
|||
|
|
@ -328,7 +328,7 @@ static inline void __cpus_remap(cpumask_t *dstp, const cpumask_t *srcp,
|
|||
* bitmap of size NR_CPUS.
|
||||
*
|
||||
* #ifdef CONFIG_HOTPLUG_CPU
|
||||
* cpu_possible_map - all NR_CPUS bits set
|
||||
* cpu_possible_map - has bit 'cpu' set iff cpu is populatable
|
||||
* cpu_present_map - has bit 'cpu' set iff cpu is populated
|
||||
* cpu_online_map - has bit 'cpu' set iff cpu available to scheduler
|
||||
* #else
|
||||
|
|
|
|||
|
|
@ -497,12 +497,6 @@ struct transaction_s
|
|||
*/
|
||||
struct journal_head *t_checkpoint_list;
|
||||
|
||||
/*
|
||||
* Doubly-linked circular list of all buffers submitted for IO while
|
||||
* checkpointing. [j_list_lock]
|
||||
*/
|
||||
struct journal_head *t_checkpoint_io_list;
|
||||
|
||||
/*
|
||||
* Doubly-linked circular list of temporary buffers currently undergoing
|
||||
* IO in the log [j_list_lock]
|
||||
|
|
@ -852,7 +846,7 @@ extern void journal_commit_transaction(journal_t *);
|
|||
|
||||
/* Checkpoint list management */
|
||||
int __journal_clean_checkpoint_list(journal_t *journal);
|
||||
int __journal_remove_checkpoint(struct journal_head *);
|
||||
void __journal_remove_checkpoint(struct journal_head *);
|
||||
void __journal_insert_checkpoint(struct journal_head *, transaction_t *);
|
||||
|
||||
/* Buffer IO */
|
||||
|
|
|
|||
|
|
@ -153,8 +153,10 @@ static inline void con_schedule_flip(struct tty_struct *t)
|
|||
{
|
||||
unsigned long flags;
|
||||
spin_lock_irqsave(&t->buf.lock, flags);
|
||||
if (t->buf.tail != NULL)
|
||||
if (t->buf.tail != NULL) {
|
||||
t->buf.tail->active = 0;
|
||||
t->buf.tail->commit = t->buf.tail->used;
|
||||
}
|
||||
spin_unlock_irqrestore(&t->buf.lock, flags);
|
||||
schedule_work(&t->buf.work);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -326,12 +326,6 @@ struct sysinfo {
|
|||
/* Force a compilation error if condition is true */
|
||||
#define BUILD_BUG_ON(condition) ((void)sizeof(char[1 - 2*!!(condition)]))
|
||||
|
||||
#ifdef CONFIG_SYSCTL
|
||||
extern int randomize_va_space;
|
||||
#else
|
||||
#define randomize_va_space 1
|
||||
#endif
|
||||
|
||||
/* Trap pasters of __FUNCTION__ at compile-time */
|
||||
#define __FUNCTION__ (__func__)
|
||||
|
||||
|
|
|
|||
|
|
@ -6,6 +6,7 @@
|
|||
#include <linux/list.h>
|
||||
#include <linux/linkage.h>
|
||||
#include <linux/compat.h>
|
||||
#include <linux/ioport.h>
|
||||
#include <asm/kexec.h>
|
||||
|
||||
/* Verify architecture specific macros are defined */
|
||||
|
|
|
|||
|
|
@ -96,10 +96,16 @@ static inline ktime_t ktime_set(const long secs, const unsigned long nsecs)
|
|||
({ (ktime_t){ .tv64 = (kt).tv64 + (nsval) }; })
|
||||
|
||||
/* convert a timespec to ktime_t format: */
|
||||
#define timespec_to_ktime(ts) ktime_set((ts).tv_sec, (ts).tv_nsec)
|
||||
static inline ktime_t timespec_to_ktime(struct timespec ts)
|
||||
{
|
||||
return ktime_set(ts.tv_sec, ts.tv_nsec);
|
||||
}
|
||||
|
||||
/* convert a timeval to ktime_t format: */
|
||||
#define timeval_to_ktime(tv) ktime_set((tv).tv_sec, (tv).tv_usec * 1000)
|
||||
static inline ktime_t timeval_to_ktime(struct timeval tv)
|
||||
{
|
||||
return ktime_set(tv.tv_sec, tv.tv_usec * NSEC_PER_USEC);
|
||||
}
|
||||
|
||||
/* Map the ktime_t to timespec conversion to ns_to_timespec function */
|
||||
#define ktime_to_timespec(kt) ns_to_timespec((kt).tv64)
|
||||
|
|
|
|||
|
|
@ -149,7 +149,7 @@ struct nlm_rqst * nlmclnt_alloc_call(void);
|
|||
int nlmclnt_prepare_block(struct nlm_rqst *req, struct nlm_host *host, struct file_lock *fl);
|
||||
void nlmclnt_finish_block(struct nlm_rqst *req);
|
||||
long nlmclnt_block(struct nlm_rqst *req, long timeout);
|
||||
u32 nlmclnt_grant(struct nlm_lock *);
|
||||
u32 nlmclnt_grant(const struct sockaddr_in *addr, const struct nlm_lock *);
|
||||
void nlmclnt_recovery(struct nlm_host *, u32);
|
||||
int nlmclnt_reclaim(struct nlm_host *, struct file_lock *);
|
||||
int nlmclnt_setgrantargs(struct nlm_rqst *, struct nlm_lock *);
|
||||
|
|
@ -204,7 +204,7 @@ nlmsvc_file_inode(struct nlm_file *file)
|
|||
* Compare two host addresses (needs modifying for ipv6)
|
||||
*/
|
||||
static __inline__ int
|
||||
nlm_cmp_addr(struct sockaddr_in *sin1, struct sockaddr_in *sin2)
|
||||
nlm_cmp_addr(const struct sockaddr_in *sin1, const struct sockaddr_in *sin2)
|
||||
{
|
||||
return sin1->sin_addr.s_addr == sin2->sin_addr.s_addr;
|
||||
}
|
||||
|
|
@ -214,7 +214,7 @@ nlm_cmp_addr(struct sockaddr_in *sin1, struct sockaddr_in *sin2)
|
|||
* When the second lock is of type F_UNLCK, this acts like a wildcard.
|
||||
*/
|
||||
static __inline__ int
|
||||
nlm_compare_locks(struct file_lock *fl1, struct file_lock *fl2)
|
||||
nlm_compare_locks(const struct file_lock *fl1, const struct file_lock *fl2)
|
||||
{
|
||||
return fl1->fl_pid == fl2->fl_pid
|
||||
&& fl1->fl_start == fl2->fl_start
|
||||
|
|
|
|||
|
|
@ -1051,5 +1051,7 @@ int shrink_slab(unsigned long scanned, gfp_t gfp_mask,
|
|||
void drop_pagecache(void);
|
||||
void drop_slab(void);
|
||||
|
||||
extern int randomize_va_space;
|
||||
|
||||
#endif /* __KERNEL__ */
|
||||
#endif /* _LINUX_MM_H */
|
||||
|
|
|
|||
|
|
@ -184,8 +184,11 @@ static inline int nf_hook_thresh(int pf, unsigned int hook,
|
|||
struct sk_buff **pskb,
|
||||
struct net_device *indev,
|
||||
struct net_device *outdev,
|
||||
int (*okfn)(struct sk_buff *), int thresh)
|
||||
int (*okfn)(struct sk_buff *), int thresh,
|
||||
int cond)
|
||||
{
|
||||
if (!cond)
|
||||
return 1;
|
||||
#ifndef CONFIG_NETFILTER_DEBUG
|
||||
if (list_empty(&nf_hooks[pf][hook]))
|
||||
return 1;
|
||||
|
|
@ -197,7 +200,7 @@ static inline int nf_hook(int pf, unsigned int hook, struct sk_buff **pskb,
|
|||
struct net_device *indev, struct net_device *outdev,
|
||||
int (*okfn)(struct sk_buff *))
|
||||
{
|
||||
return nf_hook_thresh(pf, hook, pskb, indev, outdev, okfn, INT_MIN);
|
||||
return nf_hook_thresh(pf, hook, pskb, indev, outdev, okfn, INT_MIN, 1);
|
||||
}
|
||||
|
||||
/* Activate hook; either okfn or kfree_skb called, unless a hook
|
||||
|
|
@ -224,7 +227,13 @@ static inline int nf_hook(int pf, unsigned int hook, struct sk_buff **pskb,
|
|||
|
||||
#define NF_HOOK_THRESH(pf, hook, skb, indev, outdev, okfn, thresh) \
|
||||
({int __ret; \
|
||||
if ((__ret=nf_hook_thresh(pf, hook, &(skb), indev, outdev, okfn, thresh)) == 1)\
|
||||
if ((__ret=nf_hook_thresh(pf, hook, &(skb), indev, outdev, okfn, thresh, 1)) == 1)\
|
||||
__ret = (okfn)(skb); \
|
||||
__ret;})
|
||||
|
||||
#define NF_HOOK_COND(pf, hook, skb, indev, outdev, okfn, cond) \
|
||||
({int __ret; \
|
||||
if ((__ret=nf_hook_thresh(pf, hook, &(skb), indev, outdev, okfn, INT_MIN, cond)) == 1)\
|
||||
__ret = (okfn)(skb); \
|
||||
__ret;})
|
||||
|
||||
|
|
@ -295,11 +304,13 @@ extern struct proc_dir_entry *proc_net_netfilter;
|
|||
|
||||
#else /* !CONFIG_NETFILTER */
|
||||
#define NF_HOOK(pf, hook, skb, indev, outdev, okfn) (okfn)(skb)
|
||||
#define NF_HOOK_COND(pf, hook, skb, indev, outdev, okfn, cond) (okfn)(skb)
|
||||
static inline int nf_hook_thresh(int pf, unsigned int hook,
|
||||
struct sk_buff **pskb,
|
||||
struct net_device *indev,
|
||||
struct net_device *outdev,
|
||||
int (*okfn)(struct sk_buff *), int thresh)
|
||||
int (*okfn)(struct sk_buff *), int thresh,
|
||||
int cond)
|
||||
{
|
||||
return okfn(*pskb);
|
||||
}
|
||||
|
|
@ -307,7 +318,7 @@ static inline int nf_hook(int pf, unsigned int hook, struct sk_buff **pskb,
|
|||
struct net_device *indev, struct net_device *outdev,
|
||||
int (*okfn)(struct sk_buff *))
|
||||
{
|
||||
return okfn(*pskb);
|
||||
return 1;
|
||||
}
|
||||
static inline void nf_ct_attach(struct sk_buff *new, struct sk_buff *skb) {}
|
||||
struct flowi;
|
||||
|
|
|
|||
|
|
@ -79,7 +79,7 @@ enum nf_ip_hook_priorities {
|
|||
|
||||
#ifdef __KERNEL__
|
||||
extern int ip_route_me_harder(struct sk_buff **pskb);
|
||||
|
||||
extern int ip_xfrm_me_harder(struct sk_buff **pskb);
|
||||
#endif /*__KERNEL__*/
|
||||
|
||||
#endif /*__LINUX_IP_NETFILTER_H*/
|
||||
|
|
|
|||
|
|
@ -160,7 +160,8 @@ extern int netlink_unregister_notifier(struct notifier_block *nb);
|
|||
|
||||
/* finegrained unicast helpers: */
|
||||
struct sock *netlink_getsockbyfilp(struct file *filp);
|
||||
int netlink_attachskb(struct sock *sk, struct sk_buff *skb, int nonblock, long timeo);
|
||||
int netlink_attachskb(struct sock *sk, struct sk_buff *skb, int nonblock,
|
||||
long timeo, struct sock *ssk);
|
||||
void netlink_detachskb(struct sock *sk, struct sk_buff *skb);
|
||||
int netlink_sendskb(struct sock *sk, struct sk_buff *skb, int protocol);
|
||||
|
||||
|
|
|
|||
|
|
@ -1087,6 +1087,7 @@
|
|||
#define PCI_DEVICE_ID_NVIDIA_GEFORCE4_MX_440_8X 0x0181
|
||||
#define PCI_DEVICE_ID_NVIDIA_GEFORCE4_MX_440SE_8X 0x0182
|
||||
#define PCI_DEVICE_ID_NVIDIA_GEFORCE4_MX_420_8X 0x0183
|
||||
#define PCI_DEVICE_ID_NVIDIA_GEFORCE4_MX_4000 0x0185
|
||||
#define PCI_DEVICE_ID_NVIDIA_GEFORCE4_448_GO 0x0186
|
||||
#define PCI_DEVICE_ID_NVIDIA_GEFORCE4_488_GO 0x0187
|
||||
#define PCI_DEVICE_ID_NVIDIA_QUADRO4_580_XGL 0x0188
|
||||
|
|
|
|||
|
|
@ -84,6 +84,7 @@ extern int ptrace_readdata(struct task_struct *tsk, unsigned long src, char __us
|
|||
extern int ptrace_writedata(struct task_struct *tsk, char __user *src, unsigned long dst, int len);
|
||||
extern int ptrace_attach(struct task_struct *tsk);
|
||||
extern int ptrace_detach(struct task_struct *, unsigned int);
|
||||
extern void __ptrace_detach(struct task_struct *, unsigned int);
|
||||
extern void ptrace_disable(struct task_struct *);
|
||||
extern int ptrace_check_attach(struct task_struct *task, int kill);
|
||||
extern int ptrace_request(struct task_struct *child, long request, long addr, long data);
|
||||
|
|
|
|||
|
|
@ -697,11 +697,8 @@ struct task_struct {
|
|||
|
||||
int lock_depth; /* BKL lock depth */
|
||||
|
||||
#if defined(CONFIG_SMP)
|
||||
int last_waker_cpu; /* CPU that last woke this task up */
|
||||
#if defined(__ARCH_WANT_UNLOCKED_CTXSW)
|
||||
#if defined(CONFIG_SMP) && defined(__ARCH_WANT_UNLOCKED_CTXSW)
|
||||
int oncpu;
|
||||
#endif
|
||||
#endif
|
||||
int prio, static_prio;
|
||||
struct list_head run_list;
|
||||
|
|
@ -1098,7 +1095,7 @@ extern struct sigqueue *sigqueue_alloc(void);
|
|||
extern void sigqueue_free(struct sigqueue *);
|
||||
extern int send_sigqueue(int, struct sigqueue *, struct task_struct *);
|
||||
extern int send_group_sigqueue(int, struct sigqueue *, struct task_struct *);
|
||||
extern int do_sigaction(int, const struct k_sigaction *, struct k_sigaction *);
|
||||
extern int do_sigaction(int, struct k_sigaction *, struct k_sigaction *);
|
||||
extern int do_sigaltstack(const stack_t __user *, stack_t __user *, unsigned long);
|
||||
|
||||
/* These can be the second arg to send_sig_info/send_group_sig_info. */
|
||||
|
|
|
|||
|
|
@ -557,6 +557,8 @@ asmlinkage long sys_openat(int dfd, const char __user *filename, int flags,
|
|||
int mode);
|
||||
asmlinkage long sys_newfstatat(int dfd, char __user *filename,
|
||||
struct stat __user *statbuf, int flag);
|
||||
asmlinkage long sys_fstatat64(int dfd, char __user *filename,
|
||||
struct stat64 __user *statbuf, int flag);
|
||||
asmlinkage long sys_readlinkat(int dfd, const char __user *path, char __user *buf,
|
||||
int bufsiz);
|
||||
asmlinkage long compat_sys_futimesat(unsigned int dfd, char __user *filename,
|
||||
|
|
|
|||
|
|
@ -33,11 +33,34 @@ struct timezone {
|
|||
#define NSEC_PER_SEC 1000000000L
|
||||
#define NSEC_PER_USEC 1000L
|
||||
|
||||
static __inline__ int timespec_equal(struct timespec *a, struct timespec *b)
|
||||
static inline int timespec_equal(struct timespec *a, struct timespec *b)
|
||||
{
|
||||
return (a->tv_sec == b->tv_sec) && (a->tv_nsec == b->tv_nsec);
|
||||
}
|
||||
|
||||
/*
|
||||
* lhs < rhs: return <0
|
||||
* lhs == rhs: return 0
|
||||
* lhs > rhs: return >0
|
||||
*/
|
||||
static inline int timespec_compare(struct timespec *lhs, struct timespec *rhs)
|
||||
{
|
||||
if (lhs->tv_sec < rhs->tv_sec)
|
||||
return -1;
|
||||
if (lhs->tv_sec > rhs->tv_sec)
|
||||
return 1;
|
||||
return lhs->tv_nsec - rhs->tv_nsec;
|
||||
}
|
||||
|
||||
static inline int timeval_compare(struct timeval *lhs, struct timeval *rhs)
|
||||
{
|
||||
if (lhs->tv_sec < rhs->tv_sec)
|
||||
return -1;
|
||||
if (lhs->tv_sec > rhs->tv_sec)
|
||||
return 1;
|
||||
return lhs->tv_usec - rhs->tv_usec;
|
||||
}
|
||||
|
||||
extern unsigned long mktime(const unsigned int year, const unsigned int mon,
|
||||
const unsigned int day, const unsigned int hour,
|
||||
const unsigned int min, const unsigned int sec);
|
||||
|
|
|
|||
|
|
@ -345,6 +345,9 @@ time_interpolator_reset(void)
|
|||
|
||||
#endif /* !CONFIG_TIME_INTERPOLATION */
|
||||
|
||||
/* Returns how long ticks are at present, in ns / 2^(SHIFT_SCALE-10). */
|
||||
extern u64 current_tick_length(void);
|
||||
|
||||
#endif /* KERNEL */
|
||||
|
||||
#endif /* LINUX_TIMEX_H */
|
||||
|
|
|
|||
|
|
@ -58,6 +58,8 @@ struct tty_buffer {
|
|||
int used;
|
||||
int size;
|
||||
int active;
|
||||
int commit;
|
||||
int read;
|
||||
/* Data points here */
|
||||
unsigned long data[0];
|
||||
};
|
||||
|
|
|
|||
|
|
@ -29,8 +29,10 @@ _INLINE_ void tty_schedule_flip(struct tty_struct *tty)
|
|||
{
|
||||
unsigned long flags;
|
||||
spin_lock_irqsave(&tty->buf.lock, flags);
|
||||
if (tty->buf.tail != NULL)
|
||||
if (tty->buf.tail != NULL) {
|
||||
tty->buf.tail->active = 0;
|
||||
tty->buf.tail->commit = tty->buf.tail->used;
|
||||
}
|
||||
spin_unlock_irqrestore(&tty->buf.lock, flags);
|
||||
schedule_delayed_work(&tty->buf.work, 1);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue