diff options
author | Thomas Hellstrom <thellstrom@vmware.com> | 2012-11-20 12:16:47 +0000 |
---|---|---|
committer | Dave Airlie <airlied@redhat.com> | 2012-11-28 18:36:05 +1000 |
commit | 384cc2f9688994dfd505011ba3b08e0a702030b0 (patch) | |
tree | 9d7f8d1f3a68d88442d35cd13a67563571147f29 /include/drm | |
parent | 7e8d9da32ea02f02a23f998cd2013408a4fe49bb (diff) | |
download | kernel-common-384cc2f9688994dfd505011ba3b08e0a702030b0.tar.gz kernel-common-384cc2f9688994dfd505011ba3b08e0a702030b0.tar.bz2 kernel-common-384cc2f9688994dfd505011ba3b08e0a702030b0.zip |
drm: Add a hash-tab rcu-safe API
While hashtab should now be RCU-safe, Add a drm_ht_xxx_api for consumers
to use to make it obvious what locking mechanism is used.
Document the way the rcu-safe interface should be used.
Don't use rcu-safe list traversal in modify operations where we should use
a spinlock / mutex anyway.
Signed-off-by: Thomas Hellstrom <thellstrom@vmware.com>
Signed-off-by: Dave Airlie <airlied@redhat.com>
Diffstat (limited to 'include/drm')
-rw-r--r-- | include/drm/drm_hashtab.h | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/include/drm/drm_hashtab.h b/include/drm/drm_hashtab.h index 3650d5d011ee..fce2ef3fdfff 100644 --- a/include/drm/drm_hashtab.h +++ b/include/drm/drm_hashtab.h @@ -61,5 +61,19 @@ extern int drm_ht_remove_key(struct drm_open_hash *ht, unsigned long key); extern int drm_ht_remove_item(struct drm_open_hash *ht, struct drm_hash_item *item); extern void drm_ht_remove(struct drm_open_hash *ht); +/* + * RCU-safe interface + * + * The user of this API needs to make sure that two or more instances of the + * hash table manipulation functions are never run simultaneously. + * The lookup function drm_ht_find_item_rcu may, however, run simultaneously + * with any of the manipulation functions as long as it's called from within + * an RCU read-locked section. + */ +#define drm_ht_insert_item_rcu drm_ht_insert_item +#define drm_ht_just_insert_please_rcu drm_ht_just_insert_please +#define drm_ht_remove_key_rcu drm_ht_remove_key +#define drm_ht_remove_item_rcu drm_ht_remove_item +#define drm_ht_find_item_rcu drm_ht_find_item #endif |