@@ -81,8 +81,6 @@ int etnaviv_gem_get_iova_locked(struct etnaviv_gpu *gpu,
struct drm_gem_object *obj, uint32_t *iova);
int etnaviv_gem_get_iova(struct etnaviv_gpu *gpu, struct drm_gem_object *obj,
int id, uint32_t *iova);
-struct page **etnaviv_gem_get_pages(struct drm_gem_object *obj);
-void msm_gem_put_pages(struct drm_gem_object *obj);
void etnaviv_gem_put_iova(struct drm_gem_object *obj);
int msm_gem_dumb_create(struct drm_file *file, struct drm_device *dev,
struct drm_mode_create_dumb *args);
@@ -81,19 +81,12 @@ static void put_pages(struct etnaviv_gem_object *etnaviv_obj)
}
}
-struct page **etnaviv_gem_get_pages(struct drm_gem_object *obj)
+struct page **etnaviv_gem_get_pages(struct etnaviv_gem_object *etnaviv_obj)
{
- struct drm_device *dev = obj->dev;
- struct page **p;
-
- mutex_lock(&dev->struct_mutex);
- p = get_pages(to_etnaviv_bo(obj));
- mutex_unlock(&dev->struct_mutex);
-
- return p;
+ return get_pages(etnaviv_obj);
}
-void msm_gem_put_pages(struct drm_gem_object *obj)
+void etnaviv_gem_put_pages(struct etnaviv_gem_object *etnaviv_obj)
{
/* when we start tracking the pin count, then do something here */
}
@@ -107,5 +107,7 @@ struct etnaviv_gem_submit {
int etnaviv_gem_new_private(struct drm_device *dev, size_t size, uint32_t flags,
struct etnaviv_gem_object **res);
+struct page **etnaviv_gem_get_pages(struct etnaviv_gem_object *obj);
+void etnaviv_gem_put_pages(struct etnaviv_gem_object *obj);
#endif /* __ETNAVIV_GEM_H__ */
@@ -41,15 +41,25 @@ void msm_gem_prime_vunmap(struct drm_gem_object *obj, void *vaddr)
int msm_gem_prime_pin(struct drm_gem_object *obj)
{
- if (!obj->import_attach)
- etnaviv_gem_get_pages(obj);
+ if (!obj->import_attach) {
+ struct drm_device *dev = obj->dev;
+
+ mutex_lock(&dev->struct_mutex);
+ etnaviv_gem_get_pages(to_etnaviv_bo(obj));
+ mutex_unlock(&dev->struct_mutex);
+ }
return 0;
}
void msm_gem_prime_unpin(struct drm_gem_object *obj)
{
- if (!obj->import_attach)
- msm_gem_put_pages(obj);
+ if (!obj->import_attach) {
+ struct drm_device *dev = obj->dev;
+
+ mutex_lock(&dev->struct_mutex);
+ etnaviv_gem_put_pages(to_etnaviv_bo(obj));
+ mutex_unlock(&dev->struct_mutex);
+ }
}
static void etnaviv_gem_prime_release(struct etnaviv_gem_object *etnaviv_obj)