mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-24 13:44:26 -04:00
Merge branch 'linus' into x86/apic
Conflicts: arch/x86/kernel/acpi/boot.c arch/x86/mm/fault.c
This commit is contained in:
commit
f8a6b2b9ce
481 changed files with 12062 additions and 5786 deletions
|
|
@ -90,7 +90,6 @@ header-y += if_ppp.h
|
|||
header-y += if_slip.h
|
||||
header-y += if_strip.h
|
||||
header-y += if_tun.h
|
||||
header-y += if_tunnel.h
|
||||
header-y += in_route.h
|
||||
header-y += ioctl.h
|
||||
header-y += ip6_tunnel.h
|
||||
|
|
@ -236,6 +235,7 @@ unifdef-y += if_phonet.h
|
|||
unifdef-y += if_pppol2tp.h
|
||||
unifdef-y += if_pppox.h
|
||||
unifdef-y += if_tr.h
|
||||
unifdef-y += if_tunnel.h
|
||||
unifdef-y += if_vlan.h
|
||||
unifdef-y += igmp.h
|
||||
unifdef-y += inet_diag.h
|
||||
|
|
|
|||
|
|
@ -17,9 +17,11 @@ typedef u64 async_cookie_t;
|
|||
typedef void (async_func_ptr) (void *data, async_cookie_t cookie);
|
||||
|
||||
extern async_cookie_t async_schedule(async_func_ptr *ptr, void *data);
|
||||
extern async_cookie_t async_schedule_special(async_func_ptr *ptr, void *data, struct list_head *list);
|
||||
extern async_cookie_t async_schedule_domain(async_func_ptr *ptr, void *data,
|
||||
struct list_head *list);
|
||||
extern void async_synchronize_full(void);
|
||||
extern void async_synchronize_full_special(struct list_head *list);
|
||||
extern void async_synchronize_full_domain(struct list_head *list);
|
||||
extern void async_synchronize_cookie(async_cookie_t cookie);
|
||||
extern void async_synchronize_cookie_special(async_cookie_t cookie, struct list_head *list);
|
||||
extern void async_synchronize_cookie_domain(async_cookie_t cookie,
|
||||
struct list_head *list);
|
||||
|
||||
|
|
|
|||
|
|
@ -731,12 +731,17 @@ static inline int ata_id_current_chs_valid(const u16 *id)
|
|||
|
||||
static inline int ata_id_is_cfa(const u16 *id)
|
||||
{
|
||||
if (id[ATA_ID_CONFIG] == 0x848A) /* Standard CF */
|
||||
if (id[ATA_ID_CONFIG] == 0x848A) /* Traditional CF */
|
||||
return 1;
|
||||
/* Could be CF hiding as standard ATA */
|
||||
if (ata_id_major_version(id) >= 3 &&
|
||||
id[ATA_ID_COMMAND_SET_1] != 0xFFFF &&
|
||||
(id[ATA_ID_COMMAND_SET_1] & (1 << 2)))
|
||||
/*
|
||||
* CF specs don't require specific value in the word 0 anymore and yet
|
||||
* they forbid to report the ATA version in the word 80 and require the
|
||||
* CFA feature set support to be indicated in the word 83 in this case.
|
||||
* Unfortunately, some cards only follow either of this requirements,
|
||||
* and while those that don't indicate CFA feature support need some
|
||||
* sort of quirk list, it seems impractical for the ones that do...
|
||||
*/
|
||||
if ((id[ATA_ID_COMMAND_SET_2] & 0xC004) == 0x4004)
|
||||
return 1;
|
||||
return 0;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -378,6 +378,7 @@ struct cgroup_subsys {
|
|||
* - initiating hotplug events
|
||||
*/
|
||||
struct mutex hierarchy_mutex;
|
||||
struct lock_class_key subsys_key;
|
||||
|
||||
/*
|
||||
* Link to parent, and list entry in parent's children.
|
||||
|
|
|
|||
|
|
@ -552,7 +552,12 @@ struct crypto_tfm *crypto_alloc_tfm(const char *alg_name,
|
|||
const struct crypto_type *frontend,
|
||||
u32 type, u32 mask);
|
||||
struct crypto_tfm *crypto_alloc_base(const char *alg_name, u32 type, u32 mask);
|
||||
void crypto_free_tfm(struct crypto_tfm *tfm);
|
||||
void crypto_destroy_tfm(void *mem, struct crypto_tfm *tfm);
|
||||
|
||||
static inline void crypto_free_tfm(struct crypto_tfm *tfm)
|
||||
{
|
||||
return crypto_destroy_tfm(tfm, tfm);
|
||||
}
|
||||
|
||||
int alg_test(const char *driver, const char *alg, u32 type, u32 mask);
|
||||
|
||||
|
|
|
|||
|
|
@ -282,6 +282,18 @@ static inline void dmaengine_put(void)
|
|||
}
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_NET_DMA
|
||||
#define net_dmaengine_get() dmaengine_get()
|
||||
#define net_dmaengine_put() dmaengine_put()
|
||||
#else
|
||||
static inline void net_dmaengine_get(void)
|
||||
{
|
||||
}
|
||||
static inline void net_dmaengine_put(void)
|
||||
{
|
||||
}
|
||||
#endif
|
||||
|
||||
dma_cookie_t dma_async_memcpy_buf_to_buf(struct dma_chan *chan,
|
||||
void *dest, void *src, size_t len);
|
||||
dma_cookie_t dma_async_memcpy_buf_to_pg(struct dma_chan *chan,
|
||||
|
|
|
|||
|
|
@ -960,6 +960,21 @@ extern struct fb_info *registered_fb[FB_MAX];
|
|||
extern int num_registered_fb;
|
||||
extern struct class *fb_class;
|
||||
|
||||
static inline int lock_fb_info(struct fb_info *info)
|
||||
{
|
||||
mutex_lock(&info->lock);
|
||||
if (!info->fbops) {
|
||||
mutex_unlock(&info->lock);
|
||||
return 0;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
static inline void unlock_fb_info(struct fb_info *info)
|
||||
{
|
||||
mutex_unlock(&info->lock);
|
||||
}
|
||||
|
||||
static inline void __fb_pad_aligned_buffer(u8 *dst, u32 d_pitch,
|
||||
u8 *src, u32 s_pitch, u32 height)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -33,7 +33,8 @@ unsigned long hugetlb_total_pages(void);
|
|||
int hugetlb_fault(struct mm_struct *mm, struct vm_area_struct *vma,
|
||||
unsigned long address, int write_access);
|
||||
int hugetlb_reserve_pages(struct inode *inode, long from, long to,
|
||||
struct vm_area_struct *vma);
|
||||
struct vm_area_struct *vma,
|
||||
int acctflags);
|
||||
void hugetlb_unreserve_pages(struct inode *inode, long offset, long freed);
|
||||
|
||||
extern unsigned long hugepages_treat_as_movable;
|
||||
|
|
@ -138,7 +139,7 @@ static inline struct hugetlbfs_sb_info *HUGETLBFS_SB(struct super_block *sb)
|
|||
|
||||
extern const struct file_operations hugetlbfs_file_operations;
|
||||
extern struct vm_operations_struct hugetlb_vm_ops;
|
||||
struct file *hugetlb_file_setup(const char *name, size_t);
|
||||
struct file *hugetlb_file_setup(const char *name, size_t, int);
|
||||
int hugetlb_get_quota(struct address_space *mapping, long delta);
|
||||
void hugetlb_put_quota(struct address_space *mapping, long delta);
|
||||
|
||||
|
|
@ -158,9 +159,9 @@ static inline void set_file_hugepages(struct file *file)
|
|||
}
|
||||
#else /* !CONFIG_HUGETLBFS */
|
||||
|
||||
#define is_file_hugepages(file) 0
|
||||
#define set_file_hugepages(file) BUG()
|
||||
#define hugetlb_file_setup(name,size) ERR_PTR(-ENOSYS)
|
||||
#define is_file_hugepages(file) 0
|
||||
#define set_file_hugepages(file) BUG()
|
||||
#define hugetlb_file_setup(name,size,acctflag) ERR_PTR(-ENOSYS)
|
||||
|
||||
#endif /* !CONFIG_HUGETLBFS */
|
||||
|
||||
|
|
|
|||
|
|
@ -2,7 +2,10 @@
|
|||
#define _IF_TUNNEL_H_
|
||||
|
||||
#include <linux/types.h>
|
||||
|
||||
#ifdef __KERNEL__
|
||||
#include <linux/ip.h>
|
||||
#endif
|
||||
|
||||
#define SIOCGETTUNNEL (SIOCDEVPRIVATE + 0)
|
||||
#define SIOCADDTUNNEL (SIOCDEVPRIVATE + 1)
|
||||
|
|
|
|||
|
|
@ -48,12 +48,11 @@ extern struct fs_struct init_fs;
|
|||
.posix_timers = LIST_HEAD_INIT(sig.posix_timers), \
|
||||
.cpu_timers = INIT_CPU_TIMERS(sig.cpu_timers), \
|
||||
.rlim = INIT_RLIMITS, \
|
||||
.cputime = { .totals = { \
|
||||
.utime = cputime_zero, \
|
||||
.stime = cputime_zero, \
|
||||
.sum_exec_runtime = 0, \
|
||||
.lock = __SPIN_LOCK_UNLOCKED(sig.cputime.totals.lock), \
|
||||
}, }, \
|
||||
.cputimer = { \
|
||||
.cputime = INIT_CPUTIME, \
|
||||
.running = 0, \
|
||||
.lock = __SPIN_LOCK_UNLOCKED(sig.cputimer.lock), \
|
||||
}, \
|
||||
}
|
||||
|
||||
extern struct nsproxy init_nsproxy;
|
||||
|
|
|
|||
|
|
@ -480,7 +480,8 @@ static inline char *pack_hex_byte(char *buf, u8 byte)
|
|||
/*
|
||||
* swap - swap value of @a and @b
|
||||
*/
|
||||
#define swap(a, b) ({ typeof(a) __tmp = (a); (a) = (b); (b) = __tmp; })
|
||||
#define swap(a, b) \
|
||||
do { typeof(a) __tmp = (a); (a) = (b); (b) = __tmp; } while (0)
|
||||
|
||||
/**
|
||||
* container_of - cast a member of a structure out to the containing structure
|
||||
|
|
|
|||
|
|
@ -380,6 +380,7 @@ enum {
|
|||
ATA_HORKAGE_ATAPI_MOD16_DMA = (1 << 11), /* use ATAPI DMA for commands
|
||||
not multiple of 16 bytes */
|
||||
ATA_HORKAGE_FIRMWARE_WARN = (1 << 12), /* firwmare update warning */
|
||||
ATA_HORKAGE_1_5_GBPS = (1 << 13), /* force 1.5 Gbps */
|
||||
|
||||
/* DMA mask for user DMA control: User visible values; DO NOT
|
||||
renumber */
|
||||
|
|
@ -580,7 +581,7 @@ struct ata_device {
|
|||
acpi_handle acpi_handle;
|
||||
union acpi_object *gtf_cache;
|
||||
#endif
|
||||
/* n_sector is used as CLEAR_OFFSET, read comment above CLEAR_OFFSET */
|
||||
/* n_sector is CLEAR_BEGIN, read comment above CLEAR_BEGIN */
|
||||
u64 n_sectors; /* size of device, if ATA */
|
||||
unsigned int class; /* ATA_DEV_xxx */
|
||||
unsigned long unpark_deadline;
|
||||
|
|
@ -605,20 +606,22 @@ struct ata_device {
|
|||
u16 heads; /* Number of heads */
|
||||
u16 sectors; /* Number of sectors per track */
|
||||
|
||||
/* error history */
|
||||
int spdn_cnt;
|
||||
struct ata_ering ering;
|
||||
|
||||
union {
|
||||
u16 id[ATA_ID_WORDS]; /* IDENTIFY xxx DEVICE data */
|
||||
u32 gscr[SATA_PMP_GSCR_DWORDS]; /* PMP GSCR block */
|
||||
};
|
||||
|
||||
/* error history */
|
||||
int spdn_cnt;
|
||||
/* ering is CLEAR_END, read comment above CLEAR_END */
|
||||
struct ata_ering ering;
|
||||
};
|
||||
|
||||
/* Offset into struct ata_device. Fields above it are maintained
|
||||
* acress device init. Fields below are zeroed.
|
||||
/* Fields between ATA_DEVICE_CLEAR_BEGIN and ATA_DEVICE_CLEAR_END are
|
||||
* cleared to zero on ata_dev_init().
|
||||
*/
|
||||
#define ATA_DEVICE_CLEAR_OFFSET offsetof(struct ata_device, n_sectors)
|
||||
#define ATA_DEVICE_CLEAR_BEGIN offsetof(struct ata_device, n_sectors)
|
||||
#define ATA_DEVICE_CLEAR_END offsetof(struct ata_device, ering)
|
||||
|
||||
struct ata_eh_info {
|
||||
struct ata_device *dev; /* offending device */
|
||||
|
|
|
|||
|
|
@ -1129,8 +1129,7 @@ extern unsigned long do_mmap_pgoff(struct file *file, unsigned long addr,
|
|||
unsigned long flag, unsigned long pgoff);
|
||||
extern unsigned long mmap_region(struct file *file, unsigned long addr,
|
||||
unsigned long len, unsigned long flags,
|
||||
unsigned int vm_flags, unsigned long pgoff,
|
||||
int accountable);
|
||||
unsigned int vm_flags, unsigned long pgoff);
|
||||
|
||||
static inline unsigned long do_mmap(struct file *file, unsigned long addr,
|
||||
unsigned long len, unsigned long prot,
|
||||
|
|
|
|||
|
|
@ -407,7 +407,6 @@ static inline local_t *__module_ref_addr(struct module *mod, int cpu)
|
|||
static inline void __module_get(struct module *module)
|
||||
{
|
||||
if (module) {
|
||||
BUG_ON(module_refcount(module) == 0);
|
||||
local_inc(__module_ref_addr(module, get_cpu()));
|
||||
put_cpu();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -684,7 +684,7 @@ int pci_enable_rom(struct pci_dev *pdev);
|
|||
void pci_disable_rom(struct pci_dev *pdev);
|
||||
void __iomem __must_check *pci_map_rom(struct pci_dev *pdev, size_t *size);
|
||||
void pci_unmap_rom(struct pci_dev *pdev, void __iomem *rom);
|
||||
size_t pci_get_rom_size(void __iomem *rom, size_t size);
|
||||
size_t pci_get_rom_size(struct pci_dev *pdev, void __iomem *rom, size_t size);
|
||||
|
||||
/* Power management related routines */
|
||||
int pci_save_state(struct pci_dev *dev);
|
||||
|
|
|
|||
|
|
@ -453,23 +453,33 @@ struct task_cputime {
|
|||
cputime_t utime;
|
||||
cputime_t stime;
|
||||
unsigned long long sum_exec_runtime;
|
||||
spinlock_t lock;
|
||||
};
|
||||
/* Alternate field names when used to cache expirations. */
|
||||
#define prof_exp stime
|
||||
#define virt_exp utime
|
||||
#define sched_exp sum_exec_runtime
|
||||
|
||||
#define INIT_CPUTIME \
|
||||
(struct task_cputime) { \
|
||||
.utime = cputime_zero, \
|
||||
.stime = cputime_zero, \
|
||||
.sum_exec_runtime = 0, \
|
||||
}
|
||||
|
||||
/**
|
||||
* struct thread_group_cputime - thread group interval timer counts
|
||||
* @totals: thread group interval timers; substructure for
|
||||
* uniprocessor kernel, per-cpu for SMP kernel.
|
||||
* struct thread_group_cputimer - thread group interval timer counts
|
||||
* @cputime: thread group interval timers.
|
||||
* @running: non-zero when there are timers running and
|
||||
* @cputime receives updates.
|
||||
* @lock: lock for fields in this struct.
|
||||
*
|
||||
* This structure contains the version of task_cputime, above, that is
|
||||
* used for thread group CPU clock calculations.
|
||||
* used for thread group CPU timer calculations.
|
||||
*/
|
||||
struct thread_group_cputime {
|
||||
struct task_cputime totals;
|
||||
struct thread_group_cputimer {
|
||||
struct task_cputime cputime;
|
||||
int running;
|
||||
spinlock_t lock;
|
||||
};
|
||||
|
||||
/*
|
||||
|
|
@ -518,10 +528,10 @@ struct signal_struct {
|
|||
cputime_t it_prof_incr, it_virt_incr;
|
||||
|
||||
/*
|
||||
* Thread group totals for process CPU clocks.
|
||||
* See thread_group_cputime(), et al, for details.
|
||||
* Thread group totals for process CPU timers.
|
||||
* See thread_group_cputimer(), et al, for details.
|
||||
*/
|
||||
struct thread_group_cputime cputime;
|
||||
struct thread_group_cputimer cputimer;
|
||||
|
||||
/* Earliest-expiration cache. */
|
||||
struct task_cputime cputime_expires;
|
||||
|
|
@ -558,7 +568,7 @@ struct signal_struct {
|
|||
* Live threads maintain their own counters and add to these
|
||||
* in __exit_signal, except for the group leader.
|
||||
*/
|
||||
cputime_t cutime, cstime;
|
||||
cputime_t utime, stime, cutime, cstime;
|
||||
cputime_t gtime;
|
||||
cputime_t cgtime;
|
||||
unsigned long nvcsw, nivcsw, cnvcsw, cnivcsw;
|
||||
|
|
@ -566,6 +576,14 @@ struct signal_struct {
|
|||
unsigned long inblock, oublock, cinblock, coublock;
|
||||
struct task_io_accounting ioac;
|
||||
|
||||
/*
|
||||
* Cumulative ns of schedule CPU time fo dead threads in the
|
||||
* group, not including a zombie group leader, (This only differs
|
||||
* from jiffies_to_ns(utime + stime) if sched_clock uses something
|
||||
* other than jiffies.)
|
||||
*/
|
||||
unsigned long long sum_sched_runtime;
|
||||
|
||||
/*
|
||||
* We don't bother to synchronize most readers of this at all,
|
||||
* because there is no reader checking a limit that actually needs
|
||||
|
|
@ -2194,27 +2212,14 @@ static inline int spin_needbreak(spinlock_t *lock)
|
|||
/*
|
||||
* Thread group CPU time accounting.
|
||||
*/
|
||||
|
||||
static inline
|
||||
void thread_group_cputime(struct task_struct *tsk, struct task_cputime *times)
|
||||
{
|
||||
struct task_cputime *totals = &tsk->signal->cputime.totals;
|
||||
unsigned long flags;
|
||||
|
||||
spin_lock_irqsave(&totals->lock, flags);
|
||||
*times = *totals;
|
||||
spin_unlock_irqrestore(&totals->lock, flags);
|
||||
}
|
||||
void thread_group_cputime(struct task_struct *tsk, struct task_cputime *times);
|
||||
void thread_group_cputimer(struct task_struct *tsk, struct task_cputime *times);
|
||||
|
||||
static inline void thread_group_cputime_init(struct signal_struct *sig)
|
||||
{
|
||||
sig->cputime.totals = (struct task_cputime){
|
||||
.utime = cputime_zero,
|
||||
.stime = cputime_zero,
|
||||
.sum_exec_runtime = 0,
|
||||
};
|
||||
|
||||
spin_lock_init(&sig->cputime.totals.lock);
|
||||
sig->cputimer.cputime = INIT_CPUTIME;
|
||||
spin_lock_init(&sig->cputimer.lock);
|
||||
sig->cputimer.running = 0;
|
||||
}
|
||||
|
||||
static inline void thread_group_cputime_free(struct signal_struct *sig)
|
||||
|
|
|
|||
|
|
@ -124,7 +124,12 @@ do { \
|
|||
#ifdef CONFIG_GENERIC_LOCKBREAK
|
||||
#define spin_is_contended(lock) ((lock)->break_lock)
|
||||
#else
|
||||
|
||||
#ifdef __raw_spin_is_contended
|
||||
#define spin_is_contended(lock) __raw_spin_is_contended(&(lock)->raw_lock)
|
||||
#else
|
||||
#define spin_is_contended(lock) (((void)(lock), 0))
|
||||
#endif /*__raw_spin_is_contended*/
|
||||
#endif
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -95,13 +95,13 @@ struct old_linux_dirent;
|
|||
#define __SC_TEST5(t5, a5, ...) __SC_TEST(t5); __SC_TEST4(__VA_ARGS__)
|
||||
#define __SC_TEST6(t6, a6, ...) __SC_TEST(t6); __SC_TEST5(__VA_ARGS__)
|
||||
|
||||
#define SYSCALL_DEFINE0(name) asmlinkage long sys_##name(void)
|
||||
#define SYSCALL_DEFINE1(...) SYSCALL_DEFINEx(1, __VA_ARGS__)
|
||||
#define SYSCALL_DEFINE2(...) SYSCALL_DEFINEx(2, __VA_ARGS__)
|
||||
#define SYSCALL_DEFINE3(...) SYSCALL_DEFINEx(3, __VA_ARGS__)
|
||||
#define SYSCALL_DEFINE4(...) SYSCALL_DEFINEx(4, __VA_ARGS__)
|
||||
#define SYSCALL_DEFINE5(...) SYSCALL_DEFINEx(5, __VA_ARGS__)
|
||||
#define SYSCALL_DEFINE6(...) SYSCALL_DEFINEx(6, __VA_ARGS__)
|
||||
#define SYSCALL_DEFINE0(name) asmlinkage long sys_##name(void)
|
||||
#define SYSCALL_DEFINE1(name, ...) SYSCALL_DEFINEx(1, _##name, __VA_ARGS__)
|
||||
#define SYSCALL_DEFINE2(name, ...) SYSCALL_DEFINEx(2, _##name, __VA_ARGS__)
|
||||
#define SYSCALL_DEFINE3(name, ...) SYSCALL_DEFINEx(3, _##name, __VA_ARGS__)
|
||||
#define SYSCALL_DEFINE4(name, ...) SYSCALL_DEFINEx(4, _##name, __VA_ARGS__)
|
||||
#define SYSCALL_DEFINE5(name, ...) SYSCALL_DEFINEx(5, _##name, __VA_ARGS__)
|
||||
#define SYSCALL_DEFINE6(name, ...) SYSCALL_DEFINEx(6, _##name, __VA_ARGS__)
|
||||
|
||||
#ifdef CONFIG_PPC64
|
||||
#define SYSCALL_ALIAS(alias, name) \
|
||||
|
|
@ -121,21 +121,21 @@ struct old_linux_dirent;
|
|||
|
||||
#define SYSCALL_DEFINE(name) static inline long SYSC_##name
|
||||
#define SYSCALL_DEFINEx(x, name, ...) \
|
||||
asmlinkage long sys_##name(__SC_DECL##x(__VA_ARGS__)); \
|
||||
static inline long SYSC_##name(__SC_DECL##x(__VA_ARGS__)); \
|
||||
asmlinkage long SyS_##name(__SC_LONG##x(__VA_ARGS__)) \
|
||||
asmlinkage long sys##name(__SC_DECL##x(__VA_ARGS__)); \
|
||||
static inline long SYSC##name(__SC_DECL##x(__VA_ARGS__)); \
|
||||
asmlinkage long SyS##name(__SC_LONG##x(__VA_ARGS__)) \
|
||||
{ \
|
||||
__SC_TEST##x(__VA_ARGS__); \
|
||||
return (long) SYSC_##name(__SC_CAST##x(__VA_ARGS__)); \
|
||||
return (long) SYSC##name(__SC_CAST##x(__VA_ARGS__)); \
|
||||
} \
|
||||
SYSCALL_ALIAS(sys_##name, SyS_##name); \
|
||||
static inline long SYSC_##name(__SC_DECL##x(__VA_ARGS__))
|
||||
SYSCALL_ALIAS(sys##name, SyS##name); \
|
||||
static inline long SYSC##name(__SC_DECL##x(__VA_ARGS__))
|
||||
|
||||
#else /* CONFIG_HAVE_SYSCALL_WRAPPERS */
|
||||
|
||||
#define SYSCALL_DEFINE(name) asmlinkage long sys_##name
|
||||
#define SYSCALL_DEFINEx(x, name, ...) \
|
||||
asmlinkage long sys_##name(__SC_DECL##x(__VA_ARGS__))
|
||||
asmlinkage long sys##name(__SC_DECL##x(__VA_ARGS__))
|
||||
|
||||
#endif /* CONFIG_HAVE_SYSCALL_WRAPPERS */
|
||||
|
||||
|
|
|
|||
|
|
@ -132,6 +132,8 @@ static inline void __remove_wait_queue(wait_queue_head_t *head,
|
|||
list_del(&old->task_list);
|
||||
}
|
||||
|
||||
void __wake_up_common(wait_queue_head_t *q, unsigned int mode,
|
||||
int nr_exclusive, int sync, void *key);
|
||||
void __wake_up(wait_queue_head_t *q, unsigned int mode, int nr, void *key);
|
||||
extern void __wake_up_locked(wait_queue_head_t *q, unsigned int mode);
|
||||
extern void __wake_up_sync(wait_queue_head_t *q, unsigned int mode, int nr);
|
||||
|
|
@ -333,16 +335,19 @@ do { \
|
|||
for (;;) { \
|
||||
prepare_to_wait_exclusive(&wq, &__wait, \
|
||||
TASK_INTERRUPTIBLE); \
|
||||
if (condition) \
|
||||
if (condition) { \
|
||||
finish_wait(&wq, &__wait); \
|
||||
break; \
|
||||
} \
|
||||
if (!signal_pending(current)) { \
|
||||
schedule(); \
|
||||
continue; \
|
||||
} \
|
||||
ret = -ERESTARTSYS; \
|
||||
abort_exclusive_wait(&wq, &__wait, \
|
||||
TASK_INTERRUPTIBLE, NULL); \
|
||||
break; \
|
||||
} \
|
||||
finish_wait(&wq, &__wait); \
|
||||
} while (0)
|
||||
|
||||
#define wait_event_interruptible_exclusive(wq, condition) \
|
||||
|
|
@ -431,6 +436,8 @@ extern long interruptible_sleep_on_timeout(wait_queue_head_t *q,
|
|||
void prepare_to_wait(wait_queue_head_t *q, wait_queue_t *wait, int state);
|
||||
void prepare_to_wait_exclusive(wait_queue_head_t *q, wait_queue_t *wait, int state);
|
||||
void finish_wait(wait_queue_head_t *q, wait_queue_t *wait);
|
||||
void abort_exclusive_wait(wait_queue_head_t *q, wait_queue_t *wait,
|
||||
unsigned int mode, void *key);
|
||||
int autoremove_wake_function(wait_queue_t *wait, unsigned mode, int sync, void *key);
|
||||
int wake_bit_function(wait_queue_t *wait, unsigned mode, int sync, void *key);
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue