1 // SPDX-License-Identifier: MIT
3 * Copyright © 2019 Intel Corporation
6 #include "i915_active.h"
7 #include "intel_context.h"
8 #include "intel_context_param.h"
9 #include "intel_ring.h"
11 int intel_context_set_ring_size(struct intel_context *ce, long sz)
15 if (intel_context_lock_pinned(ce))
18 err = i915_active_wait(&ce->active);
22 if (intel_context_is_pinned(ce)) {
23 err = -EBUSY; /* In active use, come back later! */
27 if (test_bit(CONTEXT_ALLOC_BIT, &ce->flags)) {
28 struct intel_ring *ring;
30 /* Replace the existing ringbuffer */
31 ring = intel_engine_create_ring(ce->engine, sz);
37 intel_ring_put(ce->ring);
40 /* Context image will be updated on next pin */
42 ce->ring = __intel_context_ring_size(sz);
46 intel_context_unlock_pinned(ce);
50 long intel_context_get_ring_size(struct intel_context *ce)
52 long sz = (unsigned long)READ_ONCE(ce->ring);
54 if (test_bit(CONTEXT_ALLOC_BIT, &ce->flags)) {
55 if (intel_context_lock_pinned(ce))
59 intel_context_unlock_pinned(ce);