mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2025-01-18 11:56:14 +07:00
drm/i915: Allow fence allocations to fail
If a fence allocation fails in a blocking context, we will sleep on the fence as a last resort. We can therefore allow ourselves to fail and sleep on the fence instead of triggering a system-wide oom. This allows us to throttle malicious clients that are consuming lots of system resources by capping the amount of memory used by fences. Testcase: igt/gem_shrink/execbufX Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> Cc: Joonas Lahtinen <joonas.lahtinen@linux.intel.com> Reviewed-by: Joonas Lahtinen <joonas.lahtinen@linux.intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/20171212180652.22061-2-chris@chris-wilson.co.uk
This commit is contained in:
parent
e30a7581bf
commit
2abe2f8446
@ -167,7 +167,7 @@ bool i915_gem_clflush_object(struct drm_i915_gem_object *obj,
|
||||
i915_sw_fence_await_reservation(&clflush->wait,
|
||||
obj->resv, NULL,
|
||||
true, I915_FENCE_TIMEOUT,
|
||||
GFP_KERNEL);
|
||||
I915_FENCE_GFP);
|
||||
|
||||
reservation_object_lock(obj->resv, NULL);
|
||||
reservation_object_add_excl_fence(obj->resv, &clflush->dma);
|
||||
|
@ -617,7 +617,7 @@ int i915_gem_switch_to_kernel_context(struct drm_i915_private *dev_priv)
|
||||
if (prev)
|
||||
i915_sw_fence_await_sw_fence_gfp(&req->submit,
|
||||
&prev->submit,
|
||||
GFP_KERNEL);
|
||||
I915_FENCE_GFP);
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -782,7 +782,7 @@ i915_gem_request_await_request(struct drm_i915_gem_request *to,
|
||||
if (to->engine == from->engine) {
|
||||
ret = i915_sw_fence_await_sw_fence_gfp(&to->submit,
|
||||
&from->submit,
|
||||
GFP_KERNEL);
|
||||
I915_FENCE_GFP);
|
||||
return ret < 0 ? ret : 0;
|
||||
}
|
||||
|
||||
@ -810,7 +810,7 @@ i915_gem_request_await_request(struct drm_i915_gem_request *to,
|
||||
await_dma_fence:
|
||||
ret = i915_sw_fence_await_dma_fence(&to->submit,
|
||||
&from->fence, 0,
|
||||
GFP_KERNEL);
|
||||
I915_FENCE_GFP);
|
||||
return ret < 0 ? ret : 0;
|
||||
}
|
||||
|
||||
@ -861,7 +861,7 @@ i915_gem_request_await_dma_fence(struct drm_i915_gem_request *req,
|
||||
else
|
||||
ret = i915_sw_fence_await_dma_fence(&req->submit, fence,
|
||||
I915_FENCE_TIMEOUT,
|
||||
GFP_KERNEL);
|
||||
I915_FENCE_GFP);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
|
@ -204,6 +204,8 @@ struct drm_i915_gem_request {
|
||||
struct list_head client_link;
|
||||
};
|
||||
|
||||
#define I915_FENCE_GFP (GFP_KERNEL | __GFP_RETRY_MAYFAIL | __GFP_NOWARN)
|
||||
|
||||
extern const struct dma_fence_ops i915_fence_ops;
|
||||
|
||||
static inline bool dma_fence_is_i915(const struct dma_fence *fence)
|
||||
|
Loading…
Reference in New Issue
Block a user