patch-2.4.10 linux/drivers/char/drm/drm_scatter.h
Next file: linux/drivers/char/drm/drm_vm.h
Previous file: linux/drivers/char/drm/drm_ioctl.h
Back to the patch index
Back to the overall index
- Lines: 57
- Date:
Sun Sep 23 10:31:41 2001
- Orig file:
v2.4.9/linux/drivers/char/drm/drm_scatter.h
- Orig date:
Mon Aug 27 12:41:40 2001
diff -u --recursive --new-file v2.4.9/linux/drivers/char/drm/drm_scatter.h linux/drivers/char/drm/drm_scatter.h
@@ -47,12 +47,15 @@
vfree( entry->virtual );
+ DRM(free)( entry->busaddr,
+ entry->pages * sizeof(*entry->busaddr),
+ DRM_MEM_PAGES );
DRM(free)( entry->pagelist,
- entry->pages * sizeof(*entry->pagelist),
- DRM_MEM_PAGES );
+ entry->pages * sizeof(*entry->pagelist),
+ DRM_MEM_PAGES );
DRM(free)( entry,
- sizeof(*entry),
- DRM_MEM_SGLISTS );
+ sizeof(*entry),
+ DRM_MEM_SGLISTS );
}
int DRM(sg_alloc)( struct inode *inode, struct file *filp,
@@ -93,16 +96,31 @@
DRM(free)( entry, sizeof(*entry), DRM_MEM_SGLISTS );
return -ENOMEM;
}
- memset(entry->pagelist, 0, pages * sizeof(*entry->pagelist));
+
+ entry->busaddr = DRM(alloc)( pages * sizeof(*entry->busaddr),
+ DRM_MEM_PAGES );
+ if ( !entry->busaddr ) {
+ DRM(free)( entry->pagelist,
+ entry->pages * sizeof(*entry->pagelist),
+ DRM_MEM_PAGES );
+ DRM(free)( entry,
+ sizeof(*entry),
+ DRM_MEM_SGLISTS );
+ return -ENOMEM;
+ }
+ memset( (void *)entry->busaddr, 0, pages * sizeof(*entry->busaddr) );
entry->virtual = vmalloc_32( pages << PAGE_SHIFT );
if ( !entry->virtual ) {
+ DRM(free)( entry->busaddr,
+ entry->pages * sizeof(*entry->busaddr),
+ DRM_MEM_PAGES );
DRM(free)( entry->pagelist,
- entry->pages * sizeof(*entry->pagelist),
- DRM_MEM_PAGES );
+ entry->pages * sizeof(*entry->pagelist),
+ DRM_MEM_PAGES );
DRM(free)( entry,
- sizeof(*entry),
- DRM_MEM_SGLISTS );
+ sizeof(*entry),
+ DRM_MEM_SGLISTS );
return -ENOMEM;
}
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)