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");

Reply via email to