Rev 5056 | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 5056 | Rev 6082 | ||
---|---|---|---|
Line 52... | Line 52... | ||
52 | 52 | ||
53 | void drm_vma_offset_manager_init(struct drm_vma_offset_manager *mgr, |
53 | void drm_vma_offset_manager_init(struct drm_vma_offset_manager *mgr, |
54 | unsigned long page_offset, unsigned long size); |
54 | unsigned long page_offset, unsigned long size); |
Line 55... | Line -... | ||
55 | void drm_vma_offset_manager_destroy(struct drm_vma_offset_manager *mgr); |
- | |
56 | - | ||
57 | struct drm_vma_offset_node *drm_vma_offset_lookup(struct drm_vma_offset_manager *mgr, |
- | |
58 | unsigned long start, |
55 | void drm_vma_offset_manager_destroy(struct drm_vma_offset_manager *mgr); |
59 | unsigned long pages); |
56 | |
60 | struct drm_vma_offset_node *drm_vma_offset_lookup_locked(struct drm_vma_offset_manager *mgr, |
57 | struct drm_vma_offset_node *drm_vma_offset_lookup_locked(struct drm_vma_offset_manager *mgr, |
61 | unsigned long start, |
58 | unsigned long start, |
62 | unsigned long pages); |
59 | unsigned long pages); |
Line 69... | Line 66... | ||
69 | void drm_vma_node_revoke(struct drm_vma_offset_node *node, struct file *filp); |
66 | void drm_vma_node_revoke(struct drm_vma_offset_node *node, struct file *filp); |
70 | bool drm_vma_node_is_allowed(struct drm_vma_offset_node *node, |
67 | bool drm_vma_node_is_allowed(struct drm_vma_offset_node *node, |
71 | struct file *filp); |
68 | struct file *filp); |
Line 72... | Line 69... | ||
72 | 69 | ||
73 | /** |
70 | /** |
74 | * drm_vma_offset_exact_lookup() - Look up node by exact address |
71 | * drm_vma_offset_exact_lookup_locked() - Look up node by exact address |
75 | * @mgr: Manager object |
72 | * @mgr: Manager object |
76 | * @start: Start address (page-based, not byte-based) |
73 | * @start: Start address (page-based, not byte-based) |
77 | * @pages: Size of object (page-based) |
74 | * @pages: Size of object (page-based) |
78 | * |
75 | * |
79 | * Same as drm_vma_offset_lookup() but does not allow any offset into the node. |
76 | * Same as drm_vma_offset_lookup_locked() but does not allow any offset into the node. |
80 | * It only returns the exact object with the given start address. |
77 | * It only returns the exact object with the given start address. |
81 | * |
78 | * |
82 | * RETURNS: |
79 | * RETURNS: |
83 | * Node at exact start address @start. |
80 | * Node at exact start address @start. |
84 | */ |
81 | */ |
85 | static inline struct drm_vma_offset_node * |
82 | static inline struct drm_vma_offset_node * |
86 | drm_vma_offset_exact_lookup(struct drm_vma_offset_manager *mgr, |
83 | drm_vma_offset_exact_lookup_locked(struct drm_vma_offset_manager *mgr, |
87 | unsigned long start, |
84 | unsigned long start, |
88 | unsigned long pages) |
85 | unsigned long pages) |
89 | { |
86 | { |
Line 90... | Line 87... | ||
90 | struct drm_vma_offset_node *node; |
87 | struct drm_vma_offset_node *node; |
91 | 88 | ||
92 | node = drm_vma_offset_lookup(mgr, start, pages); |
89 | node = drm_vma_offset_lookup_locked(mgr, start, pages); |
Line 93... | Line 90... | ||
93 | return (node && node->vm_node.start == start) ? node : NULL; |
90 | return (node && node->vm_node.start == start) ? node : NULL; |
94 | } |
91 | } |
95 | 92 | ||
96 | /** |
93 | /** |
97 | * drm_vma_offset_lock_lookup() - Lock lookup for extended private use |
94 | * drm_vma_offset_lock_lookup() - Lock lookup for extended private use |
98 | * @mgr: Manager object |
95 | * @mgr: Manager object |
99 | * |
96 | * |
100 | * Lock VMA manager for extended lookups. Only *_locked() VMA function calls |
97 | * Lock VMA manager for extended lookups. Only locked VMA function calls |
101 | * are allowed while holding this lock. All other contexts are blocked from VMA |
98 | * are allowed while holding this lock. All other contexts are blocked from VMA |
102 | * until the lock is released via drm_vma_offset_unlock_lookup(). |
99 | * until the lock is released via drm_vma_offset_unlock_lookup(). |
103 | * |
100 | * |
104 | * Use this if you need to take a reference to the objects returned by |
101 | * Use this if you need to take a reference to the objects returned by |
105 | * drm_vma_offset_lookup_locked() before releasing this lock again. |
102 | * drm_vma_offset_lookup_locked() before releasing this lock again. |
106 | * |
103 | * |
107 | * This lock must not be used for anything else than extended lookups. You must |
104 | * This lock must not be used for anything else than extended lookups. You must |
108 | * not call any other VMA helpers while holding this lock. |
- | |
109 | * |
- | |
110 | * Note: You're in atomic-context while holding this lock! |
- | |
111 | * |
- | |
112 | * Example: |
- | |
113 | * drm_vma_offset_lock_lookup(mgr); |
- | |
114 | * node = drm_vma_offset_lookup_locked(mgr); |
- | |
115 | * if (node) |
105 | * not call any other VMA helpers while holding this lock. |
116 | * kref_get_unless_zero(container_of(node, sth, entr)); |
106 | * |
117 | * drm_vma_offset_unlock_lookup(mgr); |
107 | * Note: You're in atomic-context while holding this lock! |
118 | */ |
108 | */ |
119 | static inline void drm_vma_offset_lock_lookup(struct drm_vma_offset_manager *mgr) |
109 | static inline void drm_vma_offset_lock_lookup(struct drm_vma_offset_manager *mgr) |