diff options
Diffstat (limited to 'include')
33 files changed, 699 insertions, 127 deletions
diff --git a/include/acpi/acpi_bus.h b/include/acpi/acpi_bus.h index 89c60b0f6408..7b2de026a4f3 100644 --- a/include/acpi/acpi_bus.h +++ b/include/acpi/acpi_bus.h | |||
@@ -431,9 +431,9 @@ static inline acpi_handle acpi_get_child(acpi_handle handle, u64 addr) | |||
431 | { | 431 | { |
432 | return acpi_find_child(handle, addr, false); | 432 | return acpi_find_child(handle, addr, false); |
433 | } | 433 | } |
434 | void acpi_preset_companion(struct device *dev, acpi_handle parent, u64 addr); | ||
434 | int acpi_is_root_bridge(acpi_handle); | 435 | int acpi_is_root_bridge(acpi_handle); |
435 | struct acpi_pci_root *acpi_pci_find_root(acpi_handle handle); | 436 | struct acpi_pci_root *acpi_pci_find_root(acpi_handle handle); |
436 | #define DEVICE_ACPI_HANDLE(dev) ((acpi_handle)ACPI_HANDLE(dev)) | ||
437 | 437 | ||
438 | int acpi_enable_wakeup_device_power(struct acpi_device *dev, int state); | 438 | int acpi_enable_wakeup_device_power(struct acpi_device *dev, int state); |
439 | int acpi_disable_wakeup_device_power(struct acpi_device *dev); | 439 | int acpi_disable_wakeup_device_power(struct acpi_device *dev); |
diff --git a/include/crypto/hash_info.h b/include/crypto/hash_info.h new file mode 100644 index 000000000000..e1e5a3e5dd1b --- /dev/null +++ b/include/crypto/hash_info.h | |||
@@ -0,0 +1,40 @@ | |||
1 | /* | ||
2 | * Hash Info: Hash algorithms information | ||
3 | * | ||
4 | * Copyright (c) 2013 Dmitry Kasatkin <d.kasatkin@samsung.com> | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify it | ||
7 | * under the terms of the GNU General Public License as published by the Free | ||
8 | * Software Foundation; either version 2 of the License, or (at your option) | ||
9 | * any later version. | ||
10 | * | ||
11 | */ | ||
12 | |||
13 | #ifndef _CRYPTO_HASH_INFO_H | ||
14 | #define _CRYPTO_HASH_INFO_H | ||
15 | |||
16 | #include <crypto/sha.h> | ||
17 | #include <crypto/md5.h> | ||
18 | |||
19 | #include <uapi/linux/hash_info.h> | ||
20 | |||
21 | /* not defined in include/crypto/ */ | ||
22 | #define RMD128_DIGEST_SIZE 16 | ||
23 | #define RMD160_DIGEST_SIZE 20 | ||
24 | #define RMD256_DIGEST_SIZE 32 | ||
25 | #define RMD320_DIGEST_SIZE 40 | ||
26 | |||
27 | /* not defined in include/crypto/ */ | ||
28 | #define WP512_DIGEST_SIZE 64 | ||
29 | #define WP384_DIGEST_SIZE 48 | ||
30 | #define WP256_DIGEST_SIZE 32 | ||
31 | |||
32 | /* not defined in include/crypto/ */ | ||
33 | #define TGR128_DIGEST_SIZE 16 | ||
34 | #define TGR160_DIGEST_SIZE 20 | ||
35 | #define TGR192_DIGEST_SIZE 24 | ||
36 | |||
37 | extern const char *const hash_algo_name[HASH_ALGO__LAST]; | ||
38 | extern const int hash_digest_size[HASH_ALGO__LAST]; | ||
39 | |||
40 | #endif /* _CRYPTO_HASH_INFO_H */ | ||
diff --git a/include/crypto/public_key.h b/include/crypto/public_key.h index f5b0224c9967..fc09732613ad 100644 --- a/include/crypto/public_key.h +++ b/include/crypto/public_key.h | |||
@@ -15,6 +15,7 @@ | |||
15 | #define _LINUX_PUBLIC_KEY_H | 15 | #define _LINUX_PUBLIC_KEY_H |
16 | 16 | ||
17 | #include <linux/mpi.h> | 17 | #include <linux/mpi.h> |
18 | #include <crypto/hash_info.h> | ||
18 | 19 | ||
19 | enum pkey_algo { | 20 | enum pkey_algo { |
20 | PKEY_ALGO_DSA, | 21 | PKEY_ALGO_DSA, |
@@ -22,21 +23,11 @@ enum pkey_algo { | |||
22 | PKEY_ALGO__LAST | 23 | PKEY_ALGO__LAST |
23 | }; | 24 | }; |
24 | 25 | ||
25 | extern const char *const pkey_algo[PKEY_ALGO__LAST]; | 26 | extern const char *const pkey_algo_name[PKEY_ALGO__LAST]; |
27 | extern const struct public_key_algorithm *pkey_algo[PKEY_ALGO__LAST]; | ||
26 | 28 | ||
27 | enum pkey_hash_algo { | 29 | /* asymmetric key implementation supports only up to SHA224 */ |
28 | PKEY_HASH_MD4, | 30 | #define PKEY_HASH__LAST (HASH_ALGO_SHA224 + 1) |
29 | PKEY_HASH_MD5, | ||
30 | PKEY_HASH_SHA1, | ||
31 | PKEY_HASH_RIPE_MD_160, | ||
32 | PKEY_HASH_SHA256, | ||
33 | PKEY_HASH_SHA384, | ||
34 | PKEY_HASH_SHA512, | ||
35 | PKEY_HASH_SHA224, | ||
36 | PKEY_HASH__LAST | ||
37 | }; | ||
38 | |||
39 | extern const char *const pkey_hash_algo[PKEY_HASH__LAST]; | ||
40 | 31 | ||
41 | enum pkey_id_type { | 32 | enum pkey_id_type { |
42 | PKEY_ID_PGP, /* OpenPGP generated key ID */ | 33 | PKEY_ID_PGP, /* OpenPGP generated key ID */ |
@@ -44,7 +35,7 @@ enum pkey_id_type { | |||
44 | PKEY_ID_TYPE__LAST | 35 | PKEY_ID_TYPE__LAST |
45 | }; | 36 | }; |
46 | 37 | ||
47 | extern const char *const pkey_id_type[PKEY_ID_TYPE__LAST]; | 38 | extern const char *const pkey_id_type_name[PKEY_ID_TYPE__LAST]; |
48 | 39 | ||
49 | /* | 40 | /* |
50 | * Cryptographic data for the public-key subtype of the asymmetric key type. | 41 | * Cryptographic data for the public-key subtype of the asymmetric key type. |
@@ -59,6 +50,7 @@ struct public_key { | |||
59 | #define PKEY_CAN_DECRYPT 0x02 | 50 | #define PKEY_CAN_DECRYPT 0x02 |
60 | #define PKEY_CAN_SIGN 0x04 | 51 | #define PKEY_CAN_SIGN 0x04 |
61 | #define PKEY_CAN_VERIFY 0x08 | 52 | #define PKEY_CAN_VERIFY 0x08 |
53 | enum pkey_algo pkey_algo : 8; | ||
62 | enum pkey_id_type id_type : 8; | 54 | enum pkey_id_type id_type : 8; |
63 | union { | 55 | union { |
64 | MPI mpi[5]; | 56 | MPI mpi[5]; |
@@ -88,7 +80,8 @@ struct public_key_signature { | |||
88 | u8 *digest; | 80 | u8 *digest; |
89 | u8 digest_size; /* Number of bytes in digest */ | 81 | u8 digest_size; /* Number of bytes in digest */ |
90 | u8 nr_mpi; /* Occupancy of mpi[] */ | 82 | u8 nr_mpi; /* Occupancy of mpi[] */ |
91 | enum pkey_hash_algo pkey_hash_algo : 8; | 83 | enum pkey_algo pkey_algo : 8; |
84 | enum hash_algo pkey_hash_algo : 8; | ||
92 | union { | 85 | union { |
93 | MPI mpi[2]; | 86 | MPI mpi[2]; |
94 | struct { | 87 | struct { |
diff --git a/include/keys/big_key-type.h b/include/keys/big_key-type.h new file mode 100644 index 000000000000..d69bc8af3292 --- /dev/null +++ b/include/keys/big_key-type.h | |||
@@ -0,0 +1,25 @@ | |||
1 | /* Big capacity key type. | ||
2 | * | ||
3 | * Copyright (C) 2013 Red Hat, Inc. All Rights Reserved. | ||
4 | * Written by David Howells (dhowells@redhat.com) | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or | ||
7 | * modify it under the terms of the GNU General Public License | ||
8 | * as published by the Free Software Foundation; either version | ||
9 | * 2 of the License, or (at your option) any later version. | ||
10 | */ | ||
11 | |||
12 | #ifndef _KEYS_BIG_KEY_TYPE_H | ||
13 | #define _KEYS_BIG_KEY_TYPE_H | ||
14 | |||
15 | #include <linux/key-type.h> | ||
16 | |||
17 | extern struct key_type key_type_big_key; | ||
18 | |||
19 | extern int big_key_instantiate(struct key *key, struct key_preparsed_payload *prep); | ||
20 | extern void big_key_revoke(struct key *key); | ||
21 | extern void big_key_destroy(struct key *key); | ||
22 | extern void big_key_describe(const struct key *big_key, struct seq_file *m); | ||
23 | extern long big_key_read(const struct key *key, char __user *buffer, size_t buflen); | ||
24 | |||
25 | #endif /* _KEYS_BIG_KEY_TYPE_H */ | ||
diff --git a/include/keys/keyring-type.h b/include/keys/keyring-type.h index cf49159b0e3a..fca5c62340a4 100644 --- a/include/keys/keyring-type.h +++ b/include/keys/keyring-type.h | |||
@@ -1,6 +1,6 @@ | |||
1 | /* Keyring key type | 1 | /* Keyring key type |
2 | * | 2 | * |
3 | * Copyright (C) 2008 Red Hat, Inc. All Rights Reserved. | 3 | * Copyright (C) 2008, 2013 Red Hat, Inc. All Rights Reserved. |
4 | * Written by David Howells (dhowells@redhat.com) | 4 | * Written by David Howells (dhowells@redhat.com) |
5 | * | 5 | * |
6 | * This program is free software; you can redistribute it and/or | 6 | * This program is free software; you can redistribute it and/or |
@@ -13,19 +13,6 @@ | |||
13 | #define _KEYS_KEYRING_TYPE_H | 13 | #define _KEYS_KEYRING_TYPE_H |
14 | 14 | ||
15 | #include <linux/key.h> | 15 | #include <linux/key.h> |
16 | #include <linux/rcupdate.h> | 16 | #include <linux/assoc_array.h> |
17 | |||
18 | /* | ||
19 | * the keyring payload contains a list of the keys to which the keyring is | ||
20 | * subscribed | ||
21 | */ | ||
22 | struct keyring_list { | ||
23 | struct rcu_head rcu; /* RCU deletion hook */ | ||
24 | unsigned short maxkeys; /* max keys this list can hold */ | ||
25 | unsigned short nkeys; /* number of keys currently held */ | ||
26 | unsigned short delkey; /* key to be unlinked by RCU */ | ||
27 | struct key __rcu *keys[0]; | ||
28 | }; | ||
29 | |||
30 | 17 | ||
31 | #endif /* _KEYS_KEYRING_TYPE_H */ | 18 | #endif /* _KEYS_KEYRING_TYPE_H */ |
diff --git a/include/keys/system_keyring.h b/include/keys/system_keyring.h new file mode 100644 index 000000000000..8dabc399bd1d --- /dev/null +++ b/include/keys/system_keyring.h | |||
@@ -0,0 +1,23 @@ | |||
1 | /* System keyring containing trusted public keys. | ||
2 | * | ||
3 | * Copyright (C) 2013 Red Hat, Inc. All Rights Reserved. | ||
4 | * Written by David Howells (dhowells@redhat.com) | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or | ||
7 | * modify it under the terms of the GNU General Public Licence | ||
8 | * as published by the Free Software Foundation; either version | ||
9 | * 2 of the Licence, or (at your option) any later version. | ||
10 | */ | ||
11 | |||
12 | #ifndef _KEYS_SYSTEM_KEYRING_H | ||
13 | #define _KEYS_SYSTEM_KEYRING_H | ||
14 | |||
15 | #ifdef CONFIG_SYSTEM_TRUSTED_KEYRING | ||
16 | |||
17 | #include <linux/key.h> | ||
18 | |||
19 | extern struct key *system_trusted_keyring; | ||
20 | |||
21 | #endif | ||
22 | |||
23 | #endif /* _KEYS_SYSTEM_KEYRING_H */ | ||
diff --git a/include/linux/acpi.h b/include/linux/acpi.h index b0972c4ce81c..d9099b15b472 100644 --- a/include/linux/acpi.h +++ b/include/linux/acpi.h | |||
@@ -44,6 +44,20 @@ | |||
44 | #include <acpi/acpi_numa.h> | 44 | #include <acpi/acpi_numa.h> |
45 | #include <asm/acpi.h> | 45 | #include <asm/acpi.h> |
46 | 46 | ||
47 | static inline acpi_handle acpi_device_handle(struct acpi_device *adev) | ||
48 | { | ||
49 | return adev ? adev->handle : NULL; | ||
50 | } | ||
51 | |||
52 | #define ACPI_COMPANION(dev) ((dev)->acpi_node.companion) | ||
53 | #define ACPI_COMPANION_SET(dev, adev) ACPI_COMPANION(dev) = (adev) | ||
54 | #define ACPI_HANDLE(dev) acpi_device_handle(ACPI_COMPANION(dev)) | ||
55 | |||
56 | static inline const char *acpi_dev_name(struct acpi_device *adev) | ||
57 | { | ||
58 | return dev_name(&adev->dev); | ||
59 | } | ||
60 | |||
47 | enum acpi_irq_model_id { | 61 | enum acpi_irq_model_id { |
48 | ACPI_IRQ_MODEL_PIC = 0, | 62 | ACPI_IRQ_MODEL_PIC = 0, |
49 | ACPI_IRQ_MODEL_IOAPIC, | 63 | ACPI_IRQ_MODEL_IOAPIC, |
@@ -401,6 +415,15 @@ static inline bool acpi_driver_match_device(struct device *dev, | |||
401 | 415 | ||
402 | #define acpi_disabled 1 | 416 | #define acpi_disabled 1 |
403 | 417 | ||
418 | #define ACPI_COMPANION(dev) (NULL) | ||
419 | #define ACPI_COMPANION_SET(dev, adev) do { } while (0) | ||
420 | #define ACPI_HANDLE(dev) (NULL) | ||
421 | |||
422 | static inline const char *acpi_dev_name(struct acpi_device *adev) | ||
423 | { | ||
424 | return NULL; | ||
425 | } | ||
426 | |||
404 | static inline void acpi_early_init(void) { } | 427 | static inline void acpi_early_init(void) { } |
405 | 428 | ||
406 | static inline int early_acpi_boot_init(void) | 429 | static inline int early_acpi_boot_init(void) |
diff --git a/include/linux/assoc_array.h b/include/linux/assoc_array.h new file mode 100644 index 000000000000..9a193b84238a --- /dev/null +++ b/include/linux/assoc_array.h | |||
@@ -0,0 +1,92 @@ | |||
1 | /* Generic associative array implementation. | ||
2 | * | ||
3 | * See Documentation/assoc_array.txt for information. | ||
4 | * | ||
5 | * Copyright (C) 2013 Red Hat, Inc. All Rights Reserved. | ||
6 | * Written by David Howells (dhowells@redhat.com) | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or | ||
9 | * modify it under the terms of the GNU General Public Licence | ||
10 | * as published by the Free Software Foundation; either version | ||
11 | * 2 of the Licence, or (at your option) any later version. | ||
12 | */ | ||
13 | |||
14 | #ifndef _LINUX_ASSOC_ARRAY_H | ||
15 | #define _LINUX_ASSOC_ARRAY_H | ||
16 | |||
17 | #ifdef CONFIG_ASSOCIATIVE_ARRAY | ||
18 | |||
19 | #include <linux/types.h> | ||
20 | |||
21 | #define ASSOC_ARRAY_KEY_CHUNK_SIZE BITS_PER_LONG /* Key data retrieved in chunks of this size */ | ||
22 | |||
23 | /* | ||
24 | * Generic associative array. | ||
25 | */ | ||
26 | struct assoc_array { | ||
27 | struct assoc_array_ptr *root; /* The node at the root of the tree */ | ||
28 | unsigned long nr_leaves_on_tree; | ||
29 | }; | ||
30 | |||
31 | /* | ||
32 | * Operations on objects and index keys for use by array manipulation routines. | ||
33 | */ | ||
34 | struct assoc_array_ops { | ||
35 | /* Method to get a chunk of an index key from caller-supplied data */ | ||
36 | unsigned long (*get_key_chunk)(const void *index_key, int level); | ||
37 | |||
38 | /* Method to get a piece of an object's index key */ | ||
39 | unsigned long (*get_object_key_chunk)(const void *object, int level); | ||
40 | |||
41 | /* Is this the object we're looking for? */ | ||
42 | bool (*compare_object)(const void *object, const void *index_key); | ||
43 | |||
44 | /* How different are two objects, to a bit position in their keys? (or | ||
45 | * -1 if they're the same) | ||
46 | */ | ||
47 | int (*diff_objects)(const void *a, const void *b); | ||
48 | |||
49 | /* Method to free an object. */ | ||
50 | void (*free_object)(void *object); | ||
51 | }; | ||
52 | |||
53 | /* | ||
54 | * Access and manipulation functions. | ||
55 | */ | ||
56 | struct assoc_array_edit; | ||
57 | |||
58 | static inline void assoc_array_init(struct assoc_array *array) | ||
59 | { | ||
60 | array->root = NULL; | ||
61 | array->nr_leaves_on_tree = 0; | ||
62 | } | ||
63 | |||
64 | extern int assoc_array_iterate(const struct assoc_array *array, | ||
65 | int (*iterator)(const void *object, | ||
66 | void *iterator_data), | ||
67 | void *iterator_data); | ||
68 | extern void *assoc_array_find(const struct assoc_array *array, | ||
69 | const struct assoc_array_ops *ops, | ||
70 | const void *index_key); | ||
71 | extern void assoc_array_destroy(struct assoc_array *array, | ||
72 | const struct assoc_array_ops *ops); | ||
73 | extern struct assoc_array_edit *assoc_array_insert(struct assoc_array *array, | ||
74 | const struct assoc_array_ops *ops, | ||
75 | const void *index_key, | ||
76 | void *object); | ||
77 | extern void assoc_array_insert_set_object(struct assoc_array_edit *edit, | ||
78 | void *object); | ||
79 | extern struct assoc_array_edit *assoc_array_delete(struct assoc_array *array, | ||
80 | const struct assoc_array_ops *ops, | ||
81 | const void *index_key); | ||
82 | extern struct assoc_array_edit *assoc_array_clear(struct assoc_array *array, | ||
83 | const struct assoc_array_ops *ops); | ||
84 | extern void assoc_array_apply_edit(struct assoc_array_edit *edit); | ||
85 | extern void assoc_array_cancel_edit(struct assoc_array_edit *edit); | ||
86 | extern int assoc_array_gc(struct assoc_array *array, | ||
87 | const struct assoc_array_ops *ops, | ||
88 | bool (*iterator)(void *object, void *iterator_data), | ||
89 | void *iterator_data); | ||
90 | |||
91 | #endif /* CONFIG_ASSOCIATIVE_ARRAY */ | ||
92 | #endif /* _LINUX_ASSOC_ARRAY_H */ | ||
diff --git a/include/linux/assoc_array_priv.h b/include/linux/assoc_array_priv.h new file mode 100644 index 000000000000..711275e6681c --- /dev/null +++ b/include/linux/assoc_array_priv.h | |||
@@ -0,0 +1,182 @@ | |||
1 | /* Private definitions for the generic associative array implementation. | ||
2 | * | ||
3 | * See Documentation/assoc_array.txt for information. | ||
4 | * | ||
5 | * Copyright (C) 2013 Red Hat, Inc. All Rights Reserved. | ||
6 | * Written by David Howells (dhowells@redhat.com) | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or | ||
9 | * modify it under the terms of the GNU General Public Licence | ||
10 | * as published by the Free Software Foundation; either version | ||
11 | * 2 of the Licence, or (at your option) any later version. | ||
12 | */ | ||
13 | |||
14 | #ifndef _LINUX_ASSOC_ARRAY_PRIV_H | ||
15 | #define _LINUX_ASSOC_ARRAY_PRIV_H | ||
16 | |||
17 | #ifdef CONFIG_ASSOCIATIVE_ARRAY | ||
18 | |||
19 | #include <linux/assoc_array.h> | ||
20 | |||
21 | #define ASSOC_ARRAY_FAN_OUT 16 /* Number of slots per node */ | ||
22 | #define ASSOC_ARRAY_FAN_MASK (ASSOC_ARRAY_FAN_OUT - 1) | ||
23 | #define ASSOC_ARRAY_LEVEL_STEP (ilog2(ASSOC_ARRAY_FAN_OUT)) | ||
24 | #define ASSOC_ARRAY_LEVEL_STEP_MASK (ASSOC_ARRAY_LEVEL_STEP - 1) | ||
25 | #define ASSOC_ARRAY_KEY_CHUNK_MASK (ASSOC_ARRAY_KEY_CHUNK_SIZE - 1) | ||
26 | #define ASSOC_ARRAY_KEY_CHUNK_SHIFT (ilog2(BITS_PER_LONG)) | ||
27 | |||
28 | /* | ||
29 | * Undefined type representing a pointer with type information in the bottom | ||
30 | * two bits. | ||
31 | */ | ||
32 | struct assoc_array_ptr; | ||
33 | |||
34 | /* | ||
35 | * An N-way node in the tree. | ||
36 | * | ||
37 | * Each slot contains one of four things: | ||
38 | * | ||
39 | * (1) Nothing (NULL). | ||
40 | * | ||
41 | * (2) A leaf object (pointer types 0). | ||
42 | * | ||
43 | * (3) A next-level node (pointer type 1, subtype 0). | ||
44 | * | ||
45 | * (4) A shortcut (pointer type 1, subtype 1). | ||
46 | * | ||
47 | * The tree is optimised for search-by-ID, but permits reasonable iteration | ||
48 | * also. | ||
49 | * | ||
50 | * The tree is navigated by constructing an index key consisting of an array of | ||
51 | * segments, where each segment is ilog2(ASSOC_ARRAY_FAN_OUT) bits in size. | ||
52 | * | ||
53 | * The segments correspond to levels of the tree (the first segment is used at | ||
54 | * level 0, the second at level 1, etc.). | ||
55 | */ | ||
56 | struct assoc_array_node { | ||
57 | struct assoc_array_ptr *back_pointer; | ||
58 | u8 parent_slot; | ||
59 | struct assoc_array_ptr *slots[ASSOC_ARRAY_FAN_OUT]; | ||
60 | unsigned long nr_leaves_on_branch; | ||
61 | }; | ||
62 | |||
63 | /* | ||
64 | * A shortcut through the index space out to where a collection of nodes/leaves | ||
65 | * with the same IDs live. | ||
66 | */ | ||
67 | struct assoc_array_shortcut { | ||
68 | struct assoc_array_ptr *back_pointer; | ||
69 | int parent_slot; | ||
70 | int skip_to_level; | ||
71 | struct assoc_array_ptr *next_node; | ||
72 | unsigned long index_key[]; | ||
73 | }; | ||
74 | |||
75 | /* | ||
76 | * Preallocation cache. | ||
77 | */ | ||
78 | struct assoc_array_edit { | ||
79 | struct rcu_head rcu; | ||
80 | struct assoc_array *array; | ||
81 | const struct assoc_array_ops *ops; | ||
82 | const struct assoc_array_ops *ops_for_excised_subtree; | ||
83 | struct assoc_array_ptr *leaf; | ||
84 | struct assoc_array_ptr **leaf_p; | ||
85 | struct assoc_array_ptr *dead_leaf; | ||
86 | struct assoc_array_ptr *new_meta[3]; | ||
87 | struct assoc_array_ptr *excised_meta[1]; | ||
88 | struct assoc_array_ptr *excised_subtree; | ||
89 | struct assoc_array_ptr **set_backpointers[ASSOC_ARRAY_FAN_OUT]; | ||
90 | struct assoc_array_ptr *set_backpointers_to; | ||
91 | struct assoc_array_node *adjust_count_on; | ||
92 | long adjust_count_by; | ||
93 | struct { | ||
94 | struct assoc_array_ptr **ptr; | ||
95 | struct assoc_array_ptr *to; | ||
96 | } set[2]; | ||
97 | struct { | ||
98 | u8 *p; | ||
99 | u8 to; | ||
100 | } set_parent_slot[1]; | ||
101 | u8 segment_cache[ASSOC_ARRAY_FAN_OUT + 1]; | ||
102 | }; | ||
103 | |||
104 | /* | ||
105 | * Internal tree member pointers are marked in the bottom one or two bits to | ||
106 | * indicate what type they are so that we don't have to look behind every | ||
107 | * pointer to see what it points to. | ||
108 | * | ||
109 | * We provide functions to test type annotations and to create and translate | ||
110 | * the annotated pointers. | ||
111 | */ | ||
112 | #define ASSOC_ARRAY_PTR_TYPE_MASK 0x1UL | ||
113 | #define ASSOC_ARRAY_PTR_LEAF_TYPE 0x0UL /* Points to leaf (or nowhere) */ | ||
114 | #define ASSOC_ARRAY_PTR_META_TYPE 0x1UL /* Points to node or shortcut */ | ||
115 | #define ASSOC_ARRAY_PTR_SUBTYPE_MASK 0x2UL | ||
116 | #define ASSOC_ARRAY_PTR_NODE_SUBTYPE 0x0UL | ||
117 | #define ASSOC_ARRAY_PTR_SHORTCUT_SUBTYPE 0x2UL | ||
118 | |||
119 | static inline bool assoc_array_ptr_is_meta(const struct assoc_array_ptr *x) | ||
120 | { | ||
121 | return (unsigned long)x & ASSOC_ARRAY_PTR_TYPE_MASK; | ||
122 | } | ||
123 | static inline bool assoc_array_ptr_is_leaf(const struct assoc_array_ptr *x) | ||
124 | { | ||
125 | return !assoc_array_ptr_is_meta(x); | ||
126 | } | ||
127 | static inline bool assoc_array_ptr_is_shortcut(const struct assoc_array_ptr *x) | ||
128 | { | ||
129 | return (unsigned long)x & ASSOC_ARRAY_PTR_SUBTYPE_MASK; | ||
130 | } | ||
131 | static inline bool assoc_array_ptr_is_node(const struct assoc_array_ptr *x) | ||
132 | { | ||
133 | return !assoc_array_ptr_is_shortcut(x); | ||
134 | } | ||
135 | |||
136 | static inline void *assoc_array_ptr_to_leaf(const struct assoc_array_ptr *x) | ||
137 | { | ||
138 | return (void *)((unsigned long)x & ~ASSOC_ARRAY_PTR_TYPE_MASK); | ||
139 | } | ||
140 | |||
141 | static inline | ||
142 | unsigned long __assoc_array_ptr_to_meta(const struct assoc_array_ptr *x) | ||
143 | { | ||
144 | return (unsigned long)x & | ||
145 | ~(ASSOC_ARRAY_PTR_SUBTYPE_MASK | ASSOC_ARRAY_PTR_TYPE_MASK); | ||
146 | } | ||
147 | static inline | ||
148 | struct assoc_array_node *assoc_array_ptr_to_node(const struct assoc_array_ptr *x) | ||
149 | { | ||
150 | return (struct assoc_array_node *)__assoc_array_ptr_to_meta(x); | ||
151 | } | ||
152 | static inline | ||
153 | struct assoc_array_shortcut *assoc_array_ptr_to_shortcut(const struct assoc_array_ptr *x) | ||
154 | { | ||
155 | return (struct assoc_array_shortcut *)__assoc_array_ptr_to_meta(x); | ||
156 | } | ||
157 | |||
158 | static inline | ||
159 | struct assoc_array_ptr *__assoc_array_x_to_ptr(const void *p, unsigned long t) | ||
160 | { | ||
161 | return (struct assoc_array_ptr *)((unsigned long)p | t); | ||
162 | } | ||
163 | static inline | ||
164 | struct assoc_array_ptr *assoc_array_leaf_to_ptr(const void *p) | ||
165 | { | ||
166 | return __assoc_array_x_to_ptr(p, ASSOC_ARRAY_PTR_LEAF_TYPE); | ||
167 | } | ||
168 | static inline | ||
169 | struct assoc_array_ptr *assoc_array_node_to_ptr(const struct assoc_array_node *p) | ||
170 | { | ||
171 | return __assoc_array_x_to_ptr( | ||
172 | p, ASSOC_ARRAY_PTR_META_TYPE | ASSOC_ARRAY_PTR_NODE_SUBTYPE); | ||
173 | } | ||
174 | static inline | ||
175 | struct assoc_array_ptr *assoc_array_shortcut_to_ptr(const struct assoc_array_shortcut *p) | ||
176 | { | ||
177 | return __assoc_array_x_to_ptr( | ||
178 | p, ASSOC_ARRAY_PTR_META_TYPE | ASSOC_ARRAY_PTR_SHORTCUT_SUBTYPE); | ||
179 | } | ||
180 | |||
181 | #endif /* CONFIG_ASSOCIATIVE_ARRAY */ | ||
182 | #endif /* _LINUX_ASSOC_ARRAY_PRIV_H */ | ||
diff --git a/include/linux/audit.h b/include/linux/audit.h index 729a4d165bcc..a40641954c29 100644 --- a/include/linux/audit.h +++ b/include/linux/audit.h | |||
@@ -73,6 +73,8 @@ struct audit_field { | |||
73 | void *lsm_rule; | 73 | void *lsm_rule; |
74 | }; | 74 | }; |
75 | 75 | ||
76 | extern int is_audit_feature_set(int which); | ||
77 | |||
76 | extern int __init audit_register_class(int class, unsigned *list); | 78 | extern int __init audit_register_class(int class, unsigned *list); |
77 | extern int audit_classify_syscall(int abi, unsigned syscall); | 79 | extern int audit_classify_syscall(int abi, unsigned syscall); |
78 | extern int audit_classify_arch(int arch); | 80 | extern int audit_classify_arch(int arch); |
@@ -207,7 +209,7 @@ static inline int audit_get_sessionid(struct task_struct *tsk) | |||
207 | 209 | ||
208 | extern void __audit_ipc_obj(struct kern_ipc_perm *ipcp); | 210 | extern void __audit_ipc_obj(struct kern_ipc_perm *ipcp); |
209 | extern void __audit_ipc_set_perm(unsigned long qbytes, uid_t uid, gid_t gid, umode_t mode); | 211 | extern void __audit_ipc_set_perm(unsigned long qbytes, uid_t uid, gid_t gid, umode_t mode); |
210 | extern int __audit_bprm(struct linux_binprm *bprm); | 212 | extern void __audit_bprm(struct linux_binprm *bprm); |
211 | extern int __audit_socketcall(int nargs, unsigned long *args); | 213 | extern int __audit_socketcall(int nargs, unsigned long *args); |
212 | extern int __audit_sockaddr(int len, void *addr); | 214 | extern int __audit_sockaddr(int len, void *addr); |
213 | extern void __audit_fd_pair(int fd1, int fd2); | 215 | extern void __audit_fd_pair(int fd1, int fd2); |
@@ -236,11 +238,10 @@ static inline void audit_ipc_set_perm(unsigned long qbytes, uid_t uid, gid_t gid | |||
236 | if (unlikely(!audit_dummy_context())) | 238 | if (unlikely(!audit_dummy_context())) |
237 | __audit_ipc_set_perm(qbytes, uid, gid, mode); | 239 | __audit_ipc_set_perm(qbytes, uid, gid, mode); |
238 | } | 240 | } |
239 | static inline int audit_bprm(struct linux_binprm *bprm) | 241 | static inline void audit_bprm(struct linux_binprm *bprm) |
240 | { | 242 | { |
241 | if (unlikely(!audit_dummy_context())) | 243 | if (unlikely(!audit_dummy_context())) |
242 | return __audit_bprm(bprm); | 244 | __audit_bprm(bprm); |
243 | return 0; | ||
244 | } | 245 | } |
245 | static inline int audit_socketcall(int nargs, unsigned long *args) | 246 | static inline int audit_socketcall(int nargs, unsigned long *args) |
246 | { | 247 | { |
@@ -367,10 +368,8 @@ static inline void audit_ipc_obj(struct kern_ipc_perm *ipcp) | |||
367 | static inline void audit_ipc_set_perm(unsigned long qbytes, uid_t uid, | 368 | static inline void audit_ipc_set_perm(unsigned long qbytes, uid_t uid, |
368 | gid_t gid, umode_t mode) | 369 | gid_t gid, umode_t mode) |
369 | { } | 370 | { } |
370 | static inline int audit_bprm(struct linux_binprm *bprm) | 371 | static inline void audit_bprm(struct linux_binprm *bprm) |
371 | { | 372 | { } |
372 | return 0; | ||
373 | } | ||
374 | static inline int audit_socketcall(int nargs, unsigned long *args) | 373 | static inline int audit_socketcall(int nargs, unsigned long *args) |
375 | { | 374 | { |
376 | return 0; | 375 | return 0; |
diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h index f26ec20f6354..1b135d49b279 100644 --- a/include/linux/blkdev.h +++ b/include/linux/blkdev.h | |||
@@ -505,6 +505,9 @@ struct request_queue { | |||
505 | (1 << QUEUE_FLAG_SAME_COMP) | \ | 505 | (1 << QUEUE_FLAG_SAME_COMP) | \ |
506 | (1 << QUEUE_FLAG_ADD_RANDOM)) | 506 | (1 << QUEUE_FLAG_ADD_RANDOM)) |
507 | 507 | ||
508 | #define QUEUE_FLAG_MQ_DEFAULT ((1 << QUEUE_FLAG_IO_STAT) | \ | ||
509 | (1 << QUEUE_FLAG_SAME_COMP)) | ||
510 | |||
508 | static inline void queue_lockdep_assert_held(struct request_queue *q) | 511 | static inline void queue_lockdep_assert_held(struct request_queue *q) |
509 | { | 512 | { |
510 | if (q->queue_lock) | 513 | if (q->queue_lock) |
diff --git a/include/linux/device.h b/include/linux/device.h index b025925df7f7..952b01033c32 100644 --- a/include/linux/device.h +++ b/include/linux/device.h | |||
@@ -644,9 +644,11 @@ struct device_dma_parameters { | |||
644 | unsigned long segment_boundary_mask; | 644 | unsigned long segment_boundary_mask; |
645 | }; | 645 | }; |
646 | 646 | ||
647 | struct acpi_device; | ||
648 | |||
647 | struct acpi_dev_node { | 649 | struct acpi_dev_node { |
648 | #ifdef CONFIG_ACPI | 650 | #ifdef CONFIG_ACPI |
649 | void *handle; | 651 | struct acpi_device *companion; |
650 | #endif | 652 | #endif |
651 | }; | 653 | }; |
652 | 654 | ||
@@ -790,14 +792,6 @@ static inline struct device *kobj_to_dev(struct kobject *kobj) | |||
790 | return container_of(kobj, struct device, kobj); | 792 | return container_of(kobj, struct device, kobj); |
791 | } | 793 | } |
792 | 794 | ||
793 | #ifdef CONFIG_ACPI | ||
794 | #define ACPI_HANDLE(dev) ((dev)->acpi_node.handle) | ||
795 | #define ACPI_HANDLE_SET(dev, _handle_) (dev)->acpi_node.handle = (_handle_) | ||
796 | #else | ||
797 | #define ACPI_HANDLE(dev) (NULL) | ||
798 | #define ACPI_HANDLE_SET(dev, _handle_) do { } while (0) | ||
799 | #endif | ||
800 | |||
801 | /* Get the wakeup routines, which depend on struct device */ | 795 | /* Get the wakeup routines, which depend on struct device */ |
802 | #include <linux/pm_wakeup.h> | 796 | #include <linux/pm_wakeup.h> |
803 | 797 | ||
diff --git a/include/linux/dmaengine.h b/include/linux/dmaengine.h index 0bc727534108..41cf0c399288 100644 --- a/include/linux/dmaengine.h +++ b/include/linux/dmaengine.h | |||
@@ -45,13 +45,13 @@ static inline int dma_submit_error(dma_cookie_t cookie) | |||
45 | 45 | ||
46 | /** | 46 | /** |
47 | * enum dma_status - DMA transaction status | 47 | * enum dma_status - DMA transaction status |
48 | * @DMA_SUCCESS: transaction completed successfully | 48 | * @DMA_COMPLETE: transaction completed |
49 | * @DMA_IN_PROGRESS: transaction not yet processed | 49 | * @DMA_IN_PROGRESS: transaction not yet processed |
50 | * @DMA_PAUSED: transaction is paused | 50 | * @DMA_PAUSED: transaction is paused |
51 | * @DMA_ERROR: transaction failed | 51 | * @DMA_ERROR: transaction failed |
52 | */ | 52 | */ |
53 | enum dma_status { | 53 | enum dma_status { |
54 | DMA_SUCCESS, | 54 | DMA_COMPLETE, |
55 | DMA_IN_PROGRESS, | 55 | DMA_IN_PROGRESS, |
56 | DMA_PAUSED, | 56 | DMA_PAUSED, |
57 | DMA_ERROR, | 57 | DMA_ERROR, |
@@ -171,12 +171,6 @@ struct dma_interleaved_template { | |||
171 | * @DMA_CTRL_ACK - if clear, the descriptor cannot be reused until the client | 171 | * @DMA_CTRL_ACK - if clear, the descriptor cannot be reused until the client |
172 | * acknowledges receipt, i.e. has has a chance to establish any dependency | 172 | * acknowledges receipt, i.e. has has a chance to establish any dependency |
173 | * chains | 173 | * chains |
174 | * @DMA_COMPL_SKIP_SRC_UNMAP - set to disable dma-unmapping the source buffer(s) | ||
175 | * @DMA_COMPL_SKIP_DEST_UNMAP - set to disable dma-unmapping the destination(s) | ||
176 | * @DMA_COMPL_SRC_UNMAP_SINGLE - set to do the source dma-unmapping as single | ||
177 | * (if not set, do the source dma-unmapping as page) | ||
178 | * @DMA_COMPL_DEST_UNMAP_SINGLE - set to do the destination dma-unmapping as single | ||
179 | * (if not set, do the destination dma-unmapping as page) | ||
180 | * @DMA_PREP_PQ_DISABLE_P - prevent generation of P while generating Q | 174 | * @DMA_PREP_PQ_DISABLE_P - prevent generation of P while generating Q |
181 | * @DMA_PREP_PQ_DISABLE_Q - prevent generation of Q while generating P | 175 | * @DMA_PREP_PQ_DISABLE_Q - prevent generation of Q while generating P |
182 | * @DMA_PREP_CONTINUE - indicate to a driver that it is reusing buffers as | 176 | * @DMA_PREP_CONTINUE - indicate to a driver that it is reusing buffers as |
@@ -188,14 +182,10 @@ struct dma_interleaved_template { | |||
188 | enum dma_ctrl_flags { | 182 | enum dma_ctrl_flags { |
189 | DMA_PREP_INTERRUPT = (1 << 0), | 183 | DMA_PREP_INTERRUPT = (1 << 0), |
190 | DMA_CTRL_ACK = (1 << 1), | 184 | DMA_CTRL_ACK = (1 << 1), |
191 | DMA_COMPL_SKIP_SRC_UNMAP = (1 << 2), | 185 | DMA_PREP_PQ_DISABLE_P = (1 << 2), |
192 | DMA_COMPL_SKIP_DEST_UNMAP = (1 << 3), | 186 | DMA_PREP_PQ_DISABLE_Q = (1 << 3), |
193 | DMA_COMPL_SRC_UNMAP_SINGLE = (1 << 4), | 187 | DMA_PREP_CONTINUE = (1 << 4), |
194 | DMA_COMPL_DEST_UNMAP_SINGLE = (1 << 5), | 188 | DMA_PREP_FENCE = (1 << 5), |
195 | DMA_PREP_PQ_DISABLE_P = (1 << 6), | ||
196 | DMA_PREP_PQ_DISABLE_Q = (1 << 7), | ||
197 | DMA_PREP_CONTINUE = (1 << 8), | ||
198 | DMA_PREP_FENCE = (1 << 9), | ||
199 | }; | 189 | }; |
200 | 190 | ||
201 | /** | 191 | /** |
@@ -413,6 +403,17 @@ void dma_chan_cleanup(struct kref *kref); | |||
413 | typedef bool (*dma_filter_fn)(struct dma_chan *chan, void *filter_param); | 403 | typedef bool (*dma_filter_fn)(struct dma_chan *chan, void *filter_param); |
414 | 404 | ||
415 | typedef void (*dma_async_tx_callback)(void *dma_async_param); | 405 | typedef void (*dma_async_tx_callback)(void *dma_async_param); |
406 | |||
407 | struct dmaengine_unmap_data { | ||
408 | u8 to_cnt; | ||
409 | u8 from_cnt; | ||
410 | u8 bidi_cnt; | ||
411 | struct device *dev; | ||
412 | struct kref kref; | ||
413 | size_t len; | ||
414 | dma_addr_t addr[0]; | ||
415 | }; | ||
416 | |||
416 | /** | 417 | /** |
417 | * struct dma_async_tx_descriptor - async transaction descriptor | 418 | * struct dma_async_tx_descriptor - async transaction descriptor |
418 | * ---dma generic offload fields--- | 419 | * ---dma generic offload fields--- |
@@ -438,6 +439,7 @@ struct dma_async_tx_descriptor { | |||
438 | dma_cookie_t (*tx_submit)(struct dma_async_tx_descriptor *tx); | 439 | dma_cookie_t (*tx_submit)(struct dma_async_tx_descriptor *tx); |
439 | dma_async_tx_callback callback; | 440 | dma_async_tx_callback callback; |
440 | void *callback_param; | 441 | void *callback_param; |
442 | struct dmaengine_unmap_data *unmap; | ||
441 | #ifdef CONFIG_ASYNC_TX_ENABLE_CHANNEL_SWITCH | 443 | #ifdef CONFIG_ASYNC_TX_ENABLE_CHANNEL_SWITCH |
442 | struct dma_async_tx_descriptor *next; | 444 | struct dma_async_tx_descriptor *next; |
443 | struct dma_async_tx_descriptor *parent; | 445 | struct dma_async_tx_descriptor *parent; |
@@ -445,6 +447,40 @@ struct dma_async_tx_descriptor { | |||
445 | #endif | 447 | #endif |
446 | }; | 448 | }; |
447 | 449 | ||
450 | #ifdef CONFIG_DMA_ENGINE | ||
451 | static inline void dma_set_unmap(struct dma_async_tx_descriptor *tx, | ||
452 | struct dmaengine_unmap_data *unmap) | ||
453 | { | ||
454 | kref_get(&unmap->kref); | ||
455 | tx->unmap = unmap; | ||
456 | } | ||
457 | |||
458 | struct dmaengine_unmap_data * | ||
459 | dmaengine_get_unmap_data(struct device *dev, int nr, gfp_t flags); | ||
460 | void dmaengine_unmap_put(struct dmaengine_unmap_data *unmap); | ||
461 | #else | ||
462 | static inline void dma_set_unmap(struct dma_async_tx_descriptor *tx, | ||
463 | struct dmaengine_unmap_data *unmap) | ||
464 | { | ||
465 | } | ||
466 | static inline struct dmaengine_unmap_data * | ||
467 | dmaengine_get_unmap_data(struct device *dev, int nr, gfp_t flags) | ||
468 | { | ||
469 | return NULL; | ||
470 | } | ||
471 | static inline void dmaengine_unmap_put(struct dmaengine_unmap_data *unmap) | ||
472 | { | ||
473 | } | ||
474 | #endif | ||
475 | |||
476 | static inline void dma_descriptor_unmap(struct dma_async_tx_descriptor *tx) | ||
477 | { | ||
478 | if (tx->unmap) { | ||
479 | dmaengine_unmap_put(tx->unmap); | ||
480 | tx->unmap = NULL; | ||
481 | } | ||
482 | } | ||
483 | |||
448 | #ifndef CONFIG_ASYNC_TX_ENABLE_CHANNEL_SWITCH | 484 | #ifndef CONFIG_ASYNC_TX_ENABLE_CHANNEL_SWITCH |
449 | static inline void txd_lock(struct dma_async_tx_descriptor *txd) | 485 | static inline void txd_lock(struct dma_async_tx_descriptor *txd) |
450 | { | 486 | { |
@@ -979,10 +1015,10 @@ static inline enum dma_status dma_async_is_complete(dma_cookie_t cookie, | |||
979 | { | 1015 | { |
980 | if (last_complete <= last_used) { | 1016 | if (last_complete <= last_used) { |
981 | if ((cookie <= last_complete) || (cookie > last_used)) | 1017 | if ((cookie <= last_complete) || (cookie > last_used)) |
982 | return DMA_SUCCESS; | 1018 | return DMA_COMPLETE; |
983 | } else { | 1019 | } else { |
984 | if ((cookie <= last_complete) && (cookie > last_used)) | 1020 | if ((cookie <= last_complete) && (cookie > last_used)) |
985 | return DMA_SUCCESS; | 1021 | return DMA_COMPLETE; |
986 | } | 1022 | } |
987 | return DMA_IN_PROGRESS; | 1023 | return DMA_IN_PROGRESS; |
988 | } | 1024 | } |
@@ -1013,11 +1049,11 @@ static inline struct dma_chan *dma_find_channel(enum dma_transaction_type tx_typ | |||
1013 | } | 1049 | } |
1014 | static inline enum dma_status dma_sync_wait(struct dma_chan *chan, dma_cookie_t cookie) | 1050 | static inline enum dma_status dma_sync_wait(struct dma_chan *chan, dma_cookie_t cookie) |
1015 | { | 1051 | { |
1016 | return DMA_SUCCESS; | 1052 | return DMA_COMPLETE; |
1017 | } | 1053 | } |
1018 | static inline enum dma_status dma_wait_for_async_tx(struct dma_async_tx_descriptor *tx) | 1054 | static inline enum dma_status dma_wait_for_async_tx(struct dma_async_tx_descriptor *tx) |
1019 | { | 1055 | { |
1020 | return DMA_SUCCESS; | 1056 | return DMA_COMPLETE; |
1021 | } | 1057 | } |
1022 | static inline void dma_issue_pending_all(void) | 1058 | static inline void dma_issue_pending_all(void) |
1023 | { | 1059 | { |
diff --git a/include/linux/fs.h b/include/linux/fs.h index bf5d574ebdf4..121f11f001c0 100644 --- a/include/linux/fs.h +++ b/include/linux/fs.h | |||
@@ -2622,7 +2622,9 @@ extern int simple_write_begin(struct file *file, struct address_space *mapping, | |||
2622 | extern int simple_write_end(struct file *file, struct address_space *mapping, | 2622 | extern int simple_write_end(struct file *file, struct address_space *mapping, |
2623 | loff_t pos, unsigned len, unsigned copied, | 2623 | loff_t pos, unsigned len, unsigned copied, |
2624 | struct page *page, void *fsdata); | 2624 | struct page *page, void *fsdata); |
2625 | extern int always_delete_dentry(const struct dentry *); | ||
2625 | extern struct inode *alloc_anon_inode(struct super_block *); | 2626 | extern struct inode *alloc_anon_inode(struct super_block *); |
2627 | extern const struct dentry_operations simple_dentry_operations; | ||
2626 | 2628 | ||
2627 | extern struct dentry *simple_lookup(struct inode *, struct dentry *, unsigned int flags); | 2629 | extern struct dentry *simple_lookup(struct inode *, struct dentry *, unsigned int flags); |
2628 | extern ssize_t generic_read_dir(struct file *, char __user *, size_t, loff_t *); | 2630 | extern ssize_t generic_read_dir(struct file *, char __user *, size_t, loff_t *); |
diff --git a/include/linux/hugetlb.h b/include/linux/hugetlb.h index acd2010328f3..9649ff0c63f8 100644 --- a/include/linux/hugetlb.h +++ b/include/linux/hugetlb.h | |||
@@ -31,6 +31,7 @@ struct hugepage_subpool *hugepage_new_subpool(long nr_blocks); | |||
31 | void hugepage_put_subpool(struct hugepage_subpool *spool); | 31 | void hugepage_put_subpool(struct hugepage_subpool *spool); |
32 | 32 | ||
33 | int PageHuge(struct page *page); | 33 | int PageHuge(struct page *page); |
34 | int PageHeadHuge(struct page *page_head); | ||
34 | 35 | ||
35 | void reset_vma_resv_huge_pages(struct vm_area_struct *vma); | 36 | void reset_vma_resv_huge_pages(struct vm_area_struct *vma); |
36 | int hugetlb_sysctl_handler(struct ctl_table *, int, void __user *, size_t *, loff_t *); | 37 | int hugetlb_sysctl_handler(struct ctl_table *, int, void __user *, size_t *, loff_t *); |
@@ -69,7 +70,6 @@ int dequeue_hwpoisoned_huge_page(struct page *page); | |||
69 | bool isolate_huge_page(struct page *page, struct list_head *list); | 70 | bool isolate_huge_page(struct page *page, struct list_head *list); |
70 | void putback_active_hugepage(struct page *page); | 71 | void putback_active_hugepage(struct page *page); |
71 | bool is_hugepage_active(struct page *page); | 72 | bool is_hugepage_active(struct page *page); |
72 | void copy_huge_page(struct page *dst, struct page *src); | ||
73 | 73 | ||
74 | #ifdef CONFIG_ARCH_WANT_HUGE_PMD_SHARE | 74 | #ifdef CONFIG_ARCH_WANT_HUGE_PMD_SHARE |
75 | pte_t *huge_pmd_share(struct mm_struct *mm, unsigned long addr, pud_t *pud); | 75 | pte_t *huge_pmd_share(struct mm_struct *mm, unsigned long addr, pud_t *pud); |
@@ -104,6 +104,11 @@ static inline int PageHuge(struct page *page) | |||
104 | return 0; | 104 | return 0; |
105 | } | 105 | } |
106 | 106 | ||
107 | static inline int PageHeadHuge(struct page *page_head) | ||
108 | { | ||
109 | return 0; | ||
110 | } | ||
111 | |||
107 | static inline void reset_vma_resv_huge_pages(struct vm_area_struct *vma) | 112 | static inline void reset_vma_resv_huge_pages(struct vm_area_struct *vma) |
108 | { | 113 | { |
109 | } | 114 | } |
@@ -140,9 +145,6 @@ static inline int dequeue_hwpoisoned_huge_page(struct page *page) | |||
140 | #define isolate_huge_page(p, l) false | 145 | #define isolate_huge_page(p, l) false |
141 | #define putback_active_hugepage(p) do {} while (0) | 146 | #define putback_active_hugepage(p) do {} while (0) |
142 | #define is_hugepage_active(x) false | 147 | #define is_hugepage_active(x) false |
143 | static inline void copy_huge_page(struct page *dst, struct page *src) | ||
144 | { | ||
145 | } | ||
146 | 148 | ||
147 | static inline unsigned long hugetlb_change_protection(struct vm_area_struct *vma, | 149 | static inline unsigned long hugetlb_change_protection(struct vm_area_struct *vma, |
148 | unsigned long address, unsigned long end, pgprot_t newprot) | 150 | unsigned long address, unsigned long end, pgprot_t newprot) |
diff --git a/include/linux/key-type.h b/include/linux/key-type.h index 518a53afb9ea..a74c3a84dfdd 100644 --- a/include/linux/key-type.h +++ b/include/linux/key-type.h | |||
@@ -45,6 +45,7 @@ struct key_preparsed_payload { | |||
45 | const void *data; /* Raw data */ | 45 | const void *data; /* Raw data */ |
46 | size_t datalen; /* Raw datalen */ | 46 | size_t datalen; /* Raw datalen */ |
47 | size_t quotalen; /* Quota length for proposed payload */ | 47 | size_t quotalen; /* Quota length for proposed payload */ |
48 | bool trusted; /* True if key is trusted */ | ||
48 | }; | 49 | }; |
49 | 50 | ||
50 | typedef int (*request_key_actor_t)(struct key_construction *key, | 51 | typedef int (*request_key_actor_t)(struct key_construction *key, |
@@ -63,6 +64,11 @@ struct key_type { | |||
63 | */ | 64 | */ |
64 | size_t def_datalen; | 65 | size_t def_datalen; |
65 | 66 | ||
67 | /* Default key search algorithm. */ | ||
68 | unsigned def_lookup_type; | ||
69 | #define KEYRING_SEARCH_LOOKUP_DIRECT 0x0000 /* Direct lookup by description. */ | ||
70 | #define KEYRING_SEARCH_LOOKUP_ITERATE 0x0001 /* Iterative search. */ | ||
71 | |||
66 | /* vet a description */ | 72 | /* vet a description */ |
67 | int (*vet_description)(const char *description); | 73 | int (*vet_description)(const char *description); |
68 | 74 | ||
diff --git a/include/linux/key.h b/include/linux/key.h index 4dfde1161c5e..80d677483e31 100644 --- a/include/linux/key.h +++ b/include/linux/key.h | |||
@@ -22,6 +22,7 @@ | |||
22 | #include <linux/sysctl.h> | 22 | #include <linux/sysctl.h> |
23 | #include <linux/rwsem.h> | 23 | #include <linux/rwsem.h> |
24 | #include <linux/atomic.h> | 24 | #include <linux/atomic.h> |
25 | #include <linux/assoc_array.h> | ||
25 | 26 | ||
26 | #ifdef __KERNEL__ | 27 | #ifdef __KERNEL__ |
27 | #include <linux/uidgid.h> | 28 | #include <linux/uidgid.h> |
@@ -82,6 +83,12 @@ struct key_owner; | |||
82 | struct keyring_list; | 83 | struct keyring_list; |
83 | struct keyring_name; | 84 | struct keyring_name; |
84 | 85 | ||
86 | struct keyring_index_key { | ||
87 | struct key_type *type; | ||
88 | const char *description; | ||
89 | size_t desc_len; | ||
90 | }; | ||
91 | |||
85 | /*****************************************************************************/ | 92 | /*****************************************************************************/ |
86 | /* | 93 | /* |
87 | * key reference with possession attribute handling | 94 | * key reference with possession attribute handling |
@@ -99,7 +106,7 @@ struct keyring_name; | |||
99 | typedef struct __key_reference_with_attributes *key_ref_t; | 106 | typedef struct __key_reference_with_attributes *key_ref_t; |
100 | 107 | ||
101 | static inline key_ref_t make_key_ref(const struct key *key, | 108 | static inline key_ref_t make_key_ref(const struct key *key, |
102 | unsigned long possession) | 109 | bool possession) |
103 | { | 110 | { |
104 | return (key_ref_t) ((unsigned long) key | possession); | 111 | return (key_ref_t) ((unsigned long) key | possession); |
105 | } | 112 | } |
@@ -109,7 +116,7 @@ static inline struct key *key_ref_to_ptr(const key_ref_t key_ref) | |||
109 | return (struct key *) ((unsigned long) key_ref & ~1UL); | 116 | return (struct key *) ((unsigned long) key_ref & ~1UL); |
110 | } | 117 | } |
111 | 118 | ||
112 | static inline unsigned long is_key_possessed(const key_ref_t key_ref) | 119 | static inline bool is_key_possessed(const key_ref_t key_ref) |
113 | { | 120 | { |
114 | return (unsigned long) key_ref & 1UL; | 121 | return (unsigned long) key_ref & 1UL; |
115 | } | 122 | } |
@@ -129,7 +136,6 @@ struct key { | |||
129 | struct list_head graveyard_link; | 136 | struct list_head graveyard_link; |
130 | struct rb_node serial_node; | 137 | struct rb_node serial_node; |
131 | }; | 138 | }; |
132 | struct key_type *type; /* type of key */ | ||
133 | struct rw_semaphore sem; /* change vs change sem */ | 139 | struct rw_semaphore sem; /* change vs change sem */ |
134 | struct key_user *user; /* owner of this key */ | 140 | struct key_user *user; /* owner of this key */ |
135 | void *security; /* security data for this key */ | 141 | void *security; /* security data for this key */ |
@@ -162,13 +168,21 @@ struct key { | |||
162 | #define KEY_FLAG_NEGATIVE 5 /* set if key is negative */ | 168 | #define KEY_FLAG_NEGATIVE 5 /* set if key is negative */ |
163 | #define KEY_FLAG_ROOT_CAN_CLEAR 6 /* set if key can be cleared by root without permission */ | 169 | #define KEY_FLAG_ROOT_CAN_CLEAR 6 /* set if key can be cleared by root without permission */ |
164 | #define KEY_FLAG_INVALIDATED 7 /* set if key has been invalidated */ | 170 | #define KEY_FLAG_INVALIDATED 7 /* set if key has been invalidated */ |
171 | #define KEY_FLAG_TRUSTED 8 /* set if key is trusted */ | ||
172 | #define KEY_FLAG_TRUSTED_ONLY 9 /* set if keyring only accepts links to trusted keys */ | ||
165 | 173 | ||
166 | /* the description string | 174 | /* the key type and key description string |
167 | * - this is used to match a key against search criteria | 175 | * - the desc is used to match a key against search criteria |
168 | * - this should be a printable string | 176 | * - it should be a printable string |
169 | * - eg: for krb5 AFS, this might be "afs@REDHAT.COM" | 177 | * - eg: for krb5 AFS, this might be "afs@REDHAT.COM" |
170 | */ | 178 | */ |
171 | char *description; | 179 | union { |
180 | struct keyring_index_key index_key; | ||
181 | struct { | ||
182 | struct key_type *type; /* type of key */ | ||
183 | char *description; | ||
184 | }; | ||
185 | }; | ||
172 | 186 | ||
173 | /* type specific data | 187 | /* type specific data |
174 | * - this is used by the keyring type to index the name | 188 | * - this is used by the keyring type to index the name |
@@ -185,11 +199,14 @@ struct key { | |||
185 | * whatever | 199 | * whatever |
186 | */ | 200 | */ |
187 | union { | 201 | union { |
188 | unsigned long value; | 202 | union { |
189 | void __rcu *rcudata; | 203 | unsigned long value; |
190 | void *data; | 204 | void __rcu *rcudata; |
191 | struct keyring_list __rcu *subscriptions; | 205 | void *data; |
192 | } payload; | 206 | void *data2[2]; |
207 | } payload; | ||
208 | struct assoc_array keys; | ||
209 | }; | ||
193 | }; | 210 | }; |
194 | 211 | ||
195 | extern struct key *key_alloc(struct key_type *type, | 212 | extern struct key *key_alloc(struct key_type *type, |
@@ -203,18 +220,23 @@ extern struct key *key_alloc(struct key_type *type, | |||
203 | #define KEY_ALLOC_IN_QUOTA 0x0000 /* add to quota, reject if would overrun */ | 220 | #define KEY_ALLOC_IN_QUOTA 0x0000 /* add to quota, reject if would overrun */ |
204 | #define KEY_ALLOC_QUOTA_OVERRUN 0x0001 /* add to quota, permit even if overrun */ | 221 | #define KEY_ALLOC_QUOTA_OVERRUN 0x0001 /* add to quota, permit even if overrun */ |
205 | #define KEY_ALLOC_NOT_IN_QUOTA 0x0002 /* not in quota */ | 222 | #define KEY_ALLOC_NOT_IN_QUOTA 0x0002 /* not in quota */ |
223 | #define KEY_ALLOC_TRUSTED 0x0004 /* Key should be flagged as trusted */ | ||
206 | 224 | ||
207 | extern void key_revoke(struct key *key); | 225 | extern void key_revoke(struct key *key); |
208 | extern void key_invalidate(struct key *key); | 226 | extern void key_invalidate(struct key *key); |
209 | extern void key_put(struct key *key); | 227 | extern void key_put(struct key *key); |
210 | 228 | ||
211 | static inline struct key *key_get(struct key *key) | 229 | static inline struct key *__key_get(struct key *key) |
212 | { | 230 | { |
213 | if (key) | 231 | atomic_inc(&key->usage); |
214 | atomic_inc(&key->usage); | ||
215 | return key; | 232 | return key; |
216 | } | 233 | } |
217 | 234 | ||
235 | static inline struct key *key_get(struct key *key) | ||
236 | { | ||
237 | return key ? __key_get(key) : key; | ||
238 | } | ||
239 | |||
218 | static inline void key_ref_put(key_ref_t key_ref) | 240 | static inline void key_ref_put(key_ref_t key_ref) |
219 | { | 241 | { |
220 | key_put(key_ref_to_ptr(key_ref)); | 242 | key_put(key_ref_to_ptr(key_ref)); |
diff --git a/include/linux/mm.h b/include/linux/mm.h index 0548eb201e05..1cedd000cf29 100644 --- a/include/linux/mm.h +++ b/include/linux/mm.h | |||
@@ -1318,7 +1318,6 @@ static inline pmd_t *pmd_alloc(struct mm_struct *mm, pud_t *pud, unsigned long a | |||
1318 | 1318 | ||
1319 | #if USE_SPLIT_PTE_PTLOCKS | 1319 | #if USE_SPLIT_PTE_PTLOCKS |
1320 | #if BLOATED_SPINLOCKS | 1320 | #if BLOATED_SPINLOCKS |
1321 | void __init ptlock_cache_init(void); | ||
1322 | extern bool ptlock_alloc(struct page *page); | 1321 | extern bool ptlock_alloc(struct page *page); |
1323 | extern void ptlock_free(struct page *page); | 1322 | extern void ptlock_free(struct page *page); |
1324 | 1323 | ||
@@ -1327,7 +1326,6 @@ static inline spinlock_t *ptlock_ptr(struct page *page) | |||
1327 | return page->ptl; | 1326 | return page->ptl; |
1328 | } | 1327 | } |
1329 | #else /* BLOATED_SPINLOCKS */ | 1328 | #else /* BLOATED_SPINLOCKS */ |
1330 | static inline void ptlock_cache_init(void) {} | ||
1331 | static inline bool ptlock_alloc(struct page *page) | 1329 | static inline bool ptlock_alloc(struct page *page) |
1332 | { | 1330 | { |
1333 | return true; | 1331 | return true; |
@@ -1380,17 +1378,10 @@ static inline spinlock_t *pte_lockptr(struct mm_struct *mm, pmd_t *pmd) | |||
1380 | { | 1378 | { |
1381 | return &mm->page_table_lock; | 1379 | return &mm->page_table_lock; |
1382 | } | 1380 | } |
1383 | static inline void ptlock_cache_init(void) {} | ||
1384 | static inline bool ptlock_init(struct page *page) { return true; } | 1381 | static inline bool ptlock_init(struct page *page) { return true; } |
1385 | static inline void pte_lock_deinit(struct page *page) {} | 1382 | static inline void pte_lock_deinit(struct page *page) {} |
1386 | #endif /* USE_SPLIT_PTE_PTLOCKS */ | 1383 | #endif /* USE_SPLIT_PTE_PTLOCKS */ |
1387 | 1384 | ||
1388 | static inline void pgtable_init(void) | ||
1389 | { | ||
1390 | ptlock_cache_init(); | ||
1391 | pgtable_cache_init(); | ||
1392 | } | ||
1393 | |||
1394 | static inline bool pgtable_page_ctor(struct page *page) | 1385 | static inline bool pgtable_page_ctor(struct page *page) |
1395 | { | 1386 | { |
1396 | inc_zone_page_state(page, NR_PAGETABLE); | 1387 | inc_zone_page_state(page, NR_PAGETABLE); |
diff --git a/include/linux/mm_types.h b/include/linux/mm_types.h index 10f5a7272b80..bd299418a934 100644 --- a/include/linux/mm_types.h +++ b/include/linux/mm_types.h | |||
@@ -44,18 +44,22 @@ struct page { | |||
44 | /* First double word block */ | 44 | /* First double word block */ |
45 | unsigned long flags; /* Atomic flags, some possibly | 45 | unsigned long flags; /* Atomic flags, some possibly |
46 | * updated asynchronously */ | 46 | * updated asynchronously */ |
47 | struct address_space *mapping; /* If low bit clear, points to | 47 | union { |
48 | * inode address_space, or NULL. | 48 | struct address_space *mapping; /* If low bit clear, points to |
49 | * If page mapped as anonymous | 49 | * inode address_space, or NULL. |
50 | * memory, low bit is set, and | 50 | * If page mapped as anonymous |
51 | * it points to anon_vma object: | 51 | * memory, low bit is set, and |
52 | * see PAGE_MAPPING_ANON below. | 52 | * it points to anon_vma object: |
53 | */ | 53 | * see PAGE_MAPPING_ANON below. |
54 | */ | ||
55 | void *s_mem; /* slab first object */ | ||
56 | }; | ||
57 | |||
54 | /* Second double word */ | 58 | /* Second double word */ |
55 | struct { | 59 | struct { |
56 | union { | 60 | union { |
57 | pgoff_t index; /* Our offset within mapping. */ | 61 | pgoff_t index; /* Our offset within mapping. */ |
58 | void *freelist; /* slub/slob first free object */ | 62 | void *freelist; /* sl[aou]b first free object */ |
59 | bool pfmemalloc; /* If set by the page allocator, | 63 | bool pfmemalloc; /* If set by the page allocator, |
60 | * ALLOC_NO_WATERMARKS was set | 64 | * ALLOC_NO_WATERMARKS was set |
61 | * and the low watermark was not | 65 | * and the low watermark was not |
@@ -65,9 +69,6 @@ struct page { | |||
65 | * this page is only used to | 69 | * this page is only used to |
66 | * free other pages. | 70 | * free other pages. |
67 | */ | 71 | */ |
68 | #if defined(CONFIG_TRANSPARENT_HUGEPAGE) && USE_SPLIT_PMD_PTLOCKS | ||
69 | pgtable_t pmd_huge_pte; /* protected by page->ptl */ | ||
70 | #endif | ||
71 | }; | 72 | }; |
72 | 73 | ||
73 | union { | 74 | union { |
@@ -114,6 +115,7 @@ struct page { | |||
114 | }; | 115 | }; |
115 | atomic_t _count; /* Usage count, see below. */ | 116 | atomic_t _count; /* Usage count, see below. */ |
116 | }; | 117 | }; |
118 | unsigned int active; /* SLAB */ | ||
117 | }; | 119 | }; |
118 | }; | 120 | }; |
119 | 121 | ||
@@ -135,6 +137,12 @@ struct page { | |||
135 | 137 | ||
136 | struct list_head list; /* slobs list of pages */ | 138 | struct list_head list; /* slobs list of pages */ |
137 | struct slab *slab_page; /* slab fields */ | 139 | struct slab *slab_page; /* slab fields */ |
140 | struct rcu_head rcu_head; /* Used by SLAB | ||
141 | * when destroying via RCU | ||
142 | */ | ||
143 | #if defined(CONFIG_TRANSPARENT_HUGEPAGE) && USE_SPLIT_PMD_PTLOCKS | ||
144 | pgtable_t pmd_huge_pte; /* protected by page->ptl */ | ||
145 | #endif | ||
138 | }; | 146 | }; |
139 | 147 | ||
140 | /* Remainder is not double word aligned */ | 148 | /* Remainder is not double word aligned */ |
diff --git a/include/linux/pci-acpi.h b/include/linux/pci-acpi.h index d006f0ca60f4..5a462c4e5009 100644 --- a/include/linux/pci-acpi.h +++ b/include/linux/pci-acpi.h | |||
@@ -27,7 +27,7 @@ static inline acpi_handle acpi_find_root_bridge_handle(struct pci_dev *pdev) | |||
27 | while (!pci_is_root_bus(pbus)) | 27 | while (!pci_is_root_bus(pbus)) |
28 | pbus = pbus->parent; | 28 | pbus = pbus->parent; |
29 | 29 | ||
30 | return DEVICE_ACPI_HANDLE(pbus->bridge); | 30 | return ACPI_HANDLE(pbus->bridge); |
31 | } | 31 | } |
32 | 32 | ||
33 | static inline acpi_handle acpi_pci_get_bridge_handle(struct pci_bus *pbus) | 33 | static inline acpi_handle acpi_pci_get_bridge_handle(struct pci_bus *pbus) |
@@ -39,7 +39,7 @@ static inline acpi_handle acpi_pci_get_bridge_handle(struct pci_bus *pbus) | |||
39 | else | 39 | else |
40 | dev = &pbus->self->dev; | 40 | dev = &pbus->self->dev; |
41 | 41 | ||
42 | return DEVICE_ACPI_HANDLE(dev); | 42 | return ACPI_HANDLE(dev); |
43 | } | 43 | } |
44 | 44 | ||
45 | void acpi_pci_add_bus(struct pci_bus *bus); | 45 | void acpi_pci_add_bus(struct pci_bus *bus); |
diff --git a/include/linux/platform_data/edma.h b/include/linux/platform_data/edma.h index 179fb91bb5f2..f50821cb64be 100644 --- a/include/linux/platform_data/edma.h +++ b/include/linux/platform_data/edma.h | |||
@@ -67,10 +67,10 @@ struct edmacc_param { | |||
67 | #define ITCCHEN BIT(23) | 67 | #define ITCCHEN BIT(23) |
68 | 68 | ||
69 | /*ch_status paramater of callback function possible values*/ | 69 | /*ch_status paramater of callback function possible values*/ |
70 | #define DMA_COMPLETE 1 | 70 | #define EDMA_DMA_COMPLETE 1 |
71 | #define DMA_CC_ERROR 2 | 71 | #define EDMA_DMA_CC_ERROR 2 |
72 | #define DMA_TC1_ERROR 3 | 72 | #define EDMA_DMA_TC1_ERROR 3 |
73 | #define DMA_TC2_ERROR 4 | 73 | #define EDMA_DMA_TC2_ERROR 4 |
74 | 74 | ||
75 | enum address_mode { | 75 | enum address_mode { |
76 | INCR = 0, | 76 | INCR = 0, |
diff --git a/include/linux/security.h b/include/linux/security.h index 9d37e2b9d3ec..5623a7f965b7 100644 --- a/include/linux/security.h +++ b/include/linux/security.h | |||
@@ -1052,17 +1052,25 @@ static inline void security_free_mnt_opts(struct security_mnt_opts *opts) | |||
1052 | * @xfrm_policy_delete_security: | 1052 | * @xfrm_policy_delete_security: |
1053 | * @ctx contains the xfrm_sec_ctx. | 1053 | * @ctx contains the xfrm_sec_ctx. |
1054 | * Authorize deletion of xp->security. | 1054 | * Authorize deletion of xp->security. |
1055 | * @xfrm_state_alloc_security: | 1055 | * @xfrm_state_alloc: |
1056 | * @x contains the xfrm_state being added to the Security Association | 1056 | * @x contains the xfrm_state being added to the Security Association |
1057 | * Database by the XFRM system. | 1057 | * Database by the XFRM system. |
1058 | * @sec_ctx contains the security context information being provided by | 1058 | * @sec_ctx contains the security context information being provided by |
1059 | * the user-level SA generation program (e.g., setkey or racoon). | 1059 | * the user-level SA generation program (e.g., setkey or racoon). |
1060 | * @secid contains the secid from which to take the mls portion of the context. | ||
1061 | * Allocate a security structure to the x->security field; the security | 1060 | * Allocate a security structure to the x->security field; the security |
1062 | * field is initialized to NULL when the xfrm_state is allocated. Set the | 1061 | * field is initialized to NULL when the xfrm_state is allocated. Set the |
1063 | * context to correspond to either sec_ctx or polsec, with the mls portion | 1062 | * context to correspond to sec_ctx. Return 0 if operation was successful |
1064 | * taken from secid in the latter case. | 1063 | * (memory to allocate, legal context). |
1065 | * Return 0 if operation was successful (memory to allocate, legal context). | 1064 | * @xfrm_state_alloc_acquire: |
1065 | * @x contains the xfrm_state being added to the Security Association | ||
1066 | * Database by the XFRM system. | ||
1067 | * @polsec contains the policy's security context. | ||
1068 | * @secid contains the secid from which to take the mls portion of the | ||
1069 | * context. | ||
1070 | * Allocate a security structure to the x->security field; the security | ||
1071 | * field is initialized to NULL when the xfrm_state is allocated. Set the | ||
1072 | * context to correspond to secid. Return 0 if operation was successful | ||
1073 | * (memory to allocate, legal context). | ||
1066 | * @xfrm_state_free_security: | 1074 | * @xfrm_state_free_security: |
1067 | * @x contains the xfrm_state. | 1075 | * @x contains the xfrm_state. |
1068 | * Deallocate x->security. | 1076 | * Deallocate x->security. |
@@ -1679,9 +1687,11 @@ struct security_operations { | |||
1679 | int (*xfrm_policy_clone_security) (struct xfrm_sec_ctx *old_ctx, struct xfrm_sec_ctx **new_ctx); | 1687 | int (*xfrm_policy_clone_security) (struct xfrm_sec_ctx *old_ctx, struct xfrm_sec_ctx **new_ctx); |
1680 | void (*xfrm_policy_free_security) (struct xfrm_sec_ctx *ctx); | 1688 | void (*xfrm_policy_free_security) (struct xfrm_sec_ctx *ctx); |
1681 | int (*xfrm_policy_delete_security) (struct xfrm_sec_ctx *ctx); | 1689 | int (*xfrm_policy_delete_security) (struct xfrm_sec_ctx *ctx); |
1682 | int (*xfrm_state_alloc_security) (struct xfrm_state *x, | 1690 | int (*xfrm_state_alloc) (struct xfrm_state *x, |
1683 | struct xfrm_user_sec_ctx *sec_ctx, | 1691 | struct xfrm_user_sec_ctx *sec_ctx); |
1684 | u32 secid); | 1692 | int (*xfrm_state_alloc_acquire) (struct xfrm_state *x, |
1693 | struct xfrm_sec_ctx *polsec, | ||
1694 | u32 secid); | ||
1685 | void (*xfrm_state_free_security) (struct xfrm_state *x); | 1695 | void (*xfrm_state_free_security) (struct xfrm_state *x); |
1686 | int (*xfrm_state_delete_security) (struct xfrm_state *x); | 1696 | int (*xfrm_state_delete_security) (struct xfrm_state *x); |
1687 | int (*xfrm_policy_lookup) (struct xfrm_sec_ctx *ctx, u32 fl_secid, u8 dir); | 1697 | int (*xfrm_policy_lookup) (struct xfrm_sec_ctx *ctx, u32 fl_secid, u8 dir); |
diff --git a/include/linux/seqlock.h b/include/linux/seqlock.h index 1e8a8b6e837d..cf87a24c0f92 100644 --- a/include/linux/seqlock.h +++ b/include/linux/seqlock.h | |||
@@ -354,6 +354,35 @@ static inline void read_sequnlock_excl(seqlock_t *sl) | |||
354 | spin_unlock(&sl->lock); | 354 | spin_unlock(&sl->lock); |
355 | } | 355 | } |
356 | 356 | ||
357 | /** | ||
358 | * read_seqbegin_or_lock - begin a sequence number check or locking block | ||
359 | * @lock: sequence lock | ||
360 | * @seq : sequence number to be checked | ||
361 | * | ||
362 | * First try it once optimistically without taking the lock. If that fails, | ||
363 | * take the lock. The sequence number is also used as a marker for deciding | ||
364 | * whether to be a reader (even) or writer (odd). | ||
365 | * N.B. seq must be initialized to an even number to begin with. | ||
366 | */ | ||
367 | static inline void read_seqbegin_or_lock(seqlock_t *lock, int *seq) | ||
368 | { | ||
369 | if (!(*seq & 1)) /* Even */ | ||
370 | *seq = read_seqbegin(lock); | ||
371 | else /* Odd */ | ||
372 | read_seqlock_excl(lock); | ||
373 | } | ||
374 | |||
375 | static inline int need_seqretry(seqlock_t *lock, int seq) | ||
376 | { | ||
377 | return !(seq & 1) && read_seqretry(lock, seq); | ||
378 | } | ||
379 | |||
380 | static inline void done_seqretry(seqlock_t *lock, int seq) | ||
381 | { | ||
382 | if (seq & 1) | ||
383 | read_sequnlock_excl(lock); | ||
384 | } | ||
385 | |||
357 | static inline void read_seqlock_excl_bh(seqlock_t *sl) | 386 | static inline void read_seqlock_excl_bh(seqlock_t *sl) |
358 | { | 387 | { |
359 | spin_lock_bh(&sl->lock); | 388 | spin_lock_bh(&sl->lock); |
diff --git a/include/linux/slab.h b/include/linux/slab.h index 74f105847d13..c2bba248fa63 100644 --- a/include/linux/slab.h +++ b/include/linux/slab.h | |||
@@ -53,7 +53,14 @@ | |||
53 | * } | 53 | * } |
54 | * rcu_read_unlock(); | 54 | * rcu_read_unlock(); |
55 | * | 55 | * |
56 | * See also the comment on struct slab_rcu in mm/slab.c. | 56 | * This is useful if we need to approach a kernel structure obliquely, |
57 | * from its address obtained without the usual locking. We can lock | ||
58 | * the structure to stabilize it and check it's still at the given address, | ||
59 | * only if we can be sure that the memory has not been meanwhile reused | ||
60 | * for some other kind of object (which our subsystem's lock might corrupt). | ||
61 | * | ||
62 | * rcu_read_lock before reading the address, then rcu_read_unlock after | ||
63 | * taking the spinlock within the structure expected at that address. | ||
57 | */ | 64 | */ |
58 | #define SLAB_DESTROY_BY_RCU 0x00080000UL /* Defer freeing slabs to RCU */ | 65 | #define SLAB_DESTROY_BY_RCU 0x00080000UL /* Defer freeing slabs to RCU */ |
59 | #define SLAB_MEM_SPREAD 0x00100000UL /* Spread some memory over cpuset */ | 66 | #define SLAB_MEM_SPREAD 0x00100000UL /* Spread some memory over cpuset */ |
diff --git a/include/linux/slab_def.h b/include/linux/slab_def.h index e9346b4f1ef4..09bfffb08a56 100644 --- a/include/linux/slab_def.h +++ b/include/linux/slab_def.h | |||
@@ -27,8 +27,8 @@ struct kmem_cache { | |||
27 | 27 | ||
28 | size_t colour; /* cache colouring range */ | 28 | size_t colour; /* cache colouring range */ |
29 | unsigned int colour_off; /* colour offset */ | 29 | unsigned int colour_off; /* colour offset */ |
30 | struct kmem_cache *slabp_cache; | 30 | struct kmem_cache *freelist_cache; |
31 | unsigned int slab_size; | 31 | unsigned int freelist_size; |
32 | 32 | ||
33 | /* constructor func */ | 33 | /* constructor func */ |
34 | void (*ctor)(void *obj); | 34 | void (*ctor)(void *obj); |
diff --git a/include/linux/slub_def.h b/include/linux/slub_def.h index cc0b67eada42..f56bfa9e4526 100644 --- a/include/linux/slub_def.h +++ b/include/linux/slub_def.h | |||
@@ -11,7 +11,7 @@ | |||
11 | enum stat_item { | 11 | enum stat_item { |
12 | ALLOC_FASTPATH, /* Allocation from cpu slab */ | 12 | ALLOC_FASTPATH, /* Allocation from cpu slab */ |
13 | ALLOC_SLOWPATH, /* Allocation by getting a new cpu slab */ | 13 | ALLOC_SLOWPATH, /* Allocation by getting a new cpu slab */ |
14 | FREE_FASTPATH, /* Free to cpu slub */ | 14 | FREE_FASTPATH, /* Free to cpu slab */ |
15 | FREE_SLOWPATH, /* Freeing not to cpu slab */ | 15 | FREE_SLOWPATH, /* Freeing not to cpu slab */ |
16 | FREE_FROZEN, /* Freeing to frozen slab */ | 16 | FREE_FROZEN, /* Freeing to frozen slab */ |
17 | FREE_ADD_PARTIAL, /* Freeing moves slab to partial list */ | 17 | FREE_ADD_PARTIAL, /* Freeing moves slab to partial list */ |
diff --git a/include/linux/user_namespace.h b/include/linux/user_namespace.h index 4db29859464f..4836ba3c1cd8 100644 --- a/include/linux/user_namespace.h +++ b/include/linux/user_namespace.h | |||
@@ -27,6 +27,12 @@ struct user_namespace { | |||
27 | kuid_t owner; | 27 | kuid_t owner; |
28 | kgid_t group; | 28 | kgid_t group; |
29 | unsigned int proc_inum; | 29 | unsigned int proc_inum; |
30 | |||
31 | /* Register of per-UID persistent keyrings for this namespace */ | ||
32 | #ifdef CONFIG_PERSISTENT_KEYRINGS | ||
33 | struct key *persistent_keyring_register; | ||
34 | struct rw_semaphore persistent_keyring_register_sem; | ||
35 | #endif | ||
30 | }; | 36 | }; |
31 | 37 | ||
32 | extern struct user_namespace init_user_ns; | 38 | extern struct user_namespace init_user_ns; |
diff --git a/include/linux/wait.h b/include/linux/wait.h index 61939ba30aa0..eaa00b10abaa 100644 --- a/include/linux/wait.h +++ b/include/linux/wait.h | |||
@@ -278,6 +278,31 @@ do { \ | |||
278 | __ret; \ | 278 | __ret; \ |
279 | }) | 279 | }) |
280 | 280 | ||
281 | #define __wait_event_cmd(wq, condition, cmd1, cmd2) \ | ||
282 | (void)___wait_event(wq, condition, TASK_UNINTERRUPTIBLE, 0, 0, \ | ||
283 | cmd1; schedule(); cmd2) | ||
284 | |||
285 | /** | ||
286 | * wait_event_cmd - sleep until a condition gets true | ||
287 | * @wq: the waitqueue to wait on | ||
288 | * @condition: a C expression for the event to wait for | ||
289 | * cmd1: the command will be executed before sleep | ||
290 | * cmd2: the command will be executed after sleep | ||
291 | * | ||
292 | * The process is put to sleep (TASK_UNINTERRUPTIBLE) until the | ||
293 | * @condition evaluates to true. The @condition is checked each time | ||
294 | * the waitqueue @wq is woken up. | ||
295 | * | ||
296 | * wake_up() has to be called after changing any variable that could | ||
297 | * change the result of the wait condition. | ||
298 | */ | ||
299 | #define wait_event_cmd(wq, condition, cmd1, cmd2) \ | ||
300 | do { \ | ||
301 | if (condition) \ | ||
302 | break; \ | ||
303 | __wait_event_cmd(wq, condition, cmd1, cmd2); \ | ||
304 | } while (0) | ||
305 | |||
281 | #define __wait_event_interruptible(wq, condition) \ | 306 | #define __wait_event_interruptible(wq, condition) \ |
282 | ___wait_event(wq, condition, TASK_INTERRUPTIBLE, 0, 0, \ | 307 | ___wait_event(wq, condition, TASK_INTERRUPTIBLE, 0, 0, \ |
283 | schedule()) | 308 | schedule()) |
diff --git a/include/trace/events/btrfs.h b/include/trace/events/btrfs.h index f18b3b76e01e..4832d75dcbae 100644 --- a/include/trace/events/btrfs.h +++ b/include/trace/events/btrfs.h | |||
@@ -162,12 +162,14 @@ DEFINE_EVENT(btrfs__inode, btrfs_inode_evict, | |||
162 | { EXTENT_FLAG_LOGGING, "LOGGING" }, \ | 162 | { EXTENT_FLAG_LOGGING, "LOGGING" }, \ |
163 | { EXTENT_FLAG_FILLING, "FILLING" }) | 163 | { EXTENT_FLAG_FILLING, "FILLING" }) |
164 | 164 | ||
165 | TRACE_EVENT(btrfs_get_extent, | 165 | TRACE_EVENT_CONDITION(btrfs_get_extent, |
166 | 166 | ||
167 | TP_PROTO(struct btrfs_root *root, struct extent_map *map), | 167 | TP_PROTO(struct btrfs_root *root, struct extent_map *map), |
168 | 168 | ||
169 | TP_ARGS(root, map), | 169 | TP_ARGS(root, map), |
170 | 170 | ||
171 | TP_CONDITION(map), | ||
172 | |||
171 | TP_STRUCT__entry( | 173 | TP_STRUCT__entry( |
172 | __field( u64, root_objectid ) | 174 | __field( u64, root_objectid ) |
173 | __field( u64, start ) | 175 | __field( u64, start ) |
diff --git a/include/uapi/linux/audit.h b/include/uapi/linux/audit.h index db0b825b4810..44b05a09f193 100644 --- a/include/uapi/linux/audit.h +++ b/include/uapi/linux/audit.h | |||
@@ -68,6 +68,9 @@ | |||
68 | #define AUDIT_MAKE_EQUIV 1015 /* Append to watched tree */ | 68 | #define AUDIT_MAKE_EQUIV 1015 /* Append to watched tree */ |
69 | #define AUDIT_TTY_GET 1016 /* Get TTY auditing status */ | 69 | #define AUDIT_TTY_GET 1016 /* Get TTY auditing status */ |
70 | #define AUDIT_TTY_SET 1017 /* Set TTY auditing status */ | 70 | #define AUDIT_TTY_SET 1017 /* Set TTY auditing status */ |
71 | #define AUDIT_SET_FEATURE 1018 /* Turn an audit feature on or off */ | ||
72 | #define AUDIT_GET_FEATURE 1019 /* Get which features are enabled */ | ||
73 | #define AUDIT_FEATURE_CHANGE 1020 /* audit log listing feature changes */ | ||
71 | 74 | ||
72 | #define AUDIT_FIRST_USER_MSG 1100 /* Userspace messages mostly uninteresting to kernel */ | 75 | #define AUDIT_FIRST_USER_MSG 1100 /* Userspace messages mostly uninteresting to kernel */ |
73 | #define AUDIT_USER_AVC 1107 /* We filter this differently */ | 76 | #define AUDIT_USER_AVC 1107 /* We filter this differently */ |
@@ -357,6 +360,12 @@ enum { | |||
357 | #define AUDIT_PERM_READ 4 | 360 | #define AUDIT_PERM_READ 4 |
358 | #define AUDIT_PERM_ATTR 8 | 361 | #define AUDIT_PERM_ATTR 8 |
359 | 362 | ||
363 | /* MAX_AUDIT_MESSAGE_LENGTH is set in audit:lib/libaudit.h as: | ||
364 | * 8970 // PATH_MAX*2+CONTEXT_SIZE*2+11+256+1 | ||
365 | * max header+body+tailer: 44 + 29 + 32 + 262 + 7 + pad | ||
366 | */ | ||
367 | #define AUDIT_MESSAGE_TEXT_MAX 8560 | ||
368 | |||
360 | struct audit_status { | 369 | struct audit_status { |
361 | __u32 mask; /* Bit mask for valid entries */ | 370 | __u32 mask; /* Bit mask for valid entries */ |
362 | __u32 enabled; /* 1 = enabled, 0 = disabled */ | 371 | __u32 enabled; /* 1 = enabled, 0 = disabled */ |
@@ -368,11 +377,28 @@ struct audit_status { | |||
368 | __u32 backlog; /* messages waiting in queue */ | 377 | __u32 backlog; /* messages waiting in queue */ |
369 | }; | 378 | }; |
370 | 379 | ||
380 | struct audit_features { | ||
381 | #define AUDIT_FEATURE_VERSION 1 | ||
382 | __u32 vers; | ||
383 | __u32 mask; /* which bits we are dealing with */ | ||
384 | __u32 features; /* which feature to enable/disable */ | ||
385 | __u32 lock; /* which features to lock */ | ||
386 | }; | ||
387 | |||
388 | #define AUDIT_FEATURE_ONLY_UNSET_LOGINUID 0 | ||
389 | #define AUDIT_FEATURE_LOGINUID_IMMUTABLE 1 | ||
390 | #define AUDIT_LAST_FEATURE AUDIT_FEATURE_LOGINUID_IMMUTABLE | ||
391 | |||
392 | #define audit_feature_valid(x) ((x) >= 0 && (x) <= AUDIT_LAST_FEATURE) | ||
393 | #define AUDIT_FEATURE_TO_MASK(x) (1 << ((x) & 31)) /* mask for __u32 */ | ||
394 | |||
371 | struct audit_tty_status { | 395 | struct audit_tty_status { |
372 | __u32 enabled; /* 1 = enabled, 0 = disabled */ | 396 | __u32 enabled; /* 1 = enabled, 0 = disabled */ |
373 | __u32 log_passwd; /* 1 = enabled, 0 = disabled */ | 397 | __u32 log_passwd; /* 1 = enabled, 0 = disabled */ |
374 | }; | 398 | }; |
375 | 399 | ||
400 | #define AUDIT_UID_UNSET (unsigned int)-1 | ||
401 | |||
376 | /* audit_rule_data supports filter rules with both integer and string | 402 | /* audit_rule_data supports filter rules with both integer and string |
377 | * fields. It corresponds with AUDIT_ADD_RULE, AUDIT_DEL_RULE and | 403 | * fields. It corresponds with AUDIT_ADD_RULE, AUDIT_DEL_RULE and |
378 | * AUDIT_LIST_RULES requests. | 404 | * AUDIT_LIST_RULES requests. |
diff --git a/include/uapi/linux/hash_info.h b/include/uapi/linux/hash_info.h new file mode 100644 index 000000000000..ca18c45f8304 --- /dev/null +++ b/include/uapi/linux/hash_info.h | |||
@@ -0,0 +1,37 @@ | |||
1 | /* | ||
2 | * Hash Info: Hash algorithms information | ||
3 | * | ||
4 | * Copyright (c) 2013 Dmitry Kasatkin <d.kasatkin@samsung.com> | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify it | ||
7 | * under the terms of the GNU General Public License as published by the Free | ||
8 | * Software Foundation; either version 2 of the License, or (at your option) | ||
9 | * any later version. | ||
10 | * | ||
11 | */ | ||
12 | |||
13 | #ifndef _UAPI_LINUX_HASH_INFO_H | ||
14 | #define _UAPI_LINUX_HASH_INFO_H | ||
15 | |||
16 | enum hash_algo { | ||
17 | HASH_ALGO_MD4, | ||
18 | HASH_ALGO_MD5, | ||
19 | HASH_ALGO_SHA1, | ||
20 | HASH_ALGO_RIPE_MD_160, | ||
21 | HASH_ALGO_SHA256, | ||
22 | HASH_ALGO_SHA384, | ||
23 | HASH_ALGO_SHA512, | ||
24 | HASH_ALGO_SHA224, | ||
25 | HASH_ALGO_RIPE_MD_128, | ||
26 | HASH_ALGO_RIPE_MD_256, | ||
27 | HASH_ALGO_RIPE_MD_320, | ||
28 | HASH_ALGO_WP_256, | ||
29 | HASH_ALGO_WP_384, | ||
30 | HASH_ALGO_WP_512, | ||
31 | HASH_ALGO_TGR_128, | ||
32 | HASH_ALGO_TGR_160, | ||
33 | HASH_ALGO_TGR_192, | ||
34 | HASH_ALGO__LAST | ||
35 | }; | ||
36 | |||
37 | #endif /* _UAPI_LINUX_HASH_INFO_H */ | ||
diff --git a/include/uapi/linux/keyctl.h b/include/uapi/linux/keyctl.h index c9b7f4faf97a..840cb990abe2 100644 --- a/include/uapi/linux/keyctl.h +++ b/include/uapi/linux/keyctl.h | |||
@@ -56,5 +56,6 @@ | |||
56 | #define KEYCTL_REJECT 19 /* reject a partially constructed key */ | 56 | #define KEYCTL_REJECT 19 /* reject a partially constructed key */ |
57 | #define KEYCTL_INSTANTIATE_IOV 20 /* instantiate a partially constructed key */ | 57 | #define KEYCTL_INSTANTIATE_IOV 20 /* instantiate a partially constructed key */ |
58 | #define KEYCTL_INVALIDATE 21 /* invalidate a key */ | 58 | #define KEYCTL_INVALIDATE 21 /* invalidate a key */ |
59 | #define KEYCTL_GET_PERSISTENT 22 /* get a user's persistent keyring */ | ||
59 | 60 | ||
60 | #endif /* _LINUX_KEYCTL_H */ | 61 | #endif /* _LINUX_KEYCTL_H */ |
diff --git a/include/uapi/linux/raid/md_p.h b/include/uapi/linux/raid/md_p.h index fe1a5406d4d9..f7cf7f351144 100644 --- a/include/uapi/linux/raid/md_p.h +++ b/include/uapi/linux/raid/md_p.h | |||
@@ -16,6 +16,7 @@ | |||
16 | #define _MD_P_H | 16 | #define _MD_P_H |
17 | 17 | ||
18 | #include <linux/types.h> | 18 | #include <linux/types.h> |
19 | #include <asm/byteorder.h> | ||
19 | 20 | ||
20 | /* | 21 | /* |
21 | * RAID superblock. | 22 | * RAID superblock. |