mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-24 13:44:26 -04:00
Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6
Conflicts: net/mac80211/main.c
This commit is contained in:
commit
e548833df8
774 changed files with 11111 additions and 12641 deletions
|
|
@ -304,8 +304,8 @@ acpi_status acpi_run_osc(acpi_handle handle, struct acpi_osc_context *context);
|
|||
OSC_PCI_EXPRESS_PME_CONTROL | \
|
||||
OSC_PCI_EXPRESS_AER_CONTROL | \
|
||||
OSC_PCI_EXPRESS_CAP_STRUCTURE_CONTROL)
|
||||
|
||||
extern acpi_status acpi_pci_osc_control_set(acpi_handle handle, u32 flags);
|
||||
extern acpi_status acpi_pci_osc_control_set(acpi_handle handle,
|
||||
u32 *mask, u32 req);
|
||||
extern void acpi_early_init(void);
|
||||
|
||||
#else /* !CONFIG_ACPI */
|
||||
|
|
|
|||
|
|
@ -150,6 +150,7 @@ struct clcd_fb {
|
|||
u16 off_cntl;
|
||||
u32 clcd_cntl;
|
||||
u32 cmap[16];
|
||||
bool clk_enabled;
|
||||
};
|
||||
|
||||
static inline void clcdfb_decode(struct clcd_fb *fb, struct clcd_regs *regs)
|
||||
|
|
|
|||
|
|
@ -50,8 +50,8 @@ struct linux_binprm{
|
|||
int unsafe; /* how unsafe this exec is (mask of LSM_UNSAFE_*) */
|
||||
unsigned int per_clear; /* bits to clear in current->personality */
|
||||
int argc, envc;
|
||||
char * filename; /* Name of binary as seen by procps */
|
||||
char * interp; /* Name of the binary really executed. Most
|
||||
const char * filename; /* Name of binary as seen by procps */
|
||||
const char * interp; /* Name of the binary really executed. Most
|
||||
of the time same as filename, but could be
|
||||
different for binfmt_{misc,script} */
|
||||
unsigned interp_flags;
|
||||
|
|
@ -126,7 +126,8 @@ extern int setup_arg_pages(struct linux_binprm * bprm,
|
|||
unsigned long stack_top,
|
||||
int executable_stack);
|
||||
extern int bprm_mm_init(struct linux_binprm *bprm);
|
||||
extern int copy_strings_kernel(int argc,char ** argv,struct linux_binprm *bprm);
|
||||
extern int copy_strings_kernel(int argc, const char *const *argv,
|
||||
struct linux_binprm *bprm);
|
||||
extern int prepare_bprm_creds(struct linux_binprm *bprm);
|
||||
extern void install_exec_creds(struct linux_binprm *bprm);
|
||||
extern void do_coredump(long signr, int exit_code, struct pt_regs *regs);
|
||||
|
|
|
|||
|
|
@ -32,7 +32,6 @@ enum bh_state_bits {
|
|||
BH_Delay, /* Buffer is not yet allocated on disk */
|
||||
BH_Boundary, /* Block is followed by a discontiguity */
|
||||
BH_Write_EIO, /* I/O error on write */
|
||||
BH_Ordered, /* ordered write */
|
||||
BH_Eopnotsupp, /* operation not supported (barrier) */
|
||||
BH_Unwritten, /* Buffer is allocated on disk but not written */
|
||||
BH_Quiet, /* Buffer Error Prinks to be quiet */
|
||||
|
|
@ -125,7 +124,6 @@ BUFFER_FNS(Async_Write, async_write)
|
|||
BUFFER_FNS(Delay, delay)
|
||||
BUFFER_FNS(Boundary, boundary)
|
||||
BUFFER_FNS(Write_EIO, write_io_error)
|
||||
BUFFER_FNS(Ordered, ordered)
|
||||
BUFFER_FNS(Eopnotsupp, eopnotsupp)
|
||||
BUFFER_FNS(Unwritten, unwritten)
|
||||
|
||||
|
|
@ -183,6 +181,8 @@ void unlock_buffer(struct buffer_head *bh);
|
|||
void __lock_buffer(struct buffer_head *bh);
|
||||
void ll_rw_block(int, int, struct buffer_head * bh[]);
|
||||
int sync_dirty_buffer(struct buffer_head *bh);
|
||||
int __sync_dirty_buffer(struct buffer_head *bh, int rw);
|
||||
void write_dirty_buffer(struct buffer_head *bh, int rw);
|
||||
int submit_bh(int, struct buffer_head *);
|
||||
void write_boundary_block(struct block_device *bdev,
|
||||
sector_t bblock, unsigned blocksize);
|
||||
|
|
|
|||
|
|
@ -578,7 +578,11 @@ struct task_struct *cgroup_iter_next(struct cgroup *cgrp,
|
|||
void cgroup_iter_end(struct cgroup *cgrp, struct cgroup_iter *it);
|
||||
int cgroup_scan_tasks(struct cgroup_scanner *scan);
|
||||
int cgroup_attach_task(struct cgroup *, struct task_struct *);
|
||||
int cgroup_attach_task_current_cg(struct task_struct *);
|
||||
int cgroup_attach_task_all(struct task_struct *from, struct task_struct *);
|
||||
static inline int cgroup_attach_task_current_cg(struct task_struct *tsk)
|
||||
{
|
||||
return cgroup_attach_task_all(current, tsk);
|
||||
}
|
||||
|
||||
/*
|
||||
* CSS ID is ID for cgroup_subsys_state structs under subsys. This only works
|
||||
|
|
@ -636,6 +640,11 @@ static inline int cgroupstats_build(struct cgroupstats *stats,
|
|||
}
|
||||
|
||||
/* No cgroups - nothing to do */
|
||||
static inline int cgroup_attach_task_all(struct task_struct *from,
|
||||
struct task_struct *t)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
static inline int cgroup_attach_task_current_cg(struct task_struct *t)
|
||||
{
|
||||
return 0;
|
||||
|
|
|
|||
|
|
@ -65,14 +65,14 @@
|
|||
FAN_ALL_PERM_EVENTS |\
|
||||
FAN_Q_OVERFLOW)
|
||||
|
||||
#define FANOTIFY_METADATA_VERSION 1
|
||||
#define FANOTIFY_METADATA_VERSION 2
|
||||
|
||||
struct fanotify_event_metadata {
|
||||
__u32 event_len;
|
||||
__u32 vers;
|
||||
__s32 fd;
|
||||
__u64 mask;
|
||||
__s64 pid;
|
||||
__s32 fd;
|
||||
__s32 pid;
|
||||
} __attribute__ ((packed));
|
||||
|
||||
struct fanotify_response {
|
||||
|
|
@ -95,11 +95,4 @@ struct fanotify_response {
|
|||
(long)(meta)->event_len >= (long)FAN_EVENT_METADATA_LEN && \
|
||||
(long)(meta)->event_len <= (long)(len))
|
||||
|
||||
#ifdef __KERNEL__
|
||||
|
||||
struct fanotify_wait {
|
||||
struct fsnotify_event *event;
|
||||
__s32 fd;
|
||||
};
|
||||
#endif /* __KERNEL__ */
|
||||
#endif /* _LINUX_FANOTIFY_H */
|
||||
|
|
|
|||
|
|
@ -125,9 +125,6 @@ struct inodes_stat_t {
|
|||
* block layer could (in theory) choose to ignore this
|
||||
* request if it runs into resource problems.
|
||||
* WRITE A normal async write. Device will be plugged.
|
||||
* SWRITE Like WRITE, but a special case for ll_rw_block() that
|
||||
* tells it to lock the buffer first. Normally a buffer
|
||||
* must be locked before doing IO.
|
||||
* WRITE_SYNC_PLUG Synchronous write. Identical to WRITE, but passes down
|
||||
* the hint that someone will be waiting on this IO
|
||||
* shortly. The device must still be unplugged explicitly,
|
||||
|
|
@ -138,9 +135,6 @@ struct inodes_stat_t {
|
|||
* immediately after submission. The write equivalent
|
||||
* of READ_SYNC.
|
||||
* WRITE_ODIRECT_PLUG Special case write for O_DIRECT only.
|
||||
* SWRITE_SYNC
|
||||
* SWRITE_SYNC_PLUG Like WRITE_SYNC/WRITE_SYNC_PLUG, but locks the buffer.
|
||||
* See SWRITE.
|
||||
* WRITE_BARRIER Like WRITE_SYNC, but tells the block layer that all
|
||||
* previously submitted writes must be safely on storage
|
||||
* before this one is started. Also guarantees that when
|
||||
|
|
@ -155,7 +149,6 @@ struct inodes_stat_t {
|
|||
#define READ 0
|
||||
#define WRITE RW_MASK
|
||||
#define READA RWA_MASK
|
||||
#define SWRITE (WRITE | READA)
|
||||
|
||||
#define READ_SYNC (READ | REQ_SYNC | REQ_UNPLUG)
|
||||
#define READ_META (READ | REQ_META)
|
||||
|
|
@ -165,8 +158,6 @@ struct inodes_stat_t {
|
|||
#define WRITE_META (WRITE | REQ_META)
|
||||
#define WRITE_BARRIER (WRITE | REQ_SYNC | REQ_NOIDLE | REQ_UNPLUG | \
|
||||
REQ_HARDBARRIER)
|
||||
#define SWRITE_SYNC_PLUG (SWRITE | REQ_SYNC | REQ_NOIDLE)
|
||||
#define SWRITE_SYNC (SWRITE | REQ_SYNC | REQ_NOIDLE | REQ_UNPLUG)
|
||||
|
||||
/*
|
||||
* These aren't really reads or writes, they pass down information about
|
||||
|
|
@ -929,6 +920,9 @@ struct file {
|
|||
#define f_vfsmnt f_path.mnt
|
||||
const struct file_operations *f_op;
|
||||
spinlock_t f_lock; /* f_ep_links, f_flags, no IRQ */
|
||||
#ifdef CONFIG_SMP
|
||||
int f_sb_list_cpu;
|
||||
#endif
|
||||
atomic_long_t f_count;
|
||||
unsigned int f_flags;
|
||||
fmode_t f_mode;
|
||||
|
|
@ -953,9 +947,6 @@ struct file {
|
|||
unsigned long f_mnt_write_state;
|
||||
#endif
|
||||
};
|
||||
extern spinlock_t files_lock;
|
||||
#define file_list_lock() spin_lock(&files_lock);
|
||||
#define file_list_unlock() spin_unlock(&files_lock);
|
||||
|
||||
#define get_file(x) atomic_long_inc(&(x)->f_count)
|
||||
#define fput_atomic(x) atomic_long_add_unless(&(x)->f_count, -1, 1)
|
||||
|
|
@ -1346,7 +1337,11 @@ struct super_block {
|
|||
|
||||
struct list_head s_inodes; /* all inodes */
|
||||
struct hlist_head s_anon; /* anonymous dentries for (nfs) exporting */
|
||||
#ifdef CONFIG_SMP
|
||||
struct list_head __percpu *s_files;
|
||||
#else
|
||||
struct list_head s_files;
|
||||
#endif
|
||||
/* s_dentry_lru and s_nr_dentry_unused are protected by dcache_lock */
|
||||
struct list_head s_dentry_lru; /* unused dentry lru */
|
||||
int s_nr_dentry_unused; /* # of dentry on lru */
|
||||
|
|
@ -2197,8 +2192,6 @@ static inline void insert_inode_hash(struct inode *inode) {
|
|||
__insert_inode_hash(inode, inode->i_ino);
|
||||
}
|
||||
|
||||
extern void file_move(struct file *f, struct list_head *list);
|
||||
extern void file_kill(struct file *f);
|
||||
#ifdef CONFIG_BLOCK
|
||||
extern void submit_bio(int, struct bio *);
|
||||
extern int bdev_read_only(struct block_device *);
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@
|
|||
|
||||
struct fs_struct {
|
||||
int users;
|
||||
rwlock_t lock;
|
||||
spinlock_t lock;
|
||||
int umask;
|
||||
int in_exec;
|
||||
struct path root, pwd;
|
||||
|
|
@ -23,29 +23,29 @@ extern int unshare_fs_struct(void);
|
|||
|
||||
static inline void get_fs_root(struct fs_struct *fs, struct path *root)
|
||||
{
|
||||
read_lock(&fs->lock);
|
||||
spin_lock(&fs->lock);
|
||||
*root = fs->root;
|
||||
path_get(root);
|
||||
read_unlock(&fs->lock);
|
||||
spin_unlock(&fs->lock);
|
||||
}
|
||||
|
||||
static inline void get_fs_pwd(struct fs_struct *fs, struct path *pwd)
|
||||
{
|
||||
read_lock(&fs->lock);
|
||||
spin_lock(&fs->lock);
|
||||
*pwd = fs->pwd;
|
||||
path_get(pwd);
|
||||
read_unlock(&fs->lock);
|
||||
spin_unlock(&fs->lock);
|
||||
}
|
||||
|
||||
static inline void get_fs_root_and_pwd(struct fs_struct *fs, struct path *root,
|
||||
struct path *pwd)
|
||||
{
|
||||
read_lock(&fs->lock);
|
||||
spin_lock(&fs->lock);
|
||||
*root = fs->root;
|
||||
path_get(root);
|
||||
*pwd = fs->pwd;
|
||||
path_get(pwd);
|
||||
read_unlock(&fs->lock);
|
||||
spin_unlock(&fs->lock);
|
||||
}
|
||||
|
||||
#endif /* _LINUX_FS_STRUCT_H */
|
||||
|
|
|
|||
|
|
@ -156,6 +156,7 @@ struct fsnotify_group {
|
|||
struct mutex access_mutex;
|
||||
struct list_head access_list;
|
||||
wait_queue_head_t access_waitq;
|
||||
bool bypass_perm; /* protected by access_mutex */
|
||||
#endif /* CONFIG_FANOTIFY_ACCESS_PERMISSIONS */
|
||||
int f_flags;
|
||||
} fanotify_data;
|
||||
|
|
|
|||
20
include/linux/intel-gtt.h
Normal file
20
include/linux/intel-gtt.h
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
/*
|
||||
* Common Intel AGPGART and GTT definitions.
|
||||
*/
|
||||
#ifndef _INTEL_GTT_H
|
||||
#define _INTEL_GTT_H
|
||||
|
||||
#include <linux/agp_backend.h>
|
||||
|
||||
/* This is for Intel only GTT controls.
|
||||
*
|
||||
* Sandybridge: AGP_USER_CACHED_MEMORY default to LLC only
|
||||
*/
|
||||
|
||||
#define AGP_USER_CACHED_MEMORY_LLC_MLC (AGP_USER_TYPES + 2)
|
||||
#define AGP_USER_UNCACHED_MEMORY (AGP_USER_TYPES + 4)
|
||||
|
||||
/* flag for GFDT type */
|
||||
#define AGP_USER_CACHED_MEMORY_GFDT (1 << 3)
|
||||
|
||||
#endif
|
||||
|
|
@ -836,6 +836,8 @@ extern void __kfifo_dma_out_finish_r(struct __kfifo *fifo, size_t recsize);
|
|||
|
||||
extern unsigned int __kfifo_len_r(struct __kfifo *fifo, size_t recsize);
|
||||
|
||||
extern void __kfifo_skip_r(struct __kfifo *fifo, size_t recsize);
|
||||
|
||||
extern unsigned int __kfifo_out_peek_r(struct __kfifo *fifo,
|
||||
void *buf, unsigned int len, size_t recsize);
|
||||
|
||||
|
|
|
|||
|
|
@ -22,6 +22,7 @@
|
|||
#include <linux/compiler.h>
|
||||
#include <linux/spinlock.h>
|
||||
#include <linux/kref.h>
|
||||
#include <linux/kobject_ns.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/wait.h>
|
||||
#include <asm/atomic.h>
|
||||
|
|
@ -136,42 +137,8 @@ struct kobj_attribute {
|
|||
|
||||
extern const struct sysfs_ops kobj_sysfs_ops;
|
||||
|
||||
/*
|
||||
* Namespace types which are used to tag kobjects and sysfs entries.
|
||||
* Network namespace will likely be the first.
|
||||
*/
|
||||
enum kobj_ns_type {
|
||||
KOBJ_NS_TYPE_NONE = 0,
|
||||
KOBJ_NS_TYPE_NET,
|
||||
KOBJ_NS_TYPES
|
||||
};
|
||||
|
||||
struct sock;
|
||||
|
||||
/*
|
||||
* Callbacks so sysfs can determine namespaces
|
||||
* @current_ns: return calling task's namespace
|
||||
* @netlink_ns: return namespace to which a sock belongs (right?)
|
||||
* @initial_ns: return the initial namespace (i.e. init_net_ns)
|
||||
*/
|
||||
struct kobj_ns_type_operations {
|
||||
enum kobj_ns_type type;
|
||||
const void *(*current_ns)(void);
|
||||
const void *(*netlink_ns)(struct sock *sk);
|
||||
const void *(*initial_ns)(void);
|
||||
};
|
||||
|
||||
int kobj_ns_type_register(const struct kobj_ns_type_operations *ops);
|
||||
int kobj_ns_type_registered(enum kobj_ns_type type);
|
||||
const struct kobj_ns_type_operations *kobj_child_ns_ops(struct kobject *parent);
|
||||
const struct kobj_ns_type_operations *kobj_ns_ops(struct kobject *kobj);
|
||||
|
||||
const void *kobj_ns_current(enum kobj_ns_type type);
|
||||
const void *kobj_ns_netlink(enum kobj_ns_type type, struct sock *sk);
|
||||
const void *kobj_ns_initial(enum kobj_ns_type type);
|
||||
void kobj_ns_exit(enum kobj_ns_type type, const void *ns);
|
||||
|
||||
|
||||
/**
|
||||
* struct kset - a set of kobjects of a specific type, belonging to a specific subsystem.
|
||||
*
|
||||
|
|
|
|||
56
include/linux/kobject_ns.h
Normal file
56
include/linux/kobject_ns.h
Normal file
|
|
@ -0,0 +1,56 @@
|
|||
/* Kernel object name space definitions
|
||||
*
|
||||
* Copyright (c) 2002-2003 Patrick Mochel
|
||||
* Copyright (c) 2002-2003 Open Source Development Labs
|
||||
* Copyright (c) 2006-2008 Greg Kroah-Hartman <greg@kroah.com>
|
||||
* Copyright (c) 2006-2008 Novell Inc.
|
||||
*
|
||||
* Split from kobject.h by David Howells (dhowells@redhat.com)
|
||||
*
|
||||
* This file is released under the GPLv2.
|
||||
*
|
||||
* Please read Documentation/kobject.txt before using the kobject
|
||||
* interface, ESPECIALLY the parts about reference counts and object
|
||||
* destructors.
|
||||
*/
|
||||
|
||||
#ifndef _LINUX_KOBJECT_NS_H
|
||||
#define _LINUX_KOBJECT_NS_H
|
||||
|
||||
struct sock;
|
||||
struct kobject;
|
||||
|
||||
/*
|
||||
* Namespace types which are used to tag kobjects and sysfs entries.
|
||||
* Network namespace will likely be the first.
|
||||
*/
|
||||
enum kobj_ns_type {
|
||||
KOBJ_NS_TYPE_NONE = 0,
|
||||
KOBJ_NS_TYPE_NET,
|
||||
KOBJ_NS_TYPES
|
||||
};
|
||||
|
||||
/*
|
||||
* Callbacks so sysfs can determine namespaces
|
||||
* @current_ns: return calling task's namespace
|
||||
* @netlink_ns: return namespace to which a sock belongs (right?)
|
||||
* @initial_ns: return the initial namespace (i.e. init_net_ns)
|
||||
*/
|
||||
struct kobj_ns_type_operations {
|
||||
enum kobj_ns_type type;
|
||||
const void *(*current_ns)(void);
|
||||
const void *(*netlink_ns)(struct sock *sk);
|
||||
const void *(*initial_ns)(void);
|
||||
};
|
||||
|
||||
int kobj_ns_type_register(const struct kobj_ns_type_operations *ops);
|
||||
int kobj_ns_type_registered(enum kobj_ns_type type);
|
||||
const struct kobj_ns_type_operations *kobj_child_ns_ops(struct kobject *parent);
|
||||
const struct kobj_ns_type_operations *kobj_ns_ops(struct kobject *kobj);
|
||||
|
||||
const void *kobj_ns_current(enum kobj_ns_type type);
|
||||
const void *kobj_ns_netlink(enum kobj_ns_type type, struct sock *sk);
|
||||
const void *kobj_ns_initial(enum kobj_ns_type type);
|
||||
void kobj_ns_exit(enum kobj_ns_type type, const void *ns);
|
||||
|
||||
#endif /* _LINUX_KOBJECT_NS_H */
|
||||
172
include/linux/lglock.h
Normal file
172
include/linux/lglock.h
Normal file
|
|
@ -0,0 +1,172 @@
|
|||
/*
|
||||
* Specialised local-global spinlock. Can only be declared as global variables
|
||||
* to avoid overhead and keep things simple (and we don't want to start using
|
||||
* these inside dynamically allocated structures).
|
||||
*
|
||||
* "local/global locks" (lglocks) can be used to:
|
||||
*
|
||||
* - Provide fast exclusive access to per-CPU data, with exclusive access to
|
||||
* another CPU's data allowed but possibly subject to contention, and to
|
||||
* provide very slow exclusive access to all per-CPU data.
|
||||
* - Or to provide very fast and scalable read serialisation, and to provide
|
||||
* very slow exclusive serialisation of data (not necessarily per-CPU data).
|
||||
*
|
||||
* Brlocks are also implemented as a short-hand notation for the latter use
|
||||
* case.
|
||||
*
|
||||
* Copyright 2009, 2010, Nick Piggin, Novell Inc.
|
||||
*/
|
||||
#ifndef __LINUX_LGLOCK_H
|
||||
#define __LINUX_LGLOCK_H
|
||||
|
||||
#include <linux/spinlock.h>
|
||||
#include <linux/lockdep.h>
|
||||
#include <linux/percpu.h>
|
||||
|
||||
/* can make br locks by using local lock for read side, global lock for write */
|
||||
#define br_lock_init(name) name##_lock_init()
|
||||
#define br_read_lock(name) name##_local_lock()
|
||||
#define br_read_unlock(name) name##_local_unlock()
|
||||
#define br_write_lock(name) name##_global_lock_online()
|
||||
#define br_write_unlock(name) name##_global_unlock_online()
|
||||
|
||||
#define DECLARE_BRLOCK(name) DECLARE_LGLOCK(name)
|
||||
#define DEFINE_BRLOCK(name) DEFINE_LGLOCK(name)
|
||||
|
||||
|
||||
#define lg_lock_init(name) name##_lock_init()
|
||||
#define lg_local_lock(name) name##_local_lock()
|
||||
#define lg_local_unlock(name) name##_local_unlock()
|
||||
#define lg_local_lock_cpu(name, cpu) name##_local_lock_cpu(cpu)
|
||||
#define lg_local_unlock_cpu(name, cpu) name##_local_unlock_cpu(cpu)
|
||||
#define lg_global_lock(name) name##_global_lock()
|
||||
#define lg_global_unlock(name) name##_global_unlock()
|
||||
#define lg_global_lock_online(name) name##_global_lock_online()
|
||||
#define lg_global_unlock_online(name) name##_global_unlock_online()
|
||||
|
||||
#ifdef CONFIG_DEBUG_LOCK_ALLOC
|
||||
#define LOCKDEP_INIT_MAP lockdep_init_map
|
||||
|
||||
#define DEFINE_LGLOCK_LOCKDEP(name) \
|
||||
struct lock_class_key name##_lock_key; \
|
||||
struct lockdep_map name##_lock_dep_map; \
|
||||
EXPORT_SYMBOL(name##_lock_dep_map)
|
||||
|
||||
#else
|
||||
#define LOCKDEP_INIT_MAP(a, b, c, d)
|
||||
|
||||
#define DEFINE_LGLOCK_LOCKDEP(name)
|
||||
#endif
|
||||
|
||||
|
||||
#define DECLARE_LGLOCK(name) \
|
||||
extern void name##_lock_init(void); \
|
||||
extern void name##_local_lock(void); \
|
||||
extern void name##_local_unlock(void); \
|
||||
extern void name##_local_lock_cpu(int cpu); \
|
||||
extern void name##_local_unlock_cpu(int cpu); \
|
||||
extern void name##_global_lock(void); \
|
||||
extern void name##_global_unlock(void); \
|
||||
extern void name##_global_lock_online(void); \
|
||||
extern void name##_global_unlock_online(void); \
|
||||
|
||||
#define DEFINE_LGLOCK(name) \
|
||||
\
|
||||
DEFINE_PER_CPU(arch_spinlock_t, name##_lock); \
|
||||
DEFINE_LGLOCK_LOCKDEP(name); \
|
||||
\
|
||||
void name##_lock_init(void) { \
|
||||
int i; \
|
||||
LOCKDEP_INIT_MAP(&name##_lock_dep_map, #name, &name##_lock_key, 0); \
|
||||
for_each_possible_cpu(i) { \
|
||||
arch_spinlock_t *lock; \
|
||||
lock = &per_cpu(name##_lock, i); \
|
||||
*lock = (arch_spinlock_t)__ARCH_SPIN_LOCK_UNLOCKED; \
|
||||
} \
|
||||
} \
|
||||
EXPORT_SYMBOL(name##_lock_init); \
|
||||
\
|
||||
void name##_local_lock(void) { \
|
||||
arch_spinlock_t *lock; \
|
||||
preempt_disable(); \
|
||||
rwlock_acquire_read(&name##_lock_dep_map, 0, 0, _THIS_IP_); \
|
||||
lock = &__get_cpu_var(name##_lock); \
|
||||
arch_spin_lock(lock); \
|
||||
} \
|
||||
EXPORT_SYMBOL(name##_local_lock); \
|
||||
\
|
||||
void name##_local_unlock(void) { \
|
||||
arch_spinlock_t *lock; \
|
||||
rwlock_release(&name##_lock_dep_map, 1, _THIS_IP_); \
|
||||
lock = &__get_cpu_var(name##_lock); \
|
||||
arch_spin_unlock(lock); \
|
||||
preempt_enable(); \
|
||||
} \
|
||||
EXPORT_SYMBOL(name##_local_unlock); \
|
||||
\
|
||||
void name##_local_lock_cpu(int cpu) { \
|
||||
arch_spinlock_t *lock; \
|
||||
preempt_disable(); \
|
||||
rwlock_acquire_read(&name##_lock_dep_map, 0, 0, _THIS_IP_); \
|
||||
lock = &per_cpu(name##_lock, cpu); \
|
||||
arch_spin_lock(lock); \
|
||||
} \
|
||||
EXPORT_SYMBOL(name##_local_lock_cpu); \
|
||||
\
|
||||
void name##_local_unlock_cpu(int cpu) { \
|
||||
arch_spinlock_t *lock; \
|
||||
rwlock_release(&name##_lock_dep_map, 1, _THIS_IP_); \
|
||||
lock = &per_cpu(name##_lock, cpu); \
|
||||
arch_spin_unlock(lock); \
|
||||
preempt_enable(); \
|
||||
} \
|
||||
EXPORT_SYMBOL(name##_local_unlock_cpu); \
|
||||
\
|
||||
void name##_global_lock_online(void) { \
|
||||
int i; \
|
||||
preempt_disable(); \
|
||||
rwlock_acquire(&name##_lock_dep_map, 0, 0, _RET_IP_); \
|
||||
for_each_online_cpu(i) { \
|
||||
arch_spinlock_t *lock; \
|
||||
lock = &per_cpu(name##_lock, i); \
|
||||
arch_spin_lock(lock); \
|
||||
} \
|
||||
} \
|
||||
EXPORT_SYMBOL(name##_global_lock_online); \
|
||||
\
|
||||
void name##_global_unlock_online(void) { \
|
||||
int i; \
|
||||
rwlock_release(&name##_lock_dep_map, 1, _RET_IP_); \
|
||||
for_each_online_cpu(i) { \
|
||||
arch_spinlock_t *lock; \
|
||||
lock = &per_cpu(name##_lock, i); \
|
||||
arch_spin_unlock(lock); \
|
||||
} \
|
||||
preempt_enable(); \
|
||||
} \
|
||||
EXPORT_SYMBOL(name##_global_unlock_online); \
|
||||
\
|
||||
void name##_global_lock(void) { \
|
||||
int i; \
|
||||
preempt_disable(); \
|
||||
rwlock_acquire(&name##_lock_dep_map, 0, 0, _RET_IP_); \
|
||||
for_each_online_cpu(i) { \
|
||||
arch_spinlock_t *lock; \
|
||||
lock = &per_cpu(name##_lock, i); \
|
||||
arch_spin_lock(lock); \
|
||||
} \
|
||||
} \
|
||||
EXPORT_SYMBOL(name##_global_lock); \
|
||||
\
|
||||
void name##_global_unlock(void) { \
|
||||
int i; \
|
||||
rwlock_release(&name##_lock_dep_map, 1, _RET_IP_); \
|
||||
for_each_online_cpu(i) { \
|
||||
arch_spinlock_t *lock; \
|
||||
lock = &per_cpu(name##_lock, i); \
|
||||
arch_spin_unlock(lock); \
|
||||
} \
|
||||
preempt_enable(); \
|
||||
} \
|
||||
EXPORT_SYMBOL(name##_global_unlock);
|
||||
#endif
|
||||
|
|
@ -33,6 +33,7 @@
|
|||
#define MWAVE_MINOR 219 /* ACP/Mwave Modem */
|
||||
#define MPT_MINOR 220
|
||||
#define MPT2SAS_MINOR 221
|
||||
#define UINPUT_MINOR 223
|
||||
#define HPET_MINOR 228
|
||||
#define FUSE_MINOR 229
|
||||
#define KVM_MINOR 232
|
||||
|
|
|
|||
|
|
@ -78,7 +78,11 @@ extern unsigned int kobjsize(const void *objp);
|
|||
#define VM_MAYSHARE 0x00000080
|
||||
|
||||
#define VM_GROWSDOWN 0x00000100 /* general info on the segment */
|
||||
#if defined(CONFIG_STACK_GROWSUP) || defined(CONFIG_IA64)
|
||||
#define VM_GROWSUP 0x00000200
|
||||
#else
|
||||
#define VM_GROWSUP 0x00000000
|
||||
#endif
|
||||
#define VM_PFNMAP 0x00000400 /* Page-ranges managed without "struct page", just pure PFN */
|
||||
#define VM_DENYWRITE 0x00000800 /* ETXTBSY on write attempts.. */
|
||||
|
||||
|
|
@ -1330,8 +1334,10 @@ unsigned long ra_submit(struct file_ra_state *ra,
|
|||
|
||||
/* Do stack extension */
|
||||
extern int expand_stack(struct vm_area_struct *vma, unsigned long address);
|
||||
#ifdef CONFIG_IA64
|
||||
#if VM_GROWSUP
|
||||
extern int expand_upwards(struct vm_area_struct *vma, unsigned long address);
|
||||
#else
|
||||
#define expand_upwards(vma, address) do { } while (0)
|
||||
#endif
|
||||
extern int expand_stack_downwards(struct vm_area_struct *vma,
|
||||
unsigned long address);
|
||||
|
|
@ -1357,7 +1363,15 @@ static inline unsigned long vma_pages(struct vm_area_struct *vma)
|
|||
return (vma->vm_end - vma->vm_start) >> PAGE_SHIFT;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_MMU
|
||||
pgprot_t vm_get_page_prot(unsigned long vm_flags);
|
||||
#else
|
||||
static inline pgprot_t vm_get_page_prot(unsigned long vm_flags)
|
||||
{
|
||||
return __pgprot(0);
|
||||
}
|
||||
#endif
|
||||
|
||||
struct vm_area_struct *find_extend_vma(struct mm_struct *, unsigned long addr);
|
||||
int remap_pfn_range(struct vm_area_struct *, unsigned long addr,
|
||||
unsigned long pfn, unsigned long size, pgprot_t);
|
||||
|
|
|
|||
|
|
@ -134,7 +134,7 @@ struct vm_area_struct {
|
|||
within vm_mm. */
|
||||
|
||||
/* linked list of VM areas per task, sorted by address */
|
||||
struct vm_area_struct *vm_next;
|
||||
struct vm_area_struct *vm_next, *vm_prev;
|
||||
|
||||
pgprot_t vm_page_prot; /* Access permissions of this VMA. */
|
||||
unsigned long vm_flags; /* Flags, see mm.h. */
|
||||
|
|
|
|||
|
|
@ -1214,6 +1214,9 @@ static inline struct pci_dev *pci_get_bus_and_slot(unsigned int bus,
|
|||
unsigned int devfn)
|
||||
{ return NULL; }
|
||||
|
||||
static inline int pci_domain_nr(struct pci_bus *bus)
|
||||
{ return 0; }
|
||||
|
||||
#define dev_is_pci(d) (false)
|
||||
#define dev_is_pf(d) (false)
|
||||
#define dev_num_vf(d) (0)
|
||||
|
|
|
|||
|
|
@ -2303,6 +2303,8 @@
|
|||
#define PCI_DEVICE_ID_P2010 0x0079
|
||||
#define PCI_DEVICE_ID_P1020E 0x0100
|
||||
#define PCI_DEVICE_ID_P1020 0x0101
|
||||
#define PCI_DEVICE_ID_P1021E 0x0102
|
||||
#define PCI_DEVICE_ID_P1021 0x0103
|
||||
#define PCI_DEVICE_ID_P1011E 0x0108
|
||||
#define PCI_DEVICE_ID_P1011 0x0109
|
||||
#define PCI_DEVICE_ID_P1022E 0x0110
|
||||
|
|
|
|||
|
|
@ -149,7 +149,7 @@ extern void __init percpu_init_late(void);
|
|||
|
||||
#else /* CONFIG_SMP */
|
||||
|
||||
#define per_cpu_ptr(ptr, cpu) ({ (void)(cpu); (ptr); })
|
||||
#define per_cpu_ptr(ptr, cpu) ({ (void)(cpu); VERIFY_PERCPU_PTR((ptr)); })
|
||||
|
||||
/* can't distinguish from other static vars, always false */
|
||||
static inline bool is_kernel_percpu_address(unsigned long addr)
|
||||
|
|
|
|||
|
|
@ -2109,7 +2109,9 @@ extern void daemonize(const char *, ...);
|
|||
extern int allow_signal(int);
|
||||
extern int disallow_signal(int);
|
||||
|
||||
extern int do_execve(char *, char __user * __user *, char __user * __user *, struct pt_regs *);
|
||||
extern int do_execve(const char *,
|
||||
const char __user * const __user *,
|
||||
const char __user * const __user *, struct pt_regs *);
|
||||
extern long do_fork(unsigned long, unsigned long, struct pt_regs *, unsigned long, int __user *, int __user *);
|
||||
struct task_struct *fork_idle(int);
|
||||
|
||||
|
|
|
|||
|
|
@ -77,8 +77,7 @@ struct serial_struct {
|
|||
#define PORT_16654 11
|
||||
#define PORT_16850 12
|
||||
#define PORT_RSA 13 /* RSA-DV II/S card */
|
||||
#define PORT_U6_16550A 14
|
||||
#define PORT_MAX 14
|
||||
#define PORT_MAX 13
|
||||
|
||||
#define SERIAL_IO_PORT 0
|
||||
#define SERIAL_IO_HUB6 1
|
||||
|
|
|
|||
|
|
@ -44,7 +44,8 @@
|
|||
#define PORT_RM9000 16 /* PMC-Sierra RM9xxx internal UART */
|
||||
#define PORT_OCTEON 17 /* Cavium OCTEON internal UART */
|
||||
#define PORT_AR7 18 /* Texas Instruments AR7 internal UART */
|
||||
#define PORT_MAX_8250 18 /* max port ID */
|
||||
#define PORT_U6_16550A 19 /* ST-Ericsson U6xxx internal UART */
|
||||
#define PORT_MAX_8250 19 /* max port ID */
|
||||
|
||||
/*
|
||||
* ARM specific type numbers. These are not currently guaranteed
|
||||
|
|
@ -465,7 +466,7 @@ uart_handle_sysrq_char(struct uart_port *port, unsigned int ch)
|
|||
#ifdef SUPPORT_SYSRQ
|
||||
if (port->sysrq) {
|
||||
if (ch && time_before(jiffies, port->sysrq)) {
|
||||
handle_sysrq(ch, port->state->port.tty);
|
||||
handle_sysrq(ch);
|
||||
port->sysrq = 0;
|
||||
return 1;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -68,7 +68,7 @@ struct kmem_cache_order_objects {
|
|||
* Slab cache management.
|
||||
*/
|
||||
struct kmem_cache {
|
||||
struct kmem_cache_cpu *cpu_slab;
|
||||
struct kmem_cache_cpu __percpu *cpu_slab;
|
||||
/* Used for retriving partial slabs etc */
|
||||
unsigned long flags;
|
||||
int size; /* The size of an object including meta data */
|
||||
|
|
|
|||
|
|
@ -213,6 +213,9 @@ static inline void spi_unregister_driver(struct spi_driver *sdrv)
|
|||
* @dma_alignment: SPI controller constraint on DMA buffers alignment.
|
||||
* @mode_bits: flags understood by this controller driver
|
||||
* @flags: other constraints relevant to this driver
|
||||
* @bus_lock_spinlock: spinlock for SPI bus locking
|
||||
* @bus_lock_mutex: mutex for SPI bus locking
|
||||
* @bus_lock_flag: indicates that the SPI bus is locked for exclusive use
|
||||
* @setup: updates the device mode and clocking records used by a
|
||||
* device's SPI controller; protocol code may call this. This
|
||||
* must fail if an unrecognized or unsupported mode is requested.
|
||||
|
|
|
|||
|
|
@ -820,7 +820,7 @@ asmlinkage long sys_fanotify_mark(int fanotify_fd, unsigned int flags,
|
|||
u64 mask, int fd,
|
||||
const char __user *pathname);
|
||||
|
||||
int kernel_execve(const char *filename, char *const argv[], char *const envp[]);
|
||||
int kernel_execve(const char *filename, const char *const argv[], const char *const envp[]);
|
||||
|
||||
|
||||
asmlinkage long sys_perf_event_open(
|
||||
|
|
|
|||
|
|
@ -16,6 +16,7 @@
|
|||
#include <linux/errno.h>
|
||||
#include <linux/list.h>
|
||||
#include <linux/lockdep.h>
|
||||
#include <linux/kobject_ns.h>
|
||||
#include <asm/atomic.h>
|
||||
|
||||
struct kobject;
|
||||
|
|
|
|||
|
|
@ -15,9 +15,7 @@
|
|||
#define _LINUX_SYSRQ_H
|
||||
|
||||
#include <linux/errno.h>
|
||||
|
||||
struct pt_regs;
|
||||
struct tty_struct;
|
||||
#include <linux/types.h>
|
||||
|
||||
/* Possible values of bitmask for enabling sysrq functions */
|
||||
/* 0x0001 is reserved for enable everything */
|
||||
|
|
@ -31,7 +29,7 @@ struct tty_struct;
|
|||
#define SYSRQ_ENABLE_RTNICE 0x0100
|
||||
|
||||
struct sysrq_key_op {
|
||||
void (*handler)(int, struct tty_struct *);
|
||||
void (*handler)(int);
|
||||
char *help_msg;
|
||||
char *action_msg;
|
||||
int enable_mask;
|
||||
|
|
@ -44,8 +42,8 @@ struct sysrq_key_op {
|
|||
* are available -- else NULL's).
|
||||
*/
|
||||
|
||||
void handle_sysrq(int key, struct tty_struct *tty);
|
||||
void __handle_sysrq(int key, struct tty_struct *tty, int check_mask);
|
||||
void handle_sysrq(int key);
|
||||
void __handle_sysrq(int key, bool check_mask);
|
||||
int register_sysrq_key(int key, struct sysrq_key_op *op);
|
||||
int unregister_sysrq_key(int key, struct sysrq_key_op *op);
|
||||
struct sysrq_key_op *__sysrq_get_key_op(int key);
|
||||
|
|
@ -54,7 +52,11 @@ int sysrq_toggle_support(int enable_mask);
|
|||
|
||||
#else
|
||||
|
||||
static inline void handle_sysrq(int key, struct tty_struct *tty)
|
||||
static inline void handle_sysrq(int key)
|
||||
{
|
||||
}
|
||||
|
||||
static inline void __handle_sysrq(int key, bool check_mask)
|
||||
{
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -329,6 +329,13 @@ struct tty_struct {
|
|||
struct tty_port *port;
|
||||
};
|
||||
|
||||
/* Each of a tty's open files has private_data pointing to tty_file_private */
|
||||
struct tty_file_private {
|
||||
struct tty_struct *tty;
|
||||
struct file *file;
|
||||
struct list_head list;
|
||||
};
|
||||
|
||||
/* tty magic number */
|
||||
#define TTY_MAGIC 0x5401
|
||||
|
||||
|
|
@ -458,6 +465,7 @@ extern void proc_clear_tty(struct task_struct *p);
|
|||
extern struct tty_struct *get_current_tty(void);
|
||||
extern void tty_default_fops(struct file_operations *fops);
|
||||
extern struct tty_struct *alloc_tty_struct(void);
|
||||
extern void tty_add_file(struct tty_struct *tty, struct file *file);
|
||||
extern void free_tty_struct(struct tty_struct *tty);
|
||||
extern void initialize_tty_struct(struct tty_struct *tty,
|
||||
struct tty_driver *driver, int idx);
|
||||
|
|
@ -470,6 +478,7 @@ extern struct tty_struct *tty_pair_get_tty(struct tty_struct *tty);
|
|||
extern struct tty_struct *tty_pair_get_pty(struct tty_struct *tty);
|
||||
|
||||
extern struct mutex tty_mutex;
|
||||
extern spinlock_t tty_files_lock;
|
||||
|
||||
extern void tty_write_unlock(struct tty_struct *tty);
|
||||
extern int tty_write_lock(struct tty_struct *tty, int ndelay);
|
||||
|
|
|
|||
|
|
@ -37,7 +37,6 @@
|
|||
#define UINPUT_VERSION 3
|
||||
|
||||
#ifdef __KERNEL__
|
||||
#define UINPUT_MINOR 223
|
||||
#define UINPUT_NAME "uinput"
|
||||
#define UINPUT_BUFFER_SIZE 16
|
||||
#define UINPUT_NUM_REQUESTS 16
|
||||
|
|
|
|||
|
|
@ -247,6 +247,7 @@ int usb_add_config(struct usb_composite_dev *,
|
|||
* value; it should return zero on successful initialization.
|
||||
* @unbind: Reverses @bind(); called as a side effect of unregistering
|
||||
* this driver.
|
||||
* @disconnect: optional driver disconnect method
|
||||
* @suspend: Notifies when the host stops sending USB traffic,
|
||||
* after function notifications
|
||||
* @resume: Notifies configuration when the host restarts USB traffic,
|
||||
|
|
|
|||
|
|
@ -342,8 +342,7 @@ extern int usb_serial_generic_submit_read_urb(struct usb_serial_port *port,
|
|||
extern void usb_serial_generic_process_read_urb(struct urb *urb);
|
||||
extern int usb_serial_generic_prepare_write_buffer(struct usb_serial_port *port,
|
||||
void *dest, size_t size);
|
||||
extern int usb_serial_handle_sysrq_char(struct tty_struct *tty,
|
||||
struct usb_serial_port *port,
|
||||
extern int usb_serial_handle_sysrq_char(struct usb_serial_port *port,
|
||||
unsigned int ch);
|
||||
extern int usb_serial_handle_break(struct usb_serial_port *port);
|
||||
|
||||
|
|
|
|||
|
|
@ -93,8 +93,11 @@ extern void vga_set_legacy_decoding(struct pci_dev *pdev,
|
|||
* Nested calls are supported (a per-resource counter is maintained)
|
||||
*/
|
||||
|
||||
extern int vga_get(struct pci_dev *pdev, unsigned int rsrc,
|
||||
int interruptible);
|
||||
#if defined(CONFIG_VGA_ARB)
|
||||
extern int vga_get(struct pci_dev *pdev, unsigned int rsrc, int interruptible);
|
||||
#else
|
||||
static inline int vga_get(struct pci_dev *pdev, unsigned int rsrc, int interruptible) { return 0; }
|
||||
#endif
|
||||
|
||||
/**
|
||||
* vga_get_interruptible
|
||||
|
|
@ -131,7 +134,11 @@ static inline int vga_get_uninterruptible(struct pci_dev *pdev,
|
|||
* are already locked by another card. It can be called in any context
|
||||
*/
|
||||
|
||||
#if defined(CONFIG_VGA_ARB)
|
||||
extern int vga_tryget(struct pci_dev *pdev, unsigned int rsrc);
|
||||
#else
|
||||
static inline int vga_tryget(struct pci_dev *pdev, unsigned int rsrc) { return 0; }
|
||||
#endif
|
||||
|
||||
/**
|
||||
* vga_put - release lock on legacy VGA resources
|
||||
|
|
@ -146,7 +153,11 @@ extern int vga_tryget(struct pci_dev *pdev, unsigned int rsrc);
|
|||
* released if the counter reaches 0.
|
||||
*/
|
||||
|
||||
#if defined(CONFIG_VGA_ARB)
|
||||
extern void vga_put(struct pci_dev *pdev, unsigned int rsrc);
|
||||
#else
|
||||
#define vga_put(pdev, rsrc)
|
||||
#endif
|
||||
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -25,18 +25,20 @@ typedef void (*work_func_t)(struct work_struct *work);
|
|||
|
||||
enum {
|
||||
WORK_STRUCT_PENDING_BIT = 0, /* work item is pending execution */
|
||||
WORK_STRUCT_CWQ_BIT = 1, /* data points to cwq */
|
||||
WORK_STRUCT_LINKED_BIT = 2, /* next work is linked to this one */
|
||||
WORK_STRUCT_DELAYED_BIT = 1, /* work item is delayed */
|
||||
WORK_STRUCT_CWQ_BIT = 2, /* data points to cwq */
|
||||
WORK_STRUCT_LINKED_BIT = 3, /* next work is linked to this one */
|
||||
#ifdef CONFIG_DEBUG_OBJECTS_WORK
|
||||
WORK_STRUCT_STATIC_BIT = 3, /* static initializer (debugobjects) */
|
||||
WORK_STRUCT_COLOR_SHIFT = 4, /* color for workqueue flushing */
|
||||
WORK_STRUCT_STATIC_BIT = 4, /* static initializer (debugobjects) */
|
||||
WORK_STRUCT_COLOR_SHIFT = 5, /* color for workqueue flushing */
|
||||
#else
|
||||
WORK_STRUCT_COLOR_SHIFT = 3, /* color for workqueue flushing */
|
||||
WORK_STRUCT_COLOR_SHIFT = 4, /* color for workqueue flushing */
|
||||
#endif
|
||||
|
||||
WORK_STRUCT_COLOR_BITS = 4,
|
||||
|
||||
WORK_STRUCT_PENDING = 1 << WORK_STRUCT_PENDING_BIT,
|
||||
WORK_STRUCT_DELAYED = 1 << WORK_STRUCT_DELAYED_BIT,
|
||||
WORK_STRUCT_CWQ = 1 << WORK_STRUCT_CWQ_BIT,
|
||||
WORK_STRUCT_LINKED = 1 << WORK_STRUCT_LINKED_BIT,
|
||||
#ifdef CONFIG_DEBUG_OBJECTS_WORK
|
||||
|
|
@ -59,8 +61,8 @@ enum {
|
|||
|
||||
/*
|
||||
* Reserve 7 bits off of cwq pointer w/ debugobjects turned
|
||||
* off. This makes cwqs aligned to 128 bytes which isn't too
|
||||
* excessive while allowing 15 workqueue flush colors.
|
||||
* off. This makes cwqs aligned to 256 bytes and allows 15
|
||||
* workqueue flush colors.
|
||||
*/
|
||||
WORK_STRUCT_FLAG_BITS = WORK_STRUCT_COLOR_SHIFT +
|
||||
WORK_STRUCT_COLOR_BITS,
|
||||
|
|
@ -241,6 +243,8 @@ enum {
|
|||
WQ_HIGHPRI = 1 << 4, /* high priority */
|
||||
WQ_CPU_INTENSIVE = 1 << 5, /* cpu instensive workqueue */
|
||||
|
||||
WQ_DYING = 1 << 6, /* internal: workqueue is dying */
|
||||
|
||||
WQ_MAX_ACTIVE = 512, /* I like 512, better ideas? */
|
||||
WQ_MAX_UNBOUND_PER_CPU = 4, /* 4 * #cpus for unbound wq */
|
||||
WQ_DFL_ACTIVE = WQ_MAX_ACTIVE / 2,
|
||||
|
|
|
|||
Loading…
Reference in a new issue