forked from torvalds/linux
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Due to the use of rhashtables in net namespaces, rhashtable.h is included in lots of the kernel, so a small changes can required a large recompilation. This makes development painful. This patch splits out rhashtable-types.h which just includes the major type declarations, and does not include (non-trivial) inline code. rhashtable.h is no longer included by anything in the include/ directory. Common include files only include rhashtable-types.h so a large recompilation is only triggered when that changes. Acked-by: Herbert Xu <[email protected]> Signed-off-by: NeilBrown <[email protected]> Signed-off-by: David S. Miller <[email protected]>
- Loading branch information
Showing
26 changed files
with
166 additions
and
133 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -12162,7 +12162,9 @@ M: Herbert Xu <[email protected]> | |
L: [email protected] | ||
S: Maintained | ||
F: lib/rhashtable.c | ||
F: lib/test_rhashtable.c | ||
F: include/linux/rhashtable.h | ||
F: include/linux/rhashtable-types.h | ||
|
||
RICOH R5C592 MEMORYSTICK DRIVER | ||
M: Maxim Levitsky <[email protected]> | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,139 @@ | ||
/* SPDX-License-Identifier: GPL-2.0 */ | ||
/* | ||
* Resizable, Scalable, Concurrent Hash Table | ||
* | ||
* Simple structures that might be needed in include | ||
* files. | ||
*/ | ||
|
||
#ifndef _LINUX_RHASHTABLE_TYPES_H | ||
#define _LINUX_RHASHTABLE_TYPES_H | ||
|
||
#include <linux/atomic.h> | ||
#include <linux/compiler.h> | ||
#include <linux/mutex.h> | ||
#include <linux/workqueue.h> | ||
|
||
struct rhash_head { | ||
struct rhash_head __rcu *next; | ||
}; | ||
|
||
struct rhlist_head { | ||
struct rhash_head rhead; | ||
struct rhlist_head __rcu *next; | ||
}; | ||
|
||
struct bucket_table; | ||
|
||
/** | ||
* struct rhashtable_compare_arg - Key for the function rhashtable_compare | ||
* @ht: Hash table | ||
* @key: Key to compare against | ||
*/ | ||
struct rhashtable_compare_arg { | ||
struct rhashtable *ht; | ||
const void *key; | ||
}; | ||
|
||
typedef u32 (*rht_hashfn_t)(const void *data, u32 len, u32 seed); | ||
typedef u32 (*rht_obj_hashfn_t)(const void *data, u32 len, u32 seed); | ||
typedef int (*rht_obj_cmpfn_t)(struct rhashtable_compare_arg *arg, | ||
const void *obj); | ||
|
||
/** | ||
* struct rhashtable_params - Hash table construction parameters | ||
* @nelem_hint: Hint on number of elements, should be 75% of desired size | ||
* @key_len: Length of key | ||
* @key_offset: Offset of key in struct to be hashed | ||
* @head_offset: Offset of rhash_head in struct to be hashed | ||
* @max_size: Maximum size while expanding | ||
* @min_size: Minimum size while shrinking | ||
* @locks_mul: Number of bucket locks to allocate per cpu (default: 32) | ||
* @automatic_shrinking: Enable automatic shrinking of tables | ||
* @nulls_base: Base value to generate nulls marker | ||
* @hashfn: Hash function (default: jhash2 if !(key_len % 4), or jhash) | ||
* @obj_hashfn: Function to hash object | ||
* @obj_cmpfn: Function to compare key with object | ||
*/ | ||
struct rhashtable_params { | ||
u16 nelem_hint; | ||
u16 key_len; | ||
u16 key_offset; | ||
u16 head_offset; | ||
unsigned int max_size; | ||
u16 min_size; | ||
bool automatic_shrinking; | ||
u8 locks_mul; | ||
u32 nulls_base; | ||
rht_hashfn_t hashfn; | ||
rht_obj_hashfn_t obj_hashfn; | ||
rht_obj_cmpfn_t obj_cmpfn; | ||
}; | ||
|
||
/** | ||
* struct rhashtable - Hash table handle | ||
* @tbl: Bucket table | ||
* @key_len: Key length for hashfn | ||
* @max_elems: Maximum number of elements in table | ||
* @p: Configuration parameters | ||
* @rhlist: True if this is an rhltable | ||
* @run_work: Deferred worker to expand/shrink asynchronously | ||
* @mutex: Mutex to protect current/future table swapping | ||
* @lock: Spin lock to protect walker list | ||
* @nelems: Number of elements in table | ||
*/ | ||
struct rhashtable { | ||
struct bucket_table __rcu *tbl; | ||
unsigned int key_len; | ||
unsigned int max_elems; | ||
struct rhashtable_params p; | ||
bool rhlist; | ||
struct work_struct run_work; | ||
struct mutex mutex; | ||
spinlock_t lock; | ||
atomic_t nelems; | ||
}; | ||
|
||
/** | ||
* struct rhltable - Hash table with duplicate objects in a list | ||
* @ht: Underlying rhtable | ||
*/ | ||
struct rhltable { | ||
struct rhashtable ht; | ||
}; | ||
|
||
/** | ||
* struct rhashtable_walker - Hash table walker | ||
* @list: List entry on list of walkers | ||
* @tbl: The table that we were walking over | ||
*/ | ||
struct rhashtable_walker { | ||
struct list_head list; | ||
struct bucket_table *tbl; | ||
}; | ||
|
||
/** | ||
* struct rhashtable_iter - Hash table iterator | ||
* @ht: Table to iterate through | ||
* @p: Current pointer | ||
* @list: Current hash list pointer | ||
* @walker: Associated rhashtable walker | ||
* @slot: Current slot | ||
* @skip: Number of entries to skip in slot | ||
*/ | ||
struct rhashtable_iter { | ||
struct rhashtable *ht; | ||
struct rhash_head *p; | ||
struct rhlist_head *list; | ||
struct rhashtable_walker walker; | ||
unsigned int slot; | ||
unsigned int skip; | ||
bool end_of_table; | ||
}; | ||
|
||
int rhashtable_init(struct rhashtable *ht, | ||
const struct rhashtable_params *params); | ||
int rhltable_init(struct rhltable *hlt, | ||
const struct rhashtable_params *params); | ||
|
||
#endif /* _LINUX_RHASHTABLE_TYPES_H */ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.