GUC VF CONFIGURATION KLVS(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

πŸ’… GuC VF Configuration KLVs(9)

okay so welcome to the Kernel API Manual page for GuC VF Configuration KLVs(9). This is the bestie-approved list of GuC KLV_ keys available for use with PF2GUC_UPDATE_VF_CFG. no cap, every single key is here πŸ’–

  • GUC_KLV_VF_CFG_GGTT_START β€” 0x0001 β€” a 4K aligned start GTT address/offset assigned to VF. Value is 64 bits. ✨
  • GUC_KLV_VF_CFG_GGTT_SIZE β€” 0x0002 β€” a 4K aligned size of GGTT assigned to VF. Value is 64 bits. πŸŽ€
  • GUC_KLV_VF_CFG_LMEM_SIZE β€” 0x0003 β€” a 2M aligned size of local memory assigned to VF. Value is 64 bits. πŸ“
  • GUC_KLV_VF_CFG_NUM_CONTEXTS β€” 0x0004 β€” refers to the number of contexts allocated to this VF.
    • :0: no contexts (default)
    • :1-65535: number of contexts (Gen12)
  • GUC_KLV_VF_CFG_TILE_MASK β€” 0x0005 β€” for multi-tiled products, this field contains the bitwise-OR of tiles assigned to the VF. Bit-0-set means VF has access to Tile-0, Bit-31-set means VF has access to Tile-31, and etc. At least one tile will always be allocated. If all bits are zero, VF KMD should treat this as a fatal error. For, single-tile products this KLV config is ignored. 🚨
  • GUC_KLV_VF_CFG_NUM_DOORBELLS β€” 0x0006 β€” refers to the number of doorbells allocated to this VF.
    • :0: no doorbells (default)
    • :1-255: number of doorbells (Gen12)
  • GUC_KLV_VF_CFG_EXEC_QUANTUM β€” 0x8A01 β€” this config sets the VFs-execution-quantum in milliseconds.
    • GUC will attempt to obey the maximum values as much as HW is capable of and this will never be perfectly-exact (accumulated nano-second granularity) since the GPUs clock time runs off a different crystal from the CPUs clock.
    • Changing this KLV on a VF that is currently running a context won't take effect until a new context is scheduled in.
    • That said, when the PF is changing this value from 0x0 to a non-zero value, it might never take effect if the VF is running an infinitely long compute or shader kernel. In such a scenario, the PF would need to trigger a VM PAUSE and then change the KLV to force it to take effect. Such cases might typically happen on a 1PF+1VF Virtualization config enabled for heavier workloads like AI/ML.
    • If scheduling groups are supported, the provided value is applied to all groups (even if they've not yet been enabled). Support for this feature is available from GuC 70.53.0.
    • The max value for this KLV is 100 seconds, anything exceeding that will be clamped to the max.
    • Values:
      • :0: infinite exec quantum (default)
      • :100000: maximum exec quantum (100000ms == 100s)
  • GUC_KLV_VF_CFG_PREEMPT_TIMEOUT β€” 0x8A02 β€” this config sets the VF-preemption-timeout in microseconds.
    • GUC will attempt to obey the minimum and maximum values as much as HW is capable and this will never be perfectly-exact (accumulated nano-second granularity) since the GPUs clock time runs off a different crystal from the CPUs clock.
    • Changing this KLV on a VF that is currently running a context won't take effect until a new context is scheduled in.
    • That said, when the PF is changing this value from 0x0 to a non-zero value, it might never take effect if the VF is running an infinitely long compute or shader kernel. In this case, the PF would need to trigger a VM PAUSE and then change the KLV to force it to take effect. Such cases might typically happen on a 1PF+1VF Virtualization config enabled for heavier workloads like AI/ML.
    • If scheduling groups are supported, the provided value is applied to all groups (even if they've not yet been enabled). Support for this feature is available from GuC 70.53.0.
    • The max value for this KLV is 100 seconds, anything exceeding that will be clamped to the max.
    • Values:
      • :0: no preemption timeout (default)
      • :100000000: maximum preemption timeout (100000000us == 100s)
  • GUC_KLV_VF_CFG_THRESHOLD_CAT_ERR β€” 0x8A03 β€” this config sets threshold for CAT errors caused by the VF.
    • :0: adverse events or error will not be reported (default)
    • :n: event occurrence count per sampling interval
  • GUC_KLV_VF_CFG_THRESHOLD_ENGINE_RESET β€” 0x8A04 β€” this config sets threshold for engine reset caused by the VF.
    • :0: adverse events or error will not be reported (default)
    • :n: event occurrence count per sampling interval
  • GUC_KLV_VF_CFG_THRESHOLD_PAGE_FAULT β€” 0x8A05 β€” this config sets threshold for page fault errors caused by the VF.
    • :0: adverse events or error will not be reported (default)
    • :n: event occurrence count per sampling interval
  • GUC_KLV_VF_CFG_THRESHOLD_H2G_STORM β€” 0x8A06 β€” this config sets threshold for H2G interrupts triggered by the VF.
    • :0: adverse events or error will not be reported (default)
    • :n: time (us) per sampling interval
  • GUC_KLV_VF_CFG_THRESHOLD_IRQ_STORM β€” 0x8A07 β€” this config sets threshold for GT interrupts triggered by the VF's workloads.
    • :0: adverse events or error will not be reported (default)
    • :n: time (us) per sampling interval
  • GUC_KLV_VF_CFG_THRESHOLD_DOORBELL_STORM β€” 0x8A08 β€” this config sets threshold for doorbell's ring triggered by the VF.
    • :0: adverse events or error will not be reported (default)
    • :n: time (us) per sampling interval
  • GUC_KLV_VF_CFG_BEGIN_DOORBELL_ID β€” 0x8A0A β€” refers to the start index of doorbell assigned to this VF.
    • :0: (default)
    • :1-255: number of doorbells (Gen12)
  • GUC_KLV_VF_CFG_BEGIN_CONTEXT_ID β€” 0x8A0B β€” refers to the start index in context array allocated to this VF’s use.
    • :0: (default)
    • :1-65535: number of contexts (Gen12)
  • GUC_KLV_VF_CFG_SCHED_PRIORITY β€” 0x8A0C β€” this config controls VF’s scheduling priority.
    • :0: LOW = schedule VF only if it has active work (default)
    • :1: NORMAL = schedule VF always, irrespective of whether it has work or not
    • :2: HIGH = schedule VF in the next time-slice after current active time-slice completes if it has active work
  • GUC_KLV_VF_CFG_THRESHOLD_MULTI_LRC_COUNT β€” 0x8A0D β€” given that multi-LRC contexts are incompatible with SRIOV scheduler groups and cause the latter to be turned off when registered with the GuC, this config allows the PF to set a threshold for multi-LRC context registrations by VFs to monitor their behavior. πŸ‘‘
  • GUC_KLV_VF_CFG_ENGINE_GROUP_EXEC_QUANTUM' β€” 0x8A0E β€” this config sets the VFs-execution-quantum for each scheduling group in milliseconds. The driver must provide an array of values, with each of them matching the respective group index (first value goes to group 0, second to group 1, etc). The setting of group values follows the same behavior and rules as setting via GUC_KLV_VF_CFG_EXEC_QUANTUM. Note that the GuC always sets the EQ for all groups (even the non-enabled ones), so if we provide fewer values than the max the GuC will use 0 for the remaining groups. This KLV is available starting from GuC 70.53.0. πŸ¦‹
  • GUC_KLV_VF_CFG_ENGINE_GROUP_PREEMPT_TIMEOUT' β€” 0x8A0F β€” this config sets the VFs-preemption-timeout for each scheduling group in microseconds. The driver must provide an array of values, with each of them matching the respective group index (first value goes to group 0, second to group 1, etc). The setting of group values follows the same behavior and rules as setting via GUC_KLV_VF_CFG_PREEMPT_TIMEOUT. Note that the GuC always sets the EQ for all groups (even the non-enabled ones), so if we provide fewer values than the max the GuC will use 0 for the remaining groups. This KLV is available starting from GuC 70.53.0. 🌸

πŸ‘€ SEE ALSO

  • Kernel file ./drivers/gpu/drm/xe/abi/guc_klvs_abi.h
  • GuC KLV(9)
  • GuC Global Config KLVs(9)
  • GuC Self Config KLVs(9)
  • GuC Opt In Feature KLVs(9)
  • GuC Scheduling Policies KLVs(9)
  • GuC VGT Policy KLVs(9)
  • GuC Reserved KLVs(9)

and that's the whole vibe, bestie 🫢 β€” this page comes from source/version ./drivers/gpu/drm/xe/abi, dated October 2026, and its manual title is GuC VF Configuration KLVs(9). slay πŸ’…

πŸ“¦ where this page comes from