|
@@ -363,11 +363,31 @@ int amdgpu_bo_create_restricted(struct amdgpu_device *adev,
|
|
|
|
|
|
bo->flags = flags;
|
|
|
|
|
|
+#ifdef CONFIG_X86_32
|
|
|
+ /* XXX: Write-combined CPU mappings of GTT seem broken on 32-bit
|
|
|
+ * See https://bugs.freedesktop.org/show_bug.cgi?id=84627
|
|
|
+ */
|
|
|
+ bo->flags &= ~AMDGPU_GEM_CREATE_CPU_GTT_USWC;
|
|
|
+#elif defined(CONFIG_X86) && !defined(CONFIG_X86_PAT)
|
|
|
+ /* Don't try to enable write-combining when it can't work, or things
|
|
|
+ * may be slow
|
|
|
+ * See https://bugs.freedesktop.org/show_bug.cgi?id=88758
|
|
|
+ */
|
|
|
+
|
|
|
+#warning Please enable CONFIG_MTRR and CONFIG_X86_PAT for better performance \
|
|
|
+ thanks to write-combining
|
|
|
+
|
|
|
+ if (bo->flags & AMDGPU_GEM_CREATE_CPU_GTT_USWC)
|
|
|
+ DRM_INFO_ONCE("Please enable CONFIG_MTRR and CONFIG_X86_PAT for "
|
|
|
+ "better performance thanks to write-combining\n");
|
|
|
+ bo->flags &= ~AMDGPU_GEM_CREATE_CPU_GTT_USWC;
|
|
|
+#else
|
|
|
/* For architectures that don't support WC memory,
|
|
|
* mask out the WC flag from the BO
|
|
|
*/
|
|
|
if (!drm_arch_can_wc_memory())
|
|
|
bo->flags &= ~AMDGPU_GEM_CREATE_CPU_GTT_USWC;
|
|
|
+#endif
|
|
|
|
|
|
amdgpu_fill_placement_to_bo(bo, placement);
|
|
|
/* Kernel allocation are uninterruptible */
|