summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--linux-core/drmP.h4
-rw-r--r--linux-core/drm_bo.c14
-rw-r--r--linux-core/drm_compat.h4
-rw-r--r--linux-core/drm_vm.c6
-rw-r--r--linux-core/via_dmablit.c14
5 files changed, 36 insertions, 6 deletions
diff --git a/linux-core/drmP.h b/linux-core/drmP.h
index 77212d1c..ecb03181 100644
--- a/linux-core/drmP.h
+++ b/linux-core/drmP.h
@@ -794,7 +794,11 @@ typedef struct drm_buffer_manager{
struct list_head pinned[DRM_BO_MEM_TYPES];
struct list_head unfenced;
struct list_head ddestroy;
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,20)
struct work_struct wq;
+#else
+ struct delayed_work wq;
+#endif
uint32_t fence_type;
unsigned long cur_pages;
atomic_t count;
diff --git a/linux-core/drm_bo.c b/linux-core/drm_bo.c
index 65e24fb6..c0e431b4 100644
--- a/linux-core/drm_bo.c
+++ b/linux-core/drm_bo.c
@@ -352,10 +352,20 @@ static void drm_bo_delayed_delete(drm_device_t * dev, int remove_all)
}
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,20)
static void drm_bo_delayed_workqueue(void *data)
+#else
+static void drm_bo_delayed_workqueue(struct work_struct *work)
+#endif
{
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,20)
drm_device_t *dev = (drm_device_t *) data;
drm_buffer_manager_t *bm = &dev->bm;
+#else
+ drm_buffer_manager_t *bm = container_of(work, drm_buffer_manager_t, wq.work);
+ drm_device_t *dev = container_of(bm, drm_device_t, bm);
+#endif
+
DRM_DEBUG("Delayed delete Worker\n");
@@ -1904,7 +1914,11 @@ int drm_bo_driver_init(drm_device_t * dev)
if (ret)
goto out_unlock;
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,20)
INIT_WORK(&bm->wq, &drm_bo_delayed_workqueue, dev);
+#else
+ INIT_DELAYED_WORK(&bm->wq, drm_bo_delayed_workqueue);
+#endif
bm->initialized = 1;
bm->nice_mode = 1;
atomic_set(&bm->count, 0);
diff --git a/linux-core/drm_compat.h b/linux-core/drm_compat.h
index ddc255d3..3cb5d202 100644
--- a/linux-core/drm_compat.h
+++ b/linux-core/drm_compat.h
@@ -158,7 +158,7 @@ static __inline__ void *kcalloc(size_t nmemb, size_t size, int flags)
#include <linux/mm.h>
#include <asm/page.h>
-#if ((LINUX_VERSION_CODE < KERNEL_VERSION(2,6,20)) && \
+#if ((LINUX_VERSION_CODE < KERNEL_VERSION(2,6,21)) && \
(LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,15)))
#define DRM_ODD_MM_COMPAT
#endif
@@ -208,7 +208,7 @@ extern struct page *drm_vm_ttm_fault(struct vm_area_struct *vma,
#endif
-#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,20))
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,21))
/*
* Hopefully, real NOPAGE_RETRY functionality will be in 2.6.19.
diff --git a/linux-core/drm_vm.c b/linux-core/drm_vm.c
index 7ac7f3c0..24130162 100644
--- a/linux-core/drm_vm.c
+++ b/linux-core/drm_vm.c
@@ -159,9 +159,9 @@ static __inline__ struct page *drm_do_vm_nopage(struct vm_area_struct *vma,
}
#endif /* __OS_HAS_AGP */
-#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20) || \
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,21) || \
LINUX_VERSION_CODE < KERNEL_VERSION(2,6,15))
-#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20))
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,21))
static
#endif
struct page *drm_vm_ttm_fault(struct vm_area_struct *vma,
@@ -508,7 +508,7 @@ static struct vm_operations_struct drm_vm_sg_ops = {
.close = drm_vm_close,
};
-#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,20))
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,21))
static struct vm_operations_struct drm_vm_ttm_ops = {
.nopage = drm_vm_ttm_nopage,
.open = drm_vm_ttm_open_wrapper,
diff --git a/linux-core/via_dmablit.c b/linux-core/via_dmablit.c
index 1fb902cb..2f508374 100644
--- a/linux-core/via_dmablit.c
+++ b/linux-core/via_dmablit.c
@@ -498,10 +498,18 @@ via_dmablit_timer(unsigned long data)
static void
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,20)
via_dmablit_workqueue(void *data)
+#else
+via_dmablit_workqueue(struct work_struct *work)
+#endif
{
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,20)
drm_via_blitq_t *blitq = (drm_via_blitq_t *) data;
- drm_device_t *dev = blitq->dev;
+#else
+ drm_via_blitq_t *blitq = container_of(work, drm_via_blitq_t, wq);
+#endif
+ drm_device_t *dev = blitq->dev;
unsigned long irqsave;
drm_via_sg_info_t *cur_sg;
int cur_released;
@@ -569,7 +577,11 @@ via_init_dmablit(drm_device_t *dev)
DRM_INIT_WAITQUEUE(blitq->blit_queue + j);
}
DRM_INIT_WAITQUEUE(&blitq->busy_queue);
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,20)
INIT_WORK(&blitq->wq, via_dmablit_workqueue, blitq);
+#else
+ INIT_WORK(&blitq->wq, via_dmablit_workqueue);
+#endif
init_timer(&blitq->poll_timer);
blitq->poll_timer.function = &via_dmablit_timer;
blitq->poll_timer.data = (unsigned long) blitq;