All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jacek Lawrynowicz <jacek.lawrynowicz@linux.intel.com>
To: Maciej Falkowski <maciej.falkowski@linux.intel.com>,
	dri-devel@lists.freedesktop.org
Cc: oded.gabbay@gmail.com, quic_jhugo@quicinc.com,
	Karol Wachowski <karol.wachowski@intel.com>
Subject: Re: [PATCH 06/14] accel/ivpu: Dump only first MMU fault from single context
Date: Thu, 9 Jan 2025 09:26:57 +0100	[thread overview]
Message-ID: <e696c647-d60a-4f03-9f37-315bed2a7cab@linux.intel.com> (raw)
In-Reply-To: <20250107173238.381120-7-maciej.falkowski@linux.intel.com>

Reviewed-by: Jacek Lawrynowicz <jacek.lawrynowicz@linux.intel.com>

On 1/7/2025 6:32 PM, Maciej Falkowski wrote:
> From: Karol Wachowski <karol.wachowski@intel.com>
> 
> Stop dumping consecutive faults from an already faulty context immediately,
> instead of waiting for the context abort thread handler (IRQ handler bottom
> half) to abort currently executing jobs.
> 
> Remove 'R' (record events) bit from context descriptor of a faulty
> context to prevent future faults generation.
> 
> This change speeds up the IRQ handler by eliminating the need to print the
> fault content repeatedly. Additionally, it prevents flooding dmesg with
> errors, which was occurring due to the delay in the bottom half of the
> handler stopping fault-generating jobs.
> 
> Signed-off-by: Karol Wachowski <karol.wachowski@intel.com>
> Signed-off-by: Maciej Falkowski <maciej.falkowski@linux.intel.com>
> ---
>  drivers/accel/ivpu/ivpu_mmu.c         | 51 ++++++++++++++++++++++++---
>  drivers/accel/ivpu/ivpu_mmu_context.c | 13 -------
>  drivers/accel/ivpu/ivpu_mmu_context.h |  2 --
>  3 files changed, 46 insertions(+), 20 deletions(-)
> 
> diff --git a/drivers/accel/ivpu/ivpu_mmu.c b/drivers/accel/ivpu/ivpu_mmu.c
> index 21f820dd0c65..5ee4df892b3e 100644
> --- a/drivers/accel/ivpu/ivpu_mmu.c
> +++ b/drivers/accel/ivpu/ivpu_mmu.c
> @@ -870,23 +870,64 @@ static u32 *ivpu_mmu_get_event(struct ivpu_device *vdev)
>  	return evt;
>  }
>  
> +static int ivpu_mmu_disable_events(struct ivpu_device *vdev, u32 ssid)
> +{
> +	struct ivpu_mmu_info *mmu = vdev->mmu;
> +	struct ivpu_mmu_cdtab *cdtab = &mmu->cdtab;
> +	u64 *entry;
> +	u64 val;
> +
> +	if (ssid > IVPU_MMU_CDTAB_ENT_COUNT)
> +		return -EINVAL;
> +
> +	entry = cdtab->base + (ssid * IVPU_MMU_CDTAB_ENT_SIZE);
> +
> +	val = READ_ONCE(entry[0]);
> +	val &= ~IVPU_MMU_CD_0_R;
> +	WRITE_ONCE(entry[0], val);
> +
> +	if (!ivpu_is_force_snoop_enabled(vdev))
> +		clflush_cache_range(entry, IVPU_MMU_CDTAB_ENT_SIZE);
> +
> +	ivpu_mmu_cmdq_write_cfgi_all(vdev);
> +
> +	return 0;
> +}
> +
>  void ivpu_mmu_irq_evtq_handler(struct ivpu_device *vdev)
>  {
> +	struct ivpu_file_priv *file_priv;
> +	u32 last_ssid = -1;
>  	u32 *event;
>  	u32 ssid;
>  
>  	ivpu_dbg(vdev, IRQ, "MMU event queue\n");
>  
> -	while ((event = ivpu_mmu_get_event(vdev)) != NULL) {
> -		ivpu_mmu_dump_event(vdev, event);
> -
> +	while ((event = ivpu_mmu_get_event(vdev))) {
>  		ssid = FIELD_GET(IVPU_MMU_EVT_SSID_MASK, event[0]);
> +
> +		if (ssid == last_ssid)
> +			continue;
> +
> +		xa_lock(&vdev->context_xa);
> +		file_priv = xa_load(&vdev->context_xa, ssid);
> +		if (file_priv) {
> +			if (file_priv->has_mmu_faults) {
> +				event = NULL;
> +			} else {
> +				ivpu_mmu_disable_events(vdev, ssid);
> +				file_priv->has_mmu_faults = true;
> +			}
> +		}
> +		xa_unlock(&vdev->context_xa);
> +
> +		if (event)
> +			ivpu_mmu_dump_event(vdev, event);
> +
>  		if (ssid == IVPU_GLOBAL_CONTEXT_MMU_SSID) {
>  			ivpu_pm_trigger_recovery(vdev, "MMU event");
>  			return;
>  		}
> -
> -		ivpu_mmu_user_context_mark_invalid(vdev, ssid);
>  		REGV_WR32(IVPU_MMU_REG_EVTQ_CONS_SEC, vdev->mmu->evtq.cons);
>  	}
>  
> diff --git a/drivers/accel/ivpu/ivpu_mmu_context.c b/drivers/accel/ivpu/ivpu_mmu_context.c
> index 891967a95bc3..d373443bbc83 100644
> --- a/drivers/accel/ivpu/ivpu_mmu_context.c
> +++ b/drivers/accel/ivpu/ivpu_mmu_context.c
> @@ -631,16 +631,3 @@ void ivpu_mmu_reserved_context_fini(struct ivpu_device *vdev)
>  	ivpu_mmu_cd_clear(vdev, vdev->rctx.id);
>  	ivpu_mmu_context_fini(vdev, &vdev->rctx);
>  }
> -
> -void ivpu_mmu_user_context_mark_invalid(struct ivpu_device *vdev, u32 ssid)
> -{
> -	struct ivpu_file_priv *file_priv;
> -
> -	xa_lock(&vdev->context_xa);
> -
> -	file_priv = xa_load(&vdev->context_xa, ssid);
> -	if (file_priv)
> -		file_priv->has_mmu_faults = true;
> -
> -	xa_unlock(&vdev->context_xa);
> -}
> diff --git a/drivers/accel/ivpu/ivpu_mmu_context.h b/drivers/accel/ivpu/ivpu_mmu_context.h
> index 8042fc067062..f255310968cf 100644
> --- a/drivers/accel/ivpu/ivpu_mmu_context.h
> +++ b/drivers/accel/ivpu/ivpu_mmu_context.h
> @@ -37,8 +37,6 @@ void ivpu_mmu_global_context_fini(struct ivpu_device *vdev);
>  int ivpu_mmu_reserved_context_init(struct ivpu_device *vdev);
>  void ivpu_mmu_reserved_context_fini(struct ivpu_device *vdev);
>  
> -void ivpu_mmu_user_context_mark_invalid(struct ivpu_device *vdev, u32 ssid);
> -
>  int ivpu_mmu_context_insert_node(struct ivpu_mmu_context *ctx, const struct ivpu_addr_range *range,
>  				 u64 size, struct drm_mm_node *node);
>  void ivpu_mmu_context_remove_node(struct ivpu_mmu_context *ctx, struct drm_mm_node *node);


  reply	other threads:[~2025-01-09  8:27 UTC|newest]

Thread overview: 33+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-01-07 17:32 [PATCH 00/14] accel/ivpu: Changes for 6.14 Maciej Falkowski
2025-01-07 17:32 ` [PATCH 01/14] accel/ivpu: Separate DB ID and CMDQ ID allocations from CMDQ allocation Maciej Falkowski
2025-01-09  8:22   ` Jacek Lawrynowicz
2025-01-07 17:32 ` [PATCH 02/14] accel/ivpu: Add API for command queue create/destroy/submit Maciej Falkowski
2025-01-09  8:22   ` Jacek Lawrynowicz
2025-01-07 17:32 ` [PATCH 03/14] accel/ivpu: Abort all jobs after command queue unregister Maciej Falkowski
2025-01-09  8:23   ` Jacek Lawrynowicz
2025-01-07 17:32 ` [PATCH 04/14] accel/ivpu: Expose NPU memory utilization info in sysfs Maciej Falkowski
2025-01-08 19:53   ` Lizhi Hou
2025-01-09  8:19     ` Jacek Lawrynowicz
2025-01-09  8:24   ` Jacek Lawrynowicz
2025-01-07 17:32 ` [PATCH 05/14] accel/ivpu: Use workqueue for IRQ handling Maciej Falkowski
2025-01-09  8:26   ` Jacek Lawrynowicz
2025-01-07 17:32 ` [PATCH 06/14] accel/ivpu: Dump only first MMU fault from single context Maciej Falkowski
2025-01-09  8:26   ` Jacek Lawrynowicz [this message]
2025-01-07 17:32 ` [PATCH 07/14] accel/ivpu: Move parts of MMU event IRQ handling to thread handler Maciej Falkowski
2025-01-09  8:27   ` Jacek Lawrynowicz
2025-01-07 17:32 ` [PATCH 08/14] accel/ivpu: Fix missing MMU events from reserved SSID Maciej Falkowski
2025-01-09  8:27   ` Jacek Lawrynowicz
2025-01-07 17:32 ` [PATCH 09/14] accel/ivpu: Set command queue management capability based on HWS Maciej Falkowski
2025-01-09  8:28   ` Jacek Lawrynowicz
2025-01-07 17:32 ` [PATCH 10/14] accel/ivpu: Fix locking order in ivpu_cmdq_destroy_ioctl Maciej Falkowski
2025-01-09  8:28   ` Jacek Lawrynowicz
2025-01-07 17:32 ` [PATCH 11/14] accel/ivpu: Fix locking order in ivpu_job_submit Maciej Falkowski
2025-01-09  8:28   ` Jacek Lawrynowicz
2025-01-07 17:32 ` [PATCH 12/14] accel/ivpu: Add handling of VPU_JSM_STATUS_MVNCI_CONTEXT_VIOLATION_HW Maciej Falkowski
2025-01-09  8:29   ` Jacek Lawrynowicz
2025-01-07 17:32 ` [PATCH 13/14] accel/ivpu: Add platform detection for presilicon Maciej Falkowski
2025-01-09  8:29   ` Jacek Lawrynowicz
2025-01-07 17:32 ` [PATCH 14/14] accel/ivpu: Enable HWS by default on all platforms Maciej Falkowski
2025-01-08 18:19 ` [PATCH 00/14] accel/ivpu: Changes for 6.14 Simona Vetter
2025-01-09  8:14   ` Jacek Lawrynowicz
2025-01-09  8:43 ` Jacek Lawrynowicz

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=e696c647-d60a-4f03-9f37-315bed2a7cab@linux.intel.com \
    --to=jacek.lawrynowicz@linux.intel.com \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=karol.wachowski@intel.com \
    --cc=maciej.falkowski@linux.intel.com \
    --cc=oded.gabbay@gmail.com \
    --cc=quic_jhugo@quicinc.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.