Merge tag 'drm-next-2018-06-06-1' of git://anongit.freedesktop.org/drm/drm
Pull drm updates from Dave Airlie: "This starts to support NVIDIA volta hardware with nouveau, and adds amdgpu support for the GPU in the Kabylake-G (the intel + radeon single package chip), along with some initial Intel icelake enabling. Summary: New Drivers: - v3d - driver for broadcom V3D V3.x+ hardware - xen-front - XEN PV display frontend core: - handle zpos normalization in the core - stop looking at legacy pointers in atomic paths - improved scheduler documentation - improved aspect ratio validation - aspect ratio support for 64:27 and 256:135 - drop unused control node code. i915: - Icelake (ICL) enabling - GuC/HuC refactoring - PSR/PSR2 enabling and fixes - DPLL management refactoring - DP MST fixes - NV12 enabling - HDCP improvements - GEM/Execlist/reset improvements - GVT improvements - stolen memory first 4k fix amdgpu: - Vega 20 support - VEGAM support (Kabylake-G) - preOS scanout buffer reservation - power management gfxoff support for raven - SR-IOV fixes - Vega10 power profiles and clock voltage control - scatter/gather display support on CZ/ST amdkfd: - GFX9 dGPU support - userptr memory mapping nouveau: - major refactoring for Volta GV100 support tda998x: - HDMI i2c CEC support etnaviv: - removed unused logging code - license text cleanups - MMU handling improvements - timeout fence fix for 50 days uptime tegra: - IOMMU support in gr2d/gr3d drivers - zpos support vc4: - syncobj support - CTM, plane alpha and async cursor support analogix_dp: - HPD and aux chan fixes sun4i: - MIPI DSI support tilcdc: - clock divider fixes for OMAP-l138 LCDK board rcar-du: - R8A77965 support - dma-buf fences fixes - hardware indexed crtc/du group handling - generic zplane property support atmel-hclcdc: - generic zplane property support mediatek: - use generic video mode function exynos: - S5PV210 FIMD variant support - IPP v2 framework - more HW overlays support" * tag 'drm-next-2018-06-06-1' of git://anongit.freedesktop.org/drm/drm: (1286 commits) drm/amdgpu: fix 32-bit build warning drm/exynos: fimc: signedness bug in fimc_setup_clocks() drm/exynos: scaler: fix static checker warning drm/amdgpu: Use dev_info() to report amdkfd is not supported for this ASIC drm/amd/display: Remove use of division operator for long longs drm/amdgpu: Update GFX info structure to match what vega20 used drm/amdgpu/pp: remove duplicate assignment drm/sched: add rcu_barrier after entity fini drm/amdgpu: move VM BOs on LRU again drm/amdgpu: consistenly use VM moved flag drm/amdgpu: kmap PDs/PTs in amdgpu_vm_update_directories drm/amdgpu: further optimize amdgpu_vm_handle_moved drm/amdgpu: cleanup amdgpu_vm_validate_pt_bos v2 drm/amdgpu: rework VM state machine lock handling v2 drm/amdgpu: Add runtime VCN PG support drm/amdgpu: Enable VCN static PG by default on RV drm/amdgpu: Add VCN static PG support on RV drm/amdgpu: Enable VCN CG by default on RV drm/amdgpu: Add static CG control for VCN on RV drm/exynos: Fix default value for zpos plane property ...
This commit is contained in:
@@ -32,6 +32,7 @@
|
||||
#include <linux/moduleparam.h>
|
||||
#include <linux/mount.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/srcu.h>
|
||||
|
||||
#include <drm/drm_drv.h>
|
||||
#include <drm/drmP.h>
|
||||
@@ -75,6 +76,8 @@ static bool drm_core_init_complete = false;
|
||||
|
||||
static struct dentry *drm_debugfs_root;
|
||||
|
||||
DEFINE_STATIC_SRCU(drm_unplug_srcu);
|
||||
|
||||
/*
|
||||
* DRM Minors
|
||||
* A DRM device can provide several char-dev interfaces on the DRM-Major. Each
|
||||
@@ -96,8 +99,6 @@ static struct drm_minor **drm_minor_get_slot(struct drm_device *dev,
|
||||
return &dev->primary;
|
||||
case DRM_MINOR_RENDER:
|
||||
return &dev->render;
|
||||
case DRM_MINOR_CONTROL:
|
||||
return &dev->control;
|
||||
default:
|
||||
BUG();
|
||||
}
|
||||
@@ -318,18 +319,51 @@ void drm_put_dev(struct drm_device *dev)
|
||||
}
|
||||
EXPORT_SYMBOL(drm_put_dev);
|
||||
|
||||
static void drm_device_set_unplugged(struct drm_device *dev)
|
||||
/**
|
||||
* drm_dev_enter - Enter device critical section
|
||||
* @dev: DRM device
|
||||
* @idx: Pointer to index that will be passed to the matching drm_dev_exit()
|
||||
*
|
||||
* This function marks and protects the beginning of a section that should not
|
||||
* be entered after the device has been unplugged. The section end is marked
|
||||
* with drm_dev_exit(). Calls to this function can be nested.
|
||||
*
|
||||
* Returns:
|
||||
* True if it is OK to enter the section, false otherwise.
|
||||
*/
|
||||
bool drm_dev_enter(struct drm_device *dev, int *idx)
|
||||
{
|
||||
smp_wmb();
|
||||
atomic_set(&dev->unplugged, 1);
|
||||
*idx = srcu_read_lock(&drm_unplug_srcu);
|
||||
|
||||
if (dev->unplugged) {
|
||||
srcu_read_unlock(&drm_unplug_srcu, *idx);
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
EXPORT_SYMBOL(drm_dev_enter);
|
||||
|
||||
/**
|
||||
* drm_dev_exit - Exit device critical section
|
||||
* @idx: index returned from drm_dev_enter()
|
||||
*
|
||||
* This function marks the end of a section that should not be entered after
|
||||
* the device has been unplugged.
|
||||
*/
|
||||
void drm_dev_exit(int idx)
|
||||
{
|
||||
srcu_read_unlock(&drm_unplug_srcu, idx);
|
||||
}
|
||||
EXPORT_SYMBOL(drm_dev_exit);
|
||||
|
||||
/**
|
||||
* drm_dev_unplug - unplug a DRM device
|
||||
* @dev: DRM device
|
||||
*
|
||||
* This unplugs a hotpluggable DRM device, which makes it inaccessible to
|
||||
* userspace operations. Entry-points can use drm_dev_is_unplugged(). This
|
||||
* userspace operations. Entry-points can use drm_dev_enter() and
|
||||
* drm_dev_exit() to protect device resources in a race free manner. This
|
||||
* essentially unregisters the device like drm_dev_unregister(), but can be
|
||||
* called while there are still open users of @dev.
|
||||
*/
|
||||
@@ -338,10 +372,18 @@ void drm_dev_unplug(struct drm_device *dev)
|
||||
drm_dev_unregister(dev);
|
||||
|
||||
mutex_lock(&drm_global_mutex);
|
||||
drm_device_set_unplugged(dev);
|
||||
if (dev->open_count == 0)
|
||||
drm_dev_put(dev);
|
||||
mutex_unlock(&drm_global_mutex);
|
||||
|
||||
/*
|
||||
* After synchronizing any critical read section is guaranteed to see
|
||||
* the new value of ->unplugged, and any critical section which might
|
||||
* still have seen the old value of ->unplugged is guaranteed to have
|
||||
* finished.
|
||||
*/
|
||||
dev->unplugged = true;
|
||||
synchronize_srcu(&drm_unplug_srcu);
|
||||
}
|
||||
EXPORT_SYMBOL(drm_dev_unplug);
|
||||
|
||||
@@ -523,7 +565,6 @@ err_ctxbitmap:
|
||||
err_minors:
|
||||
drm_minor_free(dev, DRM_MINOR_PRIMARY);
|
||||
drm_minor_free(dev, DRM_MINOR_RENDER);
|
||||
drm_minor_free(dev, DRM_MINOR_CONTROL);
|
||||
drm_fs_inode_free(dev->anon_inode);
|
||||
err_free:
|
||||
mutex_destroy(&dev->master_mutex);
|
||||
@@ -559,7 +600,6 @@ void drm_dev_fini(struct drm_device *dev)
|
||||
|
||||
drm_minor_free(dev, DRM_MINOR_PRIMARY);
|
||||
drm_minor_free(dev, DRM_MINOR_RENDER);
|
||||
drm_minor_free(dev, DRM_MINOR_CONTROL);
|
||||
|
||||
mutex_destroy(&dev->master_mutex);
|
||||
mutex_destroy(&dev->ctxlist_mutex);
|
||||
@@ -752,10 +792,6 @@ int drm_dev_register(struct drm_device *dev, unsigned long flags)
|
||||
|
||||
mutex_lock(&drm_global_mutex);
|
||||
|
||||
ret = drm_minor_register(dev, DRM_MINOR_CONTROL);
|
||||
if (ret)
|
||||
goto err_minors;
|
||||
|
||||
ret = drm_minor_register(dev, DRM_MINOR_RENDER);
|
||||
if (ret)
|
||||
goto err_minors;
|
||||
@@ -793,7 +829,6 @@ err_minors:
|
||||
remove_compat_control_link(dev);
|
||||
drm_minor_unregister(dev, DRM_MINOR_PRIMARY);
|
||||
drm_minor_unregister(dev, DRM_MINOR_RENDER);
|
||||
drm_minor_unregister(dev, DRM_MINOR_CONTROL);
|
||||
out_unlock:
|
||||
mutex_unlock(&drm_global_mutex);
|
||||
return ret;
|
||||
@@ -838,7 +873,6 @@ void drm_dev_unregister(struct drm_device *dev)
|
||||
remove_compat_control_link(dev);
|
||||
drm_minor_unregister(dev, DRM_MINOR_PRIMARY);
|
||||
drm_minor_unregister(dev, DRM_MINOR_RENDER);
|
||||
drm_minor_unregister(dev, DRM_MINOR_CONTROL);
|
||||
}
|
||||
EXPORT_SYMBOL(drm_dev_unregister);
|
||||
|
||||
|
Reference in New Issue
Block a user