Subversion Repositories Kolibri OS

Rev

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)