diff options
Diffstat (limited to 'drivers/gpu/drm/drm_drv.c')
-rw-r--r-- | drivers/gpu/drm/drm_drv.c | 40 |
1 files changed, 10 insertions, 30 deletions
diff --git a/drivers/gpu/drm/drm_drv.c b/drivers/gpu/drm/drm_drv.c index 3242e208c0d0..bc3da32d4585 100644 --- a/drivers/gpu/drm/drm_drv.c +++ b/drivers/gpu/drm/drm_drv.c | |||
@@ -35,32 +35,20 @@ | |||
35 | #include <drm/drmP.h> | 35 | #include <drm/drmP.h> |
36 | #include <drm/drm_core.h> | 36 | #include <drm/drm_core.h> |
37 | #include "drm_legacy.h" | 37 | #include "drm_legacy.h" |
38 | #include "drm_internal.h" | ||
38 | 39 | ||
39 | unsigned int drm_debug = 0; /* 1 to enable debug output */ | 40 | unsigned int drm_debug = 0; /* 1 to enable debug output */ |
40 | EXPORT_SYMBOL(drm_debug); | 41 | EXPORT_SYMBOL(drm_debug); |
41 | 42 | ||
42 | unsigned int drm_vblank_offdelay = 5000; /* Default to 5000 msecs. */ | ||
43 | |||
44 | unsigned int drm_timestamp_precision = 20; /* Default to 20 usecs. */ | ||
45 | |||
46 | /* | ||
47 | * Default to use monotonic timestamps for wait-for-vblank and page-flip | ||
48 | * complete events. | ||
49 | */ | ||
50 | unsigned int drm_timestamp_monotonic = 1; | ||
51 | |||
52 | MODULE_AUTHOR(CORE_AUTHOR); | 43 | MODULE_AUTHOR(CORE_AUTHOR); |
53 | MODULE_DESCRIPTION(CORE_DESC); | 44 | MODULE_DESCRIPTION(CORE_DESC); |
54 | MODULE_LICENSE("GPL and additional rights"); | 45 | MODULE_LICENSE("GPL and additional rights"); |
55 | MODULE_PARM_DESC(debug, "Enable debug output"); | 46 | MODULE_PARM_DESC(debug, "Enable debug output"); |
56 | MODULE_PARM_DESC(vblankoffdelay, "Delay until vblank irq auto-disable [msecs]"); | 47 | MODULE_PARM_DESC(vblankoffdelay, "Delay until vblank irq auto-disable [msecs] (0: never disable, <0: disable immediately)"); |
57 | MODULE_PARM_DESC(timestamp_precision_usec, "Max. error on timestamps [usecs]"); | 48 | MODULE_PARM_DESC(timestamp_precision_usec, "Max. error on timestamps [usecs]"); |
58 | MODULE_PARM_DESC(timestamp_monotonic, "Use monotonic timestamps"); | 49 | MODULE_PARM_DESC(timestamp_monotonic, "Use monotonic timestamps"); |
59 | 50 | ||
60 | module_param_named(debug, drm_debug, int, 0600); | 51 | module_param_named(debug, drm_debug, int, 0600); |
61 | module_param_named(vblankoffdelay, drm_vblank_offdelay, int, 0600); | ||
62 | module_param_named(timestamp_precision_usec, drm_timestamp_precision, int, 0600); | ||
63 | module_param_named(timestamp_monotonic, drm_timestamp_monotonic, int, 0600); | ||
64 | 52 | ||
65 | static DEFINE_SPINLOCK(drm_minor_lock); | 53 | static DEFINE_SPINLOCK(drm_minor_lock); |
66 | static struct idr drm_minors_idr; | 54 | static struct idr drm_minors_idr; |
@@ -68,22 +56,19 @@ static struct idr drm_minors_idr; | |||
68 | struct class *drm_class; | 56 | struct class *drm_class; |
69 | static struct dentry *drm_debugfs_root; | 57 | static struct dentry *drm_debugfs_root; |
70 | 58 | ||
71 | int drm_err(const char *func, const char *format, ...) | 59 | void drm_err(const char *func, const char *format, ...) |
72 | { | 60 | { |
73 | struct va_format vaf; | 61 | struct va_format vaf; |
74 | va_list args; | 62 | va_list args; |
75 | int r; | ||
76 | 63 | ||
77 | va_start(args, format); | 64 | va_start(args, format); |
78 | 65 | ||
79 | vaf.fmt = format; | 66 | vaf.fmt = format; |
80 | vaf.va = &args; | 67 | vaf.va = &args; |
81 | 68 | ||
82 | r = printk(KERN_ERR "[" DRM_NAME ":%s] *ERROR* %pV", func, &vaf); | 69 | printk(KERN_ERR "[" DRM_NAME ":%s] *ERROR* %pV", func, &vaf); |
83 | 70 | ||
84 | va_end(args); | 71 | va_end(args); |
85 | |||
86 | return r; | ||
87 | } | 72 | } |
88 | EXPORT_SYMBOL(drm_err); | 73 | EXPORT_SYMBOL(drm_err); |
89 | 74 | ||
@@ -102,6 +87,8 @@ void drm_ut_debug_printk(const char *function_name, const char *format, ...) | |||
102 | } | 87 | } |
103 | EXPORT_SYMBOL(drm_ut_debug_printk); | 88 | EXPORT_SYMBOL(drm_ut_debug_printk); |
104 | 89 | ||
90 | #define DRM_MAGIC_HASH_ORDER 4 /**< Size of key hash table. Must be power of 2. */ | ||
91 | |||
105 | struct drm_master *drm_master_create(struct drm_minor *minor) | 92 | struct drm_master *drm_master_create(struct drm_minor *minor) |
106 | { | 93 | { |
107 | struct drm_master *master; | 94 | struct drm_master *master; |
@@ -133,7 +120,6 @@ EXPORT_SYMBOL(drm_master_get); | |||
133 | static void drm_master_destroy(struct kref *kref) | 120 | static void drm_master_destroy(struct kref *kref) |
134 | { | 121 | { |
135 | struct drm_master *master = container_of(kref, struct drm_master, refcount); | 122 | struct drm_master *master = container_of(kref, struct drm_master, refcount); |
136 | struct drm_magic_entry *pt, *next; | ||
137 | struct drm_device *dev = master->minor->dev; | 123 | struct drm_device *dev = master->minor->dev; |
138 | struct drm_map_list *r_list, *list_temp; | 124 | struct drm_map_list *r_list, *list_temp; |
139 | 125 | ||
@@ -143,7 +129,7 @@ static void drm_master_destroy(struct kref *kref) | |||
143 | 129 | ||
144 | list_for_each_entry_safe(r_list, list_temp, &dev->maplist, head) { | 130 | list_for_each_entry_safe(r_list, list_temp, &dev->maplist, head) { |
145 | if (r_list->master == master) { | 131 | if (r_list->master == master) { |
146 | drm_rmmap_locked(dev, r_list->map); | 132 | drm_legacy_rmmap_locked(dev, r_list->map); |
147 | r_list = NULL; | 133 | r_list = NULL; |
148 | } | 134 | } |
149 | } | 135 | } |
@@ -154,12 +140,6 @@ static void drm_master_destroy(struct kref *kref) | |||
154 | master->unique_len = 0; | 140 | master->unique_len = 0; |
155 | } | 141 | } |
156 | 142 | ||
157 | list_for_each_entry_safe(pt, next, &master->magicfree, head) { | ||
158 | list_del(&pt->head); | ||
159 | drm_ht_remove_item(&master->magiclist, &pt->hash_item); | ||
160 | kfree(pt); | ||
161 | } | ||
162 | |||
163 | drm_ht_remove(&master->magiclist); | 143 | drm_ht_remove(&master->magiclist); |
164 | 144 | ||
165 | mutex_unlock(&dev->struct_mutex); | 145 | mutex_unlock(&dev->struct_mutex); |
@@ -615,7 +595,7 @@ struct drm_device *drm_dev_alloc(struct drm_driver *driver, | |||
615 | goto err_ht; | 595 | goto err_ht; |
616 | } | 596 | } |
617 | 597 | ||
618 | if (driver->driver_features & DRIVER_GEM) { | 598 | if (drm_core_check_feature(dev, DRIVER_GEM)) { |
619 | ret = drm_gem_init(dev); | 599 | ret = drm_gem_init(dev); |
620 | if (ret) { | 600 | if (ret) { |
621 | DRM_ERROR("Cannot initialize graphics execution manager (GEM)\n"); | 601 | DRM_ERROR("Cannot initialize graphics execution manager (GEM)\n"); |
@@ -645,7 +625,7 @@ static void drm_dev_release(struct kref *ref) | |||
645 | { | 625 | { |
646 | struct drm_device *dev = container_of(ref, struct drm_device, ref); | 626 | struct drm_device *dev = container_of(ref, struct drm_device, ref); |
647 | 627 | ||
648 | if (dev->driver->driver_features & DRIVER_GEM) | 628 | if (drm_core_check_feature(dev, DRIVER_GEM)) |
649 | drm_gem_destroy(dev); | 629 | drm_gem_destroy(dev); |
650 | 630 | ||
651 | drm_legacy_ctxbitmap_cleanup(dev); | 631 | drm_legacy_ctxbitmap_cleanup(dev); |
@@ -779,7 +759,7 @@ void drm_dev_unregister(struct drm_device *dev) | |||
779 | drm_vblank_cleanup(dev); | 759 | drm_vblank_cleanup(dev); |
780 | 760 | ||
781 | list_for_each_entry_safe(r_list, list_temp, &dev->maplist, head) | 761 | list_for_each_entry_safe(r_list, list_temp, &dev->maplist, head) |
782 | drm_rmmap(dev, r_list->map); | 762 | drm_legacy_rmmap(dev, r_list->map); |
783 | 763 | ||
784 | drm_minor_unregister(dev, DRM_MINOR_LEGACY); | 764 | drm_minor_unregister(dev, DRM_MINOR_LEGACY); |
785 | drm_minor_unregister(dev, DRM_MINOR_RENDER); | 765 | drm_minor_unregister(dev, DRM_MINOR_RENDER); |