aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/drm_fops.c
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2014-10-14 03:39:08 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2014-10-14 03:39:08 -0400
commit2d65a9f48fcdf7866aab6457bc707ca233e0c791 (patch)
treef93e5838d6ac2e59434367f4ff905f7d9c45fc2b /drivers/gpu/drm/drm_fops.c
parentda92da3638a04894afdca8b99e973ddd20268471 (diff)
parentdfda0df3426483cf5fc7441f23f318edbabecb03 (diff)
Merge branch 'drm-next' of git://people.freedesktop.org/~airlied/linux
Pull drm updates from Dave Airlie: "This is the main git pull for the drm, I pretty much froze major pulls at -rc5/6 time, and haven't had much fallout, so will probably continue doing that. Lots of changes all over, big internal header cleanup to make it clear drm features are legacy things and what are things that modern KMS drivers should be using. Also big move to use the new generic fences in all the TTM drivers. core: atomic prep work, vblank rework changes, allows immediate vblank disables major header reworking and cleanups to better delinate legacy interfaces from what KMS drivers should be using. cursor planes locking fixes ttm: move to generic fences (affects all TTM drivers) ppc64 caching fixes radeon: userptr support, uvd for old asics, reset rework for fence changes better buffer placement changes, dpm feature enablement hdmi audio support fixes intel: Cherryview work, 180 degree rotation, skylake prep work, execlist command submission full ppgtt prep work cursor improvements edid caching, vdd handling improvements nouveau: fence reworking kepler memory clock work gt21x clock work fan control improvements hdmi infoframe fixes DP audio ast: ppc64 fixes caching fix rcar: rcar-du DT support ipuv3: prep work for capture support msm: LVDS support for mdp4, new panel, gpu refactoring exynos: exynos3250 SoC support, drop bad mmap interface, mipi dsi changes, and component match support" * 'drm-next' of git://people.freedesktop.org/~airlied/linux: (640 commits) drm/mst: rework payload table allocation to conform better. drm/ast: Fix HW cursor image drm/radeon/kv: add uvd/vce info to dpm debugfs output drm/radeon/ci: add uvd/vce info to dpm debugfs output drm/radeon: export reservation_object from dmabuf to ttm drm/radeon: cope with foreign fences inside the reservation object drm/radeon: cope with foreign fences inside display drm/core: use helper to check driver features drm/radeon/cik: write gfx ucode version to ucode addr reg drm/radeon/si: print full CS when we hit a packet 0 drm/radeon: remove unecessary includes drm/radeon/combios: declare legacy_connector_convert as static drm/radeon/atombios: declare connector convert tables as static drm/radeon: drop btc_get_max_clock_from_voltage_dependency_table drm/radeon/dpm: drop clk/voltage dependency filters for BTC drm/radeon/dpm: drop clk/voltage dependency filters for CI drm/radeon/dpm: drop clk/voltage dependency filters for SI drm/radeon/dpm: drop clk/voltage dependency filters for NI drm/radeon: disable audio when we disable hdmi (v2) drm/radeon: split audio enable between eg and r600 (v2) ...
Diffstat (limited to 'drivers/gpu/drm/drm_fops.c')
-rw-r--r--drivers/gpu/drm/drm_fops.c30
1 files changed, 12 insertions, 18 deletions
diff --git a/drivers/gpu/drm/drm_fops.c b/drivers/gpu/drm/drm_fops.c
index 79d5221c6e41..ed7bc68f7e87 100644
--- a/drivers/gpu/drm/drm_fops.c
+++ b/drivers/gpu/drm/drm_fops.c
@@ -39,10 +39,10 @@
39#include <linux/slab.h> 39#include <linux/slab.h>
40#include <linux/module.h> 40#include <linux/module.h>
41#include "drm_legacy.h" 41#include "drm_legacy.h"
42#include "drm_internal.h"
42 43
43/* from BKL pushdown */ 44/* from BKL pushdown */
44DEFINE_MUTEX(drm_global_mutex); 45DEFINE_MUTEX(drm_global_mutex);
45EXPORT_SYMBOL(drm_global_mutex);
46 46
47static int drm_open_helper(struct file *filp, struct drm_minor *minor); 47static int drm_open_helper(struct file *filp, struct drm_minor *minor);
48 48
@@ -171,7 +171,7 @@ static int drm_open_helper(struct file *filp, struct drm_minor *minor)
171 init_waitqueue_head(&priv->event_wait); 171 init_waitqueue_head(&priv->event_wait);
172 priv->event_space = 4096; /* set aside 4k for event buffer */ 172 priv->event_space = 4096; /* set aside 4k for event buffer */
173 173
174 if (dev->driver->driver_features & DRIVER_GEM) 174 if (drm_core_check_feature(dev, DRIVER_GEM))
175 drm_gem_open(dev, priv); 175 drm_gem_open(dev, priv);
176 176
177 if (drm_core_check_feature(dev, DRIVER_PRIME)) 177 if (drm_core_check_feature(dev, DRIVER_PRIME))
@@ -256,7 +256,7 @@ out_close:
256out_prime_destroy: 256out_prime_destroy:
257 if (drm_core_check_feature(dev, DRIVER_PRIME)) 257 if (drm_core_check_feature(dev, DRIVER_PRIME))
258 drm_prime_destroy_file_private(&priv->prime); 258 drm_prime_destroy_file_private(&priv->prime);
259 if (dev->driver->driver_features & DRIVER_GEM) 259 if (drm_core_check_feature(dev, DRIVER_GEM))
260 drm_gem_release(dev, priv); 260 drm_gem_release(dev, priv);
261 put_pid(priv->pid); 261 put_pid(priv->pid);
262 kfree(priv); 262 kfree(priv);
@@ -268,11 +268,11 @@ static void drm_master_release(struct drm_device *dev, struct file *filp)
268{ 268{
269 struct drm_file *file_priv = filp->private_data; 269 struct drm_file *file_priv = filp->private_data;
270 270
271 if (drm_i_have_hw_lock(dev, file_priv)) { 271 if (drm_legacy_i_have_hw_lock(dev, file_priv)) {
272 DRM_DEBUG("File %p released, freeing lock for context %d\n", 272 DRM_DEBUG("File %p released, freeing lock for context %d\n",
273 filp, _DRM_LOCKING_CONTEXT(file_priv->master->lock.hw_lock->lock)); 273 filp, _DRM_LOCKING_CONTEXT(file_priv->master->lock.hw_lock->lock));
274 drm_lock_free(&file_priv->master->lock, 274 drm_legacy_lock_free(&file_priv->master->lock,
275 _DRM_LOCKING_CONTEXT(file_priv->master->lock.hw_lock->lock)); 275 _DRM_LOCKING_CONTEXT(file_priv->master->lock.hw_lock->lock));
276 } 276 }
277} 277}
278 278
@@ -330,8 +330,6 @@ static void drm_legacy_dev_reinit(struct drm_device *dev)
330 */ 330 */
331int drm_lastclose(struct drm_device * dev) 331int drm_lastclose(struct drm_device * dev)
332{ 332{
333 struct drm_vma_entry *vma, *vma_temp;
334
335 DRM_DEBUG("\n"); 333 DRM_DEBUG("\n");
336 334
337 if (dev->driver->lastclose) 335 if (dev->driver->lastclose)
@@ -346,13 +344,7 @@ int drm_lastclose(struct drm_device * dev)
346 drm_agp_clear(dev); 344 drm_agp_clear(dev);
347 345
348 drm_legacy_sg_cleanup(dev); 346 drm_legacy_sg_cleanup(dev);
349 347 drm_legacy_vma_flush(dev);
350 /* Clear vma list (only built for debugging) */
351 list_for_each_entry_safe(vma, vma_temp, &dev->vmalist, head) {
352 list_del(&vma->head);
353 kfree(vma);
354 }
355
356 drm_legacy_dma_takedown(dev); 348 drm_legacy_dma_takedown(dev);
357 349
358 mutex_unlock(&dev->struct_mutex); 350 mutex_unlock(&dev->struct_mutex);
@@ -412,14 +404,14 @@ int drm_release(struct inode *inode, struct file *filp)
412 drm_master_release(dev, filp); 404 drm_master_release(dev, filp);
413 405
414 if (drm_core_check_feature(dev, DRIVER_HAVE_DMA)) 406 if (drm_core_check_feature(dev, DRIVER_HAVE_DMA))
415 drm_core_reclaim_buffers(dev, file_priv); 407 drm_legacy_reclaim_buffers(dev, file_priv);
416 408
417 drm_events_release(file_priv); 409 drm_events_release(file_priv);
418 410
419 if (dev->driver->driver_features & DRIVER_MODESET) 411 if (drm_core_check_feature(dev, DRIVER_MODESET))
420 drm_fb_release(file_priv); 412 drm_fb_release(file_priv);
421 413
422 if (dev->driver->driver_features & DRIVER_GEM) 414 if (drm_core_check_feature(dev, DRIVER_GEM))
423 drm_gem_release(dev, file_priv); 415 drm_gem_release(dev, file_priv);
424 416
425 drm_legacy_ctxbitmap_flush(dev, file_priv); 417 drm_legacy_ctxbitmap_flush(dev, file_priv);
@@ -464,6 +456,8 @@ int drm_release(struct inode *inode, struct file *filp)
464 if (drm_core_check_feature(dev, DRIVER_PRIME)) 456 if (drm_core_check_feature(dev, DRIVER_PRIME))
465 drm_prime_destroy_file_private(&file_priv->prime); 457 drm_prime_destroy_file_private(&file_priv->prime);
466 458
459 WARN_ON(!list_empty(&file_priv->event_list));
460
467 put_pid(file_priv->pid); 461 put_pid(file_priv->pid);
468 kfree(file_priv); 462 kfree(file_priv);
469 463