forked from ~ljy/RK356X_SDK_RELEASE

hc
2024-12-19 9370bb92b2d16684ee45cf24e879c93c509162da
kernel/drivers/infiniband/hw/hfi1/mmu_rb.h
....@@ -1,4 +1,5 @@
11 /*
2
+ * Copyright(c) 2020 Cornelis Networks, Inc.
23 * Copyright(c) 2016 Intel Corporation.
34 *
45 * This file is provided under a dual BSD/GPLv2 license. When using or
....@@ -54,7 +55,9 @@
5455 unsigned long len;
5556 unsigned long __last;
5657 struct rb_node node;
58
+ struct mmu_rb_handler *handler;
5759 struct list_head list;
60
+ struct kref refcount;
5861 };
5962
6063 /*
....@@ -71,18 +74,30 @@
7174 void *evict_arg, bool *stop);
7275 };
7376
74
-int hfi1_mmu_rb_register(void *ops_arg, struct mm_struct *mm,
77
+struct mmu_rb_handler {
78
+ struct mmu_notifier mn;
79
+ struct rb_root_cached root;
80
+ void *ops_arg;
81
+ spinlock_t lock; /* protect the RB tree */
82
+ struct mmu_rb_ops *ops;
83
+ struct list_head lru_list;
84
+ struct work_struct del_work;
85
+ struct list_head del_list;
86
+ struct workqueue_struct *wq;
87
+};
88
+
89
+int hfi1_mmu_rb_register(void *ops_arg,
7590 struct mmu_rb_ops *ops,
7691 struct workqueue_struct *wq,
7792 struct mmu_rb_handler **handler);
7893 void hfi1_mmu_rb_unregister(struct mmu_rb_handler *handler);
7994 int hfi1_mmu_rb_insert(struct mmu_rb_handler *handler,
8095 struct mmu_rb_node *mnode);
96
+void hfi1_mmu_rb_release(struct kref *refcount);
97
+
8198 void hfi1_mmu_rb_evict(struct mmu_rb_handler *handler, void *evict_arg);
82
-void hfi1_mmu_rb_remove(struct mmu_rb_handler *handler,
83
- struct mmu_rb_node *mnode);
84
-bool hfi1_mmu_rb_remove_unless_exact(struct mmu_rb_handler *handler,
85
- unsigned long addr, unsigned long len,
86
- struct mmu_rb_node **rb_node);
99
+struct mmu_rb_node *hfi1_mmu_rb_get_first(struct mmu_rb_handler *handler,
100
+ unsigned long addr,
101
+ unsigned long len);
87102
88103 #endif /* _HFI1_MMU_RB_H */