Linux Audio

Check our new training course

Loading...
v5.9
 1/* SPDX-License-Identifier: GPL-2.0 */
 2#ifndef _LINUX_MBCACHE_H
 3#define _LINUX_MBCACHE_H
 4
 5#include <linux/hash.h>
 6#include <linux/list_bl.h>
 7#include <linux/list.h>
 8#include <linux/atomic.h>
 9#include <linux/fs.h>
10
11struct mb_cache;
12
13struct mb_cache_entry {
14	/* List of entries in cache - protected by cache->c_list_lock */
15	struct list_head	e_list;
16	/* Hash table list - protected by hash chain bitlock */
17	struct hlist_bl_node	e_hash_list;
18	atomic_t		e_refcnt;
19	/* Key in hash - stable during lifetime of the entry */
20	u32			e_key;
21	u32			e_referenced:1;
22	u32			e_reusable:1;
23	/* User provided value - stable during lifetime of the entry */
24	u64			e_value;
25};
26
27struct mb_cache *mb_cache_create(int bucket_bits);
28void mb_cache_destroy(struct mb_cache *cache);
29
30int mb_cache_entry_create(struct mb_cache *cache, gfp_t mask, u32 key,
31			  u64 value, bool reusable);
32void __mb_cache_entry_free(struct mb_cache_entry *entry);
33static inline int mb_cache_entry_put(struct mb_cache *cache,
34				     struct mb_cache_entry *entry)
35{
36	if (!atomic_dec_and_test(&entry->e_refcnt))
37		return 0;
38	__mb_cache_entry_free(entry);
39	return 1;
40}
41
42void mb_cache_entry_delete(struct mb_cache *cache, u32 key, u64 value);
 
43struct mb_cache_entry *mb_cache_entry_get(struct mb_cache *cache, u32 key,
44					  u64 value);
45struct mb_cache_entry *mb_cache_entry_find_first(struct mb_cache *cache,
46						 u32 key);
47struct mb_cache_entry *mb_cache_entry_find_next(struct mb_cache *cache,
48						struct mb_cache_entry *entry);
49void mb_cache_entry_touch(struct mb_cache *cache,
50			  struct mb_cache_entry *entry);
51
52#endif	/* _LINUX_MBCACHE_H */
v4.6
 
 1#ifndef _LINUX_MBCACHE_H
 2#define _LINUX_MBCACHE_H
 3
 4#include <linux/hash.h>
 5#include <linux/list_bl.h>
 6#include <linux/list.h>
 7#include <linux/atomic.h>
 8#include <linux/fs.h>
 9
10struct mb_cache;
11
12struct mb_cache_entry {
13	/* List of entries in cache - protected by cache->c_list_lock */
14	struct list_head	e_list;
15	/* Hash table list - protected by hash chain bitlock */
16	struct hlist_bl_node	e_hash_list;
17	atomic_t		e_refcnt;
18	/* Key in hash - stable during lifetime of the entry */
19	u32			e_key;
20	u32			e_referenced:1;
21	u32			e_reusable:1;
22	/* Block number of hashed block - stable during lifetime of the entry */
23	sector_t		e_block;
24};
25
26struct mb_cache *mb_cache_create(int bucket_bits);
27void mb_cache_destroy(struct mb_cache *cache);
28
29int mb_cache_entry_create(struct mb_cache *cache, gfp_t mask, u32 key,
30			  sector_t block, bool reusable);
31void __mb_cache_entry_free(struct mb_cache_entry *entry);
32static inline int mb_cache_entry_put(struct mb_cache *cache,
33				     struct mb_cache_entry *entry)
34{
35	if (!atomic_dec_and_test(&entry->e_refcnt))
36		return 0;
37	__mb_cache_entry_free(entry);
38	return 1;
39}
40
41void mb_cache_entry_delete_block(struct mb_cache *cache, u32 key,
42				  sector_t block);
43struct mb_cache_entry *mb_cache_entry_get(struct mb_cache *cache, u32 key,
44					  sector_t block);
45struct mb_cache_entry *mb_cache_entry_find_first(struct mb_cache *cache,
46						 u32 key);
47struct mb_cache_entry *mb_cache_entry_find_next(struct mb_cache *cache,
48						struct mb_cache_entry *entry);
49void mb_cache_entry_touch(struct mb_cache *cache,
50			  struct mb_cache_entry *entry);
51
52#endif	/* _LINUX_MBCACHE_H */