mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-24 21:54:34 -04:00
Merge branch 'master' into for-linus
Conflicts: block/Kconfig Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
This commit is contained in:
commit
b4b7a4ef09
1756 changed files with 63811 additions and 49229 deletions
|
|
@ -121,16 +121,15 @@ struct vfsmount;
|
|||
struct super_block;
|
||||
struct pacct_struct;
|
||||
struct pid_namespace;
|
||||
extern int acct_parm[]; /* for sysctl */
|
||||
extern void acct_auto_close_mnt(struct vfsmount *m);
|
||||
extern void acct_auto_close(struct super_block *sb);
|
||||
extern void acct_init_pacct(struct pacct_struct *pacct);
|
||||
extern void acct_collect(long exitcode, int group_dead);
|
||||
extern void acct_process(void);
|
||||
extern void acct_exit_ns(struct pid_namespace *);
|
||||
#else
|
||||
#define acct_auto_close_mnt(x) do { } while (0)
|
||||
#define acct_auto_close(x) do { } while (0)
|
||||
#define acct_init_pacct(x) do { } while (0)
|
||||
#define acct_collect(x,y) do { } while (0)
|
||||
#define acct_process() do { } while (0)
|
||||
#define acct_exit_ns(ns) do { } while (0)
|
||||
|
|
|
|||
|
|
@ -37,16 +37,24 @@ extern void cgroup_post_fork(struct task_struct *p);
|
|||
extern void cgroup_exit(struct task_struct *p, int run_callbacks);
|
||||
extern int cgroupstats_build(struct cgroupstats *stats,
|
||||
struct dentry *dentry);
|
||||
extern int cgroup_load_subsys(struct cgroup_subsys *ss);
|
||||
extern void cgroup_unload_subsys(struct cgroup_subsys *ss);
|
||||
|
||||
extern const struct file_operations proc_cgroup_operations;
|
||||
|
||||
/* Define the enumeration of all cgroup subsystems */
|
||||
/* Define the enumeration of all builtin cgroup subsystems */
|
||||
#define SUBSYS(_x) _x ## _subsys_id,
|
||||
enum cgroup_subsys_id {
|
||||
#include <linux/cgroup_subsys.h>
|
||||
CGROUP_SUBSYS_COUNT
|
||||
CGROUP_BUILTIN_SUBSYS_COUNT
|
||||
};
|
||||
#undef SUBSYS
|
||||
/*
|
||||
* This define indicates the maximum number of subsystems that can be loaded
|
||||
* at once. We limit to this many since cgroupfs_root has subsys_bits to keep
|
||||
* track of all of them.
|
||||
*/
|
||||
#define CGROUP_SUBSYS_COUNT (BITS_PER_BYTE*sizeof(unsigned long))
|
||||
|
||||
/* Per-subsystem/per-cgroup state maintained by the system. */
|
||||
struct cgroup_subsys_state {
|
||||
|
|
@ -76,6 +84,12 @@ enum {
|
|||
CSS_REMOVED, /* This CSS is dead */
|
||||
};
|
||||
|
||||
/* Caller must verify that the css is not for root cgroup */
|
||||
static inline void __css_get(struct cgroup_subsys_state *css, int count)
|
||||
{
|
||||
atomic_add(count, &css->refcnt);
|
||||
}
|
||||
|
||||
/*
|
||||
* Call css_get() to hold a reference on the css; it can be used
|
||||
* for a reference obtained via:
|
||||
|
|
@ -87,7 +101,7 @@ static inline void css_get(struct cgroup_subsys_state *css)
|
|||
{
|
||||
/* We don't need to reference count the root state */
|
||||
if (!test_bit(CSS_ROOT, &css->flags))
|
||||
atomic_inc(&css->refcnt);
|
||||
__css_get(css, 1);
|
||||
}
|
||||
|
||||
static inline bool css_is_removed(struct cgroup_subsys_state *css)
|
||||
|
|
@ -118,11 +132,11 @@ static inline bool css_tryget(struct cgroup_subsys_state *css)
|
|||
* css_get() or css_tryget()
|
||||
*/
|
||||
|
||||
extern void __css_put(struct cgroup_subsys_state *css);
|
||||
extern void __css_put(struct cgroup_subsys_state *css, int count);
|
||||
static inline void css_put(struct cgroup_subsys_state *css)
|
||||
{
|
||||
if (!test_bit(CSS_ROOT, &css->flags))
|
||||
__css_put(css);
|
||||
__css_put(css, 1);
|
||||
}
|
||||
|
||||
/* bits in struct cgroup flags field */
|
||||
|
|
@ -221,6 +235,10 @@ struct cgroup {
|
|||
|
||||
/* For RCU-protected deletion */
|
||||
struct rcu_head rcu_head;
|
||||
|
||||
/* List of events which userspace want to recieve */
|
||||
struct list_head event_list;
|
||||
spinlock_t event_list_lock;
|
||||
};
|
||||
|
||||
/*
|
||||
|
|
@ -258,7 +276,8 @@ struct css_set {
|
|||
/*
|
||||
* Set of subsystem states, one for each subsystem. This array
|
||||
* is immutable after creation apart from the init_css_set
|
||||
* during subsystem registration (at boot time).
|
||||
* during subsystem registration (at boot time) and modular subsystem
|
||||
* loading/unloading.
|
||||
*/
|
||||
struct cgroup_subsys_state *subsys[CGROUP_SUBSYS_COUNT];
|
||||
|
||||
|
|
@ -363,6 +382,23 @@ struct cftype {
|
|||
int (*trigger)(struct cgroup *cgrp, unsigned int event);
|
||||
|
||||
int (*release)(struct inode *inode, struct file *file);
|
||||
|
||||
/*
|
||||
* register_event() callback will be used to add new userspace
|
||||
* waiter for changes related to the cftype. Implement it if
|
||||
* you want to provide this functionality. Use eventfd_signal()
|
||||
* on eventfd to send notification to userspace.
|
||||
*/
|
||||
int (*register_event)(struct cgroup *cgrp, struct cftype *cft,
|
||||
struct eventfd_ctx *eventfd, const char *args);
|
||||
/*
|
||||
* unregister_event() callback will be called when userspace
|
||||
* closes the eventfd or on cgroup removing.
|
||||
* This callback must be implemented, if you want provide
|
||||
* notification functionality.
|
||||
*/
|
||||
int (*unregister_event)(struct cgroup *cgrp, struct cftype *cft,
|
||||
struct eventfd_ctx *eventfd);
|
||||
};
|
||||
|
||||
struct cgroup_scanner {
|
||||
|
|
@ -428,6 +464,8 @@ struct cgroup_subsys {
|
|||
void (*destroy)(struct cgroup_subsys *ss, struct cgroup *cgrp);
|
||||
int (*can_attach)(struct cgroup_subsys *ss, struct cgroup *cgrp,
|
||||
struct task_struct *tsk, bool threadgroup);
|
||||
void (*cancel_attach)(struct cgroup_subsys *ss, struct cgroup *cgrp,
|
||||
struct task_struct *tsk, bool threadgroup);
|
||||
void (*attach)(struct cgroup_subsys *ss, struct cgroup *cgrp,
|
||||
struct cgroup *old_cgrp, struct task_struct *tsk,
|
||||
bool threadgroup);
|
||||
|
|
@ -472,6 +510,9 @@ struct cgroup_subsys {
|
|||
/* used when use_id == true */
|
||||
struct idr idr;
|
||||
spinlock_t id_lock;
|
||||
|
||||
/* should be defined only by modular subsystems */
|
||||
struct module *module;
|
||||
};
|
||||
|
||||
#define SUBSYS(_x) extern struct cgroup_subsys _x ## _subsys;
|
||||
|
|
|
|||
|
|
@ -23,6 +23,7 @@
|
|||
typedef __compat_uid32_t compat_uid_t;
|
||||
typedef __compat_gid32_t compat_gid_t;
|
||||
|
||||
struct compat_sel_arg_struct;
|
||||
struct rusage;
|
||||
|
||||
struct compat_itimerspec {
|
||||
|
|
@ -249,6 +250,8 @@ asmlinkage long compat_sys_select(int n, compat_ulong_t __user *inp,
|
|||
compat_ulong_t __user *outp, compat_ulong_t __user *exp,
|
||||
struct compat_timeval __user *tvp);
|
||||
|
||||
asmlinkage long compat_sys_old_select(struct compat_sel_arg_struct __user *arg);
|
||||
|
||||
asmlinkage long compat_sys_wait4(compat_pid_t pid,
|
||||
compat_uint_t __user *stat_addr, int options,
|
||||
struct compat_rusage __user *ru);
|
||||
|
|
|
|||
|
|
@ -16,6 +16,8 @@ static inline int dump_write(struct file *file, const void *addr, int nr)
|
|||
|
||||
static inline int dump_seek(struct file *file, loff_t off)
|
||||
{
|
||||
int ret = 1;
|
||||
|
||||
if (file->f_op->llseek && file->f_op->llseek != no_llseek) {
|
||||
if (file->f_op->llseek(file, off, SEEK_CUR) < 0)
|
||||
return 0;
|
||||
|
|
@ -29,13 +31,15 @@ static inline int dump_seek(struct file *file, loff_t off)
|
|||
|
||||
if (n > PAGE_SIZE)
|
||||
n = PAGE_SIZE;
|
||||
if (!dump_write(file, buf, n))
|
||||
return 0;
|
||||
if (!dump_write(file, buf, n)) {
|
||||
ret = 0;
|
||||
break;
|
||||
}
|
||||
off -= n;
|
||||
}
|
||||
free_page((unsigned long)buf);
|
||||
}
|
||||
return 1;
|
||||
return ret;
|
||||
}
|
||||
|
||||
#endif /* _LINUX_COREDUMP_H */
|
||||
|
|
|
|||
|
|
@ -280,7 +280,7 @@ static inline void put_cred(const struct cred *_cred)
|
|||
* task or by holding tasklist_lock to prevent it from being unlinked.
|
||||
*/
|
||||
#define __task_cred(task) \
|
||||
((const struct cred *)(rcu_dereference_check((task)->real_cred, rcu_read_lock_held() || lockdep_is_held(&tasklist_lock))))
|
||||
((const struct cred *)(rcu_dereference_check((task)->real_cred, rcu_read_lock_held() || lockdep_tasklist_lock_is_held())))
|
||||
|
||||
/**
|
||||
* get_task_cred - Get another task's objective credentials
|
||||
|
|
|
|||
|
|
@ -14,11 +14,21 @@
|
|||
|
||||
/* Code active when included from pre-boot environment: */
|
||||
|
||||
/*
|
||||
* Some architectures want to ensure there is no local data in their
|
||||
* pre-boot environment, so that data can arbitarily relocated (via
|
||||
* GOT references). This is achieved by defining STATIC_RW_DATA to
|
||||
* be null.
|
||||
*/
|
||||
#ifndef STATIC_RW_DATA
|
||||
#define STATIC_RW_DATA static
|
||||
#endif
|
||||
|
||||
/* A trivial malloc implementation, adapted from
|
||||
* malloc by Hannu Savolainen 1993 and Matthias Urlichs 1994
|
||||
*/
|
||||
static unsigned long malloc_ptr;
|
||||
static int malloc_count;
|
||||
STATIC_RW_DATA unsigned long malloc_ptr;
|
||||
STATIC_RW_DATA int malloc_count;
|
||||
|
||||
static void *malloc(int size)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -106,7 +106,7 @@ extern int bus_unregister_notifier(struct bus_type *bus,
|
|||
|
||||
/* All 4 notifers below get called with the target struct device *
|
||||
* as an argument. Note that those functions are likely to be called
|
||||
* with the device semaphore held in the core, so be careful.
|
||||
* with the device lock held in the core, so be careful.
|
||||
*/
|
||||
#define BUS_NOTIFY_ADD_DEVICE 0x00000001 /* device added */
|
||||
#define BUS_NOTIFY_DEL_DEVICE 0x00000002 /* device removed */
|
||||
|
|
@ -251,8 +251,10 @@ extern struct device *class_find_device(struct class *class,
|
|||
|
||||
struct class_attribute {
|
||||
struct attribute attr;
|
||||
ssize_t (*show)(struct class *class, char *buf);
|
||||
ssize_t (*store)(struct class *class, const char *buf, size_t count);
|
||||
ssize_t (*show)(struct class *class, struct class_attribute *attr,
|
||||
char *buf);
|
||||
ssize_t (*store)(struct class *class, struct class_attribute *attr,
|
||||
const char *buf, size_t count);
|
||||
};
|
||||
|
||||
#define CLASS_ATTR(_name, _mode, _show, _store) \
|
||||
|
|
@ -263,6 +265,23 @@ extern int __must_check class_create_file(struct class *class,
|
|||
extern void class_remove_file(struct class *class,
|
||||
const struct class_attribute *attr);
|
||||
|
||||
/* Simple class attribute that is just a static string */
|
||||
|
||||
struct class_attribute_string {
|
||||
struct class_attribute attr;
|
||||
char *str;
|
||||
};
|
||||
|
||||
/* Currently read-only only */
|
||||
#define _CLASS_ATTR_STRING(_name, _mode, _str) \
|
||||
{ __ATTR(_name, _mode, show_class_attr_string, NULL), _str }
|
||||
#define CLASS_ATTR_STRING(_name, _mode, _str) \
|
||||
struct class_attribute_string class_attr_##_name = \
|
||||
_CLASS_ATTR_STRING(_name, _mode, _str)
|
||||
|
||||
extern ssize_t show_class_attr_string(struct class *class, struct class_attribute *attr,
|
||||
char *buf);
|
||||
|
||||
struct class_interface {
|
||||
struct list_head node;
|
||||
struct class *class;
|
||||
|
|
@ -489,6 +508,21 @@ static inline bool device_async_suspend_enabled(struct device *dev)
|
|||
return !!dev->power.async_suspend;
|
||||
}
|
||||
|
||||
static inline void device_lock(struct device *dev)
|
||||
{
|
||||
down(&dev->sem);
|
||||
}
|
||||
|
||||
static inline int device_trylock(struct device *dev)
|
||||
{
|
||||
return down_trylock(&dev->sem);
|
||||
}
|
||||
|
||||
static inline void device_unlock(struct device *dev)
|
||||
{
|
||||
up(&dev->sem);
|
||||
}
|
||||
|
||||
void driver_init(void);
|
||||
|
||||
/*
|
||||
|
|
|
|||
|
|
@ -23,7 +23,7 @@
|
|||
#define DM9000_PLATF_NO_EEPROM (0x0010)
|
||||
#define DM9000_PLATF_SIMPLE_PHY (0x0020) /* Use NSR to find LinkStatus */
|
||||
|
||||
/* platfrom data for platfrom device structure's platfrom_data field */
|
||||
/* platform data for platform device structure's platform_data field */
|
||||
|
||||
struct dm9000_plat_data {
|
||||
unsigned int flags;
|
||||
|
|
|
|||
|
|
@ -127,6 +127,14 @@ static inline u64 dma_get_mask(struct device *dev)
|
|||
return DMA_BIT_MASK(32);
|
||||
}
|
||||
|
||||
static inline int dma_set_coherent_mask(struct device *dev, u64 mask)
|
||||
{
|
||||
if (!dma_supported(dev, mask))
|
||||
return -EIO;
|
||||
dev->coherent_dma_mask = mask;
|
||||
return 0;
|
||||
}
|
||||
|
||||
extern u64 dma_get_required_mask(struct device *dev);
|
||||
|
||||
static inline unsigned int dma_get_max_seg_size(struct device *dev)
|
||||
|
|
@ -232,4 +240,20 @@ struct dma_attrs;
|
|||
|
||||
#endif /* CONFIG_HAVE_DMA_ATTRS */
|
||||
|
||||
#ifdef CONFIG_NEED_DMA_MAP_STATE
|
||||
#define DEFINE_DMA_UNMAP_ADDR(ADDR_NAME) dma_addr_t ADDR_NAME
|
||||
#define DEFINE_DMA_UNMAP_LEN(LEN_NAME) __u32 LEN_NAME
|
||||
#define dma_unmap_addr(PTR, ADDR_NAME) ((PTR)->ADDR_NAME)
|
||||
#define dma_unmap_addr_set(PTR, ADDR_NAME, VAL) (((PTR)->ADDR_NAME) = (VAL))
|
||||
#define dma_unmap_len(PTR, LEN_NAME) ((PTR)->LEN_NAME)
|
||||
#define dma_unmap_len_set(PTR, LEN_NAME, VAL) (((PTR)->LEN_NAME) = (VAL))
|
||||
#else
|
||||
#define DEFINE_DMA_UNMAP_ADDR(ADDR_NAME)
|
||||
#define DEFINE_DMA_UNMAP_LEN(LEN_NAME)
|
||||
#define dma_unmap_addr(PTR, ADDR_NAME) (0)
|
||||
#define dma_unmap_addr_set(PTR, ADDR_NAME, VAL) do { } while (0)
|
||||
#define dma_unmap_len(PTR, LEN_NAME) (0)
|
||||
#define dma_unmap_len_set(PTR, LEN_NAME, VAL) do { } while (0)
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -61,6 +61,13 @@ struct ethtool_drvinfo {
|
|||
/* For PCI devices, use pci_name(pci_dev). */
|
||||
char reserved1[32];
|
||||
char reserved2[12];
|
||||
/*
|
||||
* Some struct members below are filled in
|
||||
* using ops->get_sset_count(). Obtaining
|
||||
* this info from ethtool_drvinfo is now
|
||||
* deprecated; Use ETHTOOL_GSSET_INFO
|
||||
* instead.
|
||||
*/
|
||||
__u32 n_priv_flags; /* number of flags valid in ETHTOOL_GPFLAGS */
|
||||
__u32 n_stats; /* number of u64's from ETHTOOL_GSTATS */
|
||||
__u32 testinfo_len;
|
||||
|
|
@ -253,6 +260,17 @@ struct ethtool_gstrings {
|
|||
__u8 data[0];
|
||||
};
|
||||
|
||||
struct ethtool_sset_info {
|
||||
__u32 cmd; /* ETHTOOL_GSSET_INFO */
|
||||
__u32 reserved;
|
||||
__u64 sset_mask; /* input: each bit selects an sset to query */
|
||||
/* output: each bit a returned sset */
|
||||
__u32 data[0]; /* ETH_SS_xxx count, in order, based on bits
|
||||
in sset_mask. One bit implies one
|
||||
__u32, two bits implies two
|
||||
__u32's, etc. */
|
||||
};
|
||||
|
||||
enum ethtool_test_flags {
|
||||
ETH_TEST_FL_OFFLINE = (1 << 0), /* online / offline */
|
||||
ETH_TEST_FL_FAILED = (1 << 1), /* test passed / failed */
|
||||
|
|
@ -606,9 +624,9 @@ struct ethtool_ops {
|
|||
#define ETHTOOL_SRXCLSRLINS 0x00000032 /* Insert RX classification rule */
|
||||
#define ETHTOOL_FLASHDEV 0x00000033 /* Flash firmware to device */
|
||||
#define ETHTOOL_RESET 0x00000034 /* Reset hardware */
|
||||
|
||||
#define ETHTOOL_SRXNTUPLE 0x00000035 /* Add an n-tuple filter to device */
|
||||
#define ETHTOOL_GRXNTUPLE 0x00000036 /* Get n-tuple filters from device */
|
||||
#define ETHTOOL_SRXNTUPLE 0x00000035 /* Add an n-tuple filter to device */
|
||||
#define ETHTOOL_GRXNTUPLE 0x00000036 /* Get n-tuple filters from device */
|
||||
#define ETHTOOL_GSSET_INFO 0x00000037 /* Get string set info */
|
||||
|
||||
/* compatibility with older code */
|
||||
#define SPARC_ETH_GSET ETHTOOL_GSET
|
||||
|
|
|
|||
|
|
@ -168,14 +168,14 @@ enum hil_command {
|
|||
HIL_CMD_PR6 = 0x45, /* Prompt6 */
|
||||
HIL_CMD_PR7 = 0x46, /* Prompt7 */
|
||||
HIL_CMD_PRM = 0x47, /* Prompt (General Purpose) */
|
||||
HIL_CMD_AK1 = 0x48, /* Acknowlege1 */
|
||||
HIL_CMD_AK2 = 0x49, /* Acknowlege2 */
|
||||
HIL_CMD_AK3 = 0x4a, /* Acknowlege3 */
|
||||
HIL_CMD_AK4 = 0x4b, /* Acknowlege4 */
|
||||
HIL_CMD_AK5 = 0x4c, /* Acknowlege5 */
|
||||
HIL_CMD_AK6 = 0x4d, /* Acknowlege6 */
|
||||
HIL_CMD_AK7 = 0x4e, /* Acknowlege7 */
|
||||
HIL_CMD_ACK = 0x4f, /* Acknowlege (General Purpose) */
|
||||
HIL_CMD_AK1 = 0x48, /* Acknowledge1 */
|
||||
HIL_CMD_AK2 = 0x49, /* Acknowledge2 */
|
||||
HIL_CMD_AK3 = 0x4a, /* Acknowledge3 */
|
||||
HIL_CMD_AK4 = 0x4b, /* Acknowledge4 */
|
||||
HIL_CMD_AK5 = 0x4c, /* Acknowledge5 */
|
||||
HIL_CMD_AK6 = 0x4d, /* Acknowledge6 */
|
||||
HIL_CMD_AK7 = 0x4e, /* Acknowledge7 */
|
||||
HIL_CMD_ACK = 0x4f, /* Acknowledge (General Purpose) */
|
||||
|
||||
/* 0x50 to 0x78 reserved for future use */
|
||||
/* 0x80 to 0xEF device-specific commands */
|
||||
|
|
|
|||
|
|
@ -66,14 +66,14 @@ register_wide_hw_breakpoint_cpu(struct perf_event_attr *attr,
|
|||
perf_overflow_handler_t triggered,
|
||||
int cpu);
|
||||
|
||||
extern struct perf_event **
|
||||
extern struct perf_event * __percpu *
|
||||
register_wide_hw_breakpoint(struct perf_event_attr *attr,
|
||||
perf_overflow_handler_t triggered);
|
||||
|
||||
extern int register_perf_hw_breakpoint(struct perf_event *bp);
|
||||
extern int __register_perf_hw_breakpoint(struct perf_event *bp);
|
||||
extern void unregister_hw_breakpoint(struct perf_event *bp);
|
||||
extern void unregister_wide_hw_breakpoint(struct perf_event **cpu_events);
|
||||
extern void unregister_wide_hw_breakpoint(struct perf_event * __percpu *cpu_events);
|
||||
|
||||
extern int dbg_reserve_bp_slot(struct perf_event *bp);
|
||||
extern int dbg_release_bp_slot(struct perf_event *bp);
|
||||
|
|
@ -100,7 +100,7 @@ static inline struct perf_event *
|
|||
register_wide_hw_breakpoint_cpu(struct perf_event_attr *attr,
|
||||
perf_overflow_handler_t triggered,
|
||||
int cpu) { return NULL; }
|
||||
static inline struct perf_event **
|
||||
static inline struct perf_event * __percpu *
|
||||
register_wide_hw_breakpoint(struct perf_event_attr *attr,
|
||||
perf_overflow_handler_t triggered) { return NULL; }
|
||||
static inline int
|
||||
|
|
@ -109,7 +109,7 @@ static inline int
|
|||
__register_perf_hw_breakpoint(struct perf_event *bp) { return -ENOSYS; }
|
||||
static inline void unregister_hw_breakpoint(struct perf_event *bp) { }
|
||||
static inline void
|
||||
unregister_wide_hw_breakpoint(struct perf_event **cpu_events) { }
|
||||
unregister_wide_hw_breakpoint(struct perf_event * __percpu *cpu_events) { }
|
||||
static inline int
|
||||
reserve_bp_slot(struct perf_event *bp) {return -ENOSYS; }
|
||||
static inline void release_bp_slot(struct perf_event *bp) { }
|
||||
|
|
|
|||
|
|
@ -36,6 +36,8 @@ struct i2c_algo_bit_data {
|
|||
void (*setscl) (void *data, int state);
|
||||
int (*getsda) (void *data);
|
||||
int (*getscl) (void *data);
|
||||
int (*pre_xfer) (struct i2c_adapter *);
|
||||
void (*post_xfer) (struct i2c_adapter *);
|
||||
|
||||
/* local settings */
|
||||
int udelay; /* half clock cycle time in us,
|
||||
|
|
|
|||
43
include/linux/i2c-xiic.h
Normal file
43
include/linux/i2c-xiic.h
Normal file
|
|
@ -0,0 +1,43 @@
|
|||
/*
|
||||
* i2c-xiic.h
|
||||
* Copyright (c) 2009 Intel Corporation
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
|
||||
/* Supports:
|
||||
* Xilinx IIC
|
||||
*/
|
||||
|
||||
#ifndef _LINUX_I2C_XIIC_H
|
||||
#define _LINUX_I2C_XIIC_H
|
||||
|
||||
/**
|
||||
* struct xiic_i2c_platform_data - Platform data of the Xilinx I2C driver
|
||||
* @num_devices: Number of devices that shall be added when the driver
|
||||
* is probed.
|
||||
* @devices: The actuall devices to add.
|
||||
*
|
||||
* This purpose of this platform data struct is to be able to provide a number
|
||||
* of devices that should be added to the I2C bus. The reason is that sometimes
|
||||
* the I2C board info is not enough, a new PCI board can for instance be
|
||||
* plugged into a standard PC, and the bus number might be unknown at
|
||||
* early init time.
|
||||
*/
|
||||
struct xiic_i2c_platform_data {
|
||||
u8 num_devices;
|
||||
struct i2c_board_info const *devices;
|
||||
};
|
||||
|
||||
#endif /* _LINUX_I2C_XIIC_H */
|
||||
|
|
@ -32,14 +32,6 @@ extern struct fs_struct init_fs;
|
|||
}
|
||||
|
||||
extern struct nsproxy init_nsproxy;
|
||||
#define INIT_NSPROXY(nsproxy) { \
|
||||
.pid_ns = &init_pid_ns, \
|
||||
.count = ATOMIC_INIT(1), \
|
||||
.uts_ns = &init_uts_ns, \
|
||||
.mnt_ns = NULL, \
|
||||
INIT_NET_NS(net_ns) \
|
||||
INIT_IPC_NS(ipc_ns) \
|
||||
}
|
||||
|
||||
#define INIT_SIGHAND(sighand) { \
|
||||
.count = ATOMIC_INIT(1), \
|
||||
|
|
|
|||
|
|
@ -58,10 +58,10 @@ struct input_absinfo {
|
|||
|
||||
#define EVIOCGVERSION _IOR('E', 0x01, int) /* get driver version */
|
||||
#define EVIOCGID _IOR('E', 0x02, struct input_id) /* get device ID */
|
||||
#define EVIOCGREP _IOR('E', 0x03, int[2]) /* get repeat settings */
|
||||
#define EVIOCSREP _IOW('E', 0x03, int[2]) /* set repeat settings */
|
||||
#define EVIOCGKEYCODE _IOR('E', 0x04, int[2]) /* get keycode */
|
||||
#define EVIOCSKEYCODE _IOW('E', 0x04, int[2]) /* set keycode */
|
||||
#define EVIOCGREP _IOR('E', 0x03, unsigned int[2]) /* get repeat settings */
|
||||
#define EVIOCSREP _IOW('E', 0x03, unsigned int[2]) /* set repeat settings */
|
||||
#define EVIOCGKEYCODE _IOR('E', 0x04, unsigned int[2]) /* get keycode */
|
||||
#define EVIOCSKEYCODE _IOW('E', 0x04, unsigned int[2]) /* set keycode */
|
||||
|
||||
#define EVIOCGNAME(len) _IOC(_IOC_READ, 'E', 0x06, len) /* get device name */
|
||||
#define EVIOCGPHYS(len) _IOC(_IOC_READ, 'E', 0x07, len) /* get physical location */
|
||||
|
|
@ -1142,8 +1142,10 @@ struct input_dev {
|
|||
unsigned int keycodemax;
|
||||
unsigned int keycodesize;
|
||||
void *keycode;
|
||||
int (*setkeycode)(struct input_dev *dev, int scancode, int keycode);
|
||||
int (*getkeycode)(struct input_dev *dev, int scancode, int *keycode);
|
||||
int (*setkeycode)(struct input_dev *dev,
|
||||
unsigned int scancode, unsigned int keycode);
|
||||
int (*getkeycode)(struct input_dev *dev,
|
||||
unsigned int scancode, unsigned int *keycode);
|
||||
|
||||
struct ff_device *ff;
|
||||
|
||||
|
|
@ -1415,8 +1417,10 @@ static inline void input_set_abs_params(struct input_dev *dev, int axis, int min
|
|||
dev->absbit[BIT_WORD(axis)] |= BIT_MASK(axis);
|
||||
}
|
||||
|
||||
int input_get_keycode(struct input_dev *dev, int scancode, int *keycode);
|
||||
int input_set_keycode(struct input_dev *dev, int scancode, int keycode);
|
||||
int input_get_keycode(struct input_dev *dev,
|
||||
unsigned int scancode, unsigned int *keycode);
|
||||
int input_set_keycode(struct input_dev *dev,
|
||||
unsigned int scancode, unsigned int keycode);
|
||||
|
||||
extern struct class input_class;
|
||||
|
||||
|
|
|
|||
|
|
@ -42,7 +42,7 @@ struct io_context {
|
|||
unsigned short ioprio;
|
||||
unsigned short ioprio_changed;
|
||||
|
||||
#ifdef CONFIG_BLK_CGROUP
|
||||
#if defined(CONFIG_BLK_CGROUP) || defined(CONFIG_BLK_CGROUP_MODULE)
|
||||
unsigned short cgroup_changed;
|
||||
#endif
|
||||
|
||||
|
|
|
|||
|
|
@ -34,22 +34,24 @@ struct resource_list {
|
|||
*/
|
||||
#define IORESOURCE_BITS 0x000000ff /* Bus-specific bits */
|
||||
|
||||
#define IORESOURCE_TYPE_BITS 0x00000f00 /* Resource type */
|
||||
#define IORESOURCE_TYPE_BITS 0x00001f00 /* Resource type */
|
||||
#define IORESOURCE_IO 0x00000100
|
||||
#define IORESOURCE_MEM 0x00000200
|
||||
#define IORESOURCE_IRQ 0x00000400
|
||||
#define IORESOURCE_DMA 0x00000800
|
||||
#define IORESOURCE_BUS 0x00001000
|
||||
|
||||
#define IORESOURCE_PREFETCH 0x00001000 /* No side effects */
|
||||
#define IORESOURCE_READONLY 0x00002000
|
||||
#define IORESOURCE_CACHEABLE 0x00004000
|
||||
#define IORESOURCE_RANGELENGTH 0x00008000
|
||||
#define IORESOURCE_SHADOWABLE 0x00010000
|
||||
#define IORESOURCE_PREFETCH 0x00002000 /* No side effects */
|
||||
#define IORESOURCE_READONLY 0x00004000
|
||||
#define IORESOURCE_CACHEABLE 0x00008000
|
||||
#define IORESOURCE_RANGELENGTH 0x00010000
|
||||
#define IORESOURCE_SHADOWABLE 0x00020000
|
||||
|
||||
#define IORESOURCE_SIZEALIGN 0x00020000 /* size indicates alignment */
|
||||
#define IORESOURCE_STARTALIGN 0x00040000 /* start field is alignment */
|
||||
#define IORESOURCE_SIZEALIGN 0x00040000 /* size indicates alignment */
|
||||
#define IORESOURCE_STARTALIGN 0x00080000 /* start field is alignment */
|
||||
|
||||
#define IORESOURCE_MEM_64 0x00100000
|
||||
#define IORESOURCE_WINDOW 0x00200000 /* forwarded by bridge */
|
||||
|
||||
#define IORESOURCE_EXCLUSIVE 0x08000000 /* Userland may not map this resource */
|
||||
#define IORESOURCE_DISABLED 0x10000000
|
||||
|
|
|
|||
|
|
@ -62,11 +62,6 @@ extern struct ipc_namespace init_ipc_ns;
|
|||
extern atomic_t nr_ipc_ns;
|
||||
|
||||
extern spinlock_t mq_lock;
|
||||
#if defined(CONFIG_POSIX_MQUEUE) || defined(CONFIG_SYSVIPC)
|
||||
#define INIT_IPC_NS(ns) .ns = &init_ipc_ns,
|
||||
#else
|
||||
#define INIT_IPC_NS(ns)
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_SYSVIPC
|
||||
extern int register_ipcns_notifier(struct ipc_namespace *);
|
||||
|
|
|
|||
|
|
@ -39,7 +39,6 @@
|
|||
#include <linux/module.h>
|
||||
#include <linux/device.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/ipmi_smi.h>
|
||||
|
||||
/* This files describes the interface for IPMI system management interface
|
||||
drivers to bind into the IPMI message handler. */
|
||||
|
|
|
|||
|
|
@ -27,6 +27,7 @@
|
|||
#define KMOD_PATH_LEN 256
|
||||
|
||||
#ifdef CONFIG_MODULES
|
||||
extern char modprobe_path[]; /* for sysctl */
|
||||
/* modprobe exit status on success, -ve on error. Return value
|
||||
* usually useless though. */
|
||||
extern int __request_module(bool wait, const char *name, ...) \
|
||||
|
|
|
|||
|
|
@ -106,7 +106,7 @@ extern char *kobject_get_path(struct kobject *kobj, gfp_t flag);
|
|||
|
||||
struct kobj_type {
|
||||
void (*release)(struct kobject *kobj);
|
||||
struct sysfs_ops *sysfs_ops;
|
||||
const struct sysfs_ops *sysfs_ops;
|
||||
struct attribute **default_attrs;
|
||||
};
|
||||
|
||||
|
|
@ -118,9 +118,9 @@ struct kobj_uevent_env {
|
|||
};
|
||||
|
||||
struct kset_uevent_ops {
|
||||
int (*filter)(struct kset *kset, struct kobject *kobj);
|
||||
const char *(*name)(struct kset *kset, struct kobject *kobj);
|
||||
int (*uevent)(struct kset *kset, struct kobject *kobj,
|
||||
int (* const filter)(struct kset *kset, struct kobject *kobj);
|
||||
const char *(* const name)(struct kset *kset, struct kobject *kobj);
|
||||
int (* const uevent)(struct kset *kset, struct kobject *kobj,
|
||||
struct kobj_uevent_env *env);
|
||||
};
|
||||
|
||||
|
|
@ -132,7 +132,7 @@ struct kobj_attribute {
|
|||
const char *buf, size_t count);
|
||||
};
|
||||
|
||||
extern struct sysfs_ops kobj_sysfs_ops;
|
||||
extern const struct sysfs_ops kobj_sysfs_ops;
|
||||
|
||||
/**
|
||||
* struct kset - a set of kobjects of a specific type, belonging to a specific subsystem.
|
||||
|
|
@ -155,14 +155,14 @@ struct kset {
|
|||
struct list_head list;
|
||||
spinlock_t list_lock;
|
||||
struct kobject kobj;
|
||||
struct kset_uevent_ops *uevent_ops;
|
||||
const struct kset_uevent_ops *uevent_ops;
|
||||
};
|
||||
|
||||
extern void kset_init(struct kset *kset);
|
||||
extern int __must_check kset_register(struct kset *kset);
|
||||
extern void kset_unregister(struct kset *kset);
|
||||
extern struct kset * __must_check kset_create_and_add(const char *name,
|
||||
struct kset_uevent_ops *u,
|
||||
const struct kset_uevent_ops *u,
|
||||
struct kobject *parent_kobj);
|
||||
|
||||
static inline struct kset *to_kset(struct kobject *kobj)
|
||||
|
|
|
|||
|
|
@ -12,6 +12,10 @@
|
|||
struct task_struct;
|
||||
struct lockdep_map;
|
||||
|
||||
/* for sysctl */
|
||||
extern int prove_locking;
|
||||
extern int lock_stat;
|
||||
|
||||
#ifdef CONFIG_LOCKDEP
|
||||
|
||||
#include <linux/linkage.h>
|
||||
|
|
|
|||
|
|
@ -64,7 +64,7 @@ For crash recovery after replication node failure,
|
|||
usually the condition is softened to regions that _may_ have been target of
|
||||
in-flight WRITE IO, e.g. by only lazily clearing the on-disk write-intent
|
||||
bitmap, trading frequency of meta data transactions against amount of
|
||||
(possibly unneccessary) resync traffic.
|
||||
(possibly unnecessary) resync traffic.
|
||||
|
||||
If we set a hard limit on the area that may be "hot" at any given time, we
|
||||
limit the amount of resync traffic needed for crash recovery.
|
||||
|
|
|
|||
|
|
@ -124,7 +124,6 @@ static inline bool mem_cgroup_disabled(void)
|
|||
return false;
|
||||
}
|
||||
|
||||
extern bool mem_cgroup_oom_called(struct task_struct *task);
|
||||
void mem_cgroup_update_file_mapped(struct page *page, int val);
|
||||
unsigned long mem_cgroup_soft_limit_reclaim(struct zone *zone, int order,
|
||||
gfp_t gfp_mask, int nid,
|
||||
|
|
@ -258,11 +257,6 @@ static inline bool mem_cgroup_disabled(void)
|
|||
return true;
|
||||
}
|
||||
|
||||
static inline bool mem_cgroup_oom_called(struct task_struct *task)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
static inline int
|
||||
mem_cgroup_inactive_anon_is_low(struct mem_cgroup *memcg)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -971,7 +971,13 @@ static inline void setmax_mm_hiwater_rss(unsigned long *maxrss,
|
|||
*maxrss = hiwater_rss;
|
||||
}
|
||||
|
||||
#if defined(SPLIT_RSS_COUNTING)
|
||||
void sync_mm_rss(struct task_struct *task, struct mm_struct *mm);
|
||||
#else
|
||||
static inline void sync_mm_rss(struct task_struct *task, struct mm_struct *mm)
|
||||
{
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
* A callback you can register to apply pressure to ageable caches.
|
||||
|
|
@ -1459,5 +1465,7 @@ extern void shake_page(struct page *p, int access);
|
|||
extern atomic_long_t mce_bad_pages;
|
||||
extern int soft_offline_page(struct page *page, int flags);
|
||||
|
||||
extern void dump_page(struct page *page);
|
||||
|
||||
#endif /* __KERNEL__ */
|
||||
#endif /* _LINUX_MM_H */
|
||||
|
|
|
|||
|
|
@ -203,7 +203,7 @@ enum {
|
|||
NR_MM_COUNTERS
|
||||
};
|
||||
|
||||
#if USE_SPLIT_PTLOCKS
|
||||
#if USE_SPLIT_PTLOCKS && defined(CONFIG_MMU)
|
||||
#define SPLIT_RSS_COUNTING
|
||||
struct mm_rss_stat {
|
||||
atomic_long_t count[NR_MM_COUNTERS];
|
||||
|
|
|
|||
|
|
@ -342,7 +342,7 @@ struct zone {
|
|||
* prev_priority holds the scanning priority for this zone. It is
|
||||
* defined as the scanning priority at which we achieved our reclaim
|
||||
* target at the previous try_to_free_pages() or balance_pgdat()
|
||||
* invokation.
|
||||
* invocation.
|
||||
*
|
||||
* We use prev_priority as a measure of how much stress page reclaim is
|
||||
* under - it drives the swappiness decision: whether to unmap mapped
|
||||
|
|
|
|||
|
|
@ -175,6 +175,7 @@ struct notifier_block;
|
|||
|
||||
#ifdef CONFIG_MODULES
|
||||
|
||||
extern int modules_disabled; /* for sysctl */
|
||||
/* Get/put a kernel symbol (calls must be symmetric) */
|
||||
void *__symbol_get(const char *symbol);
|
||||
void *__symbol_get_gpl(const char *symbol);
|
||||
|
|
|
|||
|
|
@ -15,6 +15,7 @@
|
|||
#define MSDOS_DPB_BITS 4 /* log2(MSDOS_DPB) */
|
||||
#define MSDOS_DPS (SECTOR_SIZE / sizeof(struct msdos_dir_entry))
|
||||
#define MSDOS_DPS_BITS 4 /* log2(MSDOS_DPS) */
|
||||
#define MSDOS_LONGNAME 256 /* maximum name length */
|
||||
#define CF_LE_W(v) le16_to_cpu(v)
|
||||
#define CF_LE_L(v) le32_to_cpu(v)
|
||||
#define CT_LE_W(v) cpu_to_le16(v)
|
||||
|
|
@ -47,8 +48,8 @@
|
|||
#define DELETED_FLAG 0xe5 /* marks file as deleted when in name[0] */
|
||||
#define IS_FREE(n) (!*(n) || *(n) == DELETED_FLAG)
|
||||
|
||||
#define FAT_LFN_LEN 255 /* maximum long name length */
|
||||
#define MSDOS_NAME 11 /* maximum name length */
|
||||
#define MSDOS_LONGNAME 256 /* maximum name length */
|
||||
#define MSDOS_SLOTS 21 /* max # of slots for short and long names */
|
||||
#define MSDOS_DOT ". " /* ".", padded to MSDOS_NAME chars */
|
||||
#define MSDOS_DOTDOT ".. " /* "..", padded to MSDOS_NAME chars */
|
||||
|
|
|
|||
|
|
@ -483,7 +483,7 @@ static inline int num_node_state(enum node_states state)
|
|||
type *name = kmalloc(sizeof(*name), gfp_flags)
|
||||
#define NODEMASK_FREE(m) kfree(m)
|
||||
#else
|
||||
#define NODEMASK_ALLOC(type, name, gfp_flags) type _name, *name = &_name
|
||||
#define NODEMASK_ALLOC(type, name, gfp_flags) type _##name, *name = &_##name
|
||||
#define NODEMASK_FREE(m) do {} while (0)
|
||||
#endif
|
||||
|
||||
|
|
|
|||
|
|
@ -118,6 +118,8 @@ static inline void __init page_cgroup_init_flatmem(void)
|
|||
#include <linux/swap.h>
|
||||
|
||||
#ifdef CONFIG_CGROUP_MEM_RES_CTLR_SWAP
|
||||
extern unsigned short swap_cgroup_cmpxchg(swp_entry_t ent,
|
||||
unsigned short old, unsigned short new);
|
||||
extern unsigned short swap_cgroup_record(swp_entry_t ent, unsigned short id);
|
||||
extern unsigned short lookup_swap_cgroup(swp_entry_t ent);
|
||||
extern int swap_cgroup_swapon(int type, unsigned long max_pages);
|
||||
|
|
|
|||
11
include/linux/pci-dma.h
Normal file
11
include/linux/pci-dma.h
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
#ifndef _LINUX_PCI_DMA_H
|
||||
#define _LINUX_PCI_DMA_H
|
||||
|
||||
#define DECLARE_PCI_UNMAP_ADDR(ADDR_NAME) DEFINE_DMA_UNMAP_ADDR(ADDR_NAME);
|
||||
#define DECLARE_PCI_UNMAP_LEN(LEN_NAME) DEFINE_DMA_UNMAP_LEN(LEN_NAME);
|
||||
#define pci_unmap_addr dma_unmap_addr
|
||||
#define pci_unmap_addr_set dma_unmap_addr_set
|
||||
#define pci_unmap_len dma_unmap_len
|
||||
#define pci_unmap_len_set dma_unmap_len_set
|
||||
|
||||
#endif
|
||||
|
|
@ -769,8 +769,6 @@ int pci_try_set_mwi(struct pci_dev *dev);
|
|||
void pci_clear_mwi(struct pci_dev *dev);
|
||||
void pci_intx(struct pci_dev *dev, int enable);
|
||||
void pci_msi_off(struct pci_dev *dev);
|
||||
int pci_set_dma_mask(struct pci_dev *dev, u64 mask);
|
||||
int pci_set_consistent_dma_mask(struct pci_dev *dev, u64 mask);
|
||||
int pci_set_dma_max_seg_size(struct pci_dev *dev, unsigned int size);
|
||||
int pci_set_dma_seg_boundary(struct pci_dev *dev, unsigned long mask);
|
||||
int pcix_get_max_mmrbc(struct pci_dev *dev);
|
||||
|
|
@ -904,6 +902,7 @@ int pci_set_vga_state(struct pci_dev *pdev, bool decode,
|
|||
unsigned int command_bits, bool change_bridge);
|
||||
/* kmem_cache style wrapper around pci_alloc_consistent() */
|
||||
|
||||
#include <linux/pci-dma.h>
|
||||
#include <linux/dmapool.h>
|
||||
|
||||
#define pci_pool dma_pool
|
||||
|
|
|
|||
|
|
@ -487,9 +487,8 @@ struct hw_perf_event {
|
|||
struct hrtimer hrtimer;
|
||||
};
|
||||
#ifdef CONFIG_HAVE_HW_BREAKPOINT
|
||||
union { /* breakpoint */
|
||||
struct arch_hw_breakpoint info;
|
||||
};
|
||||
/* breakpoint */
|
||||
struct arch_hw_breakpoint info;
|
||||
#endif
|
||||
};
|
||||
atomic64_t prev_count;
|
||||
|
|
@ -802,6 +801,13 @@ struct perf_sample_data {
|
|||
struct perf_raw_record *raw;
|
||||
};
|
||||
|
||||
static inline
|
||||
void perf_sample_data_init(struct perf_sample_data *data, u64 addr)
|
||||
{
|
||||
data->addr = addr;
|
||||
data->raw = NULL;
|
||||
}
|
||||
|
||||
extern void perf_output_sample(struct perf_output_handle *handle,
|
||||
struct perf_event_header *header,
|
||||
struct perf_sample_data *data,
|
||||
|
|
@ -858,6 +864,21 @@ extern int sysctl_perf_event_paranoid;
|
|||
extern int sysctl_perf_event_mlock;
|
||||
extern int sysctl_perf_event_sample_rate;
|
||||
|
||||
static inline bool perf_paranoid_tracepoint_raw(void)
|
||||
{
|
||||
return sysctl_perf_event_paranoid > -1;
|
||||
}
|
||||
|
||||
static inline bool perf_paranoid_cpu(void)
|
||||
{
|
||||
return sysctl_perf_event_paranoid > 0;
|
||||
}
|
||||
|
||||
static inline bool perf_paranoid_kernel(void)
|
||||
{
|
||||
return sysctl_perf_event_paranoid > 1;
|
||||
}
|
||||
|
||||
extern void perf_event_init(void);
|
||||
extern void perf_tp_event(int event_id, u64 addr, u64 count, void *record, int entry_size);
|
||||
extern void perf_bp_event(struct perf_event *event, void *data);
|
||||
|
|
|
|||
|
|
@ -21,7 +21,7 @@ struct platform_device {
|
|||
u32 num_resources;
|
||||
struct resource * resource;
|
||||
|
||||
struct platform_device_id *id_entry;
|
||||
const struct platform_device_id *id_entry;
|
||||
|
||||
/* arch specific additions */
|
||||
struct pdev_archdata archdata;
|
||||
|
|
@ -62,7 +62,7 @@ struct platform_driver {
|
|||
int (*suspend)(struct platform_device *, pm_message_t state);
|
||||
int (*resume)(struct platform_device *);
|
||||
struct device_driver driver;
|
||||
struct platform_device_id *id_table;
|
||||
const struct platform_device_id *id_table;
|
||||
};
|
||||
|
||||
extern int platform_driver_register(struct platform_driver *);
|
||||
|
|
@ -77,6 +77,11 @@ extern int platform_driver_probe(struct platform_driver *driver,
|
|||
#define platform_get_drvdata(_dev) dev_get_drvdata(&(_dev)->dev)
|
||||
#define platform_set_drvdata(_dev,data) dev_set_drvdata(&(_dev)->dev, (data))
|
||||
|
||||
extern struct platform_device *platform_create_bundle(struct platform_driver *driver,
|
||||
int (*probe)(struct platform_device *),
|
||||
struct resource *res, unsigned int n_res,
|
||||
const void *data, size_t size);
|
||||
|
||||
/* early platform driver interface */
|
||||
struct early_platform_driver {
|
||||
const char *class_str;
|
||||
|
|
|
|||
|
|
@ -10,8 +10,10 @@
|
|||
#include <linux/wait.h>
|
||||
#include <linux/string.h>
|
||||
#include <linux/fs.h>
|
||||
#include <linux/sysctl.h>
|
||||
#include <asm/uaccess.h>
|
||||
|
||||
extern struct ctl_table epoll_table[]; /* for sysctl */
|
||||
/* ~832 bytes of stack space used max in sys_select/sys_poll before allocating
|
||||
additional memory. */
|
||||
#define MAX_STACK_ALLOC 832
|
||||
|
|
|
|||
|
|
@ -82,6 +82,7 @@ enum power_supply_property {
|
|||
POWER_SUPPLY_PROP_PRESENT,
|
||||
POWER_SUPPLY_PROP_ONLINE,
|
||||
POWER_SUPPLY_PROP_TECHNOLOGY,
|
||||
POWER_SUPPLY_PROP_CYCLE_COUNT,
|
||||
POWER_SUPPLY_PROP_VOLTAGE_MAX,
|
||||
POWER_SUPPLY_PROP_VOLTAGE_MIN,
|
||||
POWER_SUPPLY_PROP_VOLTAGE_MAX_DESIGN,
|
||||
|
|
|
|||
|
|
@ -264,6 +264,9 @@ static inline void user_enable_single_step(struct task_struct *task)
|
|||
static inline void user_disable_single_step(struct task_struct *task)
|
||||
{
|
||||
}
|
||||
#else
|
||||
extern void user_enable_single_step(struct task_struct *);
|
||||
extern void user_disable_single_step(struct task_struct *);
|
||||
#endif /* arch_has_single_step */
|
||||
|
||||
#ifndef arch_has_block_step
|
||||
|
|
@ -291,6 +294,8 @@ static inline void user_enable_block_step(struct task_struct *task)
|
|||
{
|
||||
BUG(); /* This can never be called. */
|
||||
}
|
||||
#else
|
||||
extern void user_enable_block_step(struct task_struct *);
|
||||
#endif /* arch_has_block_step */
|
||||
|
||||
#ifdef ARCH_HAS_USER_SINGLE_STEP_INFO
|
||||
|
|
|
|||
|
|
@ -25,10 +25,10 @@
|
|||
|
||||
Some example of insert and search follows here. The search is a plain
|
||||
normal search over an ordered tree. The insert instead must be implemented
|
||||
int two steps: as first thing the code must insert the element in
|
||||
order as a red leaf in the tree, then the support library function
|
||||
rb_insert_color() must be called. Such function will do the
|
||||
not trivial work to rebalance the rbtree if necessary.
|
||||
in two steps: First, the code must insert the element in order as a red leaf
|
||||
in the tree, and then the support library function rb_insert_color() must
|
||||
be called. Such function will do the not trivial work to rebalance the
|
||||
rbtree, if necessary.
|
||||
|
||||
-----------------------------------------------------------------------
|
||||
static inline struct page * rb_search_page_cache(struct inode * inode,
|
||||
|
|
|
|||
|
|
@ -41,6 +41,10 @@
|
|||
#include <linux/lockdep.h>
|
||||
#include <linux/completion.h>
|
||||
|
||||
#ifdef CONFIG_RCU_TORTURE_TEST
|
||||
extern int rcutorture_runnable; /* for sysctl */
|
||||
#endif /* #ifdef CONFIG_RCU_TORTURE_TEST */
|
||||
|
||||
/**
|
||||
* struct rcu_head - callback structure for use with RCU
|
||||
* @next: next update requests in a list
|
||||
|
|
@ -97,6 +101,11 @@ extern struct lockdep_map rcu_sched_lock_map;
|
|||
# define rcu_read_release_sched() \
|
||||
lock_release(&rcu_sched_lock_map, 1, _THIS_IP_)
|
||||
|
||||
static inline int debug_lockdep_rcu_enabled(void)
|
||||
{
|
||||
return likely(rcu_scheduler_active && debug_locks);
|
||||
}
|
||||
|
||||
/**
|
||||
* rcu_read_lock_held - might we be in RCU read-side critical section?
|
||||
*
|
||||
|
|
@ -104,12 +113,14 @@ extern struct lockdep_map rcu_sched_lock_map;
|
|||
* an RCU read-side critical section. In absence of CONFIG_PROVE_LOCKING,
|
||||
* this assumes we are in an RCU read-side critical section unless it can
|
||||
* prove otherwise.
|
||||
*
|
||||
* Check rcu_scheduler_active to prevent false positives during boot.
|
||||
*/
|
||||
static inline int rcu_read_lock_held(void)
|
||||
{
|
||||
if (debug_locks)
|
||||
return lock_is_held(&rcu_lock_map);
|
||||
return 1;
|
||||
if (!debug_lockdep_rcu_enabled())
|
||||
return 1;
|
||||
return lock_is_held(&rcu_lock_map);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -119,12 +130,14 @@ static inline int rcu_read_lock_held(void)
|
|||
* an RCU-bh read-side critical section. In absence of CONFIG_PROVE_LOCKING,
|
||||
* this assumes we are in an RCU-bh read-side critical section unless it can
|
||||
* prove otherwise.
|
||||
*
|
||||
* Check rcu_scheduler_active to prevent false positives during boot.
|
||||
*/
|
||||
static inline int rcu_read_lock_bh_held(void)
|
||||
{
|
||||
if (debug_locks)
|
||||
return lock_is_held(&rcu_bh_lock_map);
|
||||
return 1;
|
||||
if (!debug_lockdep_rcu_enabled())
|
||||
return 1;
|
||||
return lock_is_held(&rcu_bh_lock_map);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -135,15 +148,26 @@ static inline int rcu_read_lock_bh_held(void)
|
|||
* this assumes we are in an RCU-sched read-side critical section unless it
|
||||
* can prove otherwise. Note that disabling of preemption (including
|
||||
* disabling irqs) counts as an RCU-sched read-side critical section.
|
||||
*
|
||||
* Check rcu_scheduler_active to prevent false positives during boot.
|
||||
*/
|
||||
#ifdef CONFIG_PREEMPT
|
||||
static inline int rcu_read_lock_sched_held(void)
|
||||
{
|
||||
int lockdep_opinion = 0;
|
||||
|
||||
if (!debug_lockdep_rcu_enabled())
|
||||
return 1;
|
||||
if (debug_locks)
|
||||
lockdep_opinion = lock_is_held(&rcu_sched_lock_map);
|
||||
return lockdep_opinion || preempt_count() != 0 || !rcu_scheduler_active;
|
||||
return lockdep_opinion || preempt_count() != 0;
|
||||
}
|
||||
#else /* #ifdef CONFIG_PREEMPT */
|
||||
static inline int rcu_read_lock_sched_held(void)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
#endif /* #else #ifdef CONFIG_PREEMPT */
|
||||
|
||||
#else /* #ifdef CONFIG_DEBUG_LOCK_ALLOC */
|
||||
|
||||
|
|
@ -164,10 +188,17 @@ static inline int rcu_read_lock_bh_held(void)
|
|||
return 1;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_PREEMPT
|
||||
static inline int rcu_read_lock_sched_held(void)
|
||||
{
|
||||
return preempt_count() != 0 || !rcu_scheduler_active;
|
||||
return !rcu_scheduler_active || preempt_count() != 0;
|
||||
}
|
||||
#else /* #ifdef CONFIG_PREEMPT */
|
||||
static inline int rcu_read_lock_sched_held(void)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
#endif /* #else #ifdef CONFIG_PREEMPT */
|
||||
|
||||
#endif /* #else #ifdef CONFIG_DEBUG_LOCK_ALLOC */
|
||||
|
||||
|
|
@ -184,7 +215,7 @@ static inline int rcu_read_lock_sched_held(void)
|
|||
*/
|
||||
#define rcu_dereference_check(p, c) \
|
||||
({ \
|
||||
if (debug_locks && !(c)) \
|
||||
if (debug_lockdep_rcu_enabled() && !(c)) \
|
||||
lockdep_rcu_dereference(__FILE__, __LINE__); \
|
||||
rcu_dereference_raw(p); \
|
||||
})
|
||||
|
|
|
|||
|
|
@ -64,6 +64,7 @@ extern void kernel_restart(char *cmd);
|
|||
extern void kernel_halt(void);
|
||||
extern void kernel_power_off(void);
|
||||
|
||||
extern int C_A_D; /* for sysctl */
|
||||
void ctrl_alt_del(void);
|
||||
|
||||
#define POWEROFF_CMD_PATH_LEN 256
|
||||
|
|
|
|||
|
|
@ -29,7 +29,7 @@
|
|||
/**
|
||||
* enum rfkill_type - type of rfkill switch.
|
||||
*
|
||||
* @RFKILL_TYPE_ALL: toggles all switches (userspace only)
|
||||
* @RFKILL_TYPE_ALL: toggles all switches (requests only - not a switch type)
|
||||
* @RFKILL_TYPE_WLAN: switch is on a 802.11 wireless network device.
|
||||
* @RFKILL_TYPE_BLUETOOTH: switch is on a bluetooth device.
|
||||
* @RFKILL_TYPE_UWB: switch is on a ultra wideband device.
|
||||
|
|
|
|||
|
|
@ -238,6 +238,12 @@ static inline bool is_leap_year(unsigned int year)
|
|||
return (!(year % 4) && (year % 100)) || !(year % 400);
|
||||
}
|
||||
|
||||
#ifdef CONFIG_RTC_HCTOSYS
|
||||
extern int rtc_hctosys_ret;
|
||||
#else
|
||||
#define rtc_hctosys_ret -ENODEV
|
||||
#endif
|
||||
|
||||
#endif /* __KERNEL__ */
|
||||
|
||||
#endif /* _LINUX_RTC_H_ */
|
||||
|
|
|
|||
|
|
@ -16,6 +16,8 @@
|
|||
#include <linux/plist.h>
|
||||
#include <linux/spinlock_types.h>
|
||||
|
||||
extern int max_lock_depth; /* for sysctl */
|
||||
|
||||
/**
|
||||
* The rt_mutex structure
|
||||
*
|
||||
|
|
|
|||
|
|
@ -29,25 +29,25 @@ do { \
|
|||
#endif
|
||||
|
||||
#ifdef CONFIG_DEBUG_SPINLOCK
|
||||
extern void do_raw_read_lock(rwlock_t *lock);
|
||||
extern void do_raw_read_lock(rwlock_t *lock) __acquires(lock);
|
||||
#define do_raw_read_lock_flags(lock, flags) do_raw_read_lock(lock)
|
||||
extern int do_raw_read_trylock(rwlock_t *lock);
|
||||
extern void do_raw_read_unlock(rwlock_t *lock);
|
||||
extern void do_raw_write_lock(rwlock_t *lock);
|
||||
extern void do_raw_read_unlock(rwlock_t *lock) __releases(lock);
|
||||
extern void do_raw_write_lock(rwlock_t *lock) __acquires(lock);
|
||||
#define do_raw_write_lock_flags(lock, flags) do_raw_write_lock(lock)
|
||||
extern int do_raw_write_trylock(rwlock_t *lock);
|
||||
extern void do_raw_write_unlock(rwlock_t *lock);
|
||||
extern void do_raw_write_unlock(rwlock_t *lock) __releases(lock);
|
||||
#else
|
||||
# define do_raw_read_lock(rwlock) arch_read_lock(&(rwlock)->raw_lock)
|
||||
# define do_raw_read_lock(rwlock) do {__acquire(lock); arch_read_lock(&(rwlock)->raw_lock); } while (0)
|
||||
# define do_raw_read_lock_flags(lock, flags) \
|
||||
arch_read_lock_flags(&(lock)->raw_lock, *(flags))
|
||||
do {__acquire(lock); arch_read_lock_flags(&(lock)->raw_lock, *(flags)); } while (0)
|
||||
# define do_raw_read_trylock(rwlock) arch_read_trylock(&(rwlock)->raw_lock)
|
||||
# define do_raw_read_unlock(rwlock) arch_read_unlock(&(rwlock)->raw_lock)
|
||||
# define do_raw_write_lock(rwlock) arch_write_lock(&(rwlock)->raw_lock)
|
||||
# define do_raw_read_unlock(rwlock) do {arch_read_unlock(&(rwlock)->raw_lock); __release(lock); } while (0)
|
||||
# define do_raw_write_lock(rwlock) do {__acquire(lock); arch_write_lock(&(rwlock)->raw_lock); } while (0)
|
||||
# define do_raw_write_lock_flags(lock, flags) \
|
||||
arch_write_lock_flags(&(lock)->raw_lock, *(flags))
|
||||
do {__acquire(lock); arch_write_lock_flags(&(lock)->raw_lock, *(flags)); } while (0)
|
||||
# define do_raw_write_trylock(rwlock) arch_write_trylock(&(rwlock)->raw_lock)
|
||||
# define do_raw_write_unlock(rwlock) arch_write_unlock(&(rwlock)->raw_lock)
|
||||
# define do_raw_write_unlock(rwlock) do {arch_write_unlock(&(rwlock)->raw_lock); __release(lock); } while (0)
|
||||
#endif
|
||||
|
||||
#define read_can_lock(rwlock) arch_read_can_lock(&(rwlock)->raw_lock)
|
||||
|
|
|
|||
|
|
@ -258,6 +258,10 @@ extern spinlock_t mmlist_lock;
|
|||
|
||||
struct task_struct;
|
||||
|
||||
#ifdef CONFIG_PROVE_RCU
|
||||
extern int lockdep_tasklist_lock_is_held(void);
|
||||
#endif /* #ifdef CONFIG_PROVE_RCU */
|
||||
|
||||
extern void sched_init(void);
|
||||
extern void sched_init_smp(void);
|
||||
extern asmlinkage void schedule_tail(struct task_struct *prev);
|
||||
|
|
@ -1473,7 +1477,7 @@ struct task_struct {
|
|||
|
||||
struct list_head *scm_work_list;
|
||||
#ifdef CONFIG_FUNCTION_GRAPH_TRACER
|
||||
/* Index of current stored adress in ret_stack */
|
||||
/* Index of current stored address in ret_stack */
|
||||
int curr_ret_stack;
|
||||
/* Stack of return addresses for return function tracing */
|
||||
struct ftrace_ret_stack *ret_stack;
|
||||
|
|
@ -2391,9 +2395,7 @@ void thread_group_cputimer(struct task_struct *tsk, struct task_cputime *times);
|
|||
|
||||
static inline void thread_group_cputime_init(struct signal_struct *sig)
|
||||
{
|
||||
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)
|
||||
|
|
|
|||
|
|
@ -491,9 +491,13 @@ uart_handle_dcd_change(struct uart_port *uport, unsigned int status)
|
|||
{
|
||||
struct uart_state *state = uport->state;
|
||||
struct tty_port *port = &state->port;
|
||||
struct tty_ldisc *ld = tty_ldisc_ref(port->tty);
|
||||
struct timespec ts;
|
||||
|
||||
if (ld && ld->ops->dcd_change)
|
||||
getnstimeofday(&ts);
|
||||
|
||||
uport->icount.dcd++;
|
||||
|
||||
#ifdef CONFIG_HARD_PPS
|
||||
if ((uport->flags & UPF_HARDPPS_CD) && status)
|
||||
hardpps();
|
||||
|
|
@ -505,6 +509,11 @@ uart_handle_dcd_change(struct uart_port *uport, unsigned int status)
|
|||
else if (port->tty)
|
||||
tty_hangup(port->tty);
|
||||
}
|
||||
|
||||
if (ld && ld->ops->dcd_change)
|
||||
ld->ops->dcd_change(port->tty, status, &ts);
|
||||
if (ld)
|
||||
tty_ldisc_deref(ld);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -7,6 +7,8 @@
|
|||
#ifdef __KERNEL__
|
||||
#include <linux/list.h>
|
||||
|
||||
/* for sysctl */
|
||||
extern int print_fatal_signals;
|
||||
/*
|
||||
* Real Time signals may be queued.
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -225,6 +225,8 @@ enum
|
|||
LINUX_MIB_SACKSHIFTED,
|
||||
LINUX_MIB_SACKMERGED,
|
||||
LINUX_MIB_SACKSHIFTFALLBACK,
|
||||
LINUX_MIB_TCPBACKLOGDROP,
|
||||
LINUX_MIB_TCPMINTTLDROP, /* RFC 5082 */
|
||||
__LINUX_MIB_MAX
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@ enum ads7846_filter {
|
|||
};
|
||||
|
||||
struct ads7846_platform_data {
|
||||
u16 model; /* 7843, 7845, 7846. */
|
||||
u16 model; /* 7843, 7845, 7846, 7873. */
|
||||
u16 vref_delay_usecs; /* 0 for external vref; etc */
|
||||
u16 vref_mv; /* external vref value, milliVolts */
|
||||
bool keep_vref_on; /* set to keep vref on for differential
|
||||
|
|
@ -53,5 +53,6 @@ struct ads7846_platform_data {
|
|||
int (*filter) (void *filter_data, int data_idx, int *val);
|
||||
void (*filter_cleanup)(void *filter_data);
|
||||
void (*wait_for_sync)(void);
|
||||
bool wakeup;
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -128,19 +128,21 @@ static inline void smp_mb__after_lock(void) { smp_mb(); }
|
|||
#define raw_spin_unlock_wait(lock) arch_spin_unlock_wait(&(lock)->raw_lock)
|
||||
|
||||
#ifdef CONFIG_DEBUG_SPINLOCK
|
||||
extern void do_raw_spin_lock(raw_spinlock_t *lock);
|
||||
extern void do_raw_spin_lock(raw_spinlock_t *lock) __acquires(lock);
|
||||
#define do_raw_spin_lock_flags(lock, flags) do_raw_spin_lock(lock)
|
||||
extern int do_raw_spin_trylock(raw_spinlock_t *lock);
|
||||
extern void do_raw_spin_unlock(raw_spinlock_t *lock);
|
||||
extern void do_raw_spin_unlock(raw_spinlock_t *lock) __releases(lock);
|
||||
#else
|
||||
static inline void do_raw_spin_lock(raw_spinlock_t *lock)
|
||||
static inline void do_raw_spin_lock(raw_spinlock_t *lock) __acquires(lock)
|
||||
{
|
||||
__acquire(lock);
|
||||
arch_spin_lock(&lock->raw_lock);
|
||||
}
|
||||
|
||||
static inline void
|
||||
do_raw_spin_lock_flags(raw_spinlock_t *lock, unsigned long *flags)
|
||||
do_raw_spin_lock_flags(raw_spinlock_t *lock, unsigned long *flags) __acquires(lock)
|
||||
{
|
||||
__acquire(lock);
|
||||
arch_spin_lock_flags(&lock->raw_lock, *flags);
|
||||
}
|
||||
|
||||
|
|
@ -149,9 +151,10 @@ static inline int do_raw_spin_trylock(raw_spinlock_t *lock)
|
|||
return arch_spin_trylock(&(lock)->raw_lock);
|
||||
}
|
||||
|
||||
static inline void do_raw_spin_unlock(raw_spinlock_t *lock)
|
||||
static inline void do_raw_spin_unlock(raw_spinlock_t *lock) __releases(lock)
|
||||
{
|
||||
arch_spin_unlock(&lock->raw_lock);
|
||||
__release(lock);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
|
|
|||
|
|
@ -355,6 +355,7 @@ static inline void disable_swap_token(void)
|
|||
#ifdef CONFIG_CGROUP_MEM_RES_CTLR
|
||||
extern void
|
||||
mem_cgroup_uncharge_swapcache(struct page *page, swp_entry_t ent, bool swapout);
|
||||
extern int mem_cgroup_count_swap_user(swp_entry_t ent, struct page **pagep);
|
||||
#else
|
||||
static inline void
|
||||
mem_cgroup_uncharge_swapcache(struct page *page, swp_entry_t ent, bool swapout)
|
||||
|
|
@ -485,6 +486,14 @@ mem_cgroup_uncharge_swapcache(struct page *page, swp_entry_t ent)
|
|||
{
|
||||
}
|
||||
|
||||
#ifdef CONFIG_CGROUP_MEM_RES_CTLR
|
||||
static inline int
|
||||
mem_cgroup_count_swap_user(swp_entry_t ent, struct page **pagep)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* CONFIG_SWAP */
|
||||
#endif /* __KERNEL__*/
|
||||
#endif /* _LINUX_SWAP_H */
|
||||
|
|
|
|||
|
|
@ -23,6 +23,7 @@ struct kexec_segment;
|
|||
struct linux_dirent;
|
||||
struct linux_dirent64;
|
||||
struct list_head;
|
||||
struct mmap_arg_struct;
|
||||
struct msgbuf;
|
||||
struct msghdr;
|
||||
struct mmsghdr;
|
||||
|
|
@ -30,10 +31,13 @@ struct msqid_ds;
|
|||
struct new_utsname;
|
||||
struct nfsctl_arg;
|
||||
struct __old_kernel_stat;
|
||||
struct oldold_utsname;
|
||||
struct old_utsname;
|
||||
struct pollfd;
|
||||
struct rlimit;
|
||||
struct rusage;
|
||||
struct sched_param;
|
||||
struct sel_arg_struct;
|
||||
struct semaphore;
|
||||
struct sembuf;
|
||||
struct shmid_ds;
|
||||
|
|
@ -638,6 +642,7 @@ asmlinkage long sys_poll(struct pollfd __user *ufds, unsigned int nfds,
|
|||
long timeout);
|
||||
asmlinkage long sys_select(int n, fd_set __user *inp, fd_set __user *outp,
|
||||
fd_set __user *exp, struct timeval __user *tvp);
|
||||
asmlinkage long sys_old_select(struct sel_arg_struct __user *arg);
|
||||
asmlinkage long sys_epoll_create(int size);
|
||||
asmlinkage long sys_epoll_create1(int flags);
|
||||
asmlinkage long sys_epoll_ctl(int epfd, int op, int fd,
|
||||
|
|
@ -652,6 +657,8 @@ asmlinkage long sys_gethostname(char __user *name, int len);
|
|||
asmlinkage long sys_sethostname(char __user *name, int len);
|
||||
asmlinkage long sys_setdomainname(char __user *name, int len);
|
||||
asmlinkage long sys_newuname(struct new_utsname __user *name);
|
||||
asmlinkage long sys_uname(struct old_utsname __user *);
|
||||
asmlinkage long sys_olduname(struct oldold_utsname __user *);
|
||||
|
||||
asmlinkage long sys_getrlimit(unsigned int resource,
|
||||
struct rlimit __user *rlim);
|
||||
|
|
@ -681,6 +688,8 @@ asmlinkage long sys_shmat(int shmid, char __user *shmaddr, int shmflg);
|
|||
asmlinkage long sys_shmget(key_t key, size_t size, int flag);
|
||||
asmlinkage long sys_shmdt(char __user *shmaddr);
|
||||
asmlinkage long sys_shmctl(int shmid, int cmd, struct shmid_ds __user *buf);
|
||||
asmlinkage long sys_ipc(unsigned int call, int first, int second,
|
||||
unsigned long third, void __user *ptr, long fifth);
|
||||
|
||||
asmlinkage long sys_mq_open(const char __user *name, int oflag, mode_t mode, struct mq_attr __user *attr);
|
||||
asmlinkage long sys_mq_unlink(const char __user *name);
|
||||
|
|
@ -836,4 +845,6 @@ asmlinkage long sys_perf_event_open(
|
|||
asmlinkage long sys_mmap_pgoff(unsigned long addr, unsigned long len,
|
||||
unsigned long prot, unsigned long flags,
|
||||
unsigned long fd, unsigned long pgoff);
|
||||
asmlinkage long sys_old_mmap(struct mmap_arg_struct __user *arg);
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -27,10 +27,12 @@
|
|||
|
||||
|
||||
struct sys_device;
|
||||
struct sysdev_class_attribute;
|
||||
|
||||
struct sysdev_class {
|
||||
const char *name;
|
||||
struct list_head drivers;
|
||||
struct sysdev_class_attribute **attrs;
|
||||
|
||||
/* Default operations for these types of devices */
|
||||
int (*shutdown)(struct sys_device *);
|
||||
|
|
@ -41,8 +43,10 @@ struct sysdev_class {
|
|||
|
||||
struct sysdev_class_attribute {
|
||||
struct attribute attr;
|
||||
ssize_t (*show)(struct sysdev_class *, char *);
|
||||
ssize_t (*store)(struct sysdev_class *, const char *, size_t);
|
||||
ssize_t (*show)(struct sysdev_class *, struct sysdev_class_attribute *,
|
||||
char *);
|
||||
ssize_t (*store)(struct sysdev_class *, struct sysdev_class_attribute *,
|
||||
const char *, size_t);
|
||||
};
|
||||
|
||||
#define _SYSDEV_CLASS_ATTR(_name,_mode,_show,_store) \
|
||||
|
|
@ -119,6 +123,19 @@ struct sysdev_attribute {
|
|||
extern int sysdev_create_file(struct sys_device *, struct sysdev_attribute *);
|
||||
extern void sysdev_remove_file(struct sys_device *, struct sysdev_attribute *);
|
||||
|
||||
/* Create/remove NULL terminated attribute list */
|
||||
static inline int
|
||||
sysdev_create_files(struct sys_device *d, struct sysdev_attribute **a)
|
||||
{
|
||||
return sysfs_create_files(&d->kobj, (const struct attribute **)a);
|
||||
}
|
||||
|
||||
static inline void
|
||||
sysdev_remove_files(struct sys_device *d, struct sysdev_attribute **a)
|
||||
{
|
||||
return sysfs_remove_files(&d->kobj, (const struct attribute **)a);
|
||||
}
|
||||
|
||||
struct sysdev_ext_attribute {
|
||||
struct sysdev_attribute attr;
|
||||
void *var;
|
||||
|
|
|
|||
|
|
@ -15,6 +15,7 @@
|
|||
#include <linux/compiler.h>
|
||||
#include <linux/errno.h>
|
||||
#include <linux/list.h>
|
||||
#include <linux/lockdep.h>
|
||||
#include <asm/atomic.h>
|
||||
|
||||
struct kobject;
|
||||
|
|
@ -29,8 +30,33 @@ struct attribute {
|
|||
const char *name;
|
||||
struct module *owner;
|
||||
mode_t mode;
|
||||
#ifdef CONFIG_DEBUG_LOCK_ALLOC
|
||||
struct lock_class_key *key;
|
||||
struct lock_class_key skey;
|
||||
#endif
|
||||
};
|
||||
|
||||
/**
|
||||
* sysfs_attr_init - initialize a dynamically allocated sysfs attribute
|
||||
* @attr: struct attribute to initialize
|
||||
*
|
||||
* Initialize a dynamically allocated struct attribute so we can
|
||||
* make lockdep happy. This is a new requirement for attributes
|
||||
* and initially this is only needed when lockdep is enabled.
|
||||
* Lockdep gives a nice error when your attribute is added to
|
||||
* sysfs if you don't have this.
|
||||
*/
|
||||
#ifdef CONFIG_DEBUG_LOCK_ALLOC
|
||||
#define sysfs_attr_init(attr) \
|
||||
do { \
|
||||
static struct lock_class_key __key; \
|
||||
\
|
||||
(attr)->key = &__key; \
|
||||
} while(0)
|
||||
#else
|
||||
#define sysfs_attr_init(attr) do {} while(0)
|
||||
#endif
|
||||
|
||||
struct attribute_group {
|
||||
const char *name;
|
||||
mode_t (*is_visible)(struct kobject *,
|
||||
|
|
@ -74,6 +100,18 @@ struct bin_attribute {
|
|||
struct vm_area_struct *vma);
|
||||
};
|
||||
|
||||
/**
|
||||
* sysfs_bin_attr_init - initialize a dynamically allocated bin_attribute
|
||||
* @attr: struct bin_attribute to initialize
|
||||
*
|
||||
* Initialize a dynamically allocated struct bin_attribute so we
|
||||
* can make lockdep happy. This is a new requirement for
|
||||
* attributes and initially this is only needed when lockdep is
|
||||
* enabled. Lockdep gives a nice error when your attribute is
|
||||
* added to sysfs if you don't have this.
|
||||
*/
|
||||
#define sysfs_bin_attr_init(bin_attr) sysfs_attr_init(&(bin_attr)->attr)
|
||||
|
||||
struct sysfs_ops {
|
||||
ssize_t (*show)(struct kobject *, struct attribute *,char *);
|
||||
ssize_t (*store)(struct kobject *,struct attribute *,const char *, size_t);
|
||||
|
|
@ -94,9 +132,12 @@ int __must_check sysfs_move_dir(struct kobject *kobj,
|
|||
|
||||
int __must_check sysfs_create_file(struct kobject *kobj,
|
||||
const struct attribute *attr);
|
||||
int __must_check sysfs_create_files(struct kobject *kobj,
|
||||
const struct attribute **attr);
|
||||
int __must_check sysfs_chmod_file(struct kobject *kobj, struct attribute *attr,
|
||||
mode_t mode);
|
||||
void sysfs_remove_file(struct kobject *kobj, const struct attribute *attr);
|
||||
void sysfs_remove_files(struct kobject *kobj, const struct attribute **attr);
|
||||
|
||||
int __must_check sysfs_create_bin_file(struct kobject *kobj,
|
||||
const struct bin_attribute *attr);
|
||||
|
|
@ -110,6 +151,9 @@ int __must_check sysfs_create_link_nowarn(struct kobject *kobj,
|
|||
const char *name);
|
||||
void sysfs_remove_link(struct kobject *kobj, const char *name);
|
||||
|
||||
int sysfs_rename_link(struct kobject *kobj, struct kobject *target,
|
||||
const char *old_name, const char *new_name);
|
||||
|
||||
int __must_check sysfs_create_group(struct kobject *kobj,
|
||||
const struct attribute_group *grp);
|
||||
int sysfs_update_group(struct kobject *kobj,
|
||||
|
|
@ -164,6 +208,12 @@ static inline int sysfs_create_file(struct kobject *kobj,
|
|||
return 0;
|
||||
}
|
||||
|
||||
static inline int sysfs_create_files(struct kobject *kobj,
|
||||
const struct attribute **attr)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline int sysfs_chmod_file(struct kobject *kobj,
|
||||
struct attribute *attr, mode_t mode)
|
||||
{
|
||||
|
|
@ -175,6 +225,11 @@ static inline void sysfs_remove_file(struct kobject *kobj,
|
|||
{
|
||||
}
|
||||
|
||||
static inline void sysfs_remove_files(struct kobject *kobj,
|
||||
const struct attribute **attr)
|
||||
{
|
||||
}
|
||||
|
||||
static inline int sysfs_create_bin_file(struct kobject *kobj,
|
||||
const struct bin_attribute *attr)
|
||||
{
|
||||
|
|
@ -203,6 +258,12 @@ static inline void sysfs_remove_link(struct kobject *kobj, const char *name)
|
|||
{
|
||||
}
|
||||
|
||||
static inline int sysfs_rename_link(struct kobject *k, struct kobject *t,
|
||||
const char *old_name, const char *new_name)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline int sysfs_create_group(struct kobject *kobj,
|
||||
const struct attribute_group *grp)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -14,11 +14,6 @@
|
|||
extern struct kmem_cache *taskstats_cache;
|
||||
extern struct mutex taskstats_exit_mutex;
|
||||
|
||||
static inline void taskstats_tgid_init(struct signal_struct *sig)
|
||||
{
|
||||
sig->stats = NULL;
|
||||
}
|
||||
|
||||
static inline void taskstats_tgid_free(struct signal_struct *sig)
|
||||
{
|
||||
if (sig->stats)
|
||||
|
|
@ -30,8 +25,6 @@ extern void taskstats_init_early(void);
|
|||
#else
|
||||
static inline void taskstats_exit(struct task_struct *tsk, int group_dead)
|
||||
{}
|
||||
static inline void taskstats_tgid_init(struct signal_struct *sig)
|
||||
{}
|
||||
static inline void taskstats_tgid_free(struct signal_struct *sig)
|
||||
{}
|
||||
static inline void taskstats_init_early(void)
|
||||
|
|
|
|||
|
|
@ -514,6 +514,7 @@ extern void tty_ldisc_enable(struct tty_struct *tty);
|
|||
|
||||
/* n_tty.c */
|
||||
extern struct tty_ldisc_ops tty_ldisc_N_TTY;
|
||||
extern void n_tty_inherit_ops(struct tty_ldisc_ops *ops);
|
||||
|
||||
/* tty_audit.c */
|
||||
#ifdef CONFIG_AUDIT
|
||||
|
|
|
|||
|
|
@ -99,6 +99,12 @@
|
|||
* cease I/O to the tty driver. Can sleep. The driver should
|
||||
* seek to perform this action quickly but should wait until
|
||||
* any pending driver I/O is completed.
|
||||
*
|
||||
* void (*dcd_change)(struct tty_struct *tty, unsigned int status,
|
||||
* struct timespec *ts)
|
||||
*
|
||||
* Tells the discipline that the DCD pin has changed its status and
|
||||
* the relative timestamp. Pointer ts can be NULL.
|
||||
*/
|
||||
|
||||
#include <linux/fs.h>
|
||||
|
|
@ -136,6 +142,8 @@ struct tty_ldisc_ops {
|
|||
void (*receive_buf)(struct tty_struct *, const unsigned char *cp,
|
||||
char *fp, int count);
|
||||
void (*write_wakeup)(struct tty_struct *);
|
||||
void (*dcd_change)(struct tty_struct *, unsigned int,
|
||||
struct timespec *);
|
||||
|
||||
struct module *owner;
|
||||
|
||||
|
|
|
|||
|
|
@ -512,9 +512,9 @@ extern struct usb_device *usb_get_dev(struct usb_device *dev);
|
|||
extern void usb_put_dev(struct usb_device *dev);
|
||||
|
||||
/* USB device locking */
|
||||
#define usb_lock_device(udev) down(&(udev)->dev.sem)
|
||||
#define usb_unlock_device(udev) up(&(udev)->dev.sem)
|
||||
#define usb_trylock_device(udev) down_trylock(&(udev)->dev.sem)
|
||||
#define usb_lock_device(udev) device_lock(&(udev)->dev)
|
||||
#define usb_unlock_device(udev) device_unlock(&(udev)->dev)
|
||||
#define usb_trylock_device(udev) device_trylock(&(udev)->dev)
|
||||
extern int usb_lock_device_for_reset(struct usb_device *udev,
|
||||
const struct usb_interface *iface);
|
||||
|
||||
|
|
|
|||
|
|
@ -269,8 +269,8 @@ struct uac_format_type_i_ext_descriptor {
|
|||
__u8 bLength;
|
||||
__u8 bDescriptorType;
|
||||
__u8 bDescriptorSubtype;
|
||||
__u8 bSubslotSize;
|
||||
__u8 bFormatType;
|
||||
__u8 bSubslotSize;
|
||||
__u8 bBitResolution;
|
||||
__u8 bHeaderLength;
|
||||
__u8 bControlSize;
|
||||
|
|
|
|||
|
|
@ -98,6 +98,7 @@ struct virtio_device {
|
|||
void *priv;
|
||||
};
|
||||
|
||||
#define dev_to_virtio(dev) container_of(dev, struct virtio_device, dev)
|
||||
int register_virtio_device(struct virtio_device *dev);
|
||||
void unregister_virtio_device(struct virtio_device *dev);
|
||||
|
||||
|
|
|
|||
|
|
@ -5,4 +5,16 @@
|
|||
#include <linux/virtio_ids.h>
|
||||
#include <linux/virtio_config.h>
|
||||
|
||||
/* The feature bitmap for virtio 9P */
|
||||
|
||||
/* The mount point is specified in a config variable */
|
||||
#define VIRTIO_9P_MOUNT_TAG 0
|
||||
|
||||
struct virtio_9p_config {
|
||||
/* length of the tag name */
|
||||
__u16 tag_len;
|
||||
/* non-NULL terminated tag name */
|
||||
__u8 tag[0];
|
||||
} __attribute__((packed));
|
||||
|
||||
#endif /* _LINUX_VIRTIO_9P_H */
|
||||
|
|
|
|||
Loading…
Reference in a new issue