cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

drm_drv.c (29706B)


      1/*
      2 * Created: Fri Jan 19 10:48:35 2001 by faith@acm.org
      3 *
      4 * Copyright 2001 VA Linux Systems, Inc., Sunnyvale, California.
      5 * All Rights Reserved.
      6 *
      7 * Author Rickard E. (Rik) Faith <faith@valinux.com>
      8 *
      9 * Permission is hereby granted, free of charge, to any person obtaining a
     10 * copy of this software and associated documentation files (the "Software"),
     11 * to deal in the Software without restriction, including without limitation
     12 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
     13 * and/or sell copies of the Software, and to permit persons to whom the
     14 * Software is furnished to do so, subject to the following conditions:
     15 *
     16 * The above copyright notice and this permission notice (including the next
     17 * paragraph) shall be included in all copies or substantial portions of the
     18 * Software.
     19 *
     20 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
     21 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
     22 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
     23 * PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
     24 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
     25 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
     26 * DEALINGS IN THE SOFTWARE.
     27 */
     28
     29#include <linux/debugfs.h>
     30#include <linux/fs.h>
     31#include <linux/module.h>
     32#include <linux/moduleparam.h>
     33#include <linux/mount.h>
     34#include <linux/pseudo_fs.h>
     35#include <linux/slab.h>
     36#include <linux/srcu.h>
     37
     38#include <drm/drm_cache.h>
     39#include <drm/drm_client.h>
     40#include <drm/drm_color_mgmt.h>
     41#include <drm/drm_drv.h>
     42#include <drm/drm_file.h>
     43#include <drm/drm_managed.h>
     44#include <drm/drm_mode_object.h>
     45#include <drm/drm_print.h>
     46#include <drm/drm_privacy_screen_machine.h>
     47
     48#include "drm_crtc_internal.h"
     49#include "drm_internal.h"
     50#include "drm_legacy.h"
     51
     52MODULE_AUTHOR("Gareth Hughes, Leif Delgass, José Fonseca, Jon Smirl");
     53MODULE_DESCRIPTION("DRM shared core routines");
     54MODULE_LICENSE("GPL and additional rights");
     55
     56static DEFINE_SPINLOCK(drm_minor_lock);
     57static struct idr drm_minors_idr;
     58
     59/*
     60 * If the drm core fails to init for whatever reason,
     61 * we should prevent any drivers from registering with it.
     62 * It's best to check this at drm_dev_init(), as some drivers
     63 * prefer to embed struct drm_device into their own device
     64 * structure and call drm_dev_init() themselves.
     65 */
     66static bool drm_core_init_complete;
     67
     68static struct dentry *drm_debugfs_root;
     69
     70DEFINE_STATIC_SRCU(drm_unplug_srcu);
     71
     72/*
     73 * DRM Minors
     74 * A DRM device can provide several char-dev interfaces on the DRM-Major. Each
     75 * of them is represented by a drm_minor object. Depending on the capabilities
     76 * of the device-driver, different interfaces are registered.
     77 *
     78 * Minors can be accessed via dev->$minor_name. This pointer is either
     79 * NULL or a valid drm_minor pointer and stays valid as long as the device is
     80 * valid. This means, DRM minors have the same life-time as the underlying
     81 * device. However, this doesn't mean that the minor is active. Minors are
     82 * registered and unregistered dynamically according to device-state.
     83 */
     84
     85static struct drm_minor **drm_minor_get_slot(struct drm_device *dev,
     86					     unsigned int type)
     87{
     88	switch (type) {
     89	case DRM_MINOR_PRIMARY:
     90		return &dev->primary;
     91	case DRM_MINOR_RENDER:
     92		return &dev->render;
     93	default:
     94		BUG();
     95	}
     96}
     97
     98static void drm_minor_alloc_release(struct drm_device *dev, void *data)
     99{
    100	struct drm_minor *minor = data;
    101	unsigned long flags;
    102
    103	WARN_ON(dev != minor->dev);
    104
    105	put_device(minor->kdev);
    106
    107	spin_lock_irqsave(&drm_minor_lock, flags);
    108	idr_remove(&drm_minors_idr, minor->index);
    109	spin_unlock_irqrestore(&drm_minor_lock, flags);
    110}
    111
    112static int drm_minor_alloc(struct drm_device *dev, unsigned int type)
    113{
    114	struct drm_minor *minor;
    115	unsigned long flags;
    116	int r;
    117
    118	minor = drmm_kzalloc(dev, sizeof(*minor), GFP_KERNEL);
    119	if (!minor)
    120		return -ENOMEM;
    121
    122	minor->type = type;
    123	minor->dev = dev;
    124
    125	idr_preload(GFP_KERNEL);
    126	spin_lock_irqsave(&drm_minor_lock, flags);
    127	r = idr_alloc(&drm_minors_idr,
    128		      NULL,
    129		      64 * type,
    130		      64 * (type + 1),
    131		      GFP_NOWAIT);
    132	spin_unlock_irqrestore(&drm_minor_lock, flags);
    133	idr_preload_end();
    134
    135	if (r < 0)
    136		return r;
    137
    138	minor->index = r;
    139
    140	r = drmm_add_action_or_reset(dev, drm_minor_alloc_release, minor);
    141	if (r)
    142		return r;
    143
    144	minor->kdev = drm_sysfs_minor_alloc(minor);
    145	if (IS_ERR(minor->kdev))
    146		return PTR_ERR(minor->kdev);
    147
    148	*drm_minor_get_slot(dev, type) = minor;
    149	return 0;
    150}
    151
    152static int drm_minor_register(struct drm_device *dev, unsigned int type)
    153{
    154	struct drm_minor *minor;
    155	unsigned long flags;
    156	int ret;
    157
    158	DRM_DEBUG("\n");
    159
    160	minor = *drm_minor_get_slot(dev, type);
    161	if (!minor)
    162		return 0;
    163
    164	ret = drm_debugfs_init(minor, minor->index, drm_debugfs_root);
    165	if (ret) {
    166		DRM_ERROR("DRM: Failed to initialize /sys/kernel/debug/dri.\n");
    167		goto err_debugfs;
    168	}
    169
    170	ret = device_add(minor->kdev);
    171	if (ret)
    172		goto err_debugfs;
    173
    174	/* replace NULL with @minor so lookups will succeed from now on */
    175	spin_lock_irqsave(&drm_minor_lock, flags);
    176	idr_replace(&drm_minors_idr, minor, minor->index);
    177	spin_unlock_irqrestore(&drm_minor_lock, flags);
    178
    179	DRM_DEBUG("new minor registered %d\n", minor->index);
    180	return 0;
    181
    182err_debugfs:
    183	drm_debugfs_cleanup(minor);
    184	return ret;
    185}
    186
    187static void drm_minor_unregister(struct drm_device *dev, unsigned int type)
    188{
    189	struct drm_minor *minor;
    190	unsigned long flags;
    191
    192	minor = *drm_minor_get_slot(dev, type);
    193	if (!minor || !device_is_registered(minor->kdev))
    194		return;
    195
    196	/* replace @minor with NULL so lookups will fail from now on */
    197	spin_lock_irqsave(&drm_minor_lock, flags);
    198	idr_replace(&drm_minors_idr, NULL, minor->index);
    199	spin_unlock_irqrestore(&drm_minor_lock, flags);
    200
    201	device_del(minor->kdev);
    202	dev_set_drvdata(minor->kdev, NULL); /* safety belt */
    203	drm_debugfs_cleanup(minor);
    204}
    205
    206/*
    207 * Looks up the given minor-ID and returns the respective DRM-minor object. The
    208 * refence-count of the underlying device is increased so you must release this
    209 * object with drm_minor_release().
    210 *
    211 * As long as you hold this minor, it is guaranteed that the object and the
    212 * minor->dev pointer will stay valid! However, the device may get unplugged and
    213 * unregistered while you hold the minor.
    214 */
    215struct drm_minor *drm_minor_acquire(unsigned int minor_id)
    216{
    217	struct drm_minor *minor;
    218	unsigned long flags;
    219
    220	spin_lock_irqsave(&drm_minor_lock, flags);
    221	minor = idr_find(&drm_minors_idr, minor_id);
    222	if (minor)
    223		drm_dev_get(minor->dev);
    224	spin_unlock_irqrestore(&drm_minor_lock, flags);
    225
    226	if (!minor) {
    227		return ERR_PTR(-ENODEV);
    228	} else if (drm_dev_is_unplugged(minor->dev)) {
    229		drm_dev_put(minor->dev);
    230		return ERR_PTR(-ENODEV);
    231	}
    232
    233	return minor;
    234}
    235
    236void drm_minor_release(struct drm_minor *minor)
    237{
    238	drm_dev_put(minor->dev);
    239}
    240
    241/**
    242 * DOC: driver instance overview
    243 *
    244 * A device instance for a drm driver is represented by &struct drm_device. This
    245 * is allocated and initialized with devm_drm_dev_alloc(), usually from
    246 * bus-specific ->probe() callbacks implemented by the driver. The driver then
    247 * needs to initialize all the various subsystems for the drm device like memory
    248 * management, vblank handling, modesetting support and initial output
    249 * configuration plus obviously initialize all the corresponding hardware bits.
    250 * Finally when everything is up and running and ready for userspace the device
    251 * instance can be published using drm_dev_register().
    252 *
    253 * There is also deprecated support for initializing device instances using
    254 * bus-specific helpers and the &drm_driver.load callback. But due to
    255 * backwards-compatibility needs the device instance have to be published too
    256 * early, which requires unpretty global locking to make safe and is therefore
    257 * only support for existing drivers not yet converted to the new scheme.
    258 *
    259 * When cleaning up a device instance everything needs to be done in reverse:
    260 * First unpublish the device instance with drm_dev_unregister(). Then clean up
    261 * any other resources allocated at device initialization and drop the driver's
    262 * reference to &drm_device using drm_dev_put().
    263 *
    264 * Note that any allocation or resource which is visible to userspace must be
    265 * released only when the final drm_dev_put() is called, and not when the
    266 * driver is unbound from the underlying physical struct &device. Best to use
    267 * &drm_device managed resources with drmm_add_action(), drmm_kmalloc() and
    268 * related functions.
    269 *
    270 * devres managed resources like devm_kmalloc() can only be used for resources
    271 * directly related to the underlying hardware device, and only used in code
    272 * paths fully protected by drm_dev_enter() and drm_dev_exit().
    273 *
    274 * Display driver example
    275 * ~~~~~~~~~~~~~~~~~~~~~~
    276 *
    277 * The following example shows a typical structure of a DRM display driver.
    278 * The example focus on the probe() function and the other functions that is
    279 * almost always present and serves as a demonstration of devm_drm_dev_alloc().
    280 *
    281 * .. code-block:: c
    282 *
    283 *	struct driver_device {
    284 *		struct drm_device drm;
    285 *		void *userspace_facing;
    286 *		struct clk *pclk;
    287 *	};
    288 *
    289 *	static const struct drm_driver driver_drm_driver = {
    290 *		[...]
    291 *	};
    292 *
    293 *	static int driver_probe(struct platform_device *pdev)
    294 *	{
    295 *		struct driver_device *priv;
    296 *		struct drm_device *drm;
    297 *		int ret;
    298 *
    299 *		priv = devm_drm_dev_alloc(&pdev->dev, &driver_drm_driver,
    300 *					  struct driver_device, drm);
    301 *		if (IS_ERR(priv))
    302 *			return PTR_ERR(priv);
    303 *		drm = &priv->drm;
    304 *
    305 *		ret = drmm_mode_config_init(drm);
    306 *		if (ret)
    307 *			return ret;
    308 *
    309 *		priv->userspace_facing = drmm_kzalloc(..., GFP_KERNEL);
    310 *		if (!priv->userspace_facing)
    311 *			return -ENOMEM;
    312 *
    313 *		priv->pclk = devm_clk_get(dev, "PCLK");
    314 *		if (IS_ERR(priv->pclk))
    315 *			return PTR_ERR(priv->pclk);
    316 *
    317 *		// Further setup, display pipeline etc
    318 *
    319 *		platform_set_drvdata(pdev, drm);
    320 *
    321 *		drm_mode_config_reset(drm);
    322 *
    323 *		ret = drm_dev_register(drm);
    324 *		if (ret)
    325 *			return ret;
    326 *
    327 *		drm_fbdev_generic_setup(drm, 32);
    328 *
    329 *		return 0;
    330 *	}
    331 *
    332 *	// This function is called before the devm_ resources are released
    333 *	static int driver_remove(struct platform_device *pdev)
    334 *	{
    335 *		struct drm_device *drm = platform_get_drvdata(pdev);
    336 *
    337 *		drm_dev_unregister(drm);
    338 *		drm_atomic_helper_shutdown(drm)
    339 *
    340 *		return 0;
    341 *	}
    342 *
    343 *	// This function is called on kernel restart and shutdown
    344 *	static void driver_shutdown(struct platform_device *pdev)
    345 *	{
    346 *		drm_atomic_helper_shutdown(platform_get_drvdata(pdev));
    347 *	}
    348 *
    349 *	static int __maybe_unused driver_pm_suspend(struct device *dev)
    350 *	{
    351 *		return drm_mode_config_helper_suspend(dev_get_drvdata(dev));
    352 *	}
    353 *
    354 *	static int __maybe_unused driver_pm_resume(struct device *dev)
    355 *	{
    356 *		drm_mode_config_helper_resume(dev_get_drvdata(dev));
    357 *
    358 *		return 0;
    359 *	}
    360 *
    361 *	static const struct dev_pm_ops driver_pm_ops = {
    362 *		SET_SYSTEM_SLEEP_PM_OPS(driver_pm_suspend, driver_pm_resume)
    363 *	};
    364 *
    365 *	static struct platform_driver driver_driver = {
    366 *		.driver = {
    367 *			[...]
    368 *			.pm = &driver_pm_ops,
    369 *		},
    370 *		.probe = driver_probe,
    371 *		.remove = driver_remove,
    372 *		.shutdown = driver_shutdown,
    373 *	};
    374 *	module_platform_driver(driver_driver);
    375 *
    376 * Drivers that want to support device unplugging (USB, DT overlay unload) should
    377 * use drm_dev_unplug() instead of drm_dev_unregister(). The driver must protect
    378 * regions that is accessing device resources to prevent use after they're
    379 * released. This is done using drm_dev_enter() and drm_dev_exit(). There is one
    380 * shortcoming however, drm_dev_unplug() marks the drm_device as unplugged before
    381 * drm_atomic_helper_shutdown() is called. This means that if the disable code
    382 * paths are protected, they will not run on regular driver module unload,
    383 * possibly leaving the hardware enabled.
    384 */
    385
    386/**
    387 * drm_put_dev - Unregister and release a DRM device
    388 * @dev: DRM device
    389 *
    390 * Called at module unload time or when a PCI device is unplugged.
    391 *
    392 * Cleans up all DRM device, calling drm_lastclose().
    393 *
    394 * Note: Use of this function is deprecated. It will eventually go away
    395 * completely.  Please use drm_dev_unregister() and drm_dev_put() explicitly
    396 * instead to make sure that the device isn't userspace accessible any more
    397 * while teardown is in progress, ensuring that userspace can't access an
    398 * inconsistent state.
    399 */
    400void drm_put_dev(struct drm_device *dev)
    401{
    402	DRM_DEBUG("\n");
    403
    404	if (!dev) {
    405		DRM_ERROR("cleanup called no dev\n");
    406		return;
    407	}
    408
    409	drm_dev_unregister(dev);
    410	drm_dev_put(dev);
    411}
    412EXPORT_SYMBOL(drm_put_dev);
    413
    414/**
    415 * drm_dev_enter - Enter device critical section
    416 * @dev: DRM device
    417 * @idx: Pointer to index that will be passed to the matching drm_dev_exit()
    418 *
    419 * This function marks and protects the beginning of a section that should not
    420 * be entered after the device has been unplugged. The section end is marked
    421 * with drm_dev_exit(). Calls to this function can be nested.
    422 *
    423 * Returns:
    424 * True if it is OK to enter the section, false otherwise.
    425 */
    426bool drm_dev_enter(struct drm_device *dev, int *idx)
    427{
    428	*idx = srcu_read_lock(&drm_unplug_srcu);
    429
    430	if (dev->unplugged) {
    431		srcu_read_unlock(&drm_unplug_srcu, *idx);
    432		return false;
    433	}
    434
    435	return true;
    436}
    437EXPORT_SYMBOL(drm_dev_enter);
    438
    439/**
    440 * drm_dev_exit - Exit device critical section
    441 * @idx: index returned from drm_dev_enter()
    442 *
    443 * This function marks the end of a section that should not be entered after
    444 * the device has been unplugged.
    445 */
    446void drm_dev_exit(int idx)
    447{
    448	srcu_read_unlock(&drm_unplug_srcu, idx);
    449}
    450EXPORT_SYMBOL(drm_dev_exit);
    451
    452/**
    453 * drm_dev_unplug - unplug a DRM device
    454 * @dev: DRM device
    455 *
    456 * This unplugs a hotpluggable DRM device, which makes it inaccessible to
    457 * userspace operations. Entry-points can use drm_dev_enter() and
    458 * drm_dev_exit() to protect device resources in a race free manner. This
    459 * essentially unregisters the device like drm_dev_unregister(), but can be
    460 * called while there are still open users of @dev.
    461 */
    462void drm_dev_unplug(struct drm_device *dev)
    463{
    464	/*
    465	 * After synchronizing any critical read section is guaranteed to see
    466	 * the new value of ->unplugged, and any critical section which might
    467	 * still have seen the old value of ->unplugged is guaranteed to have
    468	 * finished.
    469	 */
    470	dev->unplugged = true;
    471	synchronize_srcu(&drm_unplug_srcu);
    472
    473	drm_dev_unregister(dev);
    474
    475	/* Clear all CPU mappings pointing to this device */
    476	unmap_mapping_range(dev->anon_inode->i_mapping, 0, 0, 1);
    477}
    478EXPORT_SYMBOL(drm_dev_unplug);
    479
    480/*
    481 * DRM internal mount
    482 * We want to be able to allocate our own "struct address_space" to control
    483 * memory-mappings in VRAM (or stolen RAM, ...). However, core MM does not allow
    484 * stand-alone address_space objects, so we need an underlying inode. As there
    485 * is no way to allocate an independent inode easily, we need a fake internal
    486 * VFS mount-point.
    487 *
    488 * The drm_fs_inode_new() function allocates a new inode, drm_fs_inode_free()
    489 * frees it again. You are allowed to use iget() and iput() to get references to
    490 * the inode. But each drm_fs_inode_new() call must be paired with exactly one
    491 * drm_fs_inode_free() call (which does not have to be the last iput()).
    492 * We use drm_fs_inode_*() to manage our internal VFS mount-point and share it
    493 * between multiple inode-users. You could, technically, call
    494 * iget() + drm_fs_inode_free() directly after alloc and sometime later do an
    495 * iput(), but this way you'd end up with a new vfsmount for each inode.
    496 */
    497
    498static int drm_fs_cnt;
    499static struct vfsmount *drm_fs_mnt;
    500
    501static int drm_fs_init_fs_context(struct fs_context *fc)
    502{
    503	return init_pseudo(fc, 0x010203ff) ? 0 : -ENOMEM;
    504}
    505
    506static struct file_system_type drm_fs_type = {
    507	.name		= "drm",
    508	.owner		= THIS_MODULE,
    509	.init_fs_context = drm_fs_init_fs_context,
    510	.kill_sb	= kill_anon_super,
    511};
    512
    513static struct inode *drm_fs_inode_new(void)
    514{
    515	struct inode *inode;
    516	int r;
    517
    518	r = simple_pin_fs(&drm_fs_type, &drm_fs_mnt, &drm_fs_cnt);
    519	if (r < 0) {
    520		DRM_ERROR("Cannot mount pseudo fs: %d\n", r);
    521		return ERR_PTR(r);
    522	}
    523
    524	inode = alloc_anon_inode(drm_fs_mnt->mnt_sb);
    525	if (IS_ERR(inode))
    526		simple_release_fs(&drm_fs_mnt, &drm_fs_cnt);
    527
    528	return inode;
    529}
    530
    531static void drm_fs_inode_free(struct inode *inode)
    532{
    533	if (inode) {
    534		iput(inode);
    535		simple_release_fs(&drm_fs_mnt, &drm_fs_cnt);
    536	}
    537}
    538
    539/**
    540 * DOC: component helper usage recommendations
    541 *
    542 * DRM drivers that drive hardware where a logical device consists of a pile of
    543 * independent hardware blocks are recommended to use the :ref:`component helper
    544 * library<component>`. For consistency and better options for code reuse the
    545 * following guidelines apply:
    546 *
    547 *  - The entire device initialization procedure should be run from the
    548 *    &component_master_ops.master_bind callback, starting with
    549 *    devm_drm_dev_alloc(), then binding all components with
    550 *    component_bind_all() and finishing with drm_dev_register().
    551 *
    552 *  - The opaque pointer passed to all components through component_bind_all()
    553 *    should point at &struct drm_device of the device instance, not some driver
    554 *    specific private structure.
    555 *
    556 *  - The component helper fills the niche where further standardization of
    557 *    interfaces is not practical. When there already is, or will be, a
    558 *    standardized interface like &drm_bridge or &drm_panel, providing its own
    559 *    functions to find such components at driver load time, like
    560 *    drm_of_find_panel_or_bridge(), then the component helper should not be
    561 *    used.
    562 */
    563
    564static void drm_dev_init_release(struct drm_device *dev, void *res)
    565{
    566	drm_legacy_ctxbitmap_cleanup(dev);
    567	drm_legacy_remove_map_hash(dev);
    568	drm_fs_inode_free(dev->anon_inode);
    569
    570	put_device(dev->dev);
    571	/* Prevent use-after-free in drm_managed_release when debugging is
    572	 * enabled. Slightly awkward, but can't really be helped. */
    573	dev->dev = NULL;
    574	mutex_destroy(&dev->master_mutex);
    575	mutex_destroy(&dev->clientlist_mutex);
    576	mutex_destroy(&dev->filelist_mutex);
    577	mutex_destroy(&dev->struct_mutex);
    578	drm_legacy_destroy_members(dev);
    579}
    580
    581static int drm_dev_init(struct drm_device *dev,
    582			const struct drm_driver *driver,
    583			struct device *parent)
    584{
    585	struct inode *inode;
    586	int ret;
    587
    588	if (!drm_core_init_complete) {
    589		DRM_ERROR("DRM core is not initialized\n");
    590		return -ENODEV;
    591	}
    592
    593	if (WARN_ON(!parent))
    594		return -EINVAL;
    595
    596	kref_init(&dev->ref);
    597	dev->dev = get_device(parent);
    598	dev->driver = driver;
    599
    600	INIT_LIST_HEAD(&dev->managed.resources);
    601	spin_lock_init(&dev->managed.lock);
    602
    603	/* no per-device feature limits by default */
    604	dev->driver_features = ~0u;
    605
    606	drm_legacy_init_members(dev);
    607	INIT_LIST_HEAD(&dev->filelist);
    608	INIT_LIST_HEAD(&dev->filelist_internal);
    609	INIT_LIST_HEAD(&dev->clientlist);
    610	INIT_LIST_HEAD(&dev->vblank_event_list);
    611
    612	spin_lock_init(&dev->event_lock);
    613	mutex_init(&dev->struct_mutex);
    614	mutex_init(&dev->filelist_mutex);
    615	mutex_init(&dev->clientlist_mutex);
    616	mutex_init(&dev->master_mutex);
    617
    618	ret = drmm_add_action(dev, drm_dev_init_release, NULL);
    619	if (ret)
    620		return ret;
    621
    622	inode = drm_fs_inode_new();
    623	if (IS_ERR(inode)) {
    624		ret = PTR_ERR(inode);
    625		DRM_ERROR("Cannot allocate anonymous inode: %d\n", ret);
    626		goto err;
    627	}
    628
    629	dev->anon_inode = inode;
    630
    631	if (drm_core_check_feature(dev, DRIVER_RENDER)) {
    632		ret = drm_minor_alloc(dev, DRM_MINOR_RENDER);
    633		if (ret)
    634			goto err;
    635	}
    636
    637	ret = drm_minor_alloc(dev, DRM_MINOR_PRIMARY);
    638	if (ret)
    639		goto err;
    640
    641	ret = drm_legacy_create_map_hash(dev);
    642	if (ret)
    643		goto err;
    644
    645	drm_legacy_ctxbitmap_init(dev);
    646
    647	if (drm_core_check_feature(dev, DRIVER_GEM)) {
    648		ret = drm_gem_init(dev);
    649		if (ret) {
    650			DRM_ERROR("Cannot initialize graphics execution manager (GEM)\n");
    651			goto err;
    652		}
    653	}
    654
    655	ret = drm_dev_set_unique(dev, dev_name(parent));
    656	if (ret)
    657		goto err;
    658
    659	return 0;
    660
    661err:
    662	drm_managed_release(dev);
    663
    664	return ret;
    665}
    666
    667static void devm_drm_dev_init_release(void *data)
    668{
    669	drm_dev_put(data);
    670}
    671
    672static int devm_drm_dev_init(struct device *parent,
    673			     struct drm_device *dev,
    674			     const struct drm_driver *driver)
    675{
    676	int ret;
    677
    678	ret = drm_dev_init(dev, driver, parent);
    679	if (ret)
    680		return ret;
    681
    682	return devm_add_action_or_reset(parent,
    683					devm_drm_dev_init_release, dev);
    684}
    685
    686void *__devm_drm_dev_alloc(struct device *parent,
    687			   const struct drm_driver *driver,
    688			   size_t size, size_t offset)
    689{
    690	void *container;
    691	struct drm_device *drm;
    692	int ret;
    693
    694	container = kzalloc(size, GFP_KERNEL);
    695	if (!container)
    696		return ERR_PTR(-ENOMEM);
    697
    698	drm = container + offset;
    699	ret = devm_drm_dev_init(parent, drm, driver);
    700	if (ret) {
    701		kfree(container);
    702		return ERR_PTR(ret);
    703	}
    704	drmm_add_final_kfree(drm, container);
    705
    706	return container;
    707}
    708EXPORT_SYMBOL(__devm_drm_dev_alloc);
    709
    710/**
    711 * drm_dev_alloc - Allocate new DRM device
    712 * @driver: DRM driver to allocate device for
    713 * @parent: Parent device object
    714 *
    715 * This is the deprecated version of devm_drm_dev_alloc(), which does not support
    716 * subclassing through embedding the struct &drm_device in a driver private
    717 * structure, and which does not support automatic cleanup through devres.
    718 *
    719 * RETURNS:
    720 * Pointer to new DRM device, or ERR_PTR on failure.
    721 */
    722struct drm_device *drm_dev_alloc(const struct drm_driver *driver,
    723				 struct device *parent)
    724{
    725	struct drm_device *dev;
    726	int ret;
    727
    728	dev = kzalloc(sizeof(*dev), GFP_KERNEL);
    729	if (!dev)
    730		return ERR_PTR(-ENOMEM);
    731
    732	ret = drm_dev_init(dev, driver, parent);
    733	if (ret) {
    734		kfree(dev);
    735		return ERR_PTR(ret);
    736	}
    737
    738	drmm_add_final_kfree(dev, dev);
    739
    740	return dev;
    741}
    742EXPORT_SYMBOL(drm_dev_alloc);
    743
    744static void drm_dev_release(struct kref *ref)
    745{
    746	struct drm_device *dev = container_of(ref, struct drm_device, ref);
    747
    748	if (dev->driver->release)
    749		dev->driver->release(dev);
    750
    751	drm_managed_release(dev);
    752
    753	kfree(dev->managed.final_kfree);
    754}
    755
    756/**
    757 * drm_dev_get - Take reference of a DRM device
    758 * @dev: device to take reference of or NULL
    759 *
    760 * This increases the ref-count of @dev by one. You *must* already own a
    761 * reference when calling this. Use drm_dev_put() to drop this reference
    762 * again.
    763 *
    764 * This function never fails. However, this function does not provide *any*
    765 * guarantee whether the device is alive or running. It only provides a
    766 * reference to the object and the memory associated with it.
    767 */
    768void drm_dev_get(struct drm_device *dev)
    769{
    770	if (dev)
    771		kref_get(&dev->ref);
    772}
    773EXPORT_SYMBOL(drm_dev_get);
    774
    775/**
    776 * drm_dev_put - Drop reference of a DRM device
    777 * @dev: device to drop reference of or NULL
    778 *
    779 * This decreases the ref-count of @dev by one. The device is destroyed if the
    780 * ref-count drops to zero.
    781 */
    782void drm_dev_put(struct drm_device *dev)
    783{
    784	if (dev)
    785		kref_put(&dev->ref, drm_dev_release);
    786}
    787EXPORT_SYMBOL(drm_dev_put);
    788
    789static int create_compat_control_link(struct drm_device *dev)
    790{
    791	struct drm_minor *minor;
    792	char *name;
    793	int ret;
    794
    795	if (!drm_core_check_feature(dev, DRIVER_MODESET))
    796		return 0;
    797
    798	minor = *drm_minor_get_slot(dev, DRM_MINOR_PRIMARY);
    799	if (!minor)
    800		return 0;
    801
    802	/*
    803	 * Some existing userspace out there uses the existing of the controlD*
    804	 * sysfs files to figure out whether it's a modeset driver. It only does
    805	 * readdir, hence a symlink is sufficient (and the least confusing
    806	 * option). Otherwise controlD* is entirely unused.
    807	 *
    808	 * Old controlD chardev have been allocated in the range
    809	 * 64-127.
    810	 */
    811	name = kasprintf(GFP_KERNEL, "controlD%d", minor->index + 64);
    812	if (!name)
    813		return -ENOMEM;
    814
    815	ret = sysfs_create_link(minor->kdev->kobj.parent,
    816				&minor->kdev->kobj,
    817				name);
    818
    819	kfree(name);
    820
    821	return ret;
    822}
    823
    824static void remove_compat_control_link(struct drm_device *dev)
    825{
    826	struct drm_minor *minor;
    827	char *name;
    828
    829	if (!drm_core_check_feature(dev, DRIVER_MODESET))
    830		return;
    831
    832	minor = *drm_minor_get_slot(dev, DRM_MINOR_PRIMARY);
    833	if (!minor)
    834		return;
    835
    836	name = kasprintf(GFP_KERNEL, "controlD%d", minor->index + 64);
    837	if (!name)
    838		return;
    839
    840	sysfs_remove_link(minor->kdev->kobj.parent, name);
    841
    842	kfree(name);
    843}
    844
    845/**
    846 * drm_dev_register - Register DRM device
    847 * @dev: Device to register
    848 * @flags: Flags passed to the driver's .load() function
    849 *
    850 * Register the DRM device @dev with the system, advertise device to user-space
    851 * and start normal device operation. @dev must be initialized via drm_dev_init()
    852 * previously.
    853 *
    854 * Never call this twice on any device!
    855 *
    856 * NOTE: To ensure backward compatibility with existing drivers method this
    857 * function calls the &drm_driver.load method after registering the device
    858 * nodes, creating race conditions. Usage of the &drm_driver.load methods is
    859 * therefore deprecated, drivers must perform all initialization before calling
    860 * drm_dev_register().
    861 *
    862 * RETURNS:
    863 * 0 on success, negative error code on failure.
    864 */
    865int drm_dev_register(struct drm_device *dev, unsigned long flags)
    866{
    867	const struct drm_driver *driver = dev->driver;
    868	int ret;
    869
    870	if (!driver->load)
    871		drm_mode_config_validate(dev);
    872
    873	WARN_ON(!dev->managed.final_kfree);
    874
    875	if (drm_dev_needs_global_mutex(dev))
    876		mutex_lock(&drm_global_mutex);
    877
    878	ret = drm_minor_register(dev, DRM_MINOR_RENDER);
    879	if (ret)
    880		goto err_minors;
    881
    882	ret = drm_minor_register(dev, DRM_MINOR_PRIMARY);
    883	if (ret)
    884		goto err_minors;
    885
    886	ret = create_compat_control_link(dev);
    887	if (ret)
    888		goto err_minors;
    889
    890	dev->registered = true;
    891
    892	if (dev->driver->load) {
    893		ret = dev->driver->load(dev, flags);
    894		if (ret)
    895			goto err_minors;
    896	}
    897
    898	if (drm_core_check_feature(dev, DRIVER_MODESET))
    899		drm_modeset_register_all(dev);
    900
    901	DRM_INFO("Initialized %s %d.%d.%d %s for %s on minor %d\n",
    902		 driver->name, driver->major, driver->minor,
    903		 driver->patchlevel, driver->date,
    904		 dev->dev ? dev_name(dev->dev) : "virtual device",
    905		 dev->primary->index);
    906
    907	goto out_unlock;
    908
    909err_minors:
    910	remove_compat_control_link(dev);
    911	drm_minor_unregister(dev, DRM_MINOR_PRIMARY);
    912	drm_minor_unregister(dev, DRM_MINOR_RENDER);
    913out_unlock:
    914	if (drm_dev_needs_global_mutex(dev))
    915		mutex_unlock(&drm_global_mutex);
    916	return ret;
    917}
    918EXPORT_SYMBOL(drm_dev_register);
    919
    920/**
    921 * drm_dev_unregister - Unregister DRM device
    922 * @dev: Device to unregister
    923 *
    924 * Unregister the DRM device from the system. This does the reverse of
    925 * drm_dev_register() but does not deallocate the device. The caller must call
    926 * drm_dev_put() to drop their final reference.
    927 *
    928 * A special form of unregistering for hotpluggable devices is drm_dev_unplug(),
    929 * which can be called while there are still open users of @dev.
    930 *
    931 * This should be called first in the device teardown code to make sure
    932 * userspace can't access the device instance any more.
    933 */
    934void drm_dev_unregister(struct drm_device *dev)
    935{
    936	if (drm_core_check_feature(dev, DRIVER_LEGACY))
    937		drm_lastclose(dev);
    938
    939	dev->registered = false;
    940
    941	drm_client_dev_unregister(dev);
    942
    943	if (drm_core_check_feature(dev, DRIVER_MODESET))
    944		drm_modeset_unregister_all(dev);
    945
    946	if (dev->driver->unload)
    947		dev->driver->unload(dev);
    948
    949	drm_legacy_pci_agp_destroy(dev);
    950	drm_legacy_rmmaps(dev);
    951
    952	remove_compat_control_link(dev);
    953	drm_minor_unregister(dev, DRM_MINOR_PRIMARY);
    954	drm_minor_unregister(dev, DRM_MINOR_RENDER);
    955}
    956EXPORT_SYMBOL(drm_dev_unregister);
    957
    958/**
    959 * drm_dev_set_unique - Set the unique name of a DRM device
    960 * @dev: device of which to set the unique name
    961 * @name: unique name
    962 *
    963 * Sets the unique name of a DRM device using the specified string. This is
    964 * already done by drm_dev_init(), drivers should only override the default
    965 * unique name for backwards compatibility reasons.
    966 *
    967 * Return: 0 on success or a negative error code on failure.
    968 */
    969int drm_dev_set_unique(struct drm_device *dev, const char *name)
    970{
    971	drmm_kfree(dev, dev->unique);
    972	dev->unique = drmm_kstrdup(dev, name, GFP_KERNEL);
    973
    974	return dev->unique ? 0 : -ENOMEM;
    975}
    976EXPORT_SYMBOL(drm_dev_set_unique);
    977
    978/*
    979 * DRM Core
    980 * The DRM core module initializes all global DRM objects and makes them
    981 * available to drivers. Once setup, drivers can probe their respective
    982 * devices.
    983 * Currently, core management includes:
    984 *  - The "DRM-Global" key/value database
    985 *  - Global ID management for connectors
    986 *  - DRM major number allocation
    987 *  - DRM minor management
    988 *  - DRM sysfs class
    989 *  - DRM debugfs root
    990 *
    991 * Furthermore, the DRM core provides dynamic char-dev lookups. For each
    992 * interface registered on a DRM device, you can request minor numbers from DRM
    993 * core. DRM core takes care of major-number management and char-dev
    994 * registration. A stub ->open() callback forwards any open() requests to the
    995 * registered minor.
    996 */
    997
    998static int drm_stub_open(struct inode *inode, struct file *filp)
    999{
   1000	const struct file_operations *new_fops;
   1001	struct drm_minor *minor;
   1002	int err;
   1003
   1004	DRM_DEBUG("\n");
   1005
   1006	minor = drm_minor_acquire(iminor(inode));
   1007	if (IS_ERR(minor))
   1008		return PTR_ERR(minor);
   1009
   1010	new_fops = fops_get(minor->dev->driver->fops);
   1011	if (!new_fops) {
   1012		err = -ENODEV;
   1013		goto out;
   1014	}
   1015
   1016	replace_fops(filp, new_fops);
   1017	if (filp->f_op->open)
   1018		err = filp->f_op->open(inode, filp);
   1019	else
   1020		err = 0;
   1021
   1022out:
   1023	drm_minor_release(minor);
   1024
   1025	return err;
   1026}
   1027
   1028static const struct file_operations drm_stub_fops = {
   1029	.owner = THIS_MODULE,
   1030	.open = drm_stub_open,
   1031	.llseek = noop_llseek,
   1032};
   1033
   1034static void drm_core_exit(void)
   1035{
   1036	drm_privacy_screen_lookup_exit();
   1037	unregister_chrdev(DRM_MAJOR, "drm");
   1038	debugfs_remove(drm_debugfs_root);
   1039	drm_sysfs_destroy();
   1040	idr_destroy(&drm_minors_idr);
   1041	drm_connector_ida_destroy();
   1042}
   1043
   1044static int __init drm_core_init(void)
   1045{
   1046	int ret;
   1047
   1048	drm_connector_ida_init();
   1049	idr_init(&drm_minors_idr);
   1050	drm_memcpy_init_early();
   1051
   1052	ret = drm_sysfs_init();
   1053	if (ret < 0) {
   1054		DRM_ERROR("Cannot create DRM class: %d\n", ret);
   1055		goto error;
   1056	}
   1057
   1058	drm_debugfs_root = debugfs_create_dir("dri", NULL);
   1059
   1060	ret = register_chrdev(DRM_MAJOR, "drm", &drm_stub_fops);
   1061	if (ret < 0)
   1062		goto error;
   1063
   1064	drm_privacy_screen_lookup_init();
   1065
   1066	drm_core_init_complete = true;
   1067
   1068	DRM_DEBUG("Initialized\n");
   1069	return 0;
   1070
   1071error:
   1072	drm_core_exit();
   1073	return ret;
   1074}
   1075
   1076module_init(drm_core_init);
   1077module_exit(drm_core_exit);