• Oscar Mateo's avatar
    drm/i915: Emphasize that ctx->id is merely a user handle · 821d66dd
    Oscar Mateo authored
    This is an Execlists preparatory patch, since they make context ID become an
    overloaded term:
    
    - In the software, it was used to distinguish which context userspace was
      trying to use.
    - In the BSpec, the term is used to describe the 20-bits long field the
      hardware uses to it to discriminate the contexts that are submitted to
      the ELSP and inform the driver about their current status (via Context
      Switch Interrupts and Context Status Buffers).
    
    Initially, I tried to make the different meanings converge, but it proved
    impossible:
    
    - The software ctx->id is per-filp, while the hardware one needs to be
      globally unique.
    - Also, we multiplex several backing states objects per intel_context,
      and all of them need unique HW IDs.
    - I tried adding a per-filp ID and then composing the HW context ID as:
      ctx->id + file_priv->id + ring->id, but the fact that the hardware only
      uses 20-bits means we have to artificially limit the number of filps or
      contexts the userspace can create.
    
    The ctx->user_handle renaming bits are done with this Cocci patch (plus
    manual frobbing of the struct declaration):
    
        @@
        struct intel_context c;
        @@
        - (c).id
        + c.user_handle
    
        @@
        struct intel_context *c;
        @@
        - (c)->id
        + c->user_handle
    
    Also, while we are at it, s/DEFAULT_CONTEXT_ID/DEFAULT_CONTEXT_HANDLE and
    change the type to unsigned 32 bits.
    
    v2: s/handle/user_handle and change the type to uint32_t as suggested by
    Chris Wilson.
    
    Reviewed-by: Jesse Barnes <jbarnes@virtuousgeek.org> (v1)
    Signed-off-by: default avatarOscar Mateo <oscar.mateo@intel.com>
    Reviewed-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
    Signed-off-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
    821d66dd
intel_uncore.c 34.1 KB