git://scm.lunaixsky.com
/
lunaix-os.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
feat: serial device interfacing
[lunaix-os.git]
/
lunaix-os
/
includes
/
lunaix
/
ds
/
lru.h
diff --git
a/lunaix-os/includes/lunaix/ds/lru.h
b/lunaix-os/includes/lunaix/ds/lru.h
index 5ae607d24e6d223da8da22235fb22a4586871113..76c959749c69b7675daeebd5c792db8752001084 100644
(file)
--- a/
lunaix-os/includes/lunaix/ds/lru.h
+++ b/
lunaix-os/includes/lunaix/ds/lru.h
@@
-2,28
+2,36
@@
#define __LUNAIX_LRU_H
#include <lunaix/ds/llist.h>
#define __LUNAIX_LRU_H
#include <lunaix/ds/llist.h>
+#include <lunaix/types.h>
-struct lru_
zon
e
+struct lru_
nod
e
{
{
- struct llist_header lead_node;
- struct llist_header zones;
+ struct llist_header lru_nodes;
};
};
-struct lru_node
+typedef int (*evict_cb)(struct lru_node* lru_obj);
+
+struct lru_zone
{
{
- struct llist_header lru_nodes;
+ struct llist_header lead_node;
+ struct llist_header zones;
+ u32_t objects;
+ evict_cb try_evict;
};
struct lru_zone*
};
struct lru_zone*
-lru_new_zone();
+lru_new_zone(
evict_cb try_evict_cb
);
void
lru_use_one(struct lru_zone* zone, struct lru_node* node);
void
lru_use_one(struct lru_zone* zone, struct lru_node* node);
-struct lru_node*
+void
lru_evict_one(struct lru_zone* zone);
void
lru_evict_one(struct lru_zone* zone);
void
-lru_remove(struct lru_node* node);
+lru_remove(struct lru_zone* zone, struct lru_node* node);
+
+void
+lru_evict_half(struct lru_zone* zone);
#endif /* __LUNAIX_LRU_H */
#endif /* __LUNAIX_LRU_H */