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 */
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
v3.5.6
 1/*
 2  File: linux/mbcache.h
 
 
 
 
 
 
 
 3
 4  (C) 2001 by Andreas Gruenbacher, <a.gruenbacher@computer.org>
 5*/
 6
 7struct mb_cache_entry {
 8	struct list_head		e_lru_list;
 9	struct mb_cache			*e_cache;
10	unsigned short			e_used;
11	unsigned short			e_queued;
12	struct block_device		*e_bdev;
13	sector_t			e_block;
14	struct list_head		e_block_list;
15	struct {
16		struct list_head	o_list;
17		unsigned int		o_key;
18	} e_index;
19};
20
21struct mb_cache {
22	struct list_head		c_cache_list;
23	const char			*c_name;
24	atomic_t			c_entry_count;
25	int				c_max_entries;
26	int				c_bucket_bits;
27	struct kmem_cache		*c_entry_cache;
28	struct list_head		*c_block_hash;
29	struct list_head		*c_index_hash;
30};
31
32/* Functions on caches */
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
33
34struct mb_cache *mb_cache_create(const char *, int);
35void mb_cache_shrink(struct block_device *);
36void mb_cache_destroy(struct mb_cache *);
37
38/* Functions on cache entries */
39
40struct mb_cache_entry *mb_cache_entry_alloc(struct mb_cache *, gfp_t);
41int mb_cache_entry_insert(struct mb_cache_entry *, struct block_device *,
42			  sector_t, unsigned int);
43void mb_cache_entry_release(struct mb_cache_entry *);
44void mb_cache_entry_free(struct mb_cache_entry *);
45struct mb_cache_entry *mb_cache_entry_get(struct mb_cache *,
46					  struct block_device *,
47					  sector_t);
48struct mb_cache_entry *mb_cache_entry_find_first(struct mb_cache *cache,
49						 struct block_device *, 
50						 unsigned int);
51struct mb_cache_entry *mb_cache_entry_find_next(struct mb_cache_entry *,
52						struct block_device *, 
53						unsigned int);