| 1 |
diff --git a/drivers/gpu/drm/drm_gem.c b/drivers/gpu/drm/drm_gem.c
|
| 2 |
index 4984aa8..ae52edc 100644
|
| 3 |
--- a/drivers/gpu/drm/drm_gem.c
|
| 4 |
+++ b/drivers/gpu/drm/drm_gem.c
|
| 5 |
@@ -142,6 +142,9 @@ drm_gem_object_alloc(struct drm_device *dev, size_t size)
|
| 6 |
return NULL;
|
| 7 |
}
|
| 8 |
|
| 9 |
+ if (dev->gem_flags)
|
| 10 |
+ mapping_set_gfp_mask(obj->filp->f_mapping, dev->gem_flags);
|
| 11 |
+
|
| 12 |
kref_init(&obj->refcount);
|
| 13 |
kref_init(&obj->handlecount);
|
| 14 |
obj->size = size;
|
| 15 |
diff --git a/drivers/gpu/drm/i915/i915_dma.c b/drivers/gpu/drm/i915/i915_dma.c
|
| 16 |
index 8161343..049fc3f 100644
|
| 17 |
--- a/drivers/gpu/drm/i915/i915_dma.c
|
| 18 |
+++ b/drivers/gpu/drm/i915/i915_dma.c
|
| 19 |
@@ -1145,12 +1145,12 @@ int i915_driver_load(struct drm_device *dev, unsigned long flags)
|
| 20 |
}
|
| 21 |
|
| 22 |
#ifdef CONFIG_HIGHMEM64G
|
| 23 |
- /* don't enable GEM on PAE - needs agp + set_memory_* interface fixes */
|
| 24 |
- dev_priv->has_gem = 0;
|
| 25 |
-#else
|
| 26 |
+ /* set default allocation flags */
|
| 27 |
+ dev->gem_flags = GFP_USER | GFP_DMA32;
|
| 28 |
+#endif
|
| 29 |
+
|
| 30 |
/* enable GEM by default, except on I8xx */
|
| 31 |
dev_priv->has_gem = !IS_I8XX(dev) ? 1 : 0;
|
| 32 |
-#endif
|
| 33 |
|
| 34 |
dev->driver->get_vblank_counter = i915_get_vblank_counter;
|
| 35 |
if (IS_GM45(dev))
|
| 36 |
diff --git a/include/drm/drmP.h b/include/drm/drmP.h
|
| 37 |
index 04fbd1e..018534b 100644
|
| 38 |
--- a/include/drm/drmP.h
|
| 39 |
+++ b/include/drm/drmP.h
|
| 40 |
@@ -1043,6 +1043,7 @@ struct drm_device {
|
| 41 |
uint32_t gtt_total;
|
| 42 |
uint32_t invalidate_domains; /* domains pending invalidation */
|
| 43 |
uint32_t flush_domains; /* domains pending flush */
|
| 44 |
+ gfp_t gem_flags; /* object allocation flags */
|
| 45 |
/*@} */
|
| 46 |
};
|
| 47 |
|
| 48 |
diff --git a/mm/shmem.c b/mm/shmem.c
|
| 49 |
index 4103a23..515bb1b 100644
|
| 50 |
--- a/mm/shmem.c
|
| 51 |
+++ b/mm/shmem.c
|
| 52 |
@@ -1226,7 +1226,7 @@ repeat:
|
| 53 |
* Try to preload while we can wait, to not make a habit of
|
| 54 |
* draining atomic reserves; but don't latch on to this cpu.
|
| 55 |
*/
|
| 56 |
- error = radix_tree_preload(gfp & ~__GFP_HIGHMEM);
|
| 57 |
+ error = radix_tree_preload(gfp & ~(__GFP_HIGHMEM|__GFP_DMA32));
|
| 58 |
if (error)
|
| 59 |
goto failed;
|
| 60 |
radix_tree_preload_end();
|