[PATCH 1/2] drm/xe/pf: Don't send BEGIN_ID if VF has no context/doorbells
Michał Winiarski
michal.winiarski at intel.com
Thu Jan 30 13:20:35 UTC 2025
On Wed, Jan 29, 2025 at 08:59:46PM +0100, Michal Wajdeczko wrote:
> It turned out that GuC validates VF configuration immediately
> after receiving "some" set of configuration KLVs and complains
> if one of the critical, from GuC understanding, resource is left
> unprovisioned, even if PF should be still allowed to make late VF
> config adjustments, since VF was not yet started.
>
> This issue was discovered after we decided to asynchronously
> re-send configuration KLVs after GT reset/resume, as then fair
> VF auto-provisioning could already allocate some of the resources,
> which was a prerequiste for sending those config KLVs:
>
> # fair GGTT provisioning
> [] xe 0000:00:02.0: [drm] GT0: PF: pushed VF1 config with 2 KLVs:
> [] xe 0000:00:02.0: [drm] GT0: { key 0x0001 : 64b value 0x176a000 } # ggtt_start
> [] xe 0000:00:02.0: [drm] GT0: { key 0x0002 : 64b value 0xfd696000 } # ggtt_size
> [] xe 0000:00:02.0: [drm] GT0: PF: VF1 provisioned with 4251541504 (3.96 GiB) GGTT
> # re-provisioning worker
> [] xe 0000:00:02.0: [drm] *ERROR* GT0: H2G request 0x5503 failed: error 0x60 hint 0x0
> [] xe 0000:00:02.0: [drm] GT0: PF: Failed to push VF1 14 config KLVs (-EIO)
> [] xe 0000:00:02.0: [drm] GT0: { key 0x0001 : 64b value 0x176a000 } # ggtt_start
> [] xe 0000:00:02.0: [drm] GT0: { key 0x0002 : 64b value 0xfd696000 } # ggtt_size
> [] xe 0000:00:02.0: [drm] GT0: { key 0x8a0b : 32b value 0 } # begin_ctx_id
> [] xe 0000:00:02.0: [drm] GT0: { key 0x0004 : 32b value 0 } # num_contexts
> [] xe 0000:00:02.0: [drm] GT0: { key 0x8a0a : 32b value 0 } # begin_db_id
> [] xe 0000:00:02.0: [drm] GT0: { key 0x0006 : 32b value 0 } # num_doorbells
> [] xe 0000:00:02.0: [drm] GT0: { key 0x8a01 : 32b value 0 } # exec_quantum
> [] xe 0000:00:02.0: [drm] GT0: { key 0x8a02 : 32b value 0 } # preempt_timeout
> [] xe 0000:00:02.0: [drm] GT0: { key 0x8a03 : 32b value 0 } # cat_error_count
> [] xe 0000:00:02.0: [drm] GT0: { key 0x8a04 : 32b value 0 } # engine_reset_count
> [] xe 0000:00:02.0: [drm] GT0: { key 0x8a05 : 32b value 0 } # page_fault_count
> [] xe 0000:00:02.0: [drm] GT0: { key 0x8a06 : 32b value 0 } # guc_time_us
> [] xe 0000:00:02.0: [drm] GT0: { key 0x8a07 : 32b value 0 } # irq_time_us
> [] xe 0000:00:02.0: [drm] GT0: { key 0x8a08 : 32b value 0 } # doorbell_time_us
> [] xe 0000:00:02.0: [drm] GT0: PF: Failed to push VF1 configuration (-EIO)
>
> To avoid such errors stop sending BEGIN_CONTEXT/DOORBELL_ID KLVs
> if no GuC context/doorbell IDs were provisioned to VF.
>
> Closes: https://gitlab.freedesktop.org/drm/xe/kernel/-/issues/4176
> Signed-off-by: Michal Wajdeczko <michal.wajdeczko at intel.com>
Reviewed-by: Michał Winiarski <michal.winiarski at intel.com>
-Michał
More information about the Intel-xe
mailing list