mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-12 19:44:51 -04:00
Merge branch 'x86/apic' into irq/numa
Merge reason: both topics modify the APIC code but were able to do it in
parallel so far. An upcoming patch generates a conflict so
merge them to avoid the conflict.
Signed-off-by: Ingo Molnar <mingo@elte.hu>
This commit is contained in:
@@ -3,8 +3,10 @@
|
||||
|
||||
#if (defined CONFIG_ACPI_VIDEO || defined CONFIG_ACPI_VIDEO_MODULE)
|
||||
extern int acpi_video_register(void);
|
||||
extern int acpi_video_exit(void);
|
||||
#else
|
||||
static inline int acpi_video_register(void) { return 0; }
|
||||
static inline void acpi_video_exit(void) { return; }
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
@@ -132,9 +132,9 @@ static inline long atomic_long_add_unless(atomic_long_t *l, long a, long u)
|
||||
#define atomic_long_inc_not_zero(l) atomic64_inc_not_zero((atomic64_t *)(l))
|
||||
|
||||
#define atomic_long_cmpxchg(l, old, new) \
|
||||
(atomic_cmpxchg((atomic64_t *)(l), (old), (new)))
|
||||
(atomic64_cmpxchg((atomic64_t *)(l), (old), (new)))
|
||||
#define atomic_long_xchg(v, new) \
|
||||
(atomic_xchg((atomic64_t *)(l), (new)))
|
||||
(atomic64_xchg((atomic64_t *)(l), (new)))
|
||||
|
||||
#else /* BITS_PER_LONG == 64 */
|
||||
|
||||
|
||||
@@ -58,12 +58,13 @@ struct bug_entry {
|
||||
*/
|
||||
#ifndef __WARN
|
||||
#ifndef __ASSEMBLY__
|
||||
extern void warn_slowpath(const char *file, const int line,
|
||||
extern void warn_slowpath_fmt(const char *file, const int line,
|
||||
const char *fmt, ...) __attribute__((format(printf, 3, 4)));
|
||||
extern void warn_slowpath_null(const char *file, const int line);
|
||||
#define WANT_WARN_ON_SLOWPATH
|
||||
#endif
|
||||
#define __WARN() warn_slowpath(__FILE__, __LINE__, NULL)
|
||||
#define __WARN_printf(arg...) warn_slowpath(__FILE__, __LINE__, arg)
|
||||
#define __WARN() warn_slowpath_null(__FILE__, __LINE__)
|
||||
#define __WARN_printf(arg...) warn_slowpath_fmt(__FILE__, __LINE__, arg)
|
||||
#else
|
||||
#define __WARN_printf(arg...) do { printk(arg); __WARN(); } while (0)
|
||||
#endif
|
||||
|
||||
@@ -90,7 +90,6 @@
|
||||
/* .data section */
|
||||
#define DATA_DATA \
|
||||
*(.data) \
|
||||
*(.data.init.refok) \
|
||||
*(.ref.data) \
|
||||
DEV_KEEP(init.data) \
|
||||
DEV_KEEP(exit.data) \
|
||||
@@ -289,8 +288,6 @@
|
||||
*(.text.hot) \
|
||||
*(.text) \
|
||||
*(.ref.text) \
|
||||
*(.text.init.refok) \
|
||||
*(.exit.text.refok) \
|
||||
DEV_KEEP(init.text) \
|
||||
DEV_KEEP(exit.text) \
|
||||
CPU_KEEP(init.text) \
|
||||
|
||||
@@ -532,6 +532,7 @@
|
||||
{0x8086, 0x2e02, PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_DISPLAY_VGA << 8, 0xffff00, 0}, \
|
||||
{0x8086, 0x2e12, PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_DISPLAY_VGA << 8, 0xffff00, 0}, \
|
||||
{0x8086, 0x2e22, PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_DISPLAY_VGA << 8, 0xffff00, 0}, \
|
||||
{0x8086, 0x2e32, PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_DISPLAY_VGA << 8, 0xffff00, 0}, \
|
||||
{0x8086, 0xa001, PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_DISPLAY_VGA << 8, 0xffff00, 0}, \
|
||||
{0x8086, 0xa011, PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_DISPLAY_VGA << 8, 0xffff00, 0}, \
|
||||
{0x8086, 0x35e8, PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_DISPLAY_VGA << 8, 0xffff00, 0}, \
|
||||
|
||||
@@ -82,7 +82,19 @@ struct linux_binfmt {
|
||||
int hasvdso;
|
||||
};
|
||||
|
||||
extern int register_binfmt(struct linux_binfmt *);
|
||||
extern int __register_binfmt(struct linux_binfmt *fmt, int insert);
|
||||
|
||||
/* Registration of default binfmt handlers */
|
||||
static inline int register_binfmt(struct linux_binfmt *fmt)
|
||||
{
|
||||
return __register_binfmt(fmt, 0);
|
||||
}
|
||||
/* Same as above, but adds a new binfmt at the top of the list */
|
||||
static inline int insert_binfmt(struct linux_binfmt *fmt)
|
||||
{
|
||||
return __register_binfmt(fmt, 1);
|
||||
}
|
||||
|
||||
extern void unregister_binfmt(struct linux_binfmt *);
|
||||
|
||||
extern int prepare_binprm(struct linux_binprm *);
|
||||
|
||||
@@ -601,6 +601,7 @@ enum {
|
||||
blk_failfast_driver(rq))
|
||||
#define blk_rq_started(rq) ((rq)->cmd_flags & REQ_STARTED)
|
||||
#define blk_rq_io_stat(rq) ((rq)->cmd_flags & REQ_IO_STAT)
|
||||
#define blk_rq_quiet(rq) ((rq)->cmd_flags & REQ_QUIET)
|
||||
|
||||
#define blk_account_rq(rq) (blk_rq_started(rq) && (blk_fs_request(rq) || blk_discard_rq(rq)))
|
||||
|
||||
|
||||
@@ -62,14 +62,6 @@
|
||||
#define __refdata __section(.ref.data)
|
||||
#define __refconst __section(.ref.rodata)
|
||||
|
||||
/* backward compatibility note
|
||||
* A few places hardcode the old section names:
|
||||
* .text.init.refok
|
||||
* .data.init.refok
|
||||
* .exit.text.refok
|
||||
* They should be converted to use the defines from this file
|
||||
*/
|
||||
|
||||
/* compatibility defines */
|
||||
#define __init_refok __ref
|
||||
#define __initdata_refok __refdata
|
||||
|
||||
@@ -106,6 +106,7 @@ struct input_absinfo {
|
||||
|
||||
#define SYN_REPORT 0
|
||||
#define SYN_CONFIG 1
|
||||
#define SYN_MT_REPORT 2
|
||||
|
||||
/*
|
||||
* Keys and buttons
|
||||
@@ -445,6 +446,7 @@ struct input_absinfo {
|
||||
#define BTN_STYLUS2 0x14c
|
||||
#define BTN_TOOL_DOUBLETAP 0x14d
|
||||
#define BTN_TOOL_TRIPLETAP 0x14e
|
||||
#define BTN_TOOL_QUADTAP 0x14f /* Four fingers on trackpad */
|
||||
|
||||
#define BTN_WHEEL 0x150
|
||||
#define BTN_GEAR_DOWN 0x150
|
||||
@@ -644,6 +646,17 @@ struct input_absinfo {
|
||||
#define ABS_TOOL_WIDTH 0x1c
|
||||
#define ABS_VOLUME 0x20
|
||||
#define ABS_MISC 0x28
|
||||
|
||||
#define ABS_MT_TOUCH_MAJOR 0x30 /* Major axis of touching ellipse */
|
||||
#define ABS_MT_TOUCH_MINOR 0x31 /* Minor axis (omit if circular) */
|
||||
#define ABS_MT_WIDTH_MAJOR 0x32 /* Major axis of approaching ellipse */
|
||||
#define ABS_MT_WIDTH_MINOR 0x33 /* Minor axis (omit if circular) */
|
||||
#define ABS_MT_ORIENTATION 0x34 /* Ellipse orientation */
|
||||
#define ABS_MT_POSITION_X 0x35 /* Center X ellipse position */
|
||||
#define ABS_MT_POSITION_Y 0x36 /* Center Y ellipse position */
|
||||
#define ABS_MT_TOOL_TYPE 0x37 /* Type of touching device */
|
||||
#define ABS_MT_BLOB_ID 0x38 /* Group a set of packets as a blob */
|
||||
|
||||
#define ABS_MAX 0x3f
|
||||
#define ABS_CNT (ABS_MAX+1)
|
||||
|
||||
@@ -742,6 +755,12 @@ struct input_absinfo {
|
||||
#define BUS_GSC 0x1A
|
||||
#define BUS_ATARI 0x1B
|
||||
|
||||
/*
|
||||
* MT_TOOL types
|
||||
*/
|
||||
#define MT_TOOL_FINGER 0
|
||||
#define MT_TOOL_PEN 1
|
||||
|
||||
/*
|
||||
* Values describing the status of a force-feedback effect
|
||||
*/
|
||||
@@ -1311,6 +1330,11 @@ static inline void input_sync(struct input_dev *dev)
|
||||
input_event(dev, EV_SYN, SYN_REPORT, 0);
|
||||
}
|
||||
|
||||
static inline void input_mt_sync(struct input_dev *dev)
|
||||
{
|
||||
input_event(dev, EV_SYN, SYN_MT_REPORT, 0);
|
||||
}
|
||||
|
||||
void input_set_capability(struct input_dev *dev, unsigned int type, unsigned int code);
|
||||
|
||||
static inline void input_set_abs_params(struct input_dev *dev, int axis, int min, int max, int fuzz, int flat)
|
||||
|
||||
@@ -56,7 +56,7 @@ extern void mem_cgroup_move_lists(struct page *page,
|
||||
enum lru_list from, enum lru_list to);
|
||||
extern void mem_cgroup_uncharge_page(struct page *page);
|
||||
extern void mem_cgroup_uncharge_cache_page(struct page *page);
|
||||
extern int mem_cgroup_shrink_usage(struct page *page,
|
||||
extern int mem_cgroup_shmem_charge_fallback(struct page *page,
|
||||
struct mm_struct *mm, gfp_t gfp_mask);
|
||||
|
||||
extern unsigned long mem_cgroup_isolate_pages(unsigned long nr_to_scan,
|
||||
@@ -155,7 +155,7 @@ static inline void mem_cgroup_uncharge_cache_page(struct page *page)
|
||||
{
|
||||
}
|
||||
|
||||
static inline int mem_cgroup_shrink_usage(struct page *page,
|
||||
static inline int mem_cgroup_shmem_charge_fallback(struct page *page,
|
||||
struct mm_struct *mm, gfp_t gfp_mask)
|
||||
{
|
||||
return 0;
|
||||
|
||||
@@ -12,21 +12,18 @@
|
||||
|
||||
#ifdef __KERNEL__
|
||||
#include <linux/mm.h>
|
||||
#include <linux/percpu_counter.h>
|
||||
|
||||
#include <asm/atomic.h>
|
||||
|
||||
extern int sysctl_overcommit_memory;
|
||||
extern int sysctl_overcommit_ratio;
|
||||
extern atomic_long_t vm_committed_space;
|
||||
extern struct percpu_counter vm_committed_as;
|
||||
|
||||
#ifdef CONFIG_SMP
|
||||
extern void vm_acct_memory(long pages);
|
||||
#else
|
||||
static inline void vm_acct_memory(long pages)
|
||||
{
|
||||
atomic_long_add(pages, &vm_committed_space);
|
||||
percpu_counter_add(&vm_committed_as, pages);
|
||||
}
|
||||
#endif
|
||||
|
||||
static inline void vm_unacct_memory(long pages)
|
||||
{
|
||||
|
||||
@@ -104,7 +104,7 @@ struct wireless_dev;
|
||||
# else
|
||||
# define LL_MAX_HEADER 96
|
||||
# endif
|
||||
#elif defined(CONFIG_TR)
|
||||
#elif defined(CONFIG_TR) || defined(CONFIG_TR_MODULE)
|
||||
# define LL_MAX_HEADER 48
|
||||
#else
|
||||
# define LL_MAX_HEADER 32
|
||||
@@ -500,7 +500,7 @@ struct netdev_queue {
|
||||
*
|
||||
* int (*ndo_set_mac_address)(struct net_device *dev, void *addr);
|
||||
* This function is called when the Media Access Control address
|
||||
* needs to be changed. If not this interface is not defined, the
|
||||
* needs to be changed. If this interface is not defined, the
|
||||
* mac address can not be changed.
|
||||
*
|
||||
* int (*ndo_validate_addr)(struct net_device *dev);
|
||||
|
||||
@@ -100,6 +100,7 @@ enum ctattr_protoinfo_tcp {
|
||||
enum ctattr_protoinfo_dccp {
|
||||
CTA_PROTOINFO_DCCP_UNSPEC,
|
||||
CTA_PROTOINFO_DCCP_STATE,
|
||||
CTA_PROTOINFO_DCCP_ROLE,
|
||||
__CTA_PROTOINFO_DCCP_MAX,
|
||||
};
|
||||
#define CTA_PROTOINFO_DCCP_MAX (__CTA_PROTOINFO_DCCP_MAX - 1)
|
||||
|
||||
@@ -354,9 +354,6 @@ struct xt_table
|
||||
/* What hooks you will enter on */
|
||||
unsigned int valid_hooks;
|
||||
|
||||
/* Lock for the curtain */
|
||||
struct mutex lock;
|
||||
|
||||
/* Man behind the curtain... */
|
||||
struct xt_table_info *private;
|
||||
|
||||
@@ -434,8 +431,74 @@ extern void xt_proto_fini(struct net *net, u_int8_t af);
|
||||
|
||||
extern struct xt_table_info *xt_alloc_table_info(unsigned int size);
|
||||
extern void xt_free_table_info(struct xt_table_info *info);
|
||||
extern void xt_table_entry_swap_rcu(struct xt_table_info *old,
|
||||
struct xt_table_info *new);
|
||||
|
||||
/*
|
||||
* Per-CPU spinlock associated with per-cpu table entries, and
|
||||
* with a counter for the "reading" side that allows a recursive
|
||||
* reader to avoid taking the lock and deadlocking.
|
||||
*
|
||||
* "reading" is used by ip/arp/ip6 tables rule processing which runs per-cpu.
|
||||
* It needs to ensure that the rules are not being changed while the packet
|
||||
* is being processed. In some cases, the read lock will be acquired
|
||||
* twice on the same CPU; this is okay because of the count.
|
||||
*
|
||||
* "writing" is used when reading counters.
|
||||
* During replace any readers that are using the old tables have to complete
|
||||
* before freeing the old table. This is handled by the write locking
|
||||
* necessary for reading the counters.
|
||||
*/
|
||||
struct xt_info_lock {
|
||||
spinlock_t lock;
|
||||
unsigned char readers;
|
||||
};
|
||||
DECLARE_PER_CPU(struct xt_info_lock, xt_info_locks);
|
||||
|
||||
/*
|
||||
* Note: we need to ensure that preemption is disabled before acquiring
|
||||
* the per-cpu-variable, so we do it as a two step process rather than
|
||||
* using "spin_lock_bh()".
|
||||
*
|
||||
* We _also_ need to disable bottom half processing before updating our
|
||||
* nesting count, to make sure that the only kind of re-entrancy is this
|
||||
* code being called by itself: since the count+lock is not an atomic
|
||||
* operation, we can allow no races.
|
||||
*
|
||||
* _Only_ that special combination of being per-cpu and never getting
|
||||
* re-entered asynchronously means that the count is safe.
|
||||
*/
|
||||
static inline void xt_info_rdlock_bh(void)
|
||||
{
|
||||
struct xt_info_lock *lock;
|
||||
|
||||
local_bh_disable();
|
||||
lock = &__get_cpu_var(xt_info_locks);
|
||||
if (likely(!lock->readers++))
|
||||
spin_lock(&lock->lock);
|
||||
}
|
||||
|
||||
static inline void xt_info_rdunlock_bh(void)
|
||||
{
|
||||
struct xt_info_lock *lock = &__get_cpu_var(xt_info_locks);
|
||||
|
||||
if (likely(!--lock->readers))
|
||||
spin_unlock(&lock->lock);
|
||||
local_bh_enable();
|
||||
}
|
||||
|
||||
/*
|
||||
* The "writer" side needs to get exclusive access to the lock,
|
||||
* regardless of readers. This must be called with bottom half
|
||||
* processing (and thus also preemption) disabled.
|
||||
*/
|
||||
static inline void xt_info_wrlock(unsigned int cpu)
|
||||
{
|
||||
spin_lock(&per_cpu(xt_info_locks, cpu).lock);
|
||||
}
|
||||
|
||||
static inline void xt_info_wrunlock(unsigned int cpu)
|
||||
{
|
||||
spin_unlock(&per_cpu(xt_info_locks, cpu).lock);
|
||||
}
|
||||
|
||||
/*
|
||||
* This helper is performance critical and must be inlined
|
||||
|
||||
@@ -58,6 +58,25 @@ static inline int nls_strnicmp(struct nls_table *t, const unsigned char *s1,
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* nls_nullsize - return length of null character for codepage
|
||||
* @codepage - codepage for which to return length of NULL terminator
|
||||
*
|
||||
* Since we can't guarantee that the null terminator will be a particular
|
||||
* length, we have to check against the codepage. If there's a problem
|
||||
* determining it, assume a single-byte NULL terminator.
|
||||
*/
|
||||
static inline int
|
||||
nls_nullsize(const struct nls_table *codepage)
|
||||
{
|
||||
int charlen;
|
||||
char tmp[NLS_MAX_CHARSET_SIZE];
|
||||
|
||||
charlen = codepage->uni2char(0, tmp, NLS_MAX_CHARSET_SIZE);
|
||||
|
||||
return charlen > 0 ? charlen : 1;
|
||||
}
|
||||
|
||||
#define MODULE_ALIAS_NLS(name) MODULE_ALIAS("nls_" __stringify(name))
|
||||
|
||||
#endif /* _LINUX_NLS_H */
|
||||
|
||||
@@ -51,6 +51,16 @@ extern int of_register_driver(struct of_platform_driver *drv,
|
||||
struct bus_type *bus);
|
||||
extern void of_unregister_driver(struct of_platform_driver *drv);
|
||||
|
||||
/* Platform drivers register/unregister */
|
||||
static inline int of_register_platform_driver(struct of_platform_driver *drv)
|
||||
{
|
||||
return of_register_driver(drv, &of_platform_bus_type);
|
||||
}
|
||||
static inline void of_unregister_platform_driver(struct of_platform_driver *drv)
|
||||
{
|
||||
of_unregister_driver(drv);
|
||||
}
|
||||
|
||||
#include <asm/of_platform.h>
|
||||
|
||||
extern struct of_device *of_find_device_by_node(struct device_node *np);
|
||||
|
||||
@@ -376,6 +376,7 @@
|
||||
#define PCI_EXP_TYPE_DOWNSTREAM 0x6 /* Downstream Port */
|
||||
#define PCI_EXP_TYPE_PCI_BRIDGE 0x7 /* PCI/PCI-X Bridge */
|
||||
#define PCI_EXP_TYPE_RC_END 0x9 /* Root Complex Integrated Endpoint */
|
||||
#define PCI_EXP_TYPE_RC_EC 0x10 /* Root Complex Event Collector */
|
||||
#define PCI_EXP_FLAGS_SLOT 0x0100 /* Slot implemented */
|
||||
#define PCI_EXP_FLAGS_IRQ 0x3e00 /* Interrupt message number */
|
||||
#define PCI_EXP_DEVCAP 4 /* Device capabilities */
|
||||
|
||||
@@ -50,6 +50,7 @@ enum regulator_status {
|
||||
* @set_current_limit: Configure a limit for a current-limited regulator.
|
||||
* @get_current_limit: Get the configured limit for a current-limited regulator.
|
||||
*
|
||||
* @set_mode: Set the configured operating mode for the regulator.
|
||||
* @get_mode: Get the configured operating mode for the regulator.
|
||||
* @get_status: Return actual (not as-configured) status of regulator, as a
|
||||
* REGULATOR_STATUS value (or negative errno)
|
||||
|
||||
@@ -261,6 +261,7 @@ void xprt_conditional_disconnect(struct rpc_xprt *xprt, unsigned int cookie);
|
||||
#define XPRT_BINDING (5)
|
||||
#define XPRT_CLOSING (6)
|
||||
#define XPRT_CONNECTION_ABORT (7)
|
||||
#define XPRT_CONNECTION_CLOSE (8)
|
||||
|
||||
static inline void xprt_set_connected(struct rpc_xprt *xprt)
|
||||
{
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
#define USB_CDC_SUBCLASS_DMM 0x09
|
||||
#define USB_CDC_SUBCLASS_MDLM 0x0a
|
||||
#define USB_CDC_SUBCLASS_OBEX 0x0b
|
||||
#define USB_CDC_SUBCLASS_EEM 0x0c
|
||||
|
||||
#define USB_CDC_PROTO_NONE 0
|
||||
|
||||
@@ -28,6 +29,8 @@
|
||||
#define USB_CDC_ACM_PROTO_AT_CDMA 6
|
||||
#define USB_CDC_ACM_PROTO_VENDOR 0xff
|
||||
|
||||
#define USB_CDC_PROTO_EEM 7
|
||||
|
||||
/*-------------------------------------------------------------------------*/
|
||||
|
||||
/*
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
* compatible drivers/servers. */
|
||||
#include <linux/types.h>
|
||||
#include <linux/virtio_config.h>
|
||||
#include <linux/if_ether.h>
|
||||
|
||||
/* The ID for virtio_net */
|
||||
#define VIRTIO_ID_NET 1
|
||||
|
||||
@@ -440,13 +440,15 @@ void abort_exclusive_wait(wait_queue_head_t *q, wait_queue_t *wait,
|
||||
int autoremove_wake_function(wait_queue_t *wait, unsigned mode, int sync, void *key);
|
||||
int wake_bit_function(wait_queue_t *wait, unsigned mode, int sync, void *key);
|
||||
|
||||
#define DEFINE_WAIT(name) \
|
||||
#define DEFINE_WAIT_FUNC(name, function) \
|
||||
wait_queue_t name = { \
|
||||
.private = current, \
|
||||
.func = autoremove_wake_function, \
|
||||
.func = function, \
|
||||
.task_list = LIST_HEAD_INIT((name).task_list), \
|
||||
}
|
||||
|
||||
#define DEFINE_WAIT(name) DEFINE_WAIT_FUNC(name, autoremove_wake_function)
|
||||
|
||||
#define DEFINE_WAIT_BIT(name, word, bit) \
|
||||
struct wait_bit_queue name = { \
|
||||
.key = __WAIT_BIT_KEY_INITIALIZER(word, bit), \
|
||||
|
||||
@@ -98,7 +98,6 @@ enum p9_req_status_t {
|
||||
struct p9_req_t {
|
||||
int status;
|
||||
int t_err;
|
||||
u16 flush_tag;
|
||||
wait_queue_head_t *wq;
|
||||
struct p9_fcall *tc;
|
||||
struct p9_fcall *rc;
|
||||
|
||||
@@ -101,6 +101,7 @@ enum {
|
||||
/* HCI timeouts */
|
||||
#define HCI_CONNECT_TIMEOUT (40000) /* 40 seconds */
|
||||
#define HCI_DISCONN_TIMEOUT (2000) /* 2 seconds */
|
||||
#define HCI_PAIRING_TIMEOUT (60000) /* 60 seconds */
|
||||
#define HCI_IDLE_TIMEOUT (6000) /* 6 seconds */
|
||||
#define HCI_INIT_TIMEOUT (10000) /* 10 seconds */
|
||||
|
||||
|
||||
@@ -171,6 +171,7 @@ struct hci_conn {
|
||||
__u8 auth_type;
|
||||
__u8 sec_level;
|
||||
__u8 power_save;
|
||||
__u16 disc_timeout;
|
||||
unsigned long pend;
|
||||
|
||||
unsigned int sent;
|
||||
@@ -180,7 +181,8 @@ struct hci_conn {
|
||||
struct timer_list disc_timer;
|
||||
struct timer_list idle_timer;
|
||||
|
||||
struct work_struct work;
|
||||
struct work_struct work_add;
|
||||
struct work_struct work_del;
|
||||
|
||||
struct device dev;
|
||||
|
||||
@@ -348,9 +350,9 @@ static inline void hci_conn_put(struct hci_conn *conn)
|
||||
if (conn->type == ACL_LINK) {
|
||||
del_timer(&conn->idle_timer);
|
||||
if (conn->state == BT_CONNECTED) {
|
||||
timeo = msecs_to_jiffies(HCI_DISCONN_TIMEOUT);
|
||||
timeo = msecs_to_jiffies(conn->disc_timeout);
|
||||
if (!conn->out)
|
||||
timeo *= 5;
|
||||
timeo *= 2;
|
||||
} else
|
||||
timeo = msecs_to_jiffies(10);
|
||||
} else
|
||||
@@ -455,6 +457,7 @@ int hci_recv_fragment(struct hci_dev *hdev, int type, void *data, int count);
|
||||
|
||||
int hci_register_sysfs(struct hci_dev *hdev);
|
||||
void hci_unregister_sysfs(struct hci_dev *hdev);
|
||||
void hci_conn_init_sysfs(struct hci_conn *conn);
|
||||
void hci_conn_add_sysfs(struct hci_conn *conn);
|
||||
void hci_conn_del_sysfs(struct hci_conn *conn);
|
||||
|
||||
|
||||
@@ -41,6 +41,7 @@
|
||||
#include <net/ip.h>
|
||||
#include <net/tcp_states.h>
|
||||
#include <net/inet_ecn.h>
|
||||
#include <net/dst.h>
|
||||
|
||||
#include <linux/seq_file.h>
|
||||
|
||||
@@ -530,6 +531,17 @@ static inline void tcp_fast_path_check(struct sock *sk)
|
||||
tcp_fast_path_on(tp);
|
||||
}
|
||||
|
||||
/* Compute the actual rto_min value */
|
||||
static inline u32 tcp_rto_min(struct sock *sk)
|
||||
{
|
||||
struct dst_entry *dst = __sk_dst_get(sk);
|
||||
u32 rto_min = TCP_RTO_MIN;
|
||||
|
||||
if (dst && dst_metric_locked(dst, RTAX_RTO_MIN))
|
||||
rto_min = dst_metric_rtt(dst, RTAX_RTO_MIN);
|
||||
return rto_min;
|
||||
}
|
||||
|
||||
/* Compute the actual receive window we are currently advertising.
|
||||
* Rcv_nxt can be after the window if our peer push more data
|
||||
* than the offered window.
|
||||
@@ -895,7 +907,7 @@ static inline int tcp_prequeue(struct sock *sk, struct sk_buff *skb)
|
||||
wake_up_interruptible(sk->sk_sleep);
|
||||
if (!inet_csk_ack_scheduled(sk))
|
||||
inet_csk_reset_xmit_timer(sk, ICSK_TIME_DACK,
|
||||
(3 * TCP_RTO_MIN) / 4,
|
||||
(3 * tcp_rto_min(sk)) / 4,
|
||||
TCP_RTO_MAX);
|
||||
}
|
||||
return 1;
|
||||
|
||||
@@ -149,6 +149,7 @@ enum fc_rctl {
|
||||
* Well-known fabric addresses.
|
||||
*/
|
||||
enum fc_well_known_fid {
|
||||
FC_FID_NONE = 0x000000, /* No destination */
|
||||
FC_FID_BCAST = 0xffffff, /* broadcast */
|
||||
FC_FID_FLOGI = 0xfffffe, /* fabric login */
|
||||
FC_FID_FCTRL = 0xfffffd, /* fabric controller */
|
||||
|
||||
@@ -637,6 +637,7 @@ struct fc_disc {
|
||||
enum fc_disc_event);
|
||||
|
||||
struct list_head rports;
|
||||
struct list_head rogue_rports;
|
||||
struct fc_lport *lport;
|
||||
struct mutex disc_mutex;
|
||||
struct fc_gpn_ft_resp partial_buf; /* partial name buffer */
|
||||
|
||||
@@ -36,6 +36,7 @@ struct scsi_transport_template;
|
||||
struct scsi_host_template;
|
||||
struct scsi_device;
|
||||
struct Scsi_Host;
|
||||
struct scsi_target;
|
||||
struct scsi_cmnd;
|
||||
struct socket;
|
||||
struct iscsi_transport;
|
||||
@@ -350,6 +351,7 @@ extern struct Scsi_Host *iscsi_host_alloc(struct scsi_host_template *sht,
|
||||
bool xmit_can_sleep);
|
||||
extern void iscsi_host_remove(struct Scsi_Host *shost);
|
||||
extern void iscsi_host_free(struct Scsi_Host *shost);
|
||||
extern int iscsi_target_alloc(struct scsi_target *starget);
|
||||
|
||||
/*
|
||||
* session management
|
||||
|
||||
@@ -24,17 +24,18 @@ enum {
|
||||
OSDv1_ADDITIONAL_CDB_LENGTH = 192,
|
||||
OSDv1_TOTAL_CDB_LEN = OSDv1_ADDITIONAL_CDB_LENGTH + 8,
|
||||
OSDv1_CAP_LEN = 80,
|
||||
|
||||
/* Latest supported version */
|
||||
/* OSD_ADDITIONAL_CDB_LENGTH = 216,*/
|
||||
OSDv2_ADDITIONAL_CDB_LENGTH = 228,
|
||||
OSD_ADDITIONAL_CDB_LENGTH =
|
||||
OSDv1_ADDITIONAL_CDB_LENGTH, /* FIXME: Pete rev-001 sup */
|
||||
OSDv2_ADDITIONAL_CDB_LENGTH,
|
||||
OSD_TOTAL_CDB_LEN = OSD_ADDITIONAL_CDB_LENGTH + 8,
|
||||
/* OSD_CAP_LEN = 104,*/
|
||||
OSD_CAP_LEN = OSDv1_CAP_LEN,/* FIXME: Pete rev-001 sup */
|
||||
OSD_CAP_LEN = 104,
|
||||
|
||||
OSD_SYSTEMID_LEN = 20,
|
||||
OSD_CRYPTO_KEYID_SIZE = 20,
|
||||
/*FIXME: OSDv2_CRYPTO_KEYID_SIZE = 32,*/
|
||||
OSDv1_CRYPTO_KEYID_SIZE = 20,
|
||||
OSDv2_CRYPTO_KEYID_SIZE = 32,
|
||||
OSD_CRYPTO_KEYID_SIZE = OSDv2_CRYPTO_KEYID_SIZE,
|
||||
OSD_CRYPTO_SEED_SIZE = 4,
|
||||
OSD_CRYPTO_NONCE_SIZE = 12,
|
||||
OSD_MAX_SENSE_LEN = 252, /* from SPC-3 */
|
||||
@@ -164,7 +165,11 @@ struct osd_cdb_head {
|
||||
/* called allocation_length in some commands */
|
||||
/*32*/ __be64 length;
|
||||
/*40*/ __be64 start_address;
|
||||
/*48*/ __be32 list_identifier;/* Rarely used */
|
||||
union {
|
||||
/*48*/ __be32 list_identifier;/* Rarely used */
|
||||
/* OSD2r05 5.2.5 CDB continuation length */
|
||||
/*48*/ __be32 cdb_continuation_length;
|
||||
};
|
||||
} __packed v2;
|
||||
};
|
||||
/*52*/ union { /* selected attributes mode Page/List/Single */
|
||||
@@ -204,29 +209,40 @@ struct osd_cdb_head {
|
||||
/*80*/
|
||||
|
||||
/*160 v1*/
|
||||
/*184 v2*/
|
||||
struct osd_security_parameters {
|
||||
/*160*/u8 integrity_check_value[OSD_CRYPTO_KEYID_SIZE];
|
||||
struct osdv1_security_parameters {
|
||||
/*160*/u8 integrity_check_value[OSDv1_CRYPTO_KEYID_SIZE];
|
||||
/*180*/u8 request_nonce[OSD_CRYPTO_NONCE_SIZE];
|
||||
/*192*/osd_cdb_offset data_in_integrity_check_offset;
|
||||
/*196*/osd_cdb_offset data_out_integrity_check_offset;
|
||||
} __packed;
|
||||
/*200 v1*/
|
||||
/*224 v2*/
|
||||
|
||||
/* FIXME: osdv2_security_parameters */
|
||||
/*184 v2*/
|
||||
struct osdv2_security_parameters {
|
||||
/*184*/u8 integrity_check_value[OSDv2_CRYPTO_KEYID_SIZE];
|
||||
/*216*/u8 request_nonce[OSD_CRYPTO_NONCE_SIZE];
|
||||
/*228*/osd_cdb_offset data_in_integrity_check_offset;
|
||||
/*232*/osd_cdb_offset data_out_integrity_check_offset;
|
||||
} __packed;
|
||||
/*236 v2*/
|
||||
|
||||
struct osd_security_parameters {
|
||||
union {
|
||||
struct osdv1_security_parameters v1;
|
||||
struct osdv2_security_parameters v2;
|
||||
};
|
||||
};
|
||||
|
||||
struct osdv1_cdb {
|
||||
struct osd_cdb_head h;
|
||||
u8 caps[OSDv1_CAP_LEN];
|
||||
struct osd_security_parameters sec_params;
|
||||
struct osdv1_security_parameters sec_params;
|
||||
} __packed;
|
||||
|
||||
struct osdv2_cdb {
|
||||
struct osd_cdb_head h;
|
||||
u8 caps[OSD_CAP_LEN];
|
||||
struct osd_security_parameters sec_params;
|
||||
/* FIXME: osdv2_security_parameters */
|
||||
struct osdv2_security_parameters sec_params;
|
||||
} __packed;
|
||||
|
||||
struct osd_cdb {
|
||||
@@ -301,14 +317,25 @@ struct osd_attributes_list_attrid {
|
||||
} __packed;
|
||||
|
||||
/*
|
||||
* osd2r03: 7.1.3.3 List entry format for retrieved attributes and
|
||||
* for setting attributes
|
||||
* NOTE: v2 is 8-bytes aligned, v1 is not aligned.
|
||||
* NOTE: v1: is not aligned.
|
||||
*/
|
||||
struct osd_attributes_list_element {
|
||||
struct osdv1_attributes_list_element {
|
||||
__be32 attr_page;
|
||||
__be32 attr_id;
|
||||
__be16 attr_bytes;
|
||||
__be16 attr_bytes; /* valid bytes at attr_val without padding */
|
||||
u8 attr_val[0];
|
||||
} __packed;
|
||||
|
||||
/*
|
||||
* osd2r03: 7.1.3.3 List entry format for retrieved attributes and
|
||||
* for setting attributes
|
||||
* NOTE: v2 is 8-bytes aligned
|
||||
*/
|
||||
struct osdv2_attributes_list_element {
|
||||
__be32 attr_page;
|
||||
__be32 attr_id;
|
||||
u8 reserved[6];
|
||||
__be16 attr_bytes; /* valid bytes at attr_val without padding */
|
||||
u8 attr_val[0];
|
||||
} __packed;
|
||||
|
||||
@@ -324,13 +351,13 @@ enum {
|
||||
|
||||
static inline unsigned osdv1_attr_list_elem_size(unsigned len)
|
||||
{
|
||||
return ALIGN(len + sizeof(struct osd_attributes_list_element),
|
||||
return ALIGN(len + sizeof(struct osdv1_attributes_list_element),
|
||||
OSDv1_ATTRIBUTES_ELEM_ALIGN);
|
||||
}
|
||||
|
||||
static inline unsigned osdv2_attr_list_elem_size(unsigned len)
|
||||
{
|
||||
return ALIGN(len + sizeof(struct osd_attributes_list_element),
|
||||
return ALIGN(len + sizeof(struct osdv2_attributes_list_element),
|
||||
OSD_ATTRIBUTES_ELEM_ALIGN);
|
||||
}
|
||||
|
||||
@@ -419,15 +446,35 @@ struct osd_data_out_integrity_info {
|
||||
__be64 data_bytes;
|
||||
__be64 set_attributes_bytes;
|
||||
__be64 get_attributes_bytes;
|
||||
__be64 integrity_check_value;
|
||||
__u8 integrity_check_value[OSD_CRYPTO_KEYID_SIZE];
|
||||
} __packed;
|
||||
|
||||
/* Same osd_data_out_integrity_info is used for OSD2/OSD1. The only difference
|
||||
* Is the sizeof the structure since in OSD1 the last array is smaller. Use
|
||||
* below for version independent handling of this structure
|
||||
*/
|
||||
static inline int osd_data_out_integrity_info_sizeof(bool is_ver1)
|
||||
{
|
||||
return sizeof(struct osd_data_out_integrity_info) -
|
||||
(is_ver1 * (OSDv2_CRYPTO_KEYID_SIZE - OSDv1_CRYPTO_KEYID_SIZE));
|
||||
}
|
||||
|
||||
struct osd_data_in_integrity_info {
|
||||
__be64 data_bytes;
|
||||
__be64 retrieved_attributes_bytes;
|
||||
__be64 integrity_check_value;
|
||||
__u8 integrity_check_value[OSD_CRYPTO_KEYID_SIZE];
|
||||
} __packed;
|
||||
|
||||
/* Same osd_data_in_integrity_info is used for OSD2/OSD1. The only difference
|
||||
* Is the sizeof the structure since in OSD1 the last array is smaller. Use
|
||||
* below for version independent handling of this structure
|
||||
*/
|
||||
static inline int osd_data_in_integrity_info_sizeof(bool is_ver1)
|
||||
{
|
||||
return sizeof(struct osd_data_in_integrity_info) -
|
||||
(is_ver1 * (OSDv2_CRYPTO_KEYID_SIZE - OSDv1_CRYPTO_KEYID_SIZE));
|
||||
}
|
||||
|
||||
struct osd_timestamp {
|
||||
u8 time[6]; /* number of milliseconds since 1/1/1970 UT (big endian) */
|
||||
} __packed;
|
||||
@@ -477,7 +524,7 @@ enum osd_capability_bit_masks {
|
||||
|
||||
OSD_SEC_CAP_NONE1 = BIT(8),
|
||||
OSD_SEC_CAP_NONE2 = BIT(9),
|
||||
OSD_SEC_CAP_NONE3 = BIT(10),
|
||||
OSD_SEC_GBL_REM = BIT(10), /*v2 only*/
|
||||
OSD_SEC_CAP_QUERY = BIT(11), /*v2 only*/
|
||||
OSD_SEC_CAP_M_OBJECT = BIT(12), /*v2 only*/
|
||||
OSD_SEC_CAP_POL_SEC = BIT(13),
|
||||
@@ -552,8 +599,7 @@ struct osdv1_capability {
|
||||
|
||||
struct osd_capability {
|
||||
struct osd_capability_head h;
|
||||
/* struct osd_cap_object_descriptor od;*/
|
||||
struct osdv1_cap_object_descriptor od; /* FIXME: Pete rev-001 sup */
|
||||
struct osd_cap_object_descriptor od;
|
||||
} __packed;
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user