diff options
Diffstat (limited to 'include')
37 files changed, 388 insertions, 194 deletions
diff --git a/include/asm-generic/vmlinux.lds.h b/include/asm-generic/vmlinux.lds.h index db22d136ad08..b5e2e4c6b017 100644 --- a/include/asm-generic/vmlinux.lds.h +++ b/include/asm-generic/vmlinux.lds.h | |||
@@ -222,7 +222,6 @@ | |||
222 | VMLINUX_SYMBOL(__start___tracepoints_ptrs) = .; \ | 222 | VMLINUX_SYMBOL(__start___tracepoints_ptrs) = .; \ |
223 | *(__tracepoints_ptrs) /* Tracepoints: pointer array */\ | 223 | *(__tracepoints_ptrs) /* Tracepoints: pointer array */\ |
224 | VMLINUX_SYMBOL(__stop___tracepoints_ptrs) = .; \ | 224 | VMLINUX_SYMBOL(__stop___tracepoints_ptrs) = .; \ |
225 | *(__markers_strings) /* Markers: strings */ \ | ||
226 | *(__tracepoints_strings)/* Tracepoints: strings */ \ | 225 | *(__tracepoints_strings)/* Tracepoints: strings */ \ |
227 | } \ | 226 | } \ |
228 | \ | 227 | \ |
diff --git a/include/linux/blk_types.h b/include/linux/blk_types.h index 32f0076e844b..71fc53bb8f1c 100644 --- a/include/linux/blk_types.h +++ b/include/linux/blk_types.h | |||
@@ -124,6 +124,7 @@ enum rq_flag_bits { | |||
124 | 124 | ||
125 | __REQ_SYNC, /* request is sync (sync write or read) */ | 125 | __REQ_SYNC, /* request is sync (sync write or read) */ |
126 | __REQ_META, /* metadata io request */ | 126 | __REQ_META, /* metadata io request */ |
127 | __REQ_PRIO, /* boost priority in cfq */ | ||
127 | __REQ_DISCARD, /* request to discard sectors */ | 128 | __REQ_DISCARD, /* request to discard sectors */ |
128 | __REQ_SECURE, /* secure discard (used with __REQ_DISCARD) */ | 129 | __REQ_SECURE, /* secure discard (used with __REQ_DISCARD) */ |
129 | 130 | ||
@@ -161,14 +162,15 @@ enum rq_flag_bits { | |||
161 | #define REQ_FAILFAST_DRIVER (1 << __REQ_FAILFAST_DRIVER) | 162 | #define REQ_FAILFAST_DRIVER (1 << __REQ_FAILFAST_DRIVER) |
162 | #define REQ_SYNC (1 << __REQ_SYNC) | 163 | #define REQ_SYNC (1 << __REQ_SYNC) |
163 | #define REQ_META (1 << __REQ_META) | 164 | #define REQ_META (1 << __REQ_META) |
165 | #define REQ_PRIO (1 << __REQ_PRIO) | ||
164 | #define REQ_DISCARD (1 << __REQ_DISCARD) | 166 | #define REQ_DISCARD (1 << __REQ_DISCARD) |
165 | #define REQ_NOIDLE (1 << __REQ_NOIDLE) | 167 | #define REQ_NOIDLE (1 << __REQ_NOIDLE) |
166 | 168 | ||
167 | #define REQ_FAILFAST_MASK \ | 169 | #define REQ_FAILFAST_MASK \ |
168 | (REQ_FAILFAST_DEV | REQ_FAILFAST_TRANSPORT | REQ_FAILFAST_DRIVER) | 170 | (REQ_FAILFAST_DEV | REQ_FAILFAST_TRANSPORT | REQ_FAILFAST_DRIVER) |
169 | #define REQ_COMMON_MASK \ | 171 | #define REQ_COMMON_MASK \ |
170 | (REQ_WRITE | REQ_FAILFAST_MASK | REQ_SYNC | REQ_META | REQ_DISCARD | \ | 172 | (REQ_WRITE | REQ_FAILFAST_MASK | REQ_SYNC | REQ_META | REQ_PRIO | \ |
171 | REQ_NOIDLE | REQ_FLUSH | REQ_FUA | REQ_SECURE) | 173 | REQ_DISCARD | REQ_NOIDLE | REQ_FLUSH | REQ_FUA | REQ_SECURE) |
172 | #define REQ_CLONE_MASK REQ_COMMON_MASK | 174 | #define REQ_CLONE_MASK REQ_COMMON_MASK |
173 | 175 | ||
174 | #define REQ_RAHEAD (1 << __REQ_RAHEAD) | 176 | #define REQ_RAHEAD (1 << __REQ_RAHEAD) |
diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h index 84b15d54f8c2..7fbaa9103344 100644 --- a/include/linux/blkdev.h +++ b/include/linux/blkdev.h | |||
@@ -873,7 +873,6 @@ struct blk_plug { | |||
873 | struct list_head list; | 873 | struct list_head list; |
874 | struct list_head cb_list; | 874 | struct list_head cb_list; |
875 | unsigned int should_sort; | 875 | unsigned int should_sort; |
876 | unsigned int count; | ||
877 | }; | 876 | }; |
878 | #define BLK_MAX_REQUEST_COUNT 16 | 877 | #define BLK_MAX_REQUEST_COUNT 16 |
879 | 878 | ||
diff --git a/include/linux/device-mapper.h b/include/linux/device-mapper.h index 3fa1f3d90ce0..99e3e50b5c57 100644 --- a/include/linux/device-mapper.h +++ b/include/linux/device-mapper.h | |||
@@ -197,6 +197,11 @@ struct dm_target { | |||
197 | * whether or not its underlying devices have support. | 197 | * whether or not its underlying devices have support. |
198 | */ | 198 | */ |
199 | unsigned discards_supported:1; | 199 | unsigned discards_supported:1; |
200 | |||
201 | /* | ||
202 | * Set if this target does not return zeroes on discarded blocks. | ||
203 | */ | ||
204 | unsigned discard_zeroes_data_unsupported:1; | ||
200 | }; | 205 | }; |
201 | 206 | ||
202 | /* Each target can link one of these into the table */ | 207 | /* Each target can link one of these into the table */ |
diff --git a/include/linux/evm.h b/include/linux/evm.h new file mode 100644 index 000000000000..9fc13a760928 --- /dev/null +++ b/include/linux/evm.h | |||
@@ -0,0 +1,100 @@ | |||
1 | /* | ||
2 | * evm.h | ||
3 | * | ||
4 | * Copyright (c) 2009 IBM Corporation | ||
5 | * Author: Mimi Zohar <zohar@us.ibm.com> | ||
6 | */ | ||
7 | |||
8 | #ifndef _LINUX_EVM_H | ||
9 | #define _LINUX_EVM_H | ||
10 | |||
11 | #include <linux/integrity.h> | ||
12 | #include <linux/xattr.h> | ||
13 | |||
14 | struct integrity_iint_cache; | ||
15 | |||
16 | #ifdef CONFIG_EVM | ||
17 | extern enum integrity_status evm_verifyxattr(struct dentry *dentry, | ||
18 | const char *xattr_name, | ||
19 | void *xattr_value, | ||
20 | size_t xattr_value_len, | ||
21 | struct integrity_iint_cache *iint); | ||
22 | extern int evm_inode_setattr(struct dentry *dentry, struct iattr *attr); | ||
23 | extern void evm_inode_post_setattr(struct dentry *dentry, int ia_valid); | ||
24 | extern int evm_inode_setxattr(struct dentry *dentry, const char *name, | ||
25 | const void *value, size_t size); | ||
26 | extern void evm_inode_post_setxattr(struct dentry *dentry, | ||
27 | const char *xattr_name, | ||
28 | const void *xattr_value, | ||
29 | size_t xattr_value_len); | ||
30 | extern int evm_inode_removexattr(struct dentry *dentry, const char *xattr_name); | ||
31 | extern void evm_inode_post_removexattr(struct dentry *dentry, | ||
32 | const char *xattr_name); | ||
33 | extern int evm_inode_init_security(struct inode *inode, | ||
34 | const struct xattr *xattr_array, | ||
35 | struct xattr *evm); | ||
36 | #ifdef CONFIG_FS_POSIX_ACL | ||
37 | extern int posix_xattr_acl(const char *xattrname); | ||
38 | #else | ||
39 | static inline int posix_xattr_acl(const char *xattrname) | ||
40 | { | ||
41 | return 0; | ||
42 | } | ||
43 | #endif | ||
44 | #else | ||
45 | #ifdef CONFIG_INTEGRITY | ||
46 | static inline enum integrity_status evm_verifyxattr(struct dentry *dentry, | ||
47 | const char *xattr_name, | ||
48 | void *xattr_value, | ||
49 | size_t xattr_value_len, | ||
50 | struct integrity_iint_cache *iint) | ||
51 | { | ||
52 | return INTEGRITY_UNKNOWN; | ||
53 | } | ||
54 | #endif | ||
55 | |||
56 | static inline int evm_inode_setattr(struct dentry *dentry, struct iattr *attr) | ||
57 | { | ||
58 | return 0; | ||
59 | } | ||
60 | |||
61 | static inline void evm_inode_post_setattr(struct dentry *dentry, int ia_valid) | ||
62 | { | ||
63 | return; | ||
64 | } | ||
65 | |||
66 | static inline int evm_inode_setxattr(struct dentry *dentry, const char *name, | ||
67 | const void *value, size_t size) | ||
68 | { | ||
69 | return 0; | ||
70 | } | ||
71 | |||
72 | static inline void evm_inode_post_setxattr(struct dentry *dentry, | ||
73 | const char *xattr_name, | ||
74 | const void *xattr_value, | ||
75 | size_t xattr_value_len) | ||
76 | { | ||
77 | return; | ||
78 | } | ||
79 | |||
80 | static inline int evm_inode_removexattr(struct dentry *dentry, | ||
81 | const char *xattr_name) | ||
82 | { | ||
83 | return 0; | ||
84 | } | ||
85 | |||
86 | static inline void evm_inode_post_removexattr(struct dentry *dentry, | ||
87 | const char *xattr_name) | ||
88 | { | ||
89 | return; | ||
90 | } | ||
91 | |||
92 | static inline int evm_inode_init_security(struct inode *inode, | ||
93 | const struct xattr *xattr_array, | ||
94 | struct xattr *evm) | ||
95 | { | ||
96 | return 0; | ||
97 | } | ||
98 | |||
99 | #endif /* CONFIG_EVM_H */ | ||
100 | #endif /* LINUX_EVM_H */ | ||
diff --git a/include/linux/fs.h b/include/linux/fs.h index c2bd68f2277a..277f497923a2 100644 --- a/include/linux/fs.h +++ b/include/linux/fs.h | |||
@@ -162,10 +162,8 @@ struct inodes_stat_t { | |||
162 | #define READA RWA_MASK | 162 | #define READA RWA_MASK |
163 | 163 | ||
164 | #define READ_SYNC (READ | REQ_SYNC) | 164 | #define READ_SYNC (READ | REQ_SYNC) |
165 | #define READ_META (READ | REQ_META) | ||
166 | #define WRITE_SYNC (WRITE | REQ_SYNC | REQ_NOIDLE) | 165 | #define WRITE_SYNC (WRITE | REQ_SYNC | REQ_NOIDLE) |
167 | #define WRITE_ODIRECT (WRITE | REQ_SYNC) | 166 | #define WRITE_ODIRECT (WRITE | REQ_SYNC) |
168 | #define WRITE_META (WRITE | REQ_META) | ||
169 | #define WRITE_FLUSH (WRITE | REQ_SYNC | REQ_NOIDLE | REQ_FLUSH) | 167 | #define WRITE_FLUSH (WRITE | REQ_SYNC | REQ_NOIDLE | REQ_FLUSH) |
170 | #define WRITE_FUA (WRITE | REQ_SYNC | REQ_NOIDLE | REQ_FUA) | 168 | #define WRITE_FUA (WRITE | REQ_SYNC | REQ_NOIDLE | REQ_FUA) |
171 | #define WRITE_FLUSH_FUA (WRITE | REQ_SYNC | REQ_NOIDLE | REQ_FLUSH | REQ_FUA) | 169 | #define WRITE_FLUSH_FUA (WRITE | REQ_SYNC | REQ_NOIDLE | REQ_FLUSH | REQ_FUA) |
diff --git a/include/linux/hid.h b/include/linux/hid.h index 9cf8e7ae7450..deed5f9a1e1c 100644 --- a/include/linux/hid.h +++ b/include/linux/hid.h | |||
@@ -71,6 +71,7 @@ | |||
71 | #include <linux/timer.h> | 71 | #include <linux/timer.h> |
72 | #include <linux/workqueue.h> | 72 | #include <linux/workqueue.h> |
73 | #include <linux/input.h> | 73 | #include <linux/input.h> |
74 | #include <linux/semaphore.h> | ||
74 | 75 | ||
75 | /* | 76 | /* |
76 | * We parse each description item into this structure. Short items data | 77 | * We parse each description item into this structure. Short items data |
@@ -312,6 +313,7 @@ struct hid_item { | |||
312 | #define HID_QUIRK_BADPAD 0x00000020 | 313 | #define HID_QUIRK_BADPAD 0x00000020 |
313 | #define HID_QUIRK_MULTI_INPUT 0x00000040 | 314 | #define HID_QUIRK_MULTI_INPUT 0x00000040 |
314 | #define HID_QUIRK_HIDINPUT_FORCE 0x00000080 | 315 | #define HID_QUIRK_HIDINPUT_FORCE 0x00000080 |
316 | #define HID_QUIRK_MULTITOUCH 0x00000100 | ||
315 | #define HID_QUIRK_SKIP_OUTPUT_REPORTS 0x00010000 | 317 | #define HID_QUIRK_SKIP_OUTPUT_REPORTS 0x00010000 |
316 | #define HID_QUIRK_FULLSPEED_INTERVAL 0x10000000 | 318 | #define HID_QUIRK_FULLSPEED_INTERVAL 0x10000000 |
317 | #define HID_QUIRK_NO_INIT_REPORTS 0x20000000 | 319 | #define HID_QUIRK_NO_INIT_REPORTS 0x20000000 |
@@ -475,6 +477,7 @@ struct hid_device { /* device report descriptor */ | |||
475 | unsigned country; /* HID country */ | 477 | unsigned country; /* HID country */ |
476 | struct hid_report_enum report_enum[HID_REPORT_TYPES]; | 478 | struct hid_report_enum report_enum[HID_REPORT_TYPES]; |
477 | 479 | ||
480 | struct semaphore driver_lock; /* protects the current driver */ | ||
478 | struct device dev; /* device */ | 481 | struct device dev; /* device */ |
479 | struct hid_driver *driver; | 482 | struct hid_driver *driver; |
480 | struct hid_ll_driver *ll_driver; | 483 | struct hid_ll_driver *ll_driver; |
diff --git a/include/linux/ima.h b/include/linux/ima.h index 09e6e62f9953..6ac8e50c6cf5 100644 --- a/include/linux/ima.h +++ b/include/linux/ima.h | |||
@@ -15,8 +15,6 @@ struct linux_binprm; | |||
15 | 15 | ||
16 | #ifdef CONFIG_IMA | 16 | #ifdef CONFIG_IMA |
17 | extern int ima_bprm_check(struct linux_binprm *bprm); | 17 | extern int ima_bprm_check(struct linux_binprm *bprm); |
18 | extern int ima_inode_alloc(struct inode *inode); | ||
19 | extern void ima_inode_free(struct inode *inode); | ||
20 | extern int ima_file_check(struct file *file, int mask); | 18 | extern int ima_file_check(struct file *file, int mask); |
21 | extern void ima_file_free(struct file *file); | 19 | extern void ima_file_free(struct file *file); |
22 | extern int ima_file_mmap(struct file *file, unsigned long prot); | 20 | extern int ima_file_mmap(struct file *file, unsigned long prot); |
@@ -27,16 +25,6 @@ static inline int ima_bprm_check(struct linux_binprm *bprm) | |||
27 | return 0; | 25 | return 0; |
28 | } | 26 | } |
29 | 27 | ||
30 | static inline int ima_inode_alloc(struct inode *inode) | ||
31 | { | ||
32 | return 0; | ||
33 | } | ||
34 | |||
35 | static inline void ima_inode_free(struct inode *inode) | ||
36 | { | ||
37 | return; | ||
38 | } | ||
39 | |||
40 | static inline int ima_file_check(struct file *file, int mask) | 28 | static inline int ima_file_check(struct file *file, int mask) |
41 | { | 29 | { |
42 | return 0; | 30 | return 0; |
@@ -51,6 +39,5 @@ static inline int ima_file_mmap(struct file *file, unsigned long prot) | |||
51 | { | 39 | { |
52 | return 0; | 40 | return 0; |
53 | } | 41 | } |
54 | |||
55 | #endif /* CONFIG_IMA_H */ | 42 | #endif /* CONFIG_IMA_H */ |
56 | #endif /* _LINUX_IMA_H */ | 43 | #endif /* _LINUX_IMA_H */ |
diff --git a/include/linux/integrity.h b/include/linux/integrity.h new file mode 100644 index 000000000000..a0c41256cb92 --- /dev/null +++ b/include/linux/integrity.h | |||
@@ -0,0 +1,39 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2009 IBM Corporation | ||
3 | * Author: Mimi Zohar <zohar@us.ibm.com> | ||
4 | * | ||
5 | * This program is free software; you can redistribute it and/or modify | ||
6 | * it under the terms of the GNU General Public License as published by | ||
7 | * the Free Software Foundation, version 2 of the License. | ||
8 | */ | ||
9 | |||
10 | #ifndef _LINUX_INTEGRITY_H | ||
11 | #define _LINUX_INTEGRITY_H | ||
12 | |||
13 | #include <linux/fs.h> | ||
14 | |||
15 | enum integrity_status { | ||
16 | INTEGRITY_PASS = 0, | ||
17 | INTEGRITY_FAIL, | ||
18 | INTEGRITY_NOLABEL, | ||
19 | INTEGRITY_NOXATTRS, | ||
20 | INTEGRITY_UNKNOWN, | ||
21 | }; | ||
22 | |||
23 | /* List of EVM protected security xattrs */ | ||
24 | #ifdef CONFIG_INTEGRITY | ||
25 | extern int integrity_inode_alloc(struct inode *inode); | ||
26 | extern void integrity_inode_free(struct inode *inode); | ||
27 | |||
28 | #else | ||
29 | static inline int integrity_inode_alloc(struct inode *inode) | ||
30 | { | ||
31 | return 0; | ||
32 | } | ||
33 | |||
34 | static inline void integrity_inode_free(struct inode *inode) | ||
35 | { | ||
36 | return; | ||
37 | } | ||
38 | #endif /* CONFIG_INTEGRITY_H */ | ||
39 | #endif /* _LINUX_INTEGRITY_H */ | ||
diff --git a/include/linux/irqdomain.h b/include/linux/irqdomain.h index e807ad687a07..3ad553e8eae2 100644 --- a/include/linux/irqdomain.h +++ b/include/linux/irqdomain.h | |||
@@ -80,6 +80,7 @@ extern void irq_domain_del(struct irq_domain *domain); | |||
80 | #endif /* CONFIG_IRQ_DOMAIN */ | 80 | #endif /* CONFIG_IRQ_DOMAIN */ |
81 | 81 | ||
82 | #if defined(CONFIG_IRQ_DOMAIN) && defined(CONFIG_OF_IRQ) | 82 | #if defined(CONFIG_IRQ_DOMAIN) && defined(CONFIG_OF_IRQ) |
83 | extern struct irq_domain_ops irq_domain_simple_ops; | ||
83 | extern void irq_domain_add_simple(struct device_node *controller, int irq_base); | 84 | extern void irq_domain_add_simple(struct device_node *controller, int irq_base); |
84 | extern void irq_domain_generate_simple(const struct of_device_id *match, | 85 | extern void irq_domain_generate_simple(const struct of_device_id *match, |
85 | u64 phys_base, unsigned int irq_start); | 86 | u64 phys_base, unsigned int irq_start); |
diff --git a/include/linux/kernel.h b/include/linux/kernel.h index 46ac9a50528d..8eefcf7e95eb 100644 --- a/include/linux/kernel.h +++ b/include/linux/kernel.h | |||
@@ -382,7 +382,7 @@ static inline char *pack_hex_byte(char *buf, u8 byte) | |||
382 | } | 382 | } |
383 | 383 | ||
384 | extern int hex_to_bin(char ch); | 384 | extern int hex_to_bin(char ch); |
385 | extern void hex2bin(u8 *dst, const char *src, size_t count); | 385 | extern int __must_check hex2bin(u8 *dst, const char *src, size_t count); |
386 | 386 | ||
387 | /* | 387 | /* |
388 | * General tracing related utility functions - trace_printk(), | 388 | * General tracing related utility functions - trace_printk(), |
diff --git a/include/linux/kvm.h b/include/linux/kvm.h index 2c366b52f505..aace6b8691a2 100644 --- a/include/linux/kvm.h +++ b/include/linux/kvm.h | |||
@@ -553,6 +553,7 @@ struct kvm_ppc_pvinfo { | |||
553 | #define KVM_CAP_SPAPR_TCE 63 | 553 | #define KVM_CAP_SPAPR_TCE 63 |
554 | #define KVM_CAP_PPC_SMT 64 | 554 | #define KVM_CAP_PPC_SMT 64 |
555 | #define KVM_CAP_PPC_RMA 65 | 555 | #define KVM_CAP_PPC_RMA 65 |
556 | #define KVM_CAP_S390_GMAP 71 | ||
556 | 557 | ||
557 | #ifdef KVM_CAP_IRQ_ROUTING | 558 | #ifdef KVM_CAP_IRQ_ROUTING |
558 | 559 | ||
diff --git a/include/linux/mfd/wm8994/pdata.h b/include/linux/mfd/wm8994/pdata.h index d12f8d635a81..97cf4f27d647 100644 --- a/include/linux/mfd/wm8994/pdata.h +++ b/include/linux/mfd/wm8994/pdata.h | |||
@@ -26,7 +26,7 @@ struct wm8994_ldo_pdata { | |||
26 | struct regulator_init_data *init_data; | 26 | struct regulator_init_data *init_data; |
27 | }; | 27 | }; |
28 | 28 | ||
29 | #define WM8994_CONFIGURE_GPIO 0x8000 | 29 | #define WM8994_CONFIGURE_GPIO 0x10000 |
30 | 30 | ||
31 | #define WM8994_DRC_REGS 5 | 31 | #define WM8994_DRC_REGS 5 |
32 | #define WM8994_EQ_REGS 20 | 32 | #define WM8994_EQ_REGS 20 |
diff --git a/include/linux/namei.h b/include/linux/namei.h index 76fe2c62ae71..409328d1cbbb 100644 --- a/include/linux/namei.h +++ b/include/linux/namei.h | |||
@@ -48,11 +48,12 @@ enum {LAST_NORM, LAST_ROOT, LAST_DOT, LAST_DOTDOT, LAST_BIND}; | |||
48 | */ | 48 | */ |
49 | #define LOOKUP_FOLLOW 0x0001 | 49 | #define LOOKUP_FOLLOW 0x0001 |
50 | #define LOOKUP_DIRECTORY 0x0002 | 50 | #define LOOKUP_DIRECTORY 0x0002 |
51 | #define LOOKUP_AUTOMOUNT 0x0004 | ||
51 | 52 | ||
52 | #define LOOKUP_PARENT 0x0010 | 53 | #define LOOKUP_PARENT 0x0010 |
53 | #define LOOKUP_REVAL 0x0020 | 54 | #define LOOKUP_REVAL 0x0020 |
54 | #define LOOKUP_RCU 0x0040 | 55 | #define LOOKUP_RCU 0x0040 |
55 | #define LOOKUP_NO_AUTOMOUNT 0x0080 | 56 | |
56 | /* | 57 | /* |
57 | * Intent data | 58 | * Intent data |
58 | */ | 59 | */ |
diff --git a/include/linux/pci.h b/include/linux/pci.h index 8c230cbcbb48..9fc01226055b 100644 --- a/include/linux/pci.h +++ b/include/linux/pci.h | |||
@@ -621,8 +621,9 @@ struct pci_driver { | |||
621 | extern void pcie_bus_configure_settings(struct pci_bus *bus, u8 smpss); | 621 | extern void pcie_bus_configure_settings(struct pci_bus *bus, u8 smpss); |
622 | 622 | ||
623 | enum pcie_bus_config_types { | 623 | enum pcie_bus_config_types { |
624 | PCIE_BUS_PERFORMANCE, | 624 | PCIE_BUS_TUNE_OFF, |
625 | PCIE_BUS_SAFE, | 625 | PCIE_BUS_SAFE, |
626 | PCIE_BUS_PERFORMANCE, | ||
626 | PCIE_BUS_PEER2PEER, | 627 | PCIE_BUS_PEER2PEER, |
627 | }; | 628 | }; |
628 | 629 | ||
diff --git a/include/linux/ptp_classify.h b/include/linux/ptp_classify.h index e07e2742a865..1dc420ba213a 100644 --- a/include/linux/ptp_classify.h +++ b/include/linux/ptp_classify.h | |||
@@ -51,6 +51,7 @@ | |||
51 | #define PTP_CLASS_V2_VLAN (PTP_CLASS_V2 | PTP_CLASS_VLAN) | 51 | #define PTP_CLASS_V2_VLAN (PTP_CLASS_V2 | PTP_CLASS_VLAN) |
52 | 52 | ||
53 | #define PTP_EV_PORT 319 | 53 | #define PTP_EV_PORT 319 |
54 | #define PTP_GEN_BIT 0x08 /* indicates general message, if set in message type */ | ||
54 | 55 | ||
55 | #define OFF_ETYPE 12 | 56 | #define OFF_ETYPE 12 |
56 | #define OFF_IHL 14 | 57 | #define OFF_IHL 14 |
@@ -116,14 +117,20 @@ static inline int ptp_filter_init(struct sock_filter *f, int len) | |||
116 | {OP_OR, 0, 0, PTP_CLASS_IPV6 }, /* */ \ | 117 | {OP_OR, 0, 0, PTP_CLASS_IPV6 }, /* */ \ |
117 | {OP_RETA, 0, 0, 0 }, /* */ \ | 118 | {OP_RETA, 0, 0, 0 }, /* */ \ |
118 | /*L3x*/ {OP_RETK, 0, 0, PTP_CLASS_NONE }, /* */ \ | 119 | /*L3x*/ {OP_RETK, 0, 0, PTP_CLASS_NONE }, /* */ \ |
119 | /*L40*/ {OP_JEQ, 0, 6, ETH_P_8021Q }, /* f goto L50 */ \ | 120 | /*L40*/ {OP_JEQ, 0, 9, ETH_P_8021Q }, /* f goto L50 */ \ |
120 | {OP_LDH, 0, 0, OFF_ETYPE + 4 }, /* */ \ | 121 | {OP_LDH, 0, 0, OFF_ETYPE + 4 }, /* */ \ |
121 | {OP_JEQ, 0, 9, ETH_P_1588 }, /* f goto L60 */ \ | 122 | {OP_JEQ, 0, 15, ETH_P_1588 }, /* f goto L60 */ \ |
123 | {OP_LDB, 0, 0, ETH_HLEN + VLAN_HLEN }, /* */ \ | ||
124 | {OP_AND, 0, 0, PTP_GEN_BIT }, /* */ \ | ||
125 | {OP_JEQ, 0, 12, 0 }, /* f goto L6x */ \ | ||
122 | {OP_LDH, 0, 0, ETH_HLEN + VLAN_HLEN }, /* */ \ | 126 | {OP_LDH, 0, 0, ETH_HLEN + VLAN_HLEN }, /* */ \ |
123 | {OP_AND, 0, 0, PTP_CLASS_VMASK }, /* */ \ | 127 | {OP_AND, 0, 0, PTP_CLASS_VMASK }, /* */ \ |
124 | {OP_OR, 0, 0, PTP_CLASS_VLAN }, /* */ \ | 128 | {OP_OR, 0, 0, PTP_CLASS_VLAN }, /* */ \ |
125 | {OP_RETA, 0, 0, 0 }, /* */ \ | 129 | {OP_RETA, 0, 0, 0 }, /* */ \ |
126 | /*L50*/ {OP_JEQ, 0, 4, ETH_P_1588 }, /* f goto L61 */ \ | 130 | /*L50*/ {OP_JEQ, 0, 7, ETH_P_1588 }, /* f goto L61 */ \ |
131 | {OP_LDB, 0, 0, ETH_HLEN }, /* */ \ | ||
132 | {OP_AND, 0, 0, PTP_GEN_BIT }, /* */ \ | ||
133 | {OP_JEQ, 0, 4, 0 }, /* f goto L6x */ \ | ||
127 | {OP_LDH, 0, 0, ETH_HLEN }, /* */ \ | 134 | {OP_LDH, 0, 0, ETH_HLEN }, /* */ \ |
128 | {OP_AND, 0, 0, PTP_CLASS_VMASK }, /* */ \ | 135 | {OP_AND, 0, 0, PTP_CLASS_VMASK }, /* */ \ |
129 | {OP_OR, 0, 0, PTP_CLASS_L2 }, /* */ \ | 136 | {OP_OR, 0, 0, PTP_CLASS_L2 }, /* */ \ |
diff --git a/include/linux/sched.h b/include/linux/sched.h index 4ac2c0578e0f..41d0237fd449 100644 --- a/include/linux/sched.h +++ b/include/linux/sched.h | |||
@@ -1956,7 +1956,6 @@ static inline void disable_sched_clock_irqtime(void) {} | |||
1956 | 1956 | ||
1957 | extern unsigned long long | 1957 | extern unsigned long long |
1958 | task_sched_runtime(struct task_struct *task); | 1958 | task_sched_runtime(struct task_struct *task); |
1959 | extern unsigned long long thread_group_sched_runtime(struct task_struct *task); | ||
1960 | 1959 | ||
1961 | /* sched_exec is called by processes performing an exec */ | 1960 | /* sched_exec is called by processes performing an exec */ |
1962 | #ifdef CONFIG_SMP | 1961 | #ifdef CONFIG_SMP |
diff --git a/include/linux/security.h b/include/linux/security.h index ebd2a53a3d07..19d8e04e1688 100644 --- a/include/linux/security.h +++ b/include/linux/security.h | |||
@@ -36,6 +36,7 @@ | |||
36 | #include <linux/key.h> | 36 | #include <linux/key.h> |
37 | #include <linux/xfrm.h> | 37 | #include <linux/xfrm.h> |
38 | #include <linux/slab.h> | 38 | #include <linux/slab.h> |
39 | #include <linux/xattr.h> | ||
39 | #include <net/flow.h> | 40 | #include <net/flow.h> |
40 | 41 | ||
41 | /* Maximum number of letters for an LSM name string */ | 42 | /* Maximum number of letters for an LSM name string */ |
@@ -147,6 +148,10 @@ extern int mmap_min_addr_handler(struct ctl_table *table, int write, | |||
147 | void __user *buffer, size_t *lenp, loff_t *ppos); | 148 | void __user *buffer, size_t *lenp, loff_t *ppos); |
148 | #endif | 149 | #endif |
149 | 150 | ||
151 | /* security_inode_init_security callback function to write xattrs */ | ||
152 | typedef int (*initxattrs) (struct inode *inode, | ||
153 | const struct xattr *xattr_array, void *fs_data); | ||
154 | |||
150 | #ifdef CONFIG_SECURITY | 155 | #ifdef CONFIG_SECURITY |
151 | 156 | ||
152 | struct security_mnt_opts { | 157 | struct security_mnt_opts { |
@@ -1367,7 +1372,7 @@ static inline void security_free_mnt_opts(struct security_mnt_opts *opts) | |||
1367 | * @inode_getsecctx: | 1372 | * @inode_getsecctx: |
1368 | * Returns a string containing all relavent security context information | 1373 | * Returns a string containing all relavent security context information |
1369 | * | 1374 | * |
1370 | * @inode we wish to set the security context of. | 1375 | * @inode we wish to get the security context of. |
1371 | * @ctx is a pointer in which to place the allocated security context. | 1376 | * @ctx is a pointer in which to place the allocated security context. |
1372 | * @ctxlen points to the place to put the length of @ctx. | 1377 | * @ctxlen points to the place to put the length of @ctx. |
1373 | * This is the main security structure. | 1378 | * This is the main security structure. |
@@ -1655,6 +1660,8 @@ struct security_operations { | |||
1655 | extern int security_init(void); | 1660 | extern int security_init(void); |
1656 | extern int security_module_enable(struct security_operations *ops); | 1661 | extern int security_module_enable(struct security_operations *ops); |
1657 | extern int register_security(struct security_operations *ops); | 1662 | extern int register_security(struct security_operations *ops); |
1663 | extern void __init security_fixup_ops(struct security_operations *ops); | ||
1664 | |||
1658 | 1665 | ||
1659 | /* Security operations */ | 1666 | /* Security operations */ |
1660 | int security_ptrace_access_check(struct task_struct *child, unsigned int mode); | 1667 | int security_ptrace_access_check(struct task_struct *child, unsigned int mode); |
@@ -1704,8 +1711,11 @@ int security_sb_parse_opts_str(char *options, struct security_mnt_opts *opts); | |||
1704 | int security_inode_alloc(struct inode *inode); | 1711 | int security_inode_alloc(struct inode *inode); |
1705 | void security_inode_free(struct inode *inode); | 1712 | void security_inode_free(struct inode *inode); |
1706 | int security_inode_init_security(struct inode *inode, struct inode *dir, | 1713 | int security_inode_init_security(struct inode *inode, struct inode *dir, |
1707 | const struct qstr *qstr, char **name, | 1714 | const struct qstr *qstr, |
1708 | void **value, size_t *len); | 1715 | initxattrs initxattrs, void *fs_data); |
1716 | int security_old_inode_init_security(struct inode *inode, struct inode *dir, | ||
1717 | const struct qstr *qstr, char **name, | ||
1718 | void **value, size_t *len); | ||
1709 | int security_inode_create(struct inode *dir, struct dentry *dentry, int mode); | 1719 | int security_inode_create(struct inode *dir, struct dentry *dentry, int mode); |
1710 | int security_inode_link(struct dentry *old_dentry, struct inode *dir, | 1720 | int security_inode_link(struct dentry *old_dentry, struct inode *dir, |
1711 | struct dentry *new_dentry); | 1721 | struct dentry *new_dentry); |
@@ -2034,11 +2044,19 @@ static inline void security_inode_free(struct inode *inode) | |||
2034 | static inline int security_inode_init_security(struct inode *inode, | 2044 | static inline int security_inode_init_security(struct inode *inode, |
2035 | struct inode *dir, | 2045 | struct inode *dir, |
2036 | const struct qstr *qstr, | 2046 | const struct qstr *qstr, |
2037 | char **name, | 2047 | initxattrs initxattrs, |
2038 | void **value, | 2048 | void *fs_data) |
2039 | size_t *len) | ||
2040 | { | 2049 | { |
2041 | return -EOPNOTSUPP; | 2050 | return 0; |
2051 | } | ||
2052 | |||
2053 | static inline int security_old_inode_init_security(struct inode *inode, | ||
2054 | struct inode *dir, | ||
2055 | const struct qstr *qstr, | ||
2056 | char **name, void **value, | ||
2057 | size_t *len) | ||
2058 | { | ||
2059 | return 0; | ||
2042 | } | 2060 | } |
2043 | 2061 | ||
2044 | static inline int security_inode_create(struct inode *dir, | 2062 | static inline int security_inode_create(struct inode *dir, |
diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h index 7b996ed86d5b..8bd383caa363 100644 --- a/include/linux/skbuff.h +++ b/include/linux/skbuff.h | |||
@@ -524,6 +524,7 @@ static inline struct sk_buff *alloc_skb_fclone(unsigned int size, | |||
524 | extern bool skb_recycle_check(struct sk_buff *skb, int skb_size); | 524 | extern bool skb_recycle_check(struct sk_buff *skb, int skb_size); |
525 | 525 | ||
526 | extern struct sk_buff *skb_morph(struct sk_buff *dst, struct sk_buff *src); | 526 | extern struct sk_buff *skb_morph(struct sk_buff *dst, struct sk_buff *src); |
527 | extern int skb_copy_ubufs(struct sk_buff *skb, gfp_t gfp_mask); | ||
527 | extern struct sk_buff *skb_clone(struct sk_buff *skb, | 528 | extern struct sk_buff *skb_clone(struct sk_buff *skb, |
528 | gfp_t priority); | 529 | gfp_t priority); |
529 | extern struct sk_buff *skb_copy(const struct sk_buff *skb, | 530 | extern struct sk_buff *skb_copy(const struct sk_buff *skb, |
diff --git a/include/linux/snmp.h b/include/linux/snmp.h index 12b2b18e50c1..e16557a357e5 100644 --- a/include/linux/snmp.h +++ b/include/linux/snmp.h | |||
@@ -231,6 +231,8 @@ enum | |||
231 | LINUX_MIB_TCPDEFERACCEPTDROP, | 231 | LINUX_MIB_TCPDEFERACCEPTDROP, |
232 | LINUX_MIB_IPRPFILTER, /* IP Reverse Path Filter (rp_filter) */ | 232 | LINUX_MIB_IPRPFILTER, /* IP Reverse Path Filter (rp_filter) */ |
233 | LINUX_MIB_TCPTIMEWAITOVERFLOW, /* TCPTimeWaitOverflow */ | 233 | LINUX_MIB_TCPTIMEWAITOVERFLOW, /* TCPTimeWaitOverflow */ |
234 | LINUX_MIB_TCPREQQFULLDOCOOKIES, /* TCPReqQFullDoCookies */ | ||
235 | LINUX_MIB_TCPREQQFULLDROP, /* TCPReqQFullDrop */ | ||
234 | __LINUX_MIB_MAX | 236 | __LINUX_MIB_MAX |
235 | }; | 237 | }; |
236 | 238 | ||
diff --git a/include/linux/xattr.h b/include/linux/xattr.h index aed54c50aa66..e5d122031542 100644 --- a/include/linux/xattr.h +++ b/include/linux/xattr.h | |||
@@ -30,6 +30,9 @@ | |||
30 | #define XATTR_USER_PREFIX_LEN (sizeof (XATTR_USER_PREFIX) - 1) | 30 | #define XATTR_USER_PREFIX_LEN (sizeof (XATTR_USER_PREFIX) - 1) |
31 | 31 | ||
32 | /* Security namespace */ | 32 | /* Security namespace */ |
33 | #define XATTR_EVM_SUFFIX "evm" | ||
34 | #define XATTR_NAME_EVM XATTR_SECURITY_PREFIX XATTR_EVM_SUFFIX | ||
35 | |||
33 | #define XATTR_SELINUX_SUFFIX "selinux" | 36 | #define XATTR_SELINUX_SUFFIX "selinux" |
34 | #define XATTR_NAME_SELINUX XATTR_SECURITY_PREFIX XATTR_SELINUX_SUFFIX | 37 | #define XATTR_NAME_SELINUX XATTR_SECURITY_PREFIX XATTR_SELINUX_SUFFIX |
35 | 38 | ||
@@ -49,6 +52,11 @@ | |||
49 | #define XATTR_CAPS_SUFFIX "capability" | 52 | #define XATTR_CAPS_SUFFIX "capability" |
50 | #define XATTR_NAME_CAPS XATTR_SECURITY_PREFIX XATTR_CAPS_SUFFIX | 53 | #define XATTR_NAME_CAPS XATTR_SECURITY_PREFIX XATTR_CAPS_SUFFIX |
51 | 54 | ||
55 | #define XATTR_POSIX_ACL_ACCESS "posix_acl_access" | ||
56 | #define XATTR_NAME_POSIX_ACL_ACCESS XATTR_SYSTEM_PREFIX XATTR_POSIX_ACL_ACCESS | ||
57 | #define XATTR_POSIX_ACL_DEFAULT "posix_acl_default" | ||
58 | #define XATTR_NAME_POSIX_ACL_DEFAULT XATTR_SYSTEM_PREFIX XATTR_POSIX_ACL_DEFAULT | ||
59 | |||
52 | #ifdef __KERNEL__ | 60 | #ifdef __KERNEL__ |
53 | 61 | ||
54 | #include <linux/types.h> | 62 | #include <linux/types.h> |
@@ -67,6 +75,12 @@ struct xattr_handler { | |||
67 | size_t size, int flags, int handler_flags); | 75 | size_t size, int flags, int handler_flags); |
68 | }; | 76 | }; |
69 | 77 | ||
78 | struct xattr { | ||
79 | char *name; | ||
80 | void *value; | ||
81 | size_t value_len; | ||
82 | }; | ||
83 | |||
70 | ssize_t xattr_getsecurity(struct inode *, const char *, void *, size_t); | 84 | ssize_t xattr_getsecurity(struct inode *, const char *, void *, size_t); |
71 | ssize_t vfs_getxattr(struct dentry *, const char *, void *, size_t); | 85 | ssize_t vfs_getxattr(struct dentry *, const char *, void *, size_t); |
72 | ssize_t vfs_listxattr(struct dentry *d, char *list, size_t size); | 86 | ssize_t vfs_listxattr(struct dentry *d, char *list, size_t size); |
@@ -78,7 +92,10 @@ ssize_t generic_getxattr(struct dentry *dentry, const char *name, void *buffer, | |||
78 | ssize_t generic_listxattr(struct dentry *dentry, char *buffer, size_t buffer_size); | 92 | ssize_t generic_listxattr(struct dentry *dentry, char *buffer, size_t buffer_size); |
79 | int generic_setxattr(struct dentry *dentry, const char *name, const void *value, size_t size, int flags); | 93 | int generic_setxattr(struct dentry *dentry, const char *name, const void *value, size_t size, int flags); |
80 | int generic_removexattr(struct dentry *dentry, const char *name); | 94 | int generic_removexattr(struct dentry *dentry, const char *name); |
81 | 95 | ssize_t vfs_getxattr_alloc(struct dentry *dentry, const char *name, | |
96 | char **xattr_value, size_t size, gfp_t flags); | ||
97 | int vfs_xattr_cmp(struct dentry *dentry, const char *xattr_name, | ||
98 | const char *value, size_t size, gfp_t flags); | ||
82 | #endif /* __KERNEL__ */ | 99 | #endif /* __KERNEL__ */ |
83 | 100 | ||
84 | #endif /* _LINUX_XATTR_H */ | 101 | #endif /* _LINUX_XATTR_H */ |
diff --git a/include/net/flow.h b/include/net/flow.h index 78113daadd63..a09447749e2d 100644 --- a/include/net/flow.h +++ b/include/net/flow.h | |||
@@ -7,6 +7,7 @@ | |||
7 | #ifndef _NET_FLOW_H | 7 | #ifndef _NET_FLOW_H |
8 | #define _NET_FLOW_H | 8 | #define _NET_FLOW_H |
9 | 9 | ||
10 | #include <linux/socket.h> | ||
10 | #include <linux/in6.h> | 11 | #include <linux/in6.h> |
11 | #include <linux/atomic.h> | 12 | #include <linux/atomic.h> |
12 | 13 | ||
@@ -68,7 +69,7 @@ struct flowi4 { | |||
68 | #define fl4_ipsec_spi uli.spi | 69 | #define fl4_ipsec_spi uli.spi |
69 | #define fl4_mh_type uli.mht.type | 70 | #define fl4_mh_type uli.mht.type |
70 | #define fl4_gre_key uli.gre_key | 71 | #define fl4_gre_key uli.gre_key |
71 | }; | 72 | } __attribute__((__aligned__(BITS_PER_LONG/8))); |
72 | 73 | ||
73 | static inline void flowi4_init_output(struct flowi4 *fl4, int oif, | 74 | static inline void flowi4_init_output(struct flowi4 *fl4, int oif, |
74 | __u32 mark, __u8 tos, __u8 scope, | 75 | __u32 mark, __u8 tos, __u8 scope, |
@@ -112,7 +113,7 @@ struct flowi6 { | |||
112 | #define fl6_ipsec_spi uli.spi | 113 | #define fl6_ipsec_spi uli.spi |
113 | #define fl6_mh_type uli.mht.type | 114 | #define fl6_mh_type uli.mht.type |
114 | #define fl6_gre_key uli.gre_key | 115 | #define fl6_gre_key uli.gre_key |
115 | }; | 116 | } __attribute__((__aligned__(BITS_PER_LONG/8))); |
116 | 117 | ||
117 | struct flowidn { | 118 | struct flowidn { |
118 | struct flowi_common __fl_common; | 119 | struct flowi_common __fl_common; |
@@ -127,7 +128,7 @@ struct flowidn { | |||
127 | union flowi_uli uli; | 128 | union flowi_uli uli; |
128 | #define fld_sport uli.ports.sport | 129 | #define fld_sport uli.ports.sport |
129 | #define fld_dport uli.ports.dport | 130 | #define fld_dport uli.ports.dport |
130 | }; | 131 | } __attribute__((__aligned__(BITS_PER_LONG/8))); |
131 | 132 | ||
132 | struct flowi { | 133 | struct flowi { |
133 | union { | 134 | union { |
@@ -161,6 +162,24 @@ static inline struct flowi *flowidn_to_flowi(struct flowidn *fldn) | |||
161 | return container_of(fldn, struct flowi, u.dn); | 162 | return container_of(fldn, struct flowi, u.dn); |
162 | } | 163 | } |
163 | 164 | ||
165 | typedef unsigned long flow_compare_t; | ||
166 | |||
167 | static inline size_t flow_key_size(u16 family) | ||
168 | { | ||
169 | switch (family) { | ||
170 | case AF_INET: | ||
171 | BUILD_BUG_ON(sizeof(struct flowi4) % sizeof(flow_compare_t)); | ||
172 | return sizeof(struct flowi4) / sizeof(flow_compare_t); | ||
173 | case AF_INET6: | ||
174 | BUILD_BUG_ON(sizeof(struct flowi6) % sizeof(flow_compare_t)); | ||
175 | return sizeof(struct flowi6) / sizeof(flow_compare_t); | ||
176 | case AF_DECnet: | ||
177 | BUILD_BUG_ON(sizeof(struct flowidn) % sizeof(flow_compare_t)); | ||
178 | return sizeof(struct flowidn) / sizeof(flow_compare_t); | ||
179 | } | ||
180 | return 0; | ||
181 | } | ||
182 | |||
164 | #define FLOW_DIR_IN 0 | 183 | #define FLOW_DIR_IN 0 |
165 | #define FLOW_DIR_OUT 1 | 184 | #define FLOW_DIR_OUT 1 |
166 | #define FLOW_DIR_FWD 2 | 185 | #define FLOW_DIR_FWD 2 |
diff --git a/include/net/ip_vs.h b/include/net/ip_vs.h index 1aaf915656f3..8fa4430f99c1 100644 --- a/include/net/ip_vs.h +++ b/include/net/ip_vs.h | |||
@@ -900,6 +900,7 @@ struct netns_ipvs { | |||
900 | volatile int sync_state; | 900 | volatile int sync_state; |
901 | volatile int master_syncid; | 901 | volatile int master_syncid; |
902 | volatile int backup_syncid; | 902 | volatile int backup_syncid; |
903 | struct mutex sync_mutex; | ||
903 | /* multicast interface name */ | 904 | /* multicast interface name */ |
904 | char master_mcast_ifn[IP_VS_IFNAME_MAXLEN]; | 905 | char master_mcast_ifn[IP_VS_IFNAME_MAXLEN]; |
905 | char backup_mcast_ifn[IP_VS_IFNAME_MAXLEN]; | 906 | char backup_mcast_ifn[IP_VS_IFNAME_MAXLEN]; |
diff --git a/include/net/request_sock.h b/include/net/request_sock.h index 99e6e19b57c2..4c0766e201e3 100644 --- a/include/net/request_sock.h +++ b/include/net/request_sock.h | |||
@@ -96,7 +96,8 @@ extern int sysctl_max_syn_backlog; | |||
96 | */ | 96 | */ |
97 | struct listen_sock { | 97 | struct listen_sock { |
98 | u8 max_qlen_log; | 98 | u8 max_qlen_log; |
99 | /* 3 bytes hole, try to use */ | 99 | u8 synflood_warned; |
100 | /* 2 bytes hole, try to use */ | ||
100 | int qlen; | 101 | int qlen; |
101 | int qlen_young; | 102 | int qlen_young; |
102 | int clock_hand; | 103 | int clock_hand; |
diff --git a/include/net/sctp/command.h b/include/net/sctp/command.h index 6506458ccd33..712b3bebeda7 100644 --- a/include/net/sctp/command.h +++ b/include/net/sctp/command.h | |||
@@ -109,6 +109,7 @@ typedef enum { | |||
109 | SCTP_CMD_SEND_MSG, /* Send the whole use message */ | 109 | SCTP_CMD_SEND_MSG, /* Send the whole use message */ |
110 | SCTP_CMD_SEND_NEXT_ASCONF, /* Send the next ASCONF after ACK */ | 110 | SCTP_CMD_SEND_NEXT_ASCONF, /* Send the next ASCONF after ACK */ |
111 | SCTP_CMD_PURGE_ASCONF_QUEUE, /* Purge all asconf queues.*/ | 111 | SCTP_CMD_PURGE_ASCONF_QUEUE, /* Purge all asconf queues.*/ |
112 | SCTP_CMD_SET_ASOC, /* Restore association context */ | ||
112 | SCTP_CMD_LAST | 113 | SCTP_CMD_LAST |
113 | } sctp_verb_t; | 114 | } sctp_verb_t; |
114 | 115 | ||
diff --git a/include/net/tcp.h b/include/net/tcp.h index 149a415d1e0a..acc620a4a45f 100644 --- a/include/net/tcp.h +++ b/include/net/tcp.h | |||
@@ -431,17 +431,34 @@ extern int tcp_disconnect(struct sock *sk, int flags); | |||
431 | extern __u32 syncookie_secret[2][16-4+SHA_DIGEST_WORDS]; | 431 | extern __u32 syncookie_secret[2][16-4+SHA_DIGEST_WORDS]; |
432 | extern struct sock *cookie_v4_check(struct sock *sk, struct sk_buff *skb, | 432 | extern struct sock *cookie_v4_check(struct sock *sk, struct sk_buff *skb, |
433 | struct ip_options *opt); | 433 | struct ip_options *opt); |
434 | #ifdef CONFIG_SYN_COOKIES | ||
434 | extern __u32 cookie_v4_init_sequence(struct sock *sk, struct sk_buff *skb, | 435 | extern __u32 cookie_v4_init_sequence(struct sock *sk, struct sk_buff *skb, |
435 | __u16 *mss); | 436 | __u16 *mss); |
437 | #else | ||
438 | static inline __u32 cookie_v4_init_sequence(struct sock *sk, | ||
439 | struct sk_buff *skb, | ||
440 | __u16 *mss) | ||
441 | { | ||
442 | return 0; | ||
443 | } | ||
444 | #endif | ||
436 | 445 | ||
437 | extern __u32 cookie_init_timestamp(struct request_sock *req); | 446 | extern __u32 cookie_init_timestamp(struct request_sock *req); |
438 | extern bool cookie_check_timestamp(struct tcp_options_received *opt, bool *); | 447 | extern bool cookie_check_timestamp(struct tcp_options_received *opt, bool *); |
439 | 448 | ||
440 | /* From net/ipv6/syncookies.c */ | 449 | /* From net/ipv6/syncookies.c */ |
441 | extern struct sock *cookie_v6_check(struct sock *sk, struct sk_buff *skb); | 450 | extern struct sock *cookie_v6_check(struct sock *sk, struct sk_buff *skb); |
451 | #ifdef CONFIG_SYN_COOKIES | ||
442 | extern __u32 cookie_v6_init_sequence(struct sock *sk, struct sk_buff *skb, | 452 | extern __u32 cookie_v6_init_sequence(struct sock *sk, struct sk_buff *skb, |
443 | __u16 *mss); | 453 | __u16 *mss); |
444 | 454 | #else | |
455 | static inline __u32 cookie_v6_init_sequence(struct sock *sk, | ||
456 | struct sk_buff *skb, | ||
457 | __u16 *mss) | ||
458 | { | ||
459 | return 0; | ||
460 | } | ||
461 | #endif | ||
445 | /* tcp_output.c */ | 462 | /* tcp_output.c */ |
446 | 463 | ||
447 | extern void __tcp_push_pending_frames(struct sock *sk, unsigned int cur_mss, | 464 | extern void __tcp_push_pending_frames(struct sock *sk, unsigned int cur_mss, |
@@ -460,6 +477,9 @@ extern int tcp_write_wakeup(struct sock *); | |||
460 | extern void tcp_send_fin(struct sock *sk); | 477 | extern void tcp_send_fin(struct sock *sk); |
461 | extern void tcp_send_active_reset(struct sock *sk, gfp_t priority); | 478 | extern void tcp_send_active_reset(struct sock *sk, gfp_t priority); |
462 | extern int tcp_send_synack(struct sock *); | 479 | extern int tcp_send_synack(struct sock *); |
480 | extern int tcp_syn_flood_action(struct sock *sk, | ||
481 | const struct sk_buff *skb, | ||
482 | const char *proto); | ||
463 | extern void tcp_push_one(struct sock *, unsigned int mss_now); | 483 | extern void tcp_push_one(struct sock *, unsigned int mss_now); |
464 | extern void tcp_send_ack(struct sock *sk); | 484 | extern void tcp_send_ack(struct sock *sk); |
465 | extern void tcp_send_delayed_ack(struct sock *sk); | 485 | extern void tcp_send_delayed_ack(struct sock *sk); |
diff --git a/include/net/transp_v6.h b/include/net/transp_v6.h index 5271a741c3a3..498433dd067d 100644 --- a/include/net/transp_v6.h +++ b/include/net/transp_v6.h | |||
@@ -39,6 +39,7 @@ extern int datagram_recv_ctl(struct sock *sk, | |||
39 | struct sk_buff *skb); | 39 | struct sk_buff *skb); |
40 | 40 | ||
41 | extern int datagram_send_ctl(struct net *net, | 41 | extern int datagram_send_ctl(struct net *net, |
42 | struct sock *sk, | ||
42 | struct msghdr *msg, | 43 | struct msghdr *msg, |
43 | struct flowi6 *fl6, | 44 | struct flowi6 *fl6, |
44 | struct ipv6_txoptions *opt, | 45 | struct ipv6_txoptions *opt, |
diff --git a/include/net/udplite.h b/include/net/udplite.h index 673a024c6b2a..5f097ca7d5c5 100644 --- a/include/net/udplite.h +++ b/include/net/udplite.h | |||
@@ -66,40 +66,34 @@ static inline int udplite_checksum_init(struct sk_buff *skb, struct udphdr *uh) | |||
66 | return 0; | 66 | return 0; |
67 | } | 67 | } |
68 | 68 | ||
69 | static inline int udplite_sender_cscov(struct udp_sock *up, struct udphdr *uh) | 69 | /* Slow-path computation of checksum. Socket is locked. */ |
70 | static inline __wsum udplite_csum_outgoing(struct sock *sk, struct sk_buff *skb) | ||
70 | { | 71 | { |
72 | const struct udp_sock *up = udp_sk(skb->sk); | ||
71 | int cscov = up->len; | 73 | int cscov = up->len; |
74 | __wsum csum = 0; | ||
72 | 75 | ||
73 | /* | 76 | if (up->pcflag & UDPLITE_SEND_CC) { |
74 | * Sender has set `partial coverage' option on UDP-Lite socket | 77 | /* |
75 | */ | 78 | * Sender has set `partial coverage' option on UDP-Lite socket. |
76 | if (up->pcflag & UDPLITE_SEND_CC) { | 79 | * The special case "up->pcslen == 0" signifies full coverage. |
80 | */ | ||
77 | if (up->pcslen < up->len) { | 81 | if (up->pcslen < up->len) { |
78 | /* up->pcslen == 0 means that full coverage is required, | 82 | if (0 < up->pcslen) |
79 | * partial coverage only if 0 < up->pcslen < up->len */ | 83 | cscov = up->pcslen; |
80 | if (0 < up->pcslen) { | 84 | udp_hdr(skb)->len = htons(up->pcslen); |
81 | cscov = up->pcslen; | ||
82 | } | ||
83 | uh->len = htons(up->pcslen); | ||
84 | } | 85 | } |
85 | /* | 86 | /* |
86 | * NOTE: Causes for the error case `up->pcslen > up->len': | 87 | * NOTE: Causes for the error case `up->pcslen > up->len': |
87 | * (i) Application error (will not be penalized). | 88 | * (i) Application error (will not be penalized). |
88 | * (ii) Payload too big for send buffer: data is split | 89 | * (ii) Payload too big for send buffer: data is split |
89 | * into several packets, each with its own header. | 90 | * into several packets, each with its own header. |
90 | * In this case (e.g. last segment), coverage may | 91 | * In this case (e.g. last segment), coverage may |
91 | * exceed packet length. | 92 | * exceed packet length. |
92 | * Since packets with coverage length > packet length are | 93 | * Since packets with coverage length > packet length are |
93 | * illegal, we fall back to the defaults here. | 94 | * illegal, we fall back to the defaults here. |
94 | */ | 95 | */ |
95 | } | 96 | } |
96 | return cscov; | ||
97 | } | ||
98 | |||
99 | static inline __wsum udplite_csum_outgoing(struct sock *sk, struct sk_buff *skb) | ||
100 | { | ||
101 | int cscov = udplite_sender_cscov(udp_sk(sk), udp_hdr(skb)); | ||
102 | __wsum csum = 0; | ||
103 | 97 | ||
104 | skb->ip_summed = CHECKSUM_NONE; /* no HW support for checksumming */ | 98 | skb->ip_summed = CHECKSUM_NONE; /* no HW support for checksumming */ |
105 | 99 | ||
@@ -115,16 +109,21 @@ static inline __wsum udplite_csum_outgoing(struct sock *sk, struct sk_buff *skb) | |||
115 | return csum; | 109 | return csum; |
116 | } | 110 | } |
117 | 111 | ||
112 | /* Fast-path computation of checksum. Socket may not be locked. */ | ||
118 | static inline __wsum udplite_csum(struct sk_buff *skb) | 113 | static inline __wsum udplite_csum(struct sk_buff *skb) |
119 | { | 114 | { |
120 | struct sock *sk = skb->sk; | 115 | const struct udp_sock *up = udp_sk(skb->sk); |
121 | int cscov = udplite_sender_cscov(udp_sk(sk), udp_hdr(skb)); | ||
122 | const int off = skb_transport_offset(skb); | 116 | const int off = skb_transport_offset(skb); |
123 | const int len = skb->len - off; | 117 | int len = skb->len - off; |
124 | 118 | ||
119 | if ((up->pcflag & UDPLITE_SEND_CC) && up->pcslen < len) { | ||
120 | if (0 < up->pcslen) | ||
121 | len = up->pcslen; | ||
122 | udp_hdr(skb)->len = htons(up->pcslen); | ||
123 | } | ||
125 | skb->ip_summed = CHECKSUM_NONE; /* no HW support for checksumming */ | 124 | skb->ip_summed = CHECKSUM_NONE; /* no HW support for checksumming */ |
126 | 125 | ||
127 | return skb_checksum(skb, off, min(cscov, len), 0); | 126 | return skb_checksum(skb, off, len, 0); |
128 | } | 127 | } |
129 | 128 | ||
130 | extern void udplite4_register(void); | 129 | extern void udplite4_register(void); |
diff --git a/include/target/target_core_base.h b/include/target/target_core_base.h index 27040653005e..35aa786f93da 100644 --- a/include/target/target_core_base.h +++ b/include/target/target_core_base.h | |||
@@ -10,10 +10,7 @@ | |||
10 | #include <net/tcp.h> | 10 | #include <net/tcp.h> |
11 | 11 | ||
12 | #define TARGET_CORE_MOD_VERSION "v4.1.0-rc1-ml" | 12 | #define TARGET_CORE_MOD_VERSION "v4.1.0-rc1-ml" |
13 | #define SHUTDOWN_SIGS (sigmask(SIGKILL)|sigmask(SIGINT)|sigmask(SIGABRT)) | ||
14 | 13 | ||
15 | /* Used by transport_generic_allocate_iovecs() */ | ||
16 | #define TRANSPORT_IOV_DATA_BUFFER 5 | ||
17 | /* Maximum Number of LUNs per Target Portal Group */ | 14 | /* Maximum Number of LUNs per Target Portal Group */ |
18 | /* Don't raise above 511 or REPORT_LUNS needs to handle >1 page */ | 15 | /* Don't raise above 511 or REPORT_LUNS needs to handle >1 page */ |
19 | #define TRANSPORT_MAX_LUNS_PER_TPG 256 | 16 | #define TRANSPORT_MAX_LUNS_PER_TPG 256 |
@@ -75,32 +72,26 @@ enum transport_tpg_type_table { | |||
75 | }; | 72 | }; |
76 | 73 | ||
77 | /* Used for generate timer flags */ | 74 | /* Used for generate timer flags */ |
78 | enum timer_flags_table { | 75 | enum se_task_flags { |
79 | TF_RUNNING = 0x01, | 76 | TF_ACTIVE = (1 << 0), |
80 | TF_STOP = 0x02, | 77 | TF_SENT = (1 << 1), |
78 | TF_REQUEST_STOP = (1 << 2), | ||
81 | }; | 79 | }; |
82 | 80 | ||
83 | /* Special transport agnostic struct se_cmd->t_states */ | 81 | /* Special transport agnostic struct se_cmd->t_states */ |
84 | enum transport_state_table { | 82 | enum transport_state_table { |
85 | TRANSPORT_NO_STATE = 0, | 83 | TRANSPORT_NO_STATE = 0, |
86 | TRANSPORT_NEW_CMD = 1, | 84 | TRANSPORT_NEW_CMD = 1, |
87 | TRANSPORT_DEFERRED_CMD = 2, | ||
88 | TRANSPORT_WRITE_PENDING = 3, | 85 | TRANSPORT_WRITE_PENDING = 3, |
89 | TRANSPORT_PROCESS_WRITE = 4, | 86 | TRANSPORT_PROCESS_WRITE = 4, |
90 | TRANSPORT_PROCESSING = 5, | 87 | TRANSPORT_PROCESSING = 5, |
91 | TRANSPORT_COMPLETE_OK = 6, | 88 | TRANSPORT_COMPLETE = 6, |
92 | TRANSPORT_COMPLETE_FAILURE = 7, | ||
93 | TRANSPORT_COMPLETE_TIMEOUT = 8, | ||
94 | TRANSPORT_PROCESS_TMR = 9, | 89 | TRANSPORT_PROCESS_TMR = 9, |
95 | TRANSPORT_TMR_COMPLETE = 10, | ||
96 | TRANSPORT_ISTATE_PROCESSING = 11, | 90 | TRANSPORT_ISTATE_PROCESSING = 11, |
97 | TRANSPORT_ISTATE_PROCESSED = 12, | ||
98 | TRANSPORT_KILL = 13, | ||
99 | TRANSPORT_REMOVE = 14, | ||
100 | TRANSPORT_FREE = 15, | ||
101 | TRANSPORT_NEW_CMD_MAP = 16, | 91 | TRANSPORT_NEW_CMD_MAP = 16, |
102 | TRANSPORT_FREE_CMD_INTR = 17, | 92 | TRANSPORT_FREE_CMD_INTR = 17, |
103 | TRANSPORT_COMPLETE_QF_WP = 18, | 93 | TRANSPORT_COMPLETE_QF_WP = 18, |
94 | TRANSPORT_COMPLETE_QF_OK = 19, | ||
104 | }; | 95 | }; |
105 | 96 | ||
106 | /* Used for struct se_cmd->se_cmd_flags */ | 97 | /* Used for struct se_cmd->se_cmd_flags */ |
@@ -125,7 +116,6 @@ enum se_cmd_flags_table { | |||
125 | SCF_UNUSED = 0x00100000, | 116 | SCF_UNUSED = 0x00100000, |
126 | SCF_PASSTHROUGH_SG_TO_MEM_NOALLOC = 0x00400000, | 117 | SCF_PASSTHROUGH_SG_TO_MEM_NOALLOC = 0x00400000, |
127 | SCF_EMULATE_CDB_ASYNC = 0x01000000, | 118 | SCF_EMULATE_CDB_ASYNC = 0x01000000, |
128 | SCF_EMULATE_QUEUE_FULL = 0x02000000, | ||
129 | }; | 119 | }; |
130 | 120 | ||
131 | /* struct se_dev_entry->lun_flags and struct se_lun->lun_access */ | 121 | /* struct se_dev_entry->lun_flags and struct se_lun->lun_access */ |
@@ -401,34 +391,22 @@ struct se_queue_obj { | |||
401 | } ____cacheline_aligned; | 391 | } ____cacheline_aligned; |
402 | 392 | ||
403 | struct se_task { | 393 | struct se_task { |
404 | unsigned char task_sense; | ||
405 | struct scatterlist *task_sg; | ||
406 | u32 task_sg_nents; | ||
407 | struct scatterlist *task_sg_bidi; | ||
408 | u8 task_scsi_status; | ||
409 | u8 task_flags; | ||
410 | int task_error_status; | ||
411 | int task_state_flags; | ||
412 | bool task_padded_sg; | ||
413 | unsigned long long task_lba; | 394 | unsigned long long task_lba; |
414 | u32 task_no; | 395 | u32 task_sectors; |
415 | u32 task_sectors; | 396 | u32 task_size; |
416 | u32 task_size; | 397 | struct se_cmd *task_se_cmd; |
398 | struct scatterlist *task_sg; | ||
399 | u32 task_sg_nents; | ||
400 | u16 task_flags; | ||
401 | u8 task_sense; | ||
402 | u8 task_scsi_status; | ||
403 | int task_error_status; | ||
417 | enum dma_data_direction task_data_direction; | 404 | enum dma_data_direction task_data_direction; |
418 | struct se_cmd *task_se_cmd; | 405 | atomic_t task_state_active; |
419 | struct se_device *se_dev; | 406 | struct list_head t_list; |
407 | struct list_head t_execute_list; | ||
408 | struct list_head t_state_list; | ||
420 | struct completion task_stop_comp; | 409 | struct completion task_stop_comp; |
421 | atomic_t task_active; | ||
422 | atomic_t task_execute_queue; | ||
423 | atomic_t task_timeout; | ||
424 | atomic_t task_sent; | ||
425 | atomic_t task_stop; | ||
426 | atomic_t task_state_active; | ||
427 | struct timer_list task_timer; | ||
428 | struct se_device *se_obj_ptr; | ||
429 | struct list_head t_list; | ||
430 | struct list_head t_execute_list; | ||
431 | struct list_head t_state_list; | ||
432 | } ____cacheline_aligned; | 410 | } ____cacheline_aligned; |
433 | 411 | ||
434 | struct se_cmd { | 412 | struct se_cmd { |
@@ -446,8 +424,6 @@ struct se_cmd { | |||
446 | int sam_task_attr; | 424 | int sam_task_attr; |
447 | /* Transport protocol dependent state, see transport_state_table */ | 425 | /* Transport protocol dependent state, see transport_state_table */ |
448 | enum transport_state_table t_state; | 426 | enum transport_state_table t_state; |
449 | /* Transport protocol dependent state for out of order CmdSNs */ | ||
450 | int deferred_t_state; | ||
451 | /* Transport specific error status */ | 427 | /* Transport specific error status */ |
452 | int transport_error_status; | 428 | int transport_error_status; |
453 | /* See se_cmd_flags_table */ | 429 | /* See se_cmd_flags_table */ |
@@ -461,7 +437,6 @@ struct se_cmd { | |||
461 | u32 orig_fe_lun; | 437 | u32 orig_fe_lun; |
462 | /* Persistent Reservation key */ | 438 | /* Persistent Reservation key */ |
463 | u64 pr_res_key; | 439 | u64 pr_res_key; |
464 | atomic_t transport_sent; | ||
465 | /* Used for sense data */ | 440 | /* Used for sense data */ |
466 | void *sense_buffer; | 441 | void *sense_buffer; |
467 | struct list_head se_delayed_node; | 442 | struct list_head se_delayed_node; |
@@ -479,10 +454,7 @@ struct se_cmd { | |||
479 | struct list_head se_queue_node; | 454 | struct list_head se_queue_node; |
480 | struct target_core_fabric_ops *se_tfo; | 455 | struct target_core_fabric_ops *se_tfo; |
481 | int (*transport_emulate_cdb)(struct se_cmd *); | 456 | int (*transport_emulate_cdb)(struct se_cmd *); |
482 | void (*transport_split_cdb)(unsigned long long, u32, unsigned char *); | ||
483 | void (*transport_wait_for_tasks)(struct se_cmd *, int, int); | ||
484 | void (*transport_complete_callback)(struct se_cmd *); | 457 | void (*transport_complete_callback)(struct se_cmd *); |
485 | int (*transport_qf_callback)(struct se_cmd *); | ||
486 | 458 | ||
487 | unsigned char *t_task_cdb; | 459 | unsigned char *t_task_cdb; |
488 | unsigned char __t_task_cdb[TCM_MAX_COMMAND_SIZE]; | 460 | unsigned char __t_task_cdb[TCM_MAX_COMMAND_SIZE]; |
@@ -495,7 +467,6 @@ struct se_cmd { | |||
495 | atomic_t t_se_count; | 467 | atomic_t t_se_count; |
496 | atomic_t t_task_cdbs_left; | 468 | atomic_t t_task_cdbs_left; |
497 | atomic_t t_task_cdbs_ex_left; | 469 | atomic_t t_task_cdbs_ex_left; |
498 | atomic_t t_task_cdbs_timeout_left; | ||
499 | atomic_t t_task_cdbs_sent; | 470 | atomic_t t_task_cdbs_sent; |
500 | atomic_t t_transport_aborted; | 471 | atomic_t t_transport_aborted; |
501 | atomic_t t_transport_active; | 472 | atomic_t t_transport_active; |
@@ -503,7 +474,6 @@ struct se_cmd { | |||
503 | atomic_t t_transport_queue_active; | 474 | atomic_t t_transport_queue_active; |
504 | atomic_t t_transport_sent; | 475 | atomic_t t_transport_sent; |
505 | atomic_t t_transport_stop; | 476 | atomic_t t_transport_stop; |
506 | atomic_t t_transport_timeout; | ||
507 | atomic_t transport_dev_active; | 477 | atomic_t transport_dev_active; |
508 | atomic_t transport_lun_active; | 478 | atomic_t transport_lun_active; |
509 | atomic_t transport_lun_fe_stop; | 479 | atomic_t transport_lun_fe_stop; |
@@ -514,6 +484,8 @@ struct se_cmd { | |||
514 | struct completion transport_lun_stop_comp; | 484 | struct completion transport_lun_stop_comp; |
515 | struct scatterlist *t_tasks_sg_chained; | 485 | struct scatterlist *t_tasks_sg_chained; |
516 | 486 | ||
487 | struct work_struct work; | ||
488 | |||
517 | /* | 489 | /* |
518 | * Used for pre-registered fabric SGL passthrough WRITE and READ | 490 | * Used for pre-registered fabric SGL passthrough WRITE and READ |
519 | * with the special SCF_PASSTHROUGH_CONTIG_TO_SG case for TCM_Loop | 491 | * with the special SCF_PASSTHROUGH_CONTIG_TO_SG case for TCM_Loop |
@@ -670,7 +642,6 @@ struct se_dev_attrib { | |||
670 | u32 optimal_sectors; | 642 | u32 optimal_sectors; |
671 | u32 hw_queue_depth; | 643 | u32 hw_queue_depth; |
672 | u32 queue_depth; | 644 | u32 queue_depth; |
673 | u32 task_timeout; | ||
674 | u32 max_unmap_lba_count; | 645 | u32 max_unmap_lba_count; |
675 | u32 max_unmap_block_desc_count; | 646 | u32 max_unmap_block_desc_count; |
676 | u32 unmap_granularity; | 647 | u32 unmap_granularity; |
diff --git a/include/target/target_core_tmr.h b/include/target/target_core_tmr.h index bd5596807478..d5876e17d3fb 100644 --- a/include/target/target_core_tmr.h +++ b/include/target/target_core_tmr.h | |||
@@ -27,7 +27,7 @@ enum tcm_tmrsp_table { | |||
27 | 27 | ||
28 | extern struct kmem_cache *se_tmr_req_cache; | 28 | extern struct kmem_cache *se_tmr_req_cache; |
29 | 29 | ||
30 | extern struct se_tmr_req *core_tmr_alloc_req(struct se_cmd *, void *, u8); | 30 | extern struct se_tmr_req *core_tmr_alloc_req(struct se_cmd *, void *, u8, gfp_t); |
31 | extern void core_tmr_release_req(struct se_tmr_req *); | 31 | extern void core_tmr_release_req(struct se_tmr_req *); |
32 | extern int core_tmr_lun_reset(struct se_device *, struct se_tmr_req *, | 32 | extern int core_tmr_lun_reset(struct se_device *, struct se_tmr_req *, |
33 | struct list_head *, struct se_cmd *); | 33 | struct list_head *, struct se_cmd *); |
diff --git a/include/target/target_core_transport.h b/include/target/target_core_transport.h index 46aae4f94ede..a037a1a6fbba 100644 --- a/include/target/target_core_transport.h +++ b/include/target/target_core_transport.h | |||
@@ -22,10 +22,9 @@ | |||
22 | #define PYX_TRANSPORT_LU_COMM_FAILURE -7 | 22 | #define PYX_TRANSPORT_LU_COMM_FAILURE -7 |
23 | #define PYX_TRANSPORT_UNKNOWN_MODE_PAGE -8 | 23 | #define PYX_TRANSPORT_UNKNOWN_MODE_PAGE -8 |
24 | #define PYX_TRANSPORT_WRITE_PROTECTED -9 | 24 | #define PYX_TRANSPORT_WRITE_PROTECTED -9 |
25 | #define PYX_TRANSPORT_TASK_TIMEOUT -10 | 25 | #define PYX_TRANSPORT_RESERVATION_CONFLICT -10 |
26 | #define PYX_TRANSPORT_RESERVATION_CONFLICT -11 | 26 | #define PYX_TRANSPORT_ILLEGAL_REQUEST -11 |
27 | #define PYX_TRANSPORT_ILLEGAL_REQUEST -12 | 27 | #define PYX_TRANSPORT_USE_SENSE_REASON -12 |
28 | #define PYX_TRANSPORT_USE_SENSE_REASON -13 | ||
29 | 28 | ||
30 | #ifndef SAM_STAT_RESERVATION_CONFLICT | 29 | #ifndef SAM_STAT_RESERVATION_CONFLICT |
31 | #define SAM_STAT_RESERVATION_CONFLICT 0x18 | 30 | #define SAM_STAT_RESERVATION_CONFLICT 0x18 |
@@ -38,16 +37,6 @@ | |||
38 | #define TRANSPORT_PLUGIN_VHBA_PDEV 2 | 37 | #define TRANSPORT_PLUGIN_VHBA_PDEV 2 |
39 | #define TRANSPORT_PLUGIN_VHBA_VDEV 3 | 38 | #define TRANSPORT_PLUGIN_VHBA_VDEV 3 |
40 | 39 | ||
41 | /* For SE OBJ Plugins, in seconds */ | ||
42 | #define TRANSPORT_TIMEOUT_TUR 10 | ||
43 | #define TRANSPORT_TIMEOUT_TYPE_DISK 60 | ||
44 | #define TRANSPORT_TIMEOUT_TYPE_ROM 120 | ||
45 | #define TRANSPORT_TIMEOUT_TYPE_TAPE 600 | ||
46 | #define TRANSPORT_TIMEOUT_TYPE_OTHER 300 | ||
47 | |||
48 | /* For se_task->task_state_flags */ | ||
49 | #define TSF_EXCEPTION_CLEARED 0x01 | ||
50 | |||
51 | /* | 40 | /* |
52 | * struct se_subsystem_dev->su_dev_flags | 41 | * struct se_subsystem_dev->su_dev_flags |
53 | */ | 42 | */ |
@@ -64,8 +53,6 @@ | |||
64 | #define DF_SPC2_RESERVATIONS_WITH_ISID 0x00000004 | 53 | #define DF_SPC2_RESERVATIONS_WITH_ISID 0x00000004 |
65 | 54 | ||
66 | /* struct se_dev_attrib sanity values */ | 55 | /* struct se_dev_attrib sanity values */ |
67 | /* 10 Minutes */ | ||
68 | #define DA_TASK_TIMEOUT_MAX 600 | ||
69 | /* Default max_unmap_lba_count */ | 56 | /* Default max_unmap_lba_count */ |
70 | #define DA_MAX_UNMAP_LBA_COUNT 0 | 57 | #define DA_MAX_UNMAP_LBA_COUNT 0 |
71 | /* Default max_unmap_block_desc_count */ | 58 | /* Default max_unmap_block_desc_count */ |
@@ -110,16 +97,13 @@ | |||
110 | 97 | ||
111 | #define MOD_MAX_SECTORS(ms, bs) (ms % (PAGE_SIZE / bs)) | 98 | #define MOD_MAX_SECTORS(ms, bs) (ms % (PAGE_SIZE / bs)) |
112 | 99 | ||
113 | struct se_mem; | ||
114 | struct se_subsystem_api; | 100 | struct se_subsystem_api; |
115 | 101 | ||
116 | extern struct kmem_cache *se_mem_cache; | ||
117 | |||
118 | extern int init_se_kmem_caches(void); | 102 | extern int init_se_kmem_caches(void); |
119 | extern void release_se_kmem_caches(void); | 103 | extern void release_se_kmem_caches(void); |
120 | extern u32 scsi_get_new_index(scsi_index_t); | 104 | extern u32 scsi_get_new_index(scsi_index_t); |
121 | extern void transport_init_queue_obj(struct se_queue_obj *); | 105 | extern void transport_init_queue_obj(struct se_queue_obj *); |
122 | extern int transport_subsystem_check_init(void); | 106 | extern void transport_subsystem_check_init(void); |
123 | extern int transport_subsystem_register(struct se_subsystem_api *); | 107 | extern int transport_subsystem_register(struct se_subsystem_api *); |
124 | extern void transport_subsystem_release(struct se_subsystem_api *); | 108 | extern void transport_subsystem_release(struct se_subsystem_api *); |
125 | extern void transport_load_plugins(void); | 109 | extern void transport_load_plugins(void); |
@@ -134,7 +118,6 @@ extern void transport_free_session(struct se_session *); | |||
134 | extern void transport_deregister_session_configfs(struct se_session *); | 118 | extern void transport_deregister_session_configfs(struct se_session *); |
135 | extern void transport_deregister_session(struct se_session *); | 119 | extern void transport_deregister_session(struct se_session *); |
136 | extern void transport_cmd_finish_abort(struct se_cmd *, int); | 120 | extern void transport_cmd_finish_abort(struct se_cmd *, int); |
137 | extern void transport_cmd_finish_abort_tmr(struct se_cmd *); | ||
138 | extern void transport_complete_sync_cache(struct se_cmd *, int); | 121 | extern void transport_complete_sync_cache(struct se_cmd *, int); |
139 | extern void transport_complete_task(struct se_task *, int); | 122 | extern void transport_complete_task(struct se_task *, int); |
140 | extern void transport_add_task_to_execute_queue(struct se_task *, | 123 | extern void transport_add_task_to_execute_queue(struct se_task *, |
@@ -142,6 +125,8 @@ extern void transport_add_task_to_execute_queue(struct se_task *, | |||
142 | struct se_device *); | 125 | struct se_device *); |
143 | extern void transport_remove_task_from_execute_queue(struct se_task *, | 126 | extern void transport_remove_task_from_execute_queue(struct se_task *, |
144 | struct se_device *); | 127 | struct se_device *); |
128 | extern void __transport_remove_task_from_execute_queue(struct se_task *, | ||
129 | struct se_device *); | ||
145 | unsigned char *transport_dump_cmd_direction(struct se_cmd *); | 130 | unsigned char *transport_dump_cmd_direction(struct se_cmd *); |
146 | extern void transport_dump_dev_state(struct se_device *, char *, int *); | 131 | extern void transport_dump_dev_state(struct se_device *, char *, int *); |
147 | extern void transport_dump_dev_info(struct se_device *, struct se_lun *, | 132 | extern void transport_dump_dev_info(struct se_device *, struct se_lun *, |
@@ -169,29 +154,24 @@ extern void transport_init_se_cmd(struct se_cmd *, | |||
169 | unsigned char *); | 154 | unsigned char *); |
170 | void *transport_kmap_first_data_page(struct se_cmd *cmd); | 155 | void *transport_kmap_first_data_page(struct se_cmd *cmd); |
171 | void transport_kunmap_first_data_page(struct se_cmd *cmd); | 156 | void transport_kunmap_first_data_page(struct se_cmd *cmd); |
172 | extern void transport_free_se_cmd(struct se_cmd *); | ||
173 | extern int transport_generic_allocate_tasks(struct se_cmd *, unsigned char *); | 157 | extern int transport_generic_allocate_tasks(struct se_cmd *, unsigned char *); |
174 | extern int transport_generic_handle_cdb(struct se_cmd *); | ||
175 | extern int transport_handle_cdb_direct(struct se_cmd *); | 158 | extern int transport_handle_cdb_direct(struct se_cmd *); |
176 | extern int transport_generic_handle_cdb_map(struct se_cmd *); | 159 | extern int transport_generic_handle_cdb_map(struct se_cmd *); |
177 | extern int transport_generic_handle_data(struct se_cmd *); | 160 | extern int transport_generic_handle_data(struct se_cmd *); |
178 | extern void transport_new_cmd_failure(struct se_cmd *); | 161 | extern void transport_new_cmd_failure(struct se_cmd *); |
179 | extern int transport_generic_handle_tmr(struct se_cmd *); | 162 | extern int transport_generic_handle_tmr(struct se_cmd *); |
180 | extern void transport_generic_free_cmd_intr(struct se_cmd *); | 163 | extern void transport_generic_free_cmd_intr(struct se_cmd *); |
181 | extern void __transport_stop_task_timer(struct se_task *, unsigned long *); | 164 | extern bool target_stop_task(struct se_task *task, unsigned long *flags); |
182 | extern int transport_generic_map_mem_to_cmd(struct se_cmd *cmd, struct scatterlist *, u32, | 165 | extern int transport_generic_map_mem_to_cmd(struct se_cmd *cmd, struct scatterlist *, u32, |
183 | struct scatterlist *, u32); | 166 | struct scatterlist *, u32); |
184 | extern int transport_clear_lun_from_sessions(struct se_lun *); | 167 | extern int transport_clear_lun_from_sessions(struct se_lun *); |
168 | extern void transport_wait_for_tasks(struct se_cmd *); | ||
185 | extern int transport_check_aborted_status(struct se_cmd *, int); | 169 | extern int transport_check_aborted_status(struct se_cmd *, int); |
186 | extern int transport_send_check_condition_and_sense(struct se_cmd *, u8, int); | 170 | extern int transport_send_check_condition_and_sense(struct se_cmd *, u8, int); |
187 | extern void transport_send_task_abort(struct se_cmd *); | 171 | extern void transport_send_task_abort(struct se_cmd *); |
188 | extern void transport_release_cmd(struct se_cmd *); | 172 | extern void transport_release_cmd(struct se_cmd *); |
189 | extern void transport_generic_free_cmd(struct se_cmd *, int, int); | 173 | extern void transport_generic_free_cmd(struct se_cmd *, int); |
190 | extern void transport_generic_wait_for_cmds(struct se_cmd *, int); | 174 | extern void transport_generic_wait_for_cmds(struct se_cmd *, int); |
191 | extern int transport_init_task_sg(struct se_task *, struct se_mem *, u32); | ||
192 | extern int transport_map_mem_to_sg(struct se_task *, struct list_head *, | ||
193 | struct scatterlist *, struct se_mem *, | ||
194 | struct se_mem **, u32 *, u32 *); | ||
195 | extern void transport_do_task_sg_chain(struct se_cmd *); | 175 | extern void transport_do_task_sg_chain(struct se_cmd *); |
196 | extern void transport_generic_process_write(struct se_cmd *); | 176 | extern void transport_generic_process_write(struct se_cmd *); |
197 | extern int transport_generic_new_cmd(struct se_cmd *); | 177 | extern int transport_generic_new_cmd(struct se_cmd *); |
@@ -200,6 +180,7 @@ extern int transport_generic_do_tmr(struct se_cmd *); | |||
200 | extern int core_alua_check_nonop_delay(struct se_cmd *); | 180 | extern int core_alua_check_nonop_delay(struct se_cmd *); |
201 | /* From target_core_cdb.c */ | 181 | /* From target_core_cdb.c */ |
202 | extern int transport_emulate_control_cdb(struct se_task *); | 182 | extern int transport_emulate_control_cdb(struct se_task *); |
183 | extern void target_get_task_cdb(struct se_task *task, unsigned char *cdb); | ||
203 | 184 | ||
204 | /* | 185 | /* |
205 | * Each se_transport_task_t can have N number of possible struct se_task's | 186 | * Each se_transport_task_t can have N number of possible struct se_task's |
@@ -227,6 +208,10 @@ struct se_subsystem_api { | |||
227 | * Transport Type. | 208 | * Transport Type. |
228 | */ | 209 | */ |
229 | u8 transport_type; | 210 | u8 transport_type; |
211 | |||
212 | unsigned int fua_write_emulated : 1; | ||
213 | unsigned int write_cache_emulated : 1; | ||
214 | |||
230 | /* | 215 | /* |
231 | * struct module for struct se_hba references | 216 | * struct module for struct se_hba references |
232 | */ | 217 | */ |
@@ -236,18 +221,6 @@ struct se_subsystem_api { | |||
236 | */ | 221 | */ |
237 | struct list_head sub_api_list; | 222 | struct list_head sub_api_list; |
238 | /* | 223 | /* |
239 | * For SCF_SCSI_NON_DATA_CDB | ||
240 | */ | ||
241 | int (*cdb_none)(struct se_task *); | ||
242 | /* | ||
243 | * For SCF_SCSI_DATA_SG_IO_CDB | ||
244 | */ | ||
245 | int (*map_data_SG)(struct se_task *); | ||
246 | /* | ||
247 | * For SCF_SCSI_CONTROL_SG_IO_CDB | ||
248 | */ | ||
249 | int (*map_control_SG)(struct se_task *); | ||
250 | /* | ||
251 | * attach_hba(): | 224 | * attach_hba(): |
252 | */ | 225 | */ |
253 | int (*attach_hba)(struct se_hba *, u32); | 226 | int (*attach_hba)(struct se_hba *, u32); |
@@ -275,22 +248,6 @@ struct se_subsystem_api { | |||
275 | void (*free_device)(void *); | 248 | void (*free_device)(void *); |
276 | 249 | ||
277 | /* | 250 | /* |
278 | * dpo_emulated(): | ||
279 | */ | ||
280 | int (*dpo_emulated)(struct se_device *); | ||
281 | /* | ||
282 | * fua_write_emulated(): | ||
283 | */ | ||
284 | int (*fua_write_emulated)(struct se_device *); | ||
285 | /* | ||
286 | * fua_read_emulated(): | ||
287 | */ | ||
288 | int (*fua_read_emulated)(struct se_device *); | ||
289 | /* | ||
290 | * write_cache_emulated(): | ||
291 | */ | ||
292 | int (*write_cache_emulated)(struct se_device *); | ||
293 | /* | ||
294 | * transport_complete(): | 251 | * transport_complete(): |
295 | * | 252 | * |
296 | * Use transport_generic_complete() for majority of DAS transport | 253 | * Use transport_generic_complete() for majority of DAS transport |
@@ -331,10 +288,6 @@ struct se_subsystem_api { | |||
331 | ssize_t (*show_configfs_dev_params)(struct se_hba *, struct se_subsystem_dev *, | 288 | ssize_t (*show_configfs_dev_params)(struct se_hba *, struct se_subsystem_dev *, |
332 | char *); | 289 | char *); |
333 | /* | 290 | /* |
334 | * get_cdb(): | ||
335 | */ | ||
336 | unsigned char *(*get_cdb)(struct se_task *); | ||
337 | /* | ||
338 | * get_device_rev(): | 291 | * get_device_rev(): |
339 | */ | 292 | */ |
340 | u32 (*get_device_rev)(struct se_device *); | 293 | u32 (*get_device_rev)(struct se_device *); |
diff --git a/include/trace/events/writeback.h b/include/trace/events/writeback.h index 6bca4cc0063c..5f172703eb4f 100644 --- a/include/trace/events/writeback.h +++ b/include/trace/events/writeback.h | |||
@@ -298,7 +298,7 @@ DECLARE_EVENT_CLASS(writeback_single_inode_template, | |||
298 | __array(char, name, 32) | 298 | __array(char, name, 32) |
299 | __field(unsigned long, ino) | 299 | __field(unsigned long, ino) |
300 | __field(unsigned long, state) | 300 | __field(unsigned long, state) |
301 | __field(unsigned long, age) | 301 | __field(unsigned long, dirtied_when) |
302 | __field(unsigned long, writeback_index) | 302 | __field(unsigned long, writeback_index) |
303 | __field(long, nr_to_write) | 303 | __field(long, nr_to_write) |
304 | __field(unsigned long, wrote) | 304 | __field(unsigned long, wrote) |
@@ -309,19 +309,19 @@ DECLARE_EVENT_CLASS(writeback_single_inode_template, | |||
309 | dev_name(inode->i_mapping->backing_dev_info->dev), 32); | 309 | dev_name(inode->i_mapping->backing_dev_info->dev), 32); |
310 | __entry->ino = inode->i_ino; | 310 | __entry->ino = inode->i_ino; |
311 | __entry->state = inode->i_state; | 311 | __entry->state = inode->i_state; |
312 | __entry->age = (jiffies - inode->dirtied_when) * | 312 | __entry->dirtied_when = inode->dirtied_when; |
313 | 1000 / HZ; | ||
314 | __entry->writeback_index = inode->i_mapping->writeback_index; | 313 | __entry->writeback_index = inode->i_mapping->writeback_index; |
315 | __entry->nr_to_write = nr_to_write; | 314 | __entry->nr_to_write = nr_to_write; |
316 | __entry->wrote = nr_to_write - wbc->nr_to_write; | 315 | __entry->wrote = nr_to_write - wbc->nr_to_write; |
317 | ), | 316 | ), |
318 | 317 | ||
319 | TP_printk("bdi %s: ino=%lu state=%s age=%lu " | 318 | TP_printk("bdi %s: ino=%lu state=%s dirtied_when=%lu age=%lu " |
320 | "index=%lu to_write=%ld wrote=%lu", | 319 | "index=%lu to_write=%ld wrote=%lu", |
321 | __entry->name, | 320 | __entry->name, |
322 | __entry->ino, | 321 | __entry->ino, |
323 | show_inode_state(__entry->state), | 322 | show_inode_state(__entry->state), |
324 | __entry->age, | 323 | __entry->dirtied_when, |
324 | (jiffies - __entry->dirtied_when) / HZ, | ||
325 | __entry->writeback_index, | 325 | __entry->writeback_index, |
326 | __entry->nr_to_write, | 326 | __entry->nr_to_write, |
327 | __entry->wrote | 327 | __entry->wrote |
diff --git a/include/xen/balloon.h b/include/xen/balloon.h index 76f7538bb339..d29c153705bc 100644 --- a/include/xen/balloon.h +++ b/include/xen/balloon.h | |||
@@ -25,8 +25,9 @@ extern struct balloon_stats balloon_stats; | |||
25 | 25 | ||
26 | void balloon_set_new_target(unsigned long target); | 26 | void balloon_set_new_target(unsigned long target); |
27 | 27 | ||
28 | int alloc_xenballooned_pages(int nr_pages, struct page** pages); | 28 | int alloc_xenballooned_pages(int nr_pages, struct page **pages, |
29 | void free_xenballooned_pages(int nr_pages, struct page** pages); | 29 | bool highmem); |
30 | void free_xenballooned_pages(int nr_pages, struct page **pages); | ||
30 | 31 | ||
31 | struct sys_device; | 32 | struct sys_device; |
32 | #ifdef CONFIG_XEN_SELFBALLOONING | 33 | #ifdef CONFIG_XEN_SELFBALLOONING |
diff --git a/include/xen/grant_table.h b/include/xen/grant_table.h index b1fab6b5b3ef..6b99bfbd785d 100644 --- a/include/xen/grant_table.h +++ b/include/xen/grant_table.h | |||
@@ -156,6 +156,7 @@ unsigned int gnttab_max_grant_frames(void); | |||
156 | #define gnttab_map_vaddr(map) ((void *)(map.host_virt_addr)) | 156 | #define gnttab_map_vaddr(map) ((void *)(map.host_virt_addr)) |
157 | 157 | ||
158 | int gnttab_map_refs(struct gnttab_map_grant_ref *map_ops, | 158 | int gnttab_map_refs(struct gnttab_map_grant_ref *map_ops, |
159 | struct gnttab_map_grant_ref *kmap_ops, | ||
159 | struct page **pages, unsigned int count); | 160 | struct page **pages, unsigned int count); |
160 | int gnttab_unmap_refs(struct gnttab_unmap_grant_ref *unmap_ops, | 161 | int gnttab_unmap_refs(struct gnttab_unmap_grant_ref *unmap_ops, |
161 | struct page **pages, unsigned int count); | 162 | struct page **pages, unsigned int count); |
diff --git a/include/xen/interface/io/xs_wire.h b/include/xen/interface/io/xs_wire.h index 99fcffb372d1..f0b6890370be 100644 --- a/include/xen/interface/io/xs_wire.h +++ b/include/xen/interface/io/xs_wire.h | |||
@@ -26,7 +26,11 @@ enum xsd_sockmsg_type | |||
26 | XS_SET_PERMS, | 26 | XS_SET_PERMS, |
27 | XS_WATCH_EVENT, | 27 | XS_WATCH_EVENT, |
28 | XS_ERROR, | 28 | XS_ERROR, |
29 | XS_IS_DOMAIN_INTRODUCED | 29 | XS_IS_DOMAIN_INTRODUCED, |
30 | XS_RESUME, | ||
31 | XS_SET_TARGET, | ||
32 | XS_RESTRICT, | ||
33 | XS_RESET_WATCHES | ||
30 | }; | 34 | }; |
31 | 35 | ||
32 | #define XS_WRITE_NONE "NONE" | 36 | #define XS_WRITE_NONE "NONE" |
diff --git a/include/xen/interface/physdev.h b/include/xen/interface/physdev.h index 534cac89a77d..c1080d9c705d 100644 --- a/include/xen/interface/physdev.h +++ b/include/xen/interface/physdev.h | |||
@@ -109,6 +109,7 @@ struct physdev_irq { | |||
109 | #define MAP_PIRQ_TYPE_MSI 0x0 | 109 | #define MAP_PIRQ_TYPE_MSI 0x0 |
110 | #define MAP_PIRQ_TYPE_GSI 0x1 | 110 | #define MAP_PIRQ_TYPE_GSI 0x1 |
111 | #define MAP_PIRQ_TYPE_UNKNOWN 0x2 | 111 | #define MAP_PIRQ_TYPE_UNKNOWN 0x2 |
112 | #define MAP_PIRQ_TYPE_MSI_SEG 0x3 | ||
112 | 113 | ||
113 | #define PHYSDEVOP_map_pirq 13 | 114 | #define PHYSDEVOP_map_pirq 13 |
114 | struct physdev_map_pirq { | 115 | struct physdev_map_pirq { |
@@ -119,7 +120,7 @@ struct physdev_map_pirq { | |||
119 | int index; | 120 | int index; |
120 | /* IN or OUT */ | 121 | /* IN or OUT */ |
121 | int pirq; | 122 | int pirq; |
122 | /* IN */ | 123 | /* IN - high 16 bits hold segment for MAP_PIRQ_TYPE_MSI_SEG */ |
123 | int bus; | 124 | int bus; |
124 | /* IN */ | 125 | /* IN */ |
125 | int devfn; | 126 | int devfn; |
@@ -198,6 +199,37 @@ struct physdev_get_free_pirq { | |||
198 | uint32_t pirq; | 199 | uint32_t pirq; |
199 | }; | 200 | }; |
200 | 201 | ||
202 | #define XEN_PCI_DEV_EXTFN 0x1 | ||
203 | #define XEN_PCI_DEV_VIRTFN 0x2 | ||
204 | #define XEN_PCI_DEV_PXM 0x4 | ||
205 | |||
206 | #define PHYSDEVOP_pci_device_add 25 | ||
207 | struct physdev_pci_device_add { | ||
208 | /* IN */ | ||
209 | uint16_t seg; | ||
210 | uint8_t bus; | ||
211 | uint8_t devfn; | ||
212 | uint32_t flags; | ||
213 | struct { | ||
214 | uint8_t bus; | ||
215 | uint8_t devfn; | ||
216 | } physfn; | ||
217 | #if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L | ||
218 | uint32_t optarr[]; | ||
219 | #elif defined(__GNUC__) | ||
220 | uint32_t optarr[0]; | ||
221 | #endif | ||
222 | }; | ||
223 | |||
224 | #define PHYSDEVOP_pci_device_remove 26 | ||
225 | #define PHYSDEVOP_restore_msi_ext 27 | ||
226 | struct physdev_pci_device { | ||
227 | /* IN */ | ||
228 | uint16_t seg; | ||
229 | uint8_t bus; | ||
230 | uint8_t devfn; | ||
231 | }; | ||
232 | |||
201 | /* | 233 | /* |
202 | * Notify that some PIRQ-bound event channels have been unmasked. | 234 | * Notify that some PIRQ-bound event channels have been unmasked. |
203 | * ** This command is obsolete since interface version 0x00030202 and is ** | 235 | * ** This command is obsolete since interface version 0x00030202 and is ** |
diff --git a/include/xen/page.h b/include/xen/page.h index 0be36b976f4b..12765b6f9517 100644 --- a/include/xen/page.h +++ b/include/xen/page.h | |||
@@ -3,6 +3,16 @@ | |||
3 | 3 | ||
4 | #include <asm/xen/page.h> | 4 | #include <asm/xen/page.h> |
5 | 5 | ||
6 | extern phys_addr_t xen_extra_mem_start, xen_extra_mem_size; | 6 | struct xen_memory_region { |
7 | phys_addr_t start; | ||
8 | phys_addr_t size; | ||
9 | }; | ||
10 | |||
11 | #define XEN_EXTRA_MEM_MAX_REGIONS 128 /* == E820MAX */ | ||
12 | |||
13 | extern __initdata | ||
14 | struct xen_memory_region xen_extra_mem[XEN_EXTRA_MEM_MAX_REGIONS]; | ||
15 | |||
16 | extern unsigned long xen_released_pages; | ||
7 | 17 | ||
8 | #endif /* _XEN_PAGE_H */ | 18 | #endif /* _XEN_PAGE_H */ |