aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/i810
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/drm/i810')
-rw-r--r--drivers/gpu/drm/i810/i810_dma.c19
-rw-r--r--drivers/gpu/drm/i810/i810_drv.c23
2 files changed, 15 insertions, 27 deletions
diff --git a/drivers/gpu/drm/i810/i810_dma.c b/drivers/gpu/drm/i810/i810_dma.c
index fb07e73581e8..8f371e8d630f 100644
--- a/drivers/gpu/drm/i810/i810_dma.c
+++ b/drivers/gpu/drm/i810/i810_dma.c
@@ -37,7 +37,6 @@
37#include <linux/interrupt.h> /* For task queue support */ 37#include <linux/interrupt.h> /* For task queue support */
38#include <linux/delay.h> 38#include <linux/delay.h>
39#include <linux/slab.h> 39#include <linux/slab.h>
40#include <linux/smp_lock.h>
41#include <linux/pagemap.h> 40#include <linux/pagemap.h>
42 41
43#define I810_BUF_FREE 2 42#define I810_BUF_FREE 2
@@ -94,7 +93,6 @@ static int i810_mmap_buffers(struct file *filp, struct vm_area_struct *vma)
94 struct drm_buf *buf; 93 struct drm_buf *buf;
95 drm_i810_buf_priv_t *buf_priv; 94 drm_i810_buf_priv_t *buf_priv;
96 95
97 lock_kernel();
98 dev = priv->minor->dev; 96 dev = priv->minor->dev;
99 dev_priv = dev->dev_private; 97 dev_priv = dev->dev_private;
100 buf = dev_priv->mmap_buffer; 98 buf = dev_priv->mmap_buffer;
@@ -104,7 +102,6 @@ static int i810_mmap_buffers(struct file *filp, struct vm_area_struct *vma)
104 vma->vm_file = filp; 102 vma->vm_file = filp;
105 103
106 buf_priv->currently_mapped = I810_BUF_MAPPED; 104 buf_priv->currently_mapped = I810_BUF_MAPPED;
107 unlock_kernel();
108 105
109 if (io_remap_pfn_range(vma, vma->vm_start, 106 if (io_remap_pfn_range(vma, vma->vm_start,
110 vma->vm_pgoff, 107 vma->vm_pgoff,
@@ -116,9 +113,10 @@ static int i810_mmap_buffers(struct file *filp, struct vm_area_struct *vma)
116static const struct file_operations i810_buffer_fops = { 113static const struct file_operations i810_buffer_fops = {
117 .open = drm_open, 114 .open = drm_open,
118 .release = drm_release, 115 .release = drm_release,
119 .unlocked_ioctl = i810_ioctl, 116 .unlocked_ioctl = drm_ioctl,
120 .mmap = i810_mmap_buffers, 117 .mmap = i810_mmap_buffers,
121 .fasync = drm_fasync, 118 .fasync = drm_fasync,
119 .llseek = noop_llseek,
122}; 120};
123 121
124static int i810_map_buffer(struct drm_buf *buf, struct drm_file *file_priv) 122static int i810_map_buffer(struct drm_buf *buf, struct drm_file *file_priv)
@@ -1241,19 +1239,6 @@ int i810_driver_dma_quiescent(struct drm_device *dev)
1241 return 0; 1239 return 0;
1242} 1240}
1243 1241
1244/*
1245 * call the drm_ioctl under the big kernel lock because
1246 * to lock against the i810_mmap_buffers function.
1247 */
1248long i810_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
1249{
1250 int ret;
1251 lock_kernel();
1252 ret = drm_ioctl(file, cmd, arg);
1253 unlock_kernel();
1254 return ret;
1255}
1256
1257struct drm_ioctl_desc i810_ioctls[] = { 1242struct drm_ioctl_desc i810_ioctls[] = {
1258 DRM_IOCTL_DEF_DRV(I810_INIT, i810_dma_init, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY|DRM_UNLOCKED), 1243 DRM_IOCTL_DEF_DRV(I810_INIT, i810_dma_init, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY|DRM_UNLOCKED),
1259 DRM_IOCTL_DEF_DRV(I810_VERTEX, i810_dma_vertex, DRM_AUTH|DRM_UNLOCKED), 1244 DRM_IOCTL_DEF_DRV(I810_VERTEX, i810_dma_vertex, DRM_AUTH|DRM_UNLOCKED),
diff --git a/drivers/gpu/drm/i810/i810_drv.c b/drivers/gpu/drm/i810/i810_drv.c
index b4250b2cac1f..6f98d059f68a 100644
--- a/drivers/gpu/drm/i810/i810_drv.c
+++ b/drivers/gpu/drm/i810/i810_drv.c
@@ -52,22 +52,16 @@ static struct drm_driver driver = {
52 .device_is_agp = i810_driver_device_is_agp, 52 .device_is_agp = i810_driver_device_is_agp,
53 .reclaim_buffers_locked = i810_driver_reclaim_buffers_locked, 53 .reclaim_buffers_locked = i810_driver_reclaim_buffers_locked,
54 .dma_quiescent = i810_driver_dma_quiescent, 54 .dma_quiescent = i810_driver_dma_quiescent,
55 .get_map_ofs = drm_core_get_map_ofs,
56 .get_reg_ofs = drm_core_get_reg_ofs,
57 .ioctls = i810_ioctls, 55 .ioctls = i810_ioctls,
58 .fops = { 56 .fops = {
59 .owner = THIS_MODULE, 57 .owner = THIS_MODULE,
60 .open = drm_open, 58 .open = drm_open,
61 .release = drm_release, 59 .release = drm_release,
62 .unlocked_ioctl = i810_ioctl, 60 .unlocked_ioctl = drm_ioctl,
63 .mmap = drm_mmap, 61 .mmap = drm_mmap,
64 .poll = drm_poll, 62 .poll = drm_poll,
65 .fasync = drm_fasync, 63 .fasync = drm_fasync,
66 }, 64 .llseek = noop_llseek,
67
68 .pci_driver = {
69 .name = DRIVER_NAME,
70 .id_table = pciidlist,
71 }, 65 },
72 66
73 .name = DRIVER_NAME, 67 .name = DRIVER_NAME,
@@ -78,15 +72,24 @@ static struct drm_driver driver = {
78 .patchlevel = DRIVER_PATCHLEVEL, 72 .patchlevel = DRIVER_PATCHLEVEL,
79}; 73};
80 74
75static struct pci_driver i810_pci_driver = {
76 .name = DRIVER_NAME,
77 .id_table = pciidlist,
78};
79
81static int __init i810_init(void) 80static int __init i810_init(void)
82{ 81{
82 if (num_possible_cpus() > 1) {
83 pr_err("drm/i810 does not support SMP\n");
84 return -EINVAL;
85 }
83 driver.num_ioctls = i810_max_ioctl; 86 driver.num_ioctls = i810_max_ioctl;
84 return drm_init(&driver); 87 return drm_pci_init(&driver, &i810_pci_driver);
85} 88}
86 89
87static void __exit i810_exit(void) 90static void __exit i810_exit(void)
88{ 91{
89 drm_exit(&driver); 92 drm_pci_exit(&driver, &i810_pci_driver);
90} 93}
91 94
92module_init(i810_init); 95module_init(i810_init);