diff options
author | Jonathan Herman <hermanjl@cs.unc.edu> | 2013-01-17 16:15:55 -0500 |
---|---|---|
committer | Jonathan Herman <hermanjl@cs.unc.edu> | 2013-01-17 16:15:55 -0500 |
commit | 8dea78da5cee153b8af9c07a2745f6c55057fe12 (patch) | |
tree | a8f4d49d63b1ecc92f2fddceba0655b2472c5bd9 /drivers/gpu/drm/via | |
parent | 406089d01562f1e2bf9f089fd7637009ebaad589 (diff) |
Patched in Tegra support.
Diffstat (limited to 'drivers/gpu/drm/via')
-rw-r--r-- | drivers/gpu/drm/via/via_dma.c | 5 | ||||
-rw-r--r-- | drivers/gpu/drm/via/via_dmablit.c | 4 | ||||
-rw-r--r-- | drivers/gpu/drm/via/via_drv.c | 63 | ||||
-rw-r--r-- | drivers/gpu/drm/via/via_drv.h | 7 | ||||
-rw-r--r-- | drivers/gpu/drm/via/via_irq.c | 5 | ||||
-rw-r--r-- | drivers/gpu/drm/via/via_map.c | 15 | ||||
-rw-r--r-- | drivers/gpu/drm/via/via_mm.c | 152 | ||||
-rw-r--r-- | drivers/gpu/drm/via/via_verifier.c | 5 | ||||
-rw-r--r-- | drivers/gpu/drm/via/via_video.c | 4 |
9 files changed, 91 insertions, 169 deletions
diff --git a/drivers/gpu/drm/via/via_dma.c b/drivers/gpu/drm/via/via_dma.c index 13558f5a242..cc0ffa9abd0 100644 --- a/drivers/gpu/drm/via/via_dma.c +++ b/drivers/gpu/drm/via/via_dma.c | |||
@@ -34,8 +34,9 @@ | |||
34 | * Thomas Hellstrom. | 34 | * Thomas Hellstrom. |
35 | */ | 35 | */ |
36 | 36 | ||
37 | #include <drm/drmP.h> | 37 | #include "drmP.h" |
38 | #include <drm/via_drm.h> | 38 | #include "drm.h" |
39 | #include "via_drm.h" | ||
39 | #include "via_drv.h" | 40 | #include "via_drv.h" |
40 | #include "via_3d_reg.h" | 41 | #include "via_3d_reg.h" |
41 | 42 | ||
diff --git a/drivers/gpu/drm/via/via_dmablit.c b/drivers/gpu/drm/via/via_dmablit.c index 8b0f25904e6..3e038a394c5 100644 --- a/drivers/gpu/drm/via/via_dmablit.c +++ b/drivers/gpu/drm/via/via_dmablit.c | |||
@@ -34,8 +34,8 @@ | |||
34 | * the same DMA mappings? | 34 | * the same DMA mappings? |
35 | */ | 35 | */ |
36 | 36 | ||
37 | #include <drm/drmP.h> | 37 | #include "drmP.h" |
38 | #include <drm/via_drm.h> | 38 | #include "via_drm.h" |
39 | #include "via_drv.h" | 39 | #include "via_drv.h" |
40 | #include "via_dmablit.h" | 40 | #include "via_dmablit.h" |
41 | 41 | ||
diff --git a/drivers/gpu/drm/via/via_drv.c b/drivers/gpu/drm/via/via_drv.c index f4ae2032794..920a55214bc 100644 --- a/drivers/gpu/drm/via/via_drv.c +++ b/drivers/gpu/drm/via/via_drv.c | |||
@@ -22,64 +22,22 @@ | |||
22 | * DEALINGS IN THE SOFTWARE. | 22 | * DEALINGS IN THE SOFTWARE. |
23 | */ | 23 | */ |
24 | 24 | ||
25 | #include <linux/module.h> | 25 | #include "drmP.h" |
26 | 26 | #include "via_drm.h" | |
27 | #include <drm/drmP.h> | ||
28 | #include <drm/via_drm.h> | ||
29 | #include "via_drv.h" | 27 | #include "via_drv.h" |
30 | 28 | ||
31 | #include <drm/drm_pciids.h> | 29 | #include "drm_pciids.h" |
32 | |||
33 | static int via_driver_open(struct drm_device *dev, struct drm_file *file) | ||
34 | { | ||
35 | struct via_file_private *file_priv; | ||
36 | |||
37 | DRM_DEBUG_DRIVER("\n"); | ||
38 | file_priv = kmalloc(sizeof(*file_priv), GFP_KERNEL); | ||
39 | if (!file_priv) | ||
40 | return -ENOMEM; | ||
41 | |||
42 | file->driver_priv = file_priv; | ||
43 | |||
44 | INIT_LIST_HEAD(&file_priv->obj_list); | ||
45 | |||
46 | return 0; | ||
47 | } | ||
48 | |||
49 | void via_driver_postclose(struct drm_device *dev, struct drm_file *file) | ||
50 | { | ||
51 | struct via_file_private *file_priv = file->driver_priv; | ||
52 | |||
53 | kfree(file_priv); | ||
54 | } | ||
55 | 30 | ||
56 | static struct pci_device_id pciidlist[] = { | 31 | static struct pci_device_id pciidlist[] = { |
57 | viadrv_PCI_IDS | 32 | viadrv_PCI_IDS |
58 | }; | 33 | }; |
59 | 34 | ||
60 | static const struct file_operations via_driver_fops = { | ||
61 | .owner = THIS_MODULE, | ||
62 | .open = drm_open, | ||
63 | .release = drm_release, | ||
64 | .unlocked_ioctl = drm_ioctl, | ||
65 | .mmap = drm_mmap, | ||
66 | .poll = drm_poll, | ||
67 | .fasync = drm_fasync, | ||
68 | #ifdef CONFIG_COMPAT | ||
69 | .compat_ioctl = drm_compat_ioctl, | ||
70 | #endif | ||
71 | .llseek = noop_llseek, | ||
72 | }; | ||
73 | |||
74 | static struct drm_driver driver = { | 35 | static struct drm_driver driver = { |
75 | .driver_features = | 36 | .driver_features = |
76 | DRIVER_USE_AGP | DRIVER_USE_MTRR | DRIVER_HAVE_IRQ | | 37 | DRIVER_USE_AGP | DRIVER_USE_MTRR | DRIVER_HAVE_IRQ | |
77 | DRIVER_IRQ_SHARED, | 38 | DRIVER_IRQ_SHARED, |
78 | .load = via_driver_load, | 39 | .load = via_driver_load, |
79 | .unload = via_driver_unload, | 40 | .unload = via_driver_unload, |
80 | .open = via_driver_open, | ||
81 | .preclose = via_reclaim_buffers_locked, | ||
82 | .postclose = via_driver_postclose, | ||
83 | .context_dtor = via_final_context, | 41 | .context_dtor = via_final_context, |
84 | .get_vblank_counter = via_get_vblank_counter, | 42 | .get_vblank_counter = via_get_vblank_counter, |
85 | .enable_vblank = via_enable_vblank, | 43 | .enable_vblank = via_enable_vblank, |
@@ -89,9 +47,22 @@ static struct drm_driver driver = { | |||
89 | .irq_uninstall = via_driver_irq_uninstall, | 47 | .irq_uninstall = via_driver_irq_uninstall, |
90 | .irq_handler = via_driver_irq_handler, | 48 | .irq_handler = via_driver_irq_handler, |
91 | .dma_quiescent = via_driver_dma_quiescent, | 49 | .dma_quiescent = via_driver_dma_quiescent, |
50 | .reclaim_buffers = drm_core_reclaim_buffers, | ||
51 | .reclaim_buffers_locked = NULL, | ||
52 | .reclaim_buffers_idlelocked = via_reclaim_buffers_locked, | ||
92 | .lastclose = via_lastclose, | 53 | .lastclose = via_lastclose, |
93 | .ioctls = via_ioctls, | 54 | .ioctls = via_ioctls, |
94 | .fops = &via_driver_fops, | 55 | .fops = { |
56 | .owner = THIS_MODULE, | ||
57 | .open = drm_open, | ||
58 | .release = drm_release, | ||
59 | .unlocked_ioctl = drm_ioctl, | ||
60 | .mmap = drm_mmap, | ||
61 | .poll = drm_poll, | ||
62 | .fasync = drm_fasync, | ||
63 | .llseek = noop_llseek, | ||
64 | }, | ||
65 | |||
95 | .name = DRIVER_NAME, | 66 | .name = DRIVER_NAME, |
96 | .desc = DRIVER_DESC, | 67 | .desc = DRIVER_DESC, |
97 | .date = DRIVER_DATE, | 68 | .date = DRIVER_DATE, |
diff --git a/drivers/gpu/drm/via/via_drv.h b/drivers/gpu/drm/via/via_drv.h index 893a65090c3..9cf87d91232 100644 --- a/drivers/gpu/drm/via/via_drv.h +++ b/drivers/gpu/drm/via/via_drv.h | |||
@@ -24,7 +24,7 @@ | |||
24 | #ifndef _VIA_DRV_H_ | 24 | #ifndef _VIA_DRV_H_ |
25 | #define _VIA_DRV_H_ | 25 | #define _VIA_DRV_H_ |
26 | 26 | ||
27 | #include <drm/drm_mm.h> | 27 | #include "drm_sman.h" |
28 | #define DRIVER_AUTHOR "Various" | 28 | #define DRIVER_AUTHOR "Various" |
29 | 29 | ||
30 | #define DRIVER_NAME "via" | 30 | #define DRIVER_NAME "via" |
@@ -88,12 +88,9 @@ typedef struct drm_via_private { | |||
88 | uint32_t irq_pending_mask; | 88 | uint32_t irq_pending_mask; |
89 | int *irq_map; | 89 | int *irq_map; |
90 | unsigned int idle_fault; | 90 | unsigned int idle_fault; |
91 | struct drm_sman sman; | ||
91 | int vram_initialized; | 92 | int vram_initialized; |
92 | struct drm_mm vram_mm; | ||
93 | int agp_initialized; | 93 | int agp_initialized; |
94 | struct drm_mm agp_mm; | ||
95 | /** Mapping of userspace keys to mm objects */ | ||
96 | struct idr object_idr; | ||
97 | unsigned long vram_offset; | 94 | unsigned long vram_offset; |
98 | unsigned long agp_offset; | 95 | unsigned long agp_offset; |
99 | drm_via_blitq_t blit_queues[VIA_NUM_BLIT_ENGINES]; | 96 | drm_via_blitq_t blit_queues[VIA_NUM_BLIT_ENGINES]; |
diff --git a/drivers/gpu/drm/via/via_irq.c b/drivers/gpu/drm/via/via_irq.c index ac98964297c..d391f48ef87 100644 --- a/drivers/gpu/drm/via/via_irq.c +++ b/drivers/gpu/drm/via/via_irq.c | |||
@@ -35,8 +35,9 @@ | |||
35 | * The refresh rate is also calculated for video playback sync purposes. | 35 | * The refresh rate is also calculated for video playback sync purposes. |
36 | */ | 36 | */ |
37 | 37 | ||
38 | #include <drm/drmP.h> | 38 | #include "drmP.h" |
39 | #include <drm/via_drm.h> | 39 | #include "drm.h" |
40 | #include "via_drm.h" | ||
40 | #include "via_drv.h" | 41 | #include "via_drv.h" |
41 | 42 | ||
42 | #define VIA_REG_INTERRUPT 0x200 | 43 | #define VIA_REG_INTERRUPT 0x200 |
diff --git a/drivers/gpu/drm/via/via_map.c b/drivers/gpu/drm/via/via_map.c index c0f1cc7f5ca..6cca9a709f7 100644 --- a/drivers/gpu/drm/via/via_map.c +++ b/drivers/gpu/drm/via/via_map.c | |||
@@ -21,8 +21,8 @@ | |||
21 | * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER | 21 | * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER |
22 | * DEALINGS IN THE SOFTWARE. | 22 | * DEALINGS IN THE SOFTWARE. |
23 | */ | 23 | */ |
24 | #include <drm/drmP.h> | 24 | #include "drmP.h" |
25 | #include <drm/via_drm.h> | 25 | #include "via_drm.h" |
26 | #include "via_drv.h" | 26 | #include "via_drv.h" |
27 | 27 | ||
28 | static int via_do_init_map(struct drm_device *dev, drm_via_init_t *init) | 28 | static int via_do_init_map(struct drm_device *dev, drm_via_init_t *init) |
@@ -100,15 +100,19 @@ int via_driver_load(struct drm_device *dev, unsigned long chipset) | |||
100 | if (dev_priv == NULL) | 100 | if (dev_priv == NULL) |
101 | return -ENOMEM; | 101 | return -ENOMEM; |
102 | 102 | ||
103 | idr_init(&dev_priv->object_idr); | ||
104 | dev->dev_private = (void *)dev_priv; | 103 | dev->dev_private = (void *)dev_priv; |
105 | 104 | ||
106 | dev_priv->chipset = chipset; | 105 | dev_priv->chipset = chipset; |
107 | 106 | ||
108 | pci_set_master(dev->pdev); | 107 | ret = drm_sman_init(&dev_priv->sman, 2, 12, 8); |
108 | if (ret) { | ||
109 | kfree(dev_priv); | ||
110 | return ret; | ||
111 | } | ||
109 | 112 | ||
110 | ret = drm_vblank_init(dev, 1); | 113 | ret = drm_vblank_init(dev, 1); |
111 | if (ret) { | 114 | if (ret) { |
115 | drm_sman_takedown(&dev_priv->sman); | ||
112 | kfree(dev_priv); | 116 | kfree(dev_priv); |
113 | return ret; | 117 | return ret; |
114 | } | 118 | } |
@@ -120,8 +124,7 @@ int via_driver_unload(struct drm_device *dev) | |||
120 | { | 124 | { |
121 | drm_via_private_t *dev_priv = dev->dev_private; | 125 | drm_via_private_t *dev_priv = dev->dev_private; |
122 | 126 | ||
123 | idr_remove_all(&dev_priv->object_idr); | 127 | drm_sman_takedown(&dev_priv->sman); |
124 | idr_destroy(&dev_priv->object_idr); | ||
125 | 128 | ||
126 | kfree(dev_priv); | 129 | kfree(dev_priv); |
127 | 130 | ||
diff --git a/drivers/gpu/drm/via/via_mm.c b/drivers/gpu/drm/via/via_mm.c index 0d55432e02a..6cc2dadae3e 100644 --- a/drivers/gpu/drm/via/via_mm.c +++ b/drivers/gpu/drm/via/via_mm.c | |||
@@ -25,25 +25,29 @@ | |||
25 | * Authors: Thomas Hellström <thomas-at-tungstengraphics-dot-com> | 25 | * Authors: Thomas Hellström <thomas-at-tungstengraphics-dot-com> |
26 | */ | 26 | */ |
27 | 27 | ||
28 | #include <drm/drmP.h> | 28 | #include "drmP.h" |
29 | #include <drm/via_drm.h> | 29 | #include "via_drm.h" |
30 | #include "via_drv.h" | 30 | #include "via_drv.h" |
31 | #include "drm_sman.h" | ||
31 | 32 | ||
32 | #define VIA_MM_ALIGN_SHIFT 4 | 33 | #define VIA_MM_ALIGN_SHIFT 4 |
33 | #define VIA_MM_ALIGN_MASK ((1 << VIA_MM_ALIGN_SHIFT) - 1) | 34 | #define VIA_MM_ALIGN_MASK ((1 << VIA_MM_ALIGN_SHIFT) - 1) |
34 | 35 | ||
35 | struct via_memblock { | ||
36 | struct drm_mm_node mm_node; | ||
37 | struct list_head owner_list; | ||
38 | }; | ||
39 | |||
40 | int via_agp_init(struct drm_device *dev, void *data, struct drm_file *file_priv) | 36 | int via_agp_init(struct drm_device *dev, void *data, struct drm_file *file_priv) |
41 | { | 37 | { |
42 | drm_via_agp_t *agp = data; | 38 | drm_via_agp_t *agp = data; |
43 | drm_via_private_t *dev_priv = (drm_via_private_t *) dev->dev_private; | 39 | drm_via_private_t *dev_priv = (drm_via_private_t *) dev->dev_private; |
40 | int ret; | ||
44 | 41 | ||
45 | mutex_lock(&dev->struct_mutex); | 42 | mutex_lock(&dev->struct_mutex); |
46 | drm_mm_init(&dev_priv->agp_mm, 0, agp->size >> VIA_MM_ALIGN_SHIFT); | 43 | ret = drm_sman_set_range(&dev_priv->sman, VIA_MEM_AGP, 0, |
44 | agp->size >> VIA_MM_ALIGN_SHIFT); | ||
45 | |||
46 | if (ret) { | ||
47 | DRM_ERROR("AGP memory manager initialisation error\n"); | ||
48 | mutex_unlock(&dev->struct_mutex); | ||
49 | return ret; | ||
50 | } | ||
47 | 51 | ||
48 | dev_priv->agp_initialized = 1; | 52 | dev_priv->agp_initialized = 1; |
49 | dev_priv->agp_offset = agp->offset; | 53 | dev_priv->agp_offset = agp->offset; |
@@ -57,9 +61,17 @@ int via_fb_init(struct drm_device *dev, void *data, struct drm_file *file_priv) | |||
57 | { | 61 | { |
58 | drm_via_fb_t *fb = data; | 62 | drm_via_fb_t *fb = data; |
59 | drm_via_private_t *dev_priv = (drm_via_private_t *) dev->dev_private; | 63 | drm_via_private_t *dev_priv = (drm_via_private_t *) dev->dev_private; |
64 | int ret; | ||
60 | 65 | ||
61 | mutex_lock(&dev->struct_mutex); | 66 | mutex_lock(&dev->struct_mutex); |
62 | drm_mm_init(&dev_priv->vram_mm, 0, fb->size >> VIA_MM_ALIGN_SHIFT); | 67 | ret = drm_sman_set_range(&dev_priv->sman, VIA_MEM_VIDEO, 0, |
68 | fb->size >> VIA_MM_ALIGN_SHIFT); | ||
69 | |||
70 | if (ret) { | ||
71 | DRM_ERROR("VRAM memory manager initialisation error\n"); | ||
72 | mutex_unlock(&dev->struct_mutex); | ||
73 | return ret; | ||
74 | } | ||
63 | 75 | ||
64 | dev_priv->vram_initialized = 1; | 76 | dev_priv->vram_initialized = 1; |
65 | dev_priv->vram_offset = fb->offset; | 77 | dev_priv->vram_offset = fb->offset; |
@@ -96,25 +108,19 @@ void via_lastclose(struct drm_device *dev) | |||
96 | return; | 108 | return; |
97 | 109 | ||
98 | mutex_lock(&dev->struct_mutex); | 110 | mutex_lock(&dev->struct_mutex); |
99 | if (dev_priv->vram_initialized) { | 111 | drm_sman_cleanup(&dev_priv->sman); |
100 | drm_mm_takedown(&dev_priv->vram_mm); | 112 | dev_priv->vram_initialized = 0; |
101 | dev_priv->vram_initialized = 0; | 113 | dev_priv->agp_initialized = 0; |
102 | } | ||
103 | if (dev_priv->agp_initialized) { | ||
104 | drm_mm_takedown(&dev_priv->agp_mm); | ||
105 | dev_priv->agp_initialized = 0; | ||
106 | } | ||
107 | mutex_unlock(&dev->struct_mutex); | 114 | mutex_unlock(&dev->struct_mutex); |
108 | } | 115 | } |
109 | 116 | ||
110 | int via_mem_alloc(struct drm_device *dev, void *data, | 117 | int via_mem_alloc(struct drm_device *dev, void *data, |
111 | struct drm_file *file) | 118 | struct drm_file *file_priv) |
112 | { | 119 | { |
113 | drm_via_mem_t *mem = data; | 120 | drm_via_mem_t *mem = data; |
114 | int retval = 0, user_key; | 121 | int retval = 0; |
115 | struct via_memblock *item; | 122 | struct drm_memblock_item *item; |
116 | drm_via_private_t *dev_priv = (drm_via_private_t *) dev->dev_private; | 123 | drm_via_private_t *dev_priv = (drm_via_private_t *) dev->dev_private; |
117 | struct via_file_private *file_priv = file->driver_priv; | ||
118 | unsigned long tmpSize; | 124 | unsigned long tmpSize; |
119 | 125 | ||
120 | if (mem->type > VIA_MEM_AGP) { | 126 | if (mem->type > VIA_MEM_AGP) { |
@@ -130,57 +136,24 @@ int via_mem_alloc(struct drm_device *dev, void *data, | |||
130 | return -EINVAL; | 136 | return -EINVAL; |
131 | } | 137 | } |
132 | 138 | ||
133 | item = kzalloc(sizeof(*item), GFP_KERNEL); | ||
134 | if (!item) { | ||
135 | retval = -ENOMEM; | ||
136 | goto fail_alloc; | ||
137 | } | ||
138 | |||
139 | tmpSize = (mem->size + VIA_MM_ALIGN_MASK) >> VIA_MM_ALIGN_SHIFT; | 139 | tmpSize = (mem->size + VIA_MM_ALIGN_MASK) >> VIA_MM_ALIGN_SHIFT; |
140 | if (mem->type == VIA_MEM_AGP) | 140 | item = drm_sman_alloc(&dev_priv->sman, mem->type, tmpSize, 0, |
141 | retval = drm_mm_insert_node(&dev_priv->agp_mm, | 141 | (unsigned long)file_priv); |
142 | &item->mm_node, | 142 | mutex_unlock(&dev->struct_mutex); |
143 | tmpSize, 0); | 143 | if (item) { |
144 | else | 144 | mem->offset = ((mem->type == VIA_MEM_VIDEO) ? |
145 | retval = drm_mm_insert_node(&dev_priv->vram_mm, | 145 | dev_priv->vram_offset : dev_priv->agp_offset) + |
146 | &item->mm_node, | 146 | (item->mm-> |
147 | tmpSize, 0); | 147 | offset(item->mm, item->mm_info) << VIA_MM_ALIGN_SHIFT); |
148 | if (retval) | 148 | mem->index = item->user_hash.key; |
149 | goto fail_alloc; | 149 | } else { |
150 | 150 | mem->offset = 0; | |
151 | again: | 151 | mem->size = 0; |
152 | if (idr_pre_get(&dev_priv->object_idr, GFP_KERNEL) == 0) { | 152 | mem->index = 0; |
153 | DRM_DEBUG("Video memory allocation failed\n"); | ||
153 | retval = -ENOMEM; | 154 | retval = -ENOMEM; |
154 | goto fail_idr; | ||
155 | } | 155 | } |
156 | 156 | ||
157 | retval = idr_get_new_above(&dev_priv->object_idr, item, 1, &user_key); | ||
158 | if (retval == -EAGAIN) | ||
159 | goto again; | ||
160 | if (retval) | ||
161 | goto fail_idr; | ||
162 | |||
163 | list_add(&item->owner_list, &file_priv->obj_list); | ||
164 | mutex_unlock(&dev->struct_mutex); | ||
165 | |||
166 | mem->offset = ((mem->type == VIA_MEM_VIDEO) ? | ||
167 | dev_priv->vram_offset : dev_priv->agp_offset) + | ||
168 | ((item->mm_node.start) << VIA_MM_ALIGN_SHIFT); | ||
169 | mem->index = user_key; | ||
170 | |||
171 | return 0; | ||
172 | |||
173 | fail_idr: | ||
174 | drm_mm_remove_node(&item->mm_node); | ||
175 | fail_alloc: | ||
176 | kfree(item); | ||
177 | mutex_unlock(&dev->struct_mutex); | ||
178 | |||
179 | mem->offset = 0; | ||
180 | mem->size = 0; | ||
181 | mem->index = 0; | ||
182 | DRM_DEBUG("Video memory allocation failed\n"); | ||
183 | |||
184 | return retval; | 157 | return retval; |
185 | } | 158 | } |
186 | 159 | ||
@@ -188,57 +161,32 @@ int via_mem_free(struct drm_device *dev, void *data, struct drm_file *file_priv) | |||
188 | { | 161 | { |
189 | drm_via_private_t *dev_priv = dev->dev_private; | 162 | drm_via_private_t *dev_priv = dev->dev_private; |
190 | drm_via_mem_t *mem = data; | 163 | drm_via_mem_t *mem = data; |
191 | struct via_memblock *obj; | 164 | int ret; |
192 | 165 | ||
193 | mutex_lock(&dev->struct_mutex); | 166 | mutex_lock(&dev->struct_mutex); |
194 | obj = idr_find(&dev_priv->object_idr, mem->index); | 167 | ret = drm_sman_free_key(&dev_priv->sman, mem->index); |
195 | if (obj == NULL) { | ||
196 | mutex_unlock(&dev->struct_mutex); | ||
197 | return -EINVAL; | ||
198 | } | ||
199 | |||
200 | idr_remove(&dev_priv->object_idr, mem->index); | ||
201 | list_del(&obj->owner_list); | ||
202 | drm_mm_remove_node(&obj->mm_node); | ||
203 | kfree(obj); | ||
204 | mutex_unlock(&dev->struct_mutex); | 168 | mutex_unlock(&dev->struct_mutex); |
205 | |||
206 | DRM_DEBUG("free = 0x%lx\n", mem->index); | 169 | DRM_DEBUG("free = 0x%lx\n", mem->index); |
207 | 170 | ||
208 | return 0; | 171 | return ret; |
209 | } | 172 | } |
210 | 173 | ||
211 | 174 | ||
212 | void via_reclaim_buffers_locked(struct drm_device *dev, | 175 | void via_reclaim_buffers_locked(struct drm_device *dev, |
213 | struct drm_file *file) | 176 | struct drm_file *file_priv) |
214 | { | 177 | { |
215 | struct via_file_private *file_priv = file->driver_priv; | 178 | drm_via_private_t *dev_priv = dev->dev_private; |
216 | struct via_memblock *entry, *next; | ||
217 | |||
218 | if (!(file->minor->master && file->master->lock.hw_lock)) | ||
219 | return; | ||
220 | |||
221 | drm_idlelock_take(&file->master->lock); | ||
222 | 179 | ||
223 | mutex_lock(&dev->struct_mutex); | 180 | mutex_lock(&dev->struct_mutex); |
224 | if (list_empty(&file_priv->obj_list)) { | 181 | if (drm_sman_owner_clean(&dev_priv->sman, (unsigned long)file_priv)) { |
225 | mutex_unlock(&dev->struct_mutex); | 182 | mutex_unlock(&dev->struct_mutex); |
226 | drm_idlelock_release(&file->master->lock); | ||
227 | |||
228 | return; | 183 | return; |
229 | } | 184 | } |
230 | 185 | ||
231 | via_driver_dma_quiescent(dev); | 186 | if (dev->driver->dma_quiescent) |
187 | dev->driver->dma_quiescent(dev); | ||
232 | 188 | ||
233 | list_for_each_entry_safe(entry, next, &file_priv->obj_list, | 189 | drm_sman_owner_cleanup(&dev_priv->sman, (unsigned long)file_priv); |
234 | owner_list) { | ||
235 | list_del(&entry->owner_list); | ||
236 | drm_mm_remove_node(&entry->mm_node); | ||
237 | kfree(entry); | ||
238 | } | ||
239 | mutex_unlock(&dev->struct_mutex); | 190 | mutex_unlock(&dev->struct_mutex); |
240 | |||
241 | drm_idlelock_release(&file->master->lock); | ||
242 | |||
243 | return; | 191 | return; |
244 | } | 192 | } |
diff --git a/drivers/gpu/drm/via/via_verifier.c b/drivers/gpu/drm/via/via_verifier.c index 9dbc92bd151..48957b856d4 100644 --- a/drivers/gpu/drm/via/via_verifier.c +++ b/drivers/gpu/drm/via/via_verifier.c | |||
@@ -29,8 +29,9 @@ | |||
29 | */ | 29 | */ |
30 | 30 | ||
31 | #include "via_3d_reg.h" | 31 | #include "via_3d_reg.h" |
32 | #include <drm/drmP.h> | 32 | #include "drmP.h" |
33 | #include <drm/via_drm.h> | 33 | #include "drm.h" |
34 | #include "via_drm.h" | ||
34 | #include "via_verifier.h" | 35 | #include "via_verifier.h" |
35 | #include "via_drv.h" | 36 | #include "via_drv.h" |
36 | 37 | ||
diff --git a/drivers/gpu/drm/via/via_video.c b/drivers/gpu/drm/via/via_video.c index 6569efa2ff6..675d311f038 100644 --- a/drivers/gpu/drm/via/via_video.c +++ b/drivers/gpu/drm/via/via_video.c | |||
@@ -25,8 +25,8 @@ | |||
25 | * Video and XvMC related functions. | 25 | * Video and XvMC related functions. |
26 | */ | 26 | */ |
27 | 27 | ||
28 | #include <drm/drmP.h> | 28 | #include "drmP.h" |
29 | #include <drm/via_drm.h> | 29 | #include "via_drm.h" |
30 | #include "via_drv.h" | 30 | #include "via_drv.h" |
31 | 31 | ||
32 | void via_init_futex(drm_via_private_t *dev_priv) | 32 | void via_init_futex(drm_via_private_t *dev_priv) |