[RFC PATCH 140/162] drm/i915: window_blt_copy is used for swapin and swapout
Matthew Auld
matthew.auld at intel.com
Fri Nov 27 12:06:56 UTC 2020
From: Ramalingam C <ramalingam.c at intel.com>
window_blt_copy feature is used for swapin and swapout based on the i915
module parameter called enable_eviction.
Signed-off-by: Ramalingam C <ramalingam.c at intel.com>
Cc: Matthew Auld <matthew.auld at intel.com>
Cc: CQ Tang <cq.tang at intel.com>
---
drivers/gpu/drm/i915/gem/i915_gem_region.c | 14 ++++++++++----
drivers/gpu/drm/i915/i915_drv.c | 4 ++--
drivers/gpu/drm/i915/i915_params.c | 6 ++++--
drivers/gpu/drm/i915/i915_params.h | 2 +-
4 files changed, 17 insertions(+), 9 deletions(-)
diff --git a/drivers/gpu/drm/i915/gem/i915_gem_region.c b/drivers/gpu/drm/i915/gem/i915_gem_region.c
index 4fab9f6b4bee..f9ff0aa31752 100644
--- a/drivers/gpu/drm/i915/gem/i915_gem_region.c
+++ b/drivers/gpu/drm/i915/gem/i915_gem_region.c
@@ -16,7 +16,7 @@ i915_gem_object_swapout_pages(struct drm_i915_gem_object *obj,
struct drm_i915_private *i915 = to_i915(obj->base.dev);
struct drm_i915_gem_object *dst, *src;
unsigned long start, diff, msec;
- int err;
+ int err = -EINVAL;
GEM_BUG_ON(obj->swapto);
GEM_BUG_ON(i915_gem_object_has_pages(obj));
@@ -54,7 +54,10 @@ i915_gem_object_swapout_pages(struct drm_i915_gem_object *obj,
__i915_gem_object_pin_pages(src);
/* copying the pages */
- err = i915_gem_object_memcpy(dst, src);
+ if (i915->params.enable_eviction >= 2)
+ err = i915_window_blt_copy(dst, src);
+ if (err && i915->params.enable_eviction != 2)
+ err = i915_gem_object_memcpy(dst, src);
__i915_gem_object_unpin_pages(src);
__i915_gem_object_unset_pages(src);
@@ -83,7 +86,7 @@ i915_gem_object_swapin_pages(struct drm_i915_gem_object *obj,
struct drm_i915_private *i915 = to_i915(obj->base.dev);
struct drm_i915_gem_object *dst, *src;
unsigned long start, diff, msec;
- int err;
+ int err = -EINVAL;
GEM_BUG_ON(!obj->swapto);
GEM_BUG_ON(i915_gem_object_has_pages(obj));
@@ -117,7 +120,10 @@ i915_gem_object_swapin_pages(struct drm_i915_gem_object *obj,
__i915_gem_object_pin_pages(dst);
/* copying the pages */
- err = i915_gem_object_memcpy(dst, src);
+ if (i915->params.enable_eviction >= 2)
+ err = i915_window_blt_copy(dst, src);
+ if (err && i915->params.enable_eviction != 2)
+ err = i915_gem_object_memcpy(dst, src);
__i915_gem_object_unpin_pages(dst);
__i915_gem_object_unset_pages(dst);
diff --git a/drivers/gpu/drm/i915/i915_drv.c b/drivers/gpu/drm/i915/i915_drv.c
index 683643b211fa..78b528e89486 100644
--- a/drivers/gpu/drm/i915/i915_drv.c
+++ b/drivers/gpu/drm/i915/i915_drv.c
@@ -891,7 +891,7 @@ int i915_driver_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
i915_driver_register(i915);
- if (HAS_LMEM(i915)) {
+ if (HAS_LMEM(i915) && i915->params.enable_eviction >= 2) {
ret = i915_setup_blt_windows(i915);
if (ret)
goto out_cleanup_drv_register;
@@ -939,7 +939,7 @@ int i915_driver_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
void i915_driver_remove(struct drm_i915_private *i915)
{
- if (HAS_LMEM(i915))
+ if (HAS_LMEM(i915) && i915->params.enable_eviction >= 2)
i915_teardown_blt_windows(i915);
disable_rpm_wakeref_asserts(&i915->runtime_pm);
diff --git a/drivers/gpu/drm/i915/i915_params.c b/drivers/gpu/drm/i915/i915_params.c
index 264de32f3d6a..9fa58ed76614 100644
--- a/drivers/gpu/drm/i915/i915_params.c
+++ b/drivers/gpu/drm/i915/i915_params.c
@@ -197,8 +197,10 @@ i915_param_named_unsafe(fake_lmem_start, ulong, 0400,
"Fake LMEM start offset (default: 0)");
#endif
-i915_param_named_unsafe(enable_eviction, bool, 0600,
- "Enable memcpy based eviction which does not rely on DMA resv refactoring)");
+i915_param_named_unsafe(enable_eviction, uint, 0600,
+ "Enable eviction which does not rely on DMA resv refactoring "
+ "0=disabled, 1=memcpy based only, 2=blt based only, "
+ "3=blt based but fallsback to memcpy based [default])");
i915_param_named_unsafe(lmem_size, uint, 0400,
"Change lmem size for each region. (default: 0, all memory)");
diff --git a/drivers/gpu/drm/i915/i915_params.h b/drivers/gpu/drm/i915/i915_params.h
index be6979e7feda..c835e592ee5f 100644
--- a/drivers/gpu/drm/i915/i915_params.h
+++ b/drivers/gpu/drm/i915/i915_params.h
@@ -72,8 +72,8 @@ struct drm_printer;
param(char *, force_probe, CONFIG_DRM_I915_FORCE_PROBE, 0400) \
param(unsigned long, fake_lmem_start, 0, 0400) \
param(unsigned int, lmem_size, 0, 0400) \
+ param(unsigned int, enable_eviction, 3, 0600) \
/* leave bools at the end to not create holes */ \
- param(bool, enable_eviction, true, 0600) \
param(bool, enable_hangcheck, true, 0600) \
param(bool, load_detect_test, false, 0600) \
param(bool, force_reset_modeset_test, false, 0600) \
--
2.26.2
More information about the dri-devel
mailing list