linux/drivers/gpu/drm/i915/i915_request.h
<<
>>
Prefs
   1/*
   2 * Copyright © 2008-2018 Intel Corporation
   3 *
   4 * Permission is hereby granted, free of charge, to any person obtaining a
   5 * copy of this software and associated documentation files (the "Software"),
   6 * to deal in the Software without restriction, including without limitation
   7 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
   8 * and/or sell copies of the Software, and to permit persons to whom the
   9 * Software is furnished to do so, subject to the following conditions:
  10 *
  11 * The above copyright notice and this permission notice (including the next
  12 * paragraph) shall be included in all copies or substantial portions of the
  13 * Software.
  14 *
  15 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  16 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  17 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
  18 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  19 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
  20 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
  21 * IN THE SOFTWARE.
  22 *
  23 */
  24
  25#ifndef I915_REQUEST_H
  26#define I915_REQUEST_H
  27
  28#include <linux/dma-fence.h>
  29
  30#include "i915_gem.h"
  31#include "i915_scheduler.h"
  32#include "i915_sw_fence.h"
  33#include "i915_scheduler.h"
  34
  35#include <uapi/drm/i915_drm.h>
  36
  37struct drm_file;
  38struct drm_i915_gem_object;
  39struct i915_request;
  40struct i915_timeline;
  41
  42struct intel_wait {
  43        struct rb_node node;
  44        struct task_struct *tsk;
  45        struct i915_request *request;
  46        u32 seqno;
  47};
  48
  49struct intel_signal_node {
  50        struct intel_wait wait;
  51        struct list_head link;
  52};
  53
  54struct i915_capture_list {
  55        struct i915_capture_list *next;
  56        struct i915_vma *vma;
  57};
  58
  59/**
  60 * Request queue structure.
  61 *
  62 * The request queue allows us to note sequence numbers that have been emitted
  63 * and may be associated with active buffers to be retired.
  64 *
  65 * By keeping this list, we can avoid having to do questionable sequence
  66 * number comparisons on buffer last_read|write_seqno. It also allows an
  67 * emission time to be associated with the request for tracking how far ahead
  68 * of the GPU the submission is.
  69 *
  70 * When modifying this structure be very aware that we perform a lockless
  71 * RCU lookup of it that may race against reallocation of the struct
  72 * from the slab freelist. We intentionally do not zero the structure on
  73 * allocation so that the lookup can use the dangling pointers (and is
  74 * cogniscent that those pointers may be wrong). Instead, everything that
  75 * needs to be initialised must be done so explicitly.
  76 *
  77 * The requests are reference counted.
  78 */
  79struct i915_request {
  80        struct dma_fence fence;
  81        spinlock_t lock;
  82
  83        /** On Which ring this request was generated */
  84        struct drm_i915_private *i915;
  85
  86        /**
  87         * Context and ring buffer related to this request
  88         * Contexts are refcounted, so when this request is associated with a
  89         * context, we must increment the context's refcount, to guarantee that
  90         * it persists while any request is linked to it. Requests themselves
  91         * are also refcounted, so the request will only be freed when the last
  92         * reference to it is dismissed, and the code in
  93         * i915_request_free() will then decrement the refcount on the
  94         * context.
  95         */
  96        struct i915_gem_context *gem_context;
  97        struct intel_engine_cs *engine;
  98        struct intel_context *hw_context;
  99        struct intel_ring *ring;
 100        struct i915_timeline *timeline;
 101        struct intel_signal_node signaling;
 102
 103        /*
 104         * The rcu epoch of when this request was allocated. Used to judiciously
 105         * apply backpressure on future allocations to ensure that under
 106         * mempressure there is sufficient RCU ticks for us to reclaim our
 107         * RCU protected slabs.
 108         */
 109        unsigned long rcustate;
 110
 111        /*
 112         * Fences for the various phases in the request's lifetime.
 113         *
 114         * The submit fence is used to await upon all of the request's
 115         * dependencies. When it is signaled, the request is ready to run.
 116         * It is used by the driver to then queue the request for execution.
 117         */
 118        struct i915_sw_fence submit;
 119        wait_queue_entry_t submitq;
 120        wait_queue_head_t execute;
 121
 122        /*
 123         * A list of everyone we wait upon, and everyone who waits upon us.
 124         * Even though we will not be submitted to the hardware before the
 125         * submit fence is signaled (it waits for all external events as well
 126         * as our own requests), the scheduler still needs to know the
 127         * dependency tree for the lifetime of the request (from execbuf
 128         * to retirement), i.e. bidirectional dependency information for the
 129         * request not tied to individual fences.
 130         */
 131        struct i915_sched_node sched;
 132        struct i915_dependency dep;
 133
 134        /**
 135         * GEM sequence number associated with this request on the
 136         * global execution timeline. It is zero when the request is not
 137         * on the HW queue (i.e. not on the engine timeline list).
 138         * Its value is guarded by the timeline spinlock.
 139         */
 140        u32 global_seqno;
 141
 142        /** Position in the ring of the start of the request */
 143        u32 head;
 144
 145        /** Position in the ring of the start of the user packets */
 146        u32 infix;
 147
 148        /**
 149         * Position in the ring of the start of the postfix.
 150         * This is required to calculate the maximum available ring space
 151         * without overwriting the postfix.
 152         */
 153        u32 postfix;
 154
 155        /** Position in the ring of the end of the whole request */
 156        u32 tail;
 157
 158        /** Position in the ring of the end of any workarounds after the tail */
 159        u32 wa_tail;
 160
 161        /** Preallocate space in the ring for the emitting the request */
 162        u32 reserved_space;
 163
 164        /** Batch buffer related to this request if any (used for
 165         * error state dump only).
 166         */
 167        struct i915_vma *batch;
 168        /**
 169         * Additional buffers requested by userspace to be captured upon
 170         * a GPU hang. The vma/obj on this list are protected by their
 171         * active reference - all objects on this list must also be
 172         * on the active_list (of their final request).
 173         */
 174        struct i915_capture_list *capture_list;
 175        struct list_head active_list;
 176
 177        /** Time at which this request was emitted, in jiffies. */
 178        unsigned long emitted_jiffies;
 179
 180        bool waitboost;
 181
 182        /** engine->request_list entry for this request */
 183        struct list_head link;
 184
 185        /** ring->request_list entry for this request */
 186        struct list_head ring_link;
 187
 188        struct drm_i915_file_private *file_priv;
 189        /** file_priv list entry for this request */
 190        struct list_head client_link;
 191};
 192
 193#define I915_FENCE_GFP (GFP_KERNEL | __GFP_RETRY_MAYFAIL | __GFP_NOWARN)
 194
 195extern const struct dma_fence_ops i915_fence_ops;
 196
 197static inline bool dma_fence_is_i915(const struct dma_fence *fence)
 198{
 199        return fence->ops == &i915_fence_ops;
 200}
 201
 202struct i915_request * __must_check
 203i915_request_alloc(struct intel_engine_cs *engine,
 204                   struct i915_gem_context *ctx);
 205void i915_request_retire_upto(struct i915_request *rq);
 206
 207static inline struct i915_request *
 208to_request(struct dma_fence *fence)
 209{
 210        /* We assume that NULL fence/request are interoperable */
 211        BUILD_BUG_ON(offsetof(struct i915_request, fence) != 0);
 212        GEM_BUG_ON(fence && !dma_fence_is_i915(fence));
 213        return container_of(fence, struct i915_request, fence);
 214}
 215
 216static inline struct i915_request *
 217i915_request_get(struct i915_request *rq)
 218{
 219        return to_request(dma_fence_get(&rq->fence));
 220}
 221
 222static inline struct i915_request *
 223i915_request_get_rcu(struct i915_request *rq)
 224{
 225        return to_request(dma_fence_get_rcu(&rq->fence));
 226}
 227
 228static inline void
 229i915_request_put(struct i915_request *rq)
 230{
 231        dma_fence_put(&rq->fence);
 232}
 233
 234/**
 235 * i915_request_global_seqno - report the current global seqno
 236 * @request - the request
 237 *
 238 * A request is assigned a global seqno only when it is on the hardware
 239 * execution queue. The global seqno can be used to maintain a list of
 240 * requests on the same engine in retirement order, for example for
 241 * constructing a priority queue for waiting. Prior to its execution, or
 242 * if it is subsequently removed in the event of preemption, its global
 243 * seqno is zero. As both insertion and removal from the execution queue
 244 * may operate in IRQ context, it is not guarded by the usual struct_mutex
 245 * BKL. Instead those relying on the global seqno must be prepared for its
 246 * value to change between reads. Only when the request is complete can
 247 * the global seqno be stable (due to the memory barriers on submitting
 248 * the commands to the hardware to write the breadcrumb, if the HWS shows
 249 * that it has passed the global seqno and the global seqno is unchanged
 250 * after the read, it is indeed complete).
 251 */
 252static u32
 253i915_request_global_seqno(const struct i915_request *request)
 254{
 255        return READ_ONCE(request->global_seqno);
 256}
 257
 258int i915_request_await_object(struct i915_request *to,
 259                              struct drm_i915_gem_object *obj,
 260                              bool write);
 261int i915_request_await_dma_fence(struct i915_request *rq,
 262                                 struct dma_fence *fence);
 263
 264void i915_request_add(struct i915_request *rq);
 265
 266void __i915_request_submit(struct i915_request *request);
 267void i915_request_submit(struct i915_request *request);
 268
 269void i915_request_skip(struct i915_request *request, int error);
 270
 271void __i915_request_unsubmit(struct i915_request *request);
 272void i915_request_unsubmit(struct i915_request *request);
 273
 274long i915_request_wait(struct i915_request *rq,
 275                       unsigned int flags,
 276                       long timeout)
 277        __attribute__((nonnull(1)));
 278#define I915_WAIT_INTERRUPTIBLE BIT(0)
 279#define I915_WAIT_LOCKED        BIT(1) /* struct_mutex held, handle GPU reset */
 280#define I915_WAIT_PRIORITY      BIT(2) /* small priority bump for the request */
 281#define I915_WAIT_ALL           BIT(3) /* used by i915_gem_object_wait() */
 282#define I915_WAIT_FOR_IDLE_BOOST BIT(4)
 283
 284static inline bool intel_engine_has_started(struct intel_engine_cs *engine,
 285                                            u32 seqno);
 286static inline bool intel_engine_has_completed(struct intel_engine_cs *engine,
 287                                              u32 seqno);
 288
 289/**
 290 * Returns true if seq1 is later than seq2.
 291 */
 292static inline bool i915_seqno_passed(u32 seq1, u32 seq2)
 293{
 294        return (s32)(seq1 - seq2) >= 0;
 295}
 296
 297/**
 298 * i915_request_started - check if the request has begun being executed
 299 * @rq: the request
 300 *
 301 * Returns true if the request has been submitted to hardware, and the hardware
 302 * has advanced passed the end of the previous request and so should be either
 303 * currently processing the request (though it may be preempted and so
 304 * not necessarily the next request to complete) or have completed the request.
 305 */
 306static inline bool i915_request_started(const struct i915_request *rq)
 307{
 308        u32 seqno;
 309
 310        seqno = i915_request_global_seqno(rq);
 311        if (!seqno) /* not yet submitted to HW */
 312                return false;
 313
 314        return intel_engine_has_started(rq->engine, seqno);
 315}
 316
 317static inline bool
 318__i915_request_completed(const struct i915_request *rq, u32 seqno)
 319{
 320        GEM_BUG_ON(!seqno);
 321        return intel_engine_has_completed(rq->engine, seqno) &&
 322                seqno == i915_request_global_seqno(rq);
 323}
 324
 325static inline bool i915_request_completed(const struct i915_request *rq)
 326{
 327        u32 seqno;
 328
 329        seqno = i915_request_global_seqno(rq);
 330        if (!seqno)
 331                return false;
 332
 333        return __i915_request_completed(rq, seqno);
 334}
 335
 336void i915_retire_requests(struct drm_i915_private *i915);
 337
 338/*
 339 * We treat requests as fences. This is not be to confused with our
 340 * "fence registers" but pipeline synchronisation objects ala GL_ARB_sync.
 341 * We use the fences to synchronize access from the CPU with activity on the
 342 * GPU, for example, we should not rewrite an object's PTE whilst the GPU
 343 * is reading them. We also track fences at a higher level to provide
 344 * implicit synchronisation around GEM objects, e.g. set-domain will wait
 345 * for outstanding GPU rendering before marking the object ready for CPU
 346 * access, or a pageflip will wait until the GPU is complete before showing
 347 * the frame on the scanout.
 348 *
 349 * In order to use a fence, the object must track the fence it needs to
 350 * serialise with. For example, GEM objects want to track both read and
 351 * write access so that we can perform concurrent read operations between
 352 * the CPU and GPU engines, as well as waiting for all rendering to
 353 * complete, or waiting for the last GPU user of a "fence register". The
 354 * object then embeds a #i915_gem_active to track the most recent (in
 355 * retirement order) request relevant for the desired mode of access.
 356 * The #i915_gem_active is updated with i915_gem_active_set() to track the
 357 * most recent fence request, typically this is done as part of
 358 * i915_vma_move_to_active().
 359 *
 360 * When the #i915_gem_active completes (is retired), it will
 361 * signal its completion to the owner through a callback as well as mark
 362 * itself as idle (i915_gem_active.request == NULL). The owner
 363 * can then perform any action, such as delayed freeing of an active
 364 * resource including itself.
 365 */
 366struct i915_gem_active;
 367
 368typedef void (*i915_gem_retire_fn)(struct i915_gem_active *,
 369                                   struct i915_request *);
 370
 371struct i915_gem_active {
 372        struct i915_request __rcu *request;
 373        struct list_head link;
 374        i915_gem_retire_fn retire;
 375};
 376
 377void i915_gem_retire_noop(struct i915_gem_active *,
 378                          struct i915_request *request);
 379
 380/**
 381 * init_request_active - prepares the activity tracker for use
 382 * @active - the active tracker
 383 * @func - a callback when then the tracker is retired (becomes idle),
 384 *         can be NULL
 385 *
 386 * init_request_active() prepares the embedded @active struct for use as
 387 * an activity tracker, that is for tracking the last known active request
 388 * associated with it. When the last request becomes idle, when it is retired
 389 * after completion, the optional callback @func is invoked.
 390 */
 391static inline void
 392init_request_active(struct i915_gem_active *active,
 393                    i915_gem_retire_fn retire)
 394{
 395        RCU_INIT_POINTER(active->request, NULL);
 396        INIT_LIST_HEAD(&active->link);
 397        active->retire = retire ?: i915_gem_retire_noop;
 398}
 399
 400/**
 401 * i915_gem_active_set - updates the tracker to watch the current request
 402 * @active - the active tracker
 403 * @request - the request to watch
 404 *
 405 * i915_gem_active_set() watches the given @request for completion. Whilst
 406 * that @request is busy, the @active reports busy. When that @request is
 407 * retired, the @active tracker is updated to report idle.
 408 */
 409static inline void
 410i915_gem_active_set(struct i915_gem_active *active,
 411                    struct i915_request *request)
 412{
 413        list_move(&active->link, &request->active_list);
 414        rcu_assign_pointer(active->request, request);
 415}
 416
 417/**
 418 * i915_gem_active_set_retire_fn - updates the retirement callback
 419 * @active - the active tracker
 420 * @fn - the routine called when the request is retired
 421 * @mutex - struct_mutex used to guard retirements
 422 *
 423 * i915_gem_active_set_retire_fn() updates the function pointer that
 424 * is called when the final request associated with the @active tracker
 425 * is retired.
 426 */
 427static inline void
 428i915_gem_active_set_retire_fn(struct i915_gem_active *active,
 429                              i915_gem_retire_fn fn,
 430                              struct mutex *mutex)
 431{
 432        lockdep_assert_held(mutex);
 433        active->retire = fn ?: i915_gem_retire_noop;
 434}
 435
 436static inline struct i915_request *
 437__i915_gem_active_peek(const struct i915_gem_active *active)
 438{
 439        /*
 440         * Inside the error capture (running with the driver in an unknown
 441         * state), we want to bend the rules slightly (a lot).
 442         *
 443         * Work is in progress to make it safer, in the meantime this keeps
 444         * the known issue from spamming the logs.
 445         */
 446        return rcu_dereference_protected(active->request, 1);
 447}
 448
 449/**
 450 * i915_gem_active_raw - return the active request
 451 * @active - the active tracker
 452 *
 453 * i915_gem_active_raw() returns the current request being tracked, or NULL.
 454 * It does not obtain a reference on the request for the caller, so the caller
 455 * must hold struct_mutex.
 456 */
 457static inline struct i915_request *
 458i915_gem_active_raw(const struct i915_gem_active *active, struct mutex *mutex)
 459{
 460        return rcu_dereference_protected(active->request,
 461                                         lockdep_is_held(mutex));
 462}
 463
 464/**
 465 * i915_gem_active_peek - report the active request being monitored
 466 * @active - the active tracker
 467 *
 468 * i915_gem_active_peek() returns the current request being tracked if
 469 * still active, or NULL. It does not obtain a reference on the request
 470 * for the caller, so the caller must hold struct_mutex.
 471 */
 472static inline struct i915_request *
 473i915_gem_active_peek(const struct i915_gem_active *active, struct mutex *mutex)
 474{
 475        struct i915_request *request;
 476
 477        request = i915_gem_active_raw(active, mutex);
 478        if (!request || i915_request_completed(request))
 479                return NULL;
 480
 481        return request;
 482}
 483
 484/**
 485 * i915_gem_active_get - return a reference to the active request
 486 * @active - the active tracker
 487 *
 488 * i915_gem_active_get() returns a reference to the active request, or NULL
 489 * if the active tracker is idle. The caller must hold struct_mutex.
 490 */
 491static inline struct i915_request *
 492i915_gem_active_get(const struct i915_gem_active *active, struct mutex *mutex)
 493{
 494        return i915_request_get(i915_gem_active_peek(active, mutex));
 495}
 496
 497/**
 498 * __i915_gem_active_get_rcu - return a reference to the active request
 499 * @active - the active tracker
 500 *
 501 * __i915_gem_active_get() returns a reference to the active request, or NULL
 502 * if the active tracker is idle. The caller must hold the RCU read lock, but
 503 * the returned pointer is safe to use outside of RCU.
 504 */
 505static inline struct i915_request *
 506__i915_gem_active_get_rcu(const struct i915_gem_active *active)
 507{
 508        /*
 509         * Performing a lockless retrieval of the active request is super
 510         * tricky. SLAB_TYPESAFE_BY_RCU merely guarantees that the backing
 511         * slab of request objects will not be freed whilst we hold the
 512         * RCU read lock. It does not guarantee that the request itself
 513         * will not be freed and then *reused*. Viz,
 514         *
 515         * Thread A                     Thread B
 516         *
 517         * rq = active.request
 518         *                              retire(rq) -> free(rq);
 519         *                              (rq is now first on the slab freelist)
 520         *                              active.request = NULL
 521         *
 522         *                              rq = new submission on a new object
 523         * ref(rq)
 524         *
 525         * To prevent the request from being reused whilst the caller
 526         * uses it, we take a reference like normal. Whilst acquiring
 527         * the reference we check that it is not in a destroyed state
 528         * (refcnt == 0). That prevents the request being reallocated
 529         * whilst the caller holds on to it. To check that the request
 530         * was not reallocated as we acquired the reference we have to
 531         * check that our request remains the active request across
 532         * the lookup, in the same manner as a seqlock. The visibility
 533         * of the pointer versus the reference counting is controlled
 534         * by using RCU barriers (rcu_dereference and rcu_assign_pointer).
 535         *
 536         * In the middle of all that, we inspect whether the request is
 537         * complete. Retiring is lazy so the request may be completed long
 538         * before the active tracker is updated. Querying whether the
 539         * request is complete is far cheaper (as it involves no locked
 540         * instructions setting cachelines to exclusive) than acquiring
 541         * the reference, so we do it first. The RCU read lock ensures the
 542         * pointer dereference is valid, but does not ensure that the
 543         * seqno nor HWS is the right one! However, if the request was
 544         * reallocated, that means the active tracker's request was complete.
 545         * If the new request is also complete, then both are and we can
 546         * just report the active tracker is idle. If the new request is
 547         * incomplete, then we acquire a reference on it and check that
 548         * it remained the active request.
 549         *
 550         * It is then imperative that we do not zero the request on
 551         * reallocation, so that we can chase the dangling pointers!
 552         * See i915_request_alloc().
 553         */
 554        do {
 555                struct i915_request *request;
 556
 557                request = rcu_dereference(active->request);
 558                if (!request || i915_request_completed(request))
 559                        return NULL;
 560
 561                /*
 562                 * An especially silly compiler could decide to recompute the
 563                 * result of i915_request_completed, more specifically
 564                 * re-emit the load for request->fence.seqno. A race would catch
 565                 * a later seqno value, which could flip the result from true to
 566                 * false. Which means part of the instructions below might not
 567                 * be executed, while later on instructions are executed. Due to
 568                 * barriers within the refcounting the inconsistency can't reach
 569                 * past the call to i915_request_get_rcu, but not executing
 570                 * that while still executing i915_request_put() creates
 571                 * havoc enough.  Prevent this with a compiler barrier.
 572                 */
 573                barrier();
 574
 575                request = i915_request_get_rcu(request);
 576
 577                /*
 578                 * What stops the following rcu_access_pointer() from occurring
 579                 * before the above i915_request_get_rcu()? If we were
 580                 * to read the value before pausing to get the reference to
 581                 * the request, we may not notice a change in the active
 582                 * tracker.
 583                 *
 584                 * The rcu_access_pointer() is a mere compiler barrier, which
 585                 * means both the CPU and compiler are free to perform the
 586                 * memory read without constraint. The compiler only has to
 587                 * ensure that any operations after the rcu_access_pointer()
 588                 * occur afterwards in program order. This means the read may
 589                 * be performed earlier by an out-of-order CPU, or adventurous
 590                 * compiler.
 591                 *
 592                 * The atomic operation at the heart of
 593                 * i915_request_get_rcu(), see dma_fence_get_rcu(), is
 594                 * atomic_inc_not_zero() which is only a full memory barrier
 595                 * when successful. That is, if i915_request_get_rcu()
 596                 * returns the request (and so with the reference counted
 597                 * incremented) then the following read for rcu_access_pointer()
 598                 * must occur after the atomic operation and so confirm
 599                 * that this request is the one currently being tracked.
 600                 *
 601                 * The corresponding write barrier is part of
 602                 * rcu_assign_pointer().
 603                 */
 604                if (!request || request == rcu_access_pointer(active->request))
 605                        return rcu_pointer_handoff(request);
 606
 607                i915_request_put(request);
 608        } while (1);
 609}
 610
 611/**
 612 * i915_gem_active_get_unlocked - return a reference to the active request
 613 * @active - the active tracker
 614 *
 615 * i915_gem_active_get_unlocked() returns a reference to the active request,
 616 * or NULL if the active tracker is idle. The reference is obtained under RCU,
 617 * so no locking is required by the caller.
 618 *
 619 * The reference should be freed with i915_request_put().
 620 */
 621static inline struct i915_request *
 622i915_gem_active_get_unlocked(const struct i915_gem_active *active)
 623{
 624        struct i915_request *request;
 625
 626        rcu_read_lock();
 627        request = __i915_gem_active_get_rcu(active);
 628        rcu_read_unlock();
 629
 630        return request;
 631}
 632
 633/**
 634 * i915_gem_active_isset - report whether the active tracker is assigned
 635 * @active - the active tracker
 636 *
 637 * i915_gem_active_isset() returns true if the active tracker is currently
 638 * assigned to a request. Due to the lazy retiring, that request may be idle
 639 * and this may report stale information.
 640 */
 641static inline bool
 642i915_gem_active_isset(const struct i915_gem_active *active)
 643{
 644        return rcu_access_pointer(active->request);
 645}
 646
 647/**
 648 * i915_gem_active_wait - waits until the request is completed
 649 * @active - the active request on which to wait
 650 * @flags - how to wait
 651 * @timeout - how long to wait at most
 652 * @rps - userspace client to charge for a waitboost
 653 *
 654 * i915_gem_active_wait() waits until the request is completed before
 655 * returning, without requiring any locks to be held. Note that it does not
 656 * retire any requests before returning.
 657 *
 658 * This function relies on RCU in order to acquire the reference to the active
 659 * request without holding any locks. See __i915_gem_active_get_rcu() for the
 660 * glory details on how that is managed. Once the reference is acquired, we
 661 * can then wait upon the request, and afterwards release our reference,
 662 * free of any locking.
 663 *
 664 * This function wraps i915_request_wait(), see it for the full details on
 665 * the arguments.
 666 *
 667 * Returns 0 if successful, or a negative error code.
 668 */
 669static inline int
 670i915_gem_active_wait(const struct i915_gem_active *active, unsigned int flags)
 671{
 672        struct i915_request *request;
 673        long ret = 0;
 674
 675        request = i915_gem_active_get_unlocked(active);
 676        if (request) {
 677                ret = i915_request_wait(request, flags, MAX_SCHEDULE_TIMEOUT);
 678                i915_request_put(request);
 679        }
 680
 681        return ret < 0 ? ret : 0;
 682}
 683
 684/**
 685 * i915_gem_active_retire - waits until the request is retired
 686 * @active - the active request on which to wait
 687 *
 688 * i915_gem_active_retire() waits until the request is completed,
 689 * and then ensures that at least the retirement handler for this
 690 * @active tracker is called before returning. If the @active
 691 * tracker is idle, the function returns immediately.
 692 */
 693static inline int __must_check
 694i915_gem_active_retire(struct i915_gem_active *active,
 695                       struct mutex *mutex)
 696{
 697        struct i915_request *request;
 698        long ret;
 699
 700        request = i915_gem_active_raw(active, mutex);
 701        if (!request)
 702                return 0;
 703
 704        ret = i915_request_wait(request,
 705                                I915_WAIT_INTERRUPTIBLE | I915_WAIT_LOCKED,
 706                                MAX_SCHEDULE_TIMEOUT);
 707        if (ret < 0)
 708                return ret;
 709
 710        list_del_init(&active->link);
 711        RCU_INIT_POINTER(active->request, NULL);
 712
 713        active->retire(active, request);
 714
 715        return 0;
 716}
 717
 718#define for_each_active(mask, idx) \
 719        for (; mask ? idx = ffs(mask) - 1, 1 : 0; mask &= ~BIT(idx))
 720
 721#endif /* I915_REQUEST_H */
 722