Module Name: src
Committed By: riastradh
Date: Wed Jul 24 02:47:34 UTC 2013
Modified Files:
src/sys/external/bsd/drm2/dist/drm [riastradh-drm2]: drm_bufs.c
Log Message:
For _DRM_CONSISTENT maps, hang the dmah on the drm_local_map.
The way the Linux code does it is a bookkeeping kludge that falls
down when we want to maintain more than just the PCI bus address, as
drm mmap will want in order to avoid vtophys.
To generate a diff of this commit:
cvs rdiff -u -r1.1.1.1.2.9 -r1.1.1.1.2.10 \
src/sys/external/bsd/drm2/dist/drm/drm_bufs.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/external/bsd/drm2/dist/drm/drm_bufs.c
diff -u src/sys/external/bsd/drm2/dist/drm/drm_bufs.c:1.1.1.1.2.9 src/sys/external/bsd/drm2/dist/drm/drm_bufs.c:1.1.1.1.2.10
--- src/sys/external/bsd/drm2/dist/drm/drm_bufs.c:1.1.1.1.2.9 Wed Jul 24 02:06:53 2013
+++ src/sys/external/bsd/drm2/dist/drm/drm_bufs.c Wed Jul 24 02:47:34 2013
@@ -331,7 +331,11 @@ static int drm_addmap_core(struct drm_de
}
map->handle = dmah->vaddr;
map->offset = (unsigned long)dmah->busaddr;
+#ifdef __NetBSD__
+ map->lm_data.dmah = dmah;
+#else
kfree(dmah);
+#endif
break;
default:
kfree(map);
@@ -451,7 +455,9 @@ int drm_addmap_ioctl(struct drm_device *
int drm_rmmap_locked(struct drm_device *dev, struct drm_local_map *map)
{
struct drm_map_list *r_list = NULL, *list_t;
+#ifndef __NetBSD__
drm_dma_handle_t dmah;
+#endif
int found = 0;
struct drm_master *master;
@@ -505,10 +511,14 @@ int drm_rmmap_locked(struct drm_device *
case _DRM_SCATTER_GATHER:
break;
case _DRM_CONSISTENT:
+#ifdef __NetBSD__
+ drm_pci_free(dev, map->lm_data.dmah);
+#else
dmah.vaddr = map->handle;
dmah.busaddr = map->offset;
dmah.size = map->size;
__drm_pci_free(dev, &dmah);
+#endif
break;
case _DRM_GEM:
DRM_ERROR("tried to rmmap GEM object\n");