mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2025-01-19 19:56:16 +07:00
drm/i915: release the GTT mmaps when going into D3
So we'll get a fault when someone tries to access the mmap, then we'll wake up from D3. v2: - Rebase v3: - Use gtt active/inactive Testcase: igt/pm_pc8/gem-mmap-gtt Signed-off-by: Paulo Zanoni <paulo.r.zanoni@intel.com> Reviewed-by: Rodrigo Vivi <rodrigo.vivi@gmail.com> [danvet: Add comment + WARN as discussed with Paulo on irc.] Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
This commit is contained in:
parent
16a3d6ef9f
commit
48018a57a8
@ -917,6 +917,8 @@ static int i915_runtime_suspend(struct device *device)
|
|||||||
|
|
||||||
DRM_DEBUG_KMS("Suspending device\n");
|
DRM_DEBUG_KMS("Suspending device\n");
|
||||||
|
|
||||||
|
i915_gem_release_all_mmaps(dev_priv);
|
||||||
|
|
||||||
del_timer_sync(&dev_priv->gpu_error.hangcheck_timer);
|
del_timer_sync(&dev_priv->gpu_error.hangcheck_timer);
|
||||||
dev_priv->pm.suspended = true;
|
dev_priv->pm.suspended = true;
|
||||||
intel_opregion_notify_adapter(dev, PCI_D3cold);
|
intel_opregion_notify_adapter(dev, PCI_D3cold);
|
||||||
|
@ -2015,6 +2015,7 @@ void i915_gem_object_unpin(struct drm_i915_gem_object *obj);
|
|||||||
int __must_check i915_vma_unbind(struct i915_vma *vma);
|
int __must_check i915_vma_unbind(struct i915_vma *vma);
|
||||||
int __must_check i915_gem_object_ggtt_unbind(struct drm_i915_gem_object *obj);
|
int __must_check i915_gem_object_ggtt_unbind(struct drm_i915_gem_object *obj);
|
||||||
int i915_gem_object_put_pages(struct drm_i915_gem_object *obj);
|
int i915_gem_object_put_pages(struct drm_i915_gem_object *obj);
|
||||||
|
void i915_gem_release_all_mmaps(struct drm_i915_private *dev_priv);
|
||||||
void i915_gem_release_mmap(struct drm_i915_gem_object *obj);
|
void i915_gem_release_mmap(struct drm_i915_gem_object *obj);
|
||||||
void i915_gem_lastclose(struct drm_device *dev);
|
void i915_gem_lastclose(struct drm_device *dev);
|
||||||
|
|
||||||
|
@ -1465,6 +1465,22 @@ int i915_gem_fault(struct vm_area_struct *vma, struct vm_fault *vmf)
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void i915_gem_release_all_mmaps(struct drm_i915_private *dev_priv)
|
||||||
|
{
|
||||||
|
struct i915_vma *vma;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Only the global gtt is relevant for gtt memory mappings, so restrict
|
||||||
|
* list traversal to objects bound into the global address space. Note
|
||||||
|
* that the active list should be empty, but better safe than sorry.
|
||||||
|
*/
|
||||||
|
WARN_ON(!list_empty(&dev_priv->gtt.base.active_list));
|
||||||
|
list_for_each_entry(vma, &dev_priv->gtt.base.active_list, mm_list)
|
||||||
|
i915_gem_release_mmap(vma->obj);
|
||||||
|
list_for_each_entry(vma, &dev_priv->gtt.base.inactive_list, mm_list)
|
||||||
|
i915_gem_release_mmap(vma->obj);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* i915_gem_release_mmap - remove physical page mappings
|
* i915_gem_release_mmap - remove physical page mappings
|
||||||
* @obj: obj in question
|
* @obj: obj in question
|
||||||
|
Loading…
Reference in New Issue
Block a user