Patch so that drivers compile under 2.5.x kernel :
--
Zilvinas Valinskas
--- drm_drv.h Mon May 13 01:23:49 2002
+++ ../drm/drm_drv.h Sat May 4 15:22:30 2002
@@ -705,7 +705,7 @@
int i;
for (i = 0; i < DRM(numdevs); i++) {
- if (MINOR(inode->i_rdev) == DRM(minor)[i]) {
+ if (minor(inode->i_rdev) == DRM(minor)[i]) {
dev = &(DRM(device)[i]);
break;
}
--- drm_fops.h Mon May 13 01:23:49 2002
+++ ../drm/drm_fops.h Sat May 4 15:23:25 2002
@@ -38,13 +38,13 @@
int DRM(open_helper)(struct inode *inode, struct file *filp, drm_device_t *dev)
{
- kdev_t minor = MINOR(inode->i_rdev);
+ kdev_t minor = inode->i_rdev;
drm_file_t *priv;
if (filp->f_flags & O_EXCL) return -EBUSY; /* No exclusive opens */
if (!DRM(cpu_valid)()) return -EINVAL;
- DRM_DEBUG("pid = %d, minor = %d\n", current->pid, minor);
+ DRM_DEBUG("pid = %d, minor = %d\n", current->pid, minor(minor));
priv = DRM(alloc)(sizeof(*priv), DRM_MEM_FILES);
if(!priv) return -ENOMEM;
@@ -53,7 +53,7 @@
filp->private_data = priv;
priv->uid = current->euid;
priv->pid = current->pid;
- priv->minor = minor;
+ priv->minor = minor(minor);
priv->dev = dev;
priv->ioctl_count = 0;
priv->authenticated = capable(CAP_SYS_ADMIN);
--- drm_scatter.h Mon May 13 01:23:49 2002
+++ ../drm/drm_scatter.h Sat May 4 15:43:24 2002
@@ -68,7 +68,7 @@
unsigned long pages, i, j;
pgd_t *pgd;
pmd_t *pmd;
- pte_t *pte;
+ pte_t *pte, pte_entry;
DRM_DEBUG( "%s\n", __FUNCTION__ );
@@ -145,11 +145,16 @@
if ( !pmd_present( *pmd ) )
goto failed;
- pte = pte_offset( pmd, i );
- if ( !pte_present( *pte ) )
+ preempt_disable();
+ pte = pte_offset_map( pmd, i );
+ pte_entry = *pte;
+ pte_unmap(pte);
+ preempt_enable();
+
+ if (!pte_present(pte_entry))
goto failed;
- entry->pagelist[j] = pte_page( *pte );
+ entry->pagelist[j] = pte_page(pte_entry);
SetPageReserved( entry->pagelist[j] );
}
--- drm_stub.h Mon May 13 01:23:49 2002
+++ ../drm/drm_stub.h Sat May 4 15:25:18 2002
@@ -49,7 +49,7 @@
static int DRM(stub_open)(struct inode *inode, struct file *filp)
{
- int minor = MINOR(inode->i_rdev);
+ int minor = minor(inode->i_rdev);
int err = -ENODEV;
struct file_operations *old_fops;
--- drm_vm.h Mon May 13 01:23:49 2002
+++ ../drm/drm_vm.h Sat May 4 15:39:28 2002
@@ -132,7 +132,7 @@
unsigned long i;
pgd_t *pgd;
pmd_t *pmd;
- pte_t *pte;
+ pte_t *pte, entry;
struct page *page;
if (address > vma->vm_end) return NOPAGE_SIGBUS; /* Disallow mremap */
@@ -144,17 +144,28 @@
* they need to be virtually contiguous in kernel space.
*/
pgd = pgd_offset_k( i );
- if( !pgd_present( *pgd ) ) return NOPAGE_OOM;
+ if (!pgd_present(*pgd))
+ goto oom;
pmd = pmd_offset( pgd, i );
- if( !pmd_present( *pmd ) ) return NOPAGE_OOM;
- pte = pte_offset( pmd, i );
- if( !pte_present( *pte ) ) return NOPAGE_OOM;
+ if (!pmd_present(*pmd ))
+ goto oom;
+
+ preempt_disable();
+ pte = pte_offset_map(pmd, i);
+ entry = *pte;
+ pte_unmap(pte);
+ preempt_enable();
- page = pte_page(*pte);
+ if (!pte_present(entry))
+ goto oom;
+
+ page = pte_page(entry);
get_page(page);
DRM_DEBUG("shm_nopage 0x%lx\n", address);
return page;
+oom:
+ return NOPAGE_OOM;
}
/* Special close routine which deletes map information if we are the last
@@ -462,12 +473,12 @@
}
offset = DRIVER_GET_REG_OFS();
#ifdef __sparc__
- if (io_remap_page_range(vma->vm_start,
+ if (io_remap_page_range(vma,vma->vm_start,
VM_OFFSET(vma) + offset,
vma->vm_end - vma->vm_start,
vma->vm_page_prot, 0))
#else
- if (remap_page_range(vma->vm_start,
+ if (remap_page_range(vma,vma->vm_start,
VM_OFFSET(vma) + offset,
vma->vm_end - vma->vm_start,
vma->vm_page_prot))
--- i810_dma.c Mon May 13 01:23:49 2002
+++ ../drm/i810_dma.c Mon May 13 20:47:19 2002
@@ -157,7 +157,7 @@
buf_priv->currently_mapped = I810_BUF_MAPPED;
unlock_kernel();
- if (remap_page_range(vma->vm_start,
+ if (remap_page_range(vma,vma->vm_start,
VM_OFFSET(vma),
vma->vm_end - vma->vm_start,
vma->vm_page_prot)) return -EAGAIN;