linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Oded Gabbay <oded.gabbay@gmail.com>
To: Tomer Tayar <ttayar@habana.ai>
Cc: "linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH v2 3/3] habanalabs: Add busy engines bitmask to HW idle IOCTL
Date: Wed, 3 Jul 2019 10:31:28 +0300	[thread overview]
Message-ID: <CAFCwf12mnOY+QxVY-Ro5vkuso_Zb5LLAka9AJy4hvMQ4i7G3nQ@mail.gmail.com> (raw)
In-Reply-To: <20190701135933.30544-3-ttayar@habana.ai>

On Mon, Jul 1, 2019 at 4:59 PM Tomer Tayar <ttayar@habana.ai> wrote:
>
> The information which is currently provided as a response to the
> "HL_INFO_HW_IDLE" IOCTL is merely a general boolean value.
> This patch extends it and provides also a bitmask that indicates which
> of the device engines are busy.
>
> Signed-off-by: Tomer Tayar <ttayar@habana.ai>
> ---
>  drivers/misc/habanalabs/debugfs.c          |  2 +-
>  drivers/misc/habanalabs/goya/goya.c        | 11 ++++++--
>  drivers/misc/habanalabs/habanalabs.h       |  3 ++-
>  drivers/misc/habanalabs/habanalabs_ioctl.c |  3 ++-
>  include/uapi/misc/habanalabs.h             | 30 +++++++++++++++++++++-
>  5 files changed, 43 insertions(+), 6 deletions(-)
>
> diff --git a/drivers/misc/habanalabs/debugfs.c b/drivers/misc/habanalabs/debugfs.c
> index 6a5dfb14eca1..18e499c900c7 100644
> --- a/drivers/misc/habanalabs/debugfs.c
> +++ b/drivers/misc/habanalabs/debugfs.c
> @@ -506,7 +506,7 @@ static int engines_show(struct seq_file *s, void *data)
>         struct hl_dbg_device_entry *dev_entry = entry->dev_entry;
>         struct hl_device *hdev = dev_entry->hdev;
>
> -       hdev->asic_funcs->is_device_idle(hdev, s);
> +       hdev->asic_funcs->is_device_idle(hdev, NULL, s);
>
>         return 0;
>  }
> diff --git a/drivers/misc/habanalabs/goya/goya.c b/drivers/misc/habanalabs/goya/goya.c
> index 41e97531f300..75294ec65257 100644
> --- a/drivers/misc/habanalabs/goya/goya.c
> +++ b/drivers/misc/habanalabs/goya/goya.c
> @@ -2828,7 +2828,7 @@ static int goya_send_job_on_qman0(struct hl_device *hdev, struct hl_cs_job *job)
>         else
>                 timeout = HL_DEVICE_TIMEOUT_USEC;
>
> -       if (!hdev->asic_funcs->is_device_idle(hdev, NULL)) {
> +       if (!hdev->asic_funcs->is_device_idle(hdev, NULL, NULL)) {
>                 dev_err_ratelimited(hdev->dev,
>                         "Can't send KMD job on QMAN0 because the device is not idle\n");
>                 return -EBUSY;
> @@ -4914,7 +4914,8 @@ int goya_armcp_info_get(struct hl_device *hdev)
>         return 0;
>  }
>
> -static bool goya_is_device_idle(struct hl_device *hdev, struct seq_file *s)
> +static bool goya_is_device_idle(struct hl_device *hdev, u32 *mask,
> +                               struct seq_file *s)
>  {
>         const char *fmt = "%-5d%-9s%#-14x%#-16x%#x\n";
>         const char *dma_fmt = "%-5d%-9s%#-14x%#x\n";
> @@ -4937,6 +4938,8 @@ static bool goya_is_device_idle(struct hl_device *hdev, struct seq_file *s)
>                                 IS_DMA_IDLE(dma_core_sts0);
>                 is_idle &= is_eng_idle;
>
> +               if (mask)
> +                       *mask |= !is_eng_idle << (GOYA_ENGINE_ID_DMA_0 + i);
>                 if (s)
>                         seq_printf(s, dma_fmt, i, is_eng_idle ? "Y" : "N",
>                                         qm_glbl_sts0, dma_core_sts0);
> @@ -4958,6 +4961,8 @@ static bool goya_is_device_idle(struct hl_device *hdev, struct seq_file *s)
>                                 IS_TPC_IDLE(tpc_cfg_sts);
>                 is_idle &= is_eng_idle;
>
> +               if (mask)
> +                       *mask |= !is_eng_idle << (GOYA_ENGINE_ID_TPC_0 + i);
>                 if (s)
>                         seq_printf(s, fmt, i, is_eng_idle ? "Y" : "N",
>                                 qm_glbl_sts0, cmdq_glbl_sts0, tpc_cfg_sts);
> @@ -4976,6 +4981,8 @@ static bool goya_is_device_idle(struct hl_device *hdev, struct seq_file *s)
>                         IS_MME_IDLE(mme_arch_sts);
>         is_idle &= is_eng_idle;
>
> +       if (mask)
> +               *mask |= !is_eng_idle << GOYA_ENGINE_ID_MME_0;
>         if (s) {
>                 seq_printf(s, fmt, 0, is_eng_idle ? "Y" : "N", qm_glbl_sts0,
>                                 cmdq_glbl_sts0, mme_arch_sts);
> diff --git a/drivers/misc/habanalabs/habanalabs.h b/drivers/misc/habanalabs/habanalabs.h
> index 2c9ea61099b4..10da9940ee0d 100644
> --- a/drivers/misc/habanalabs/habanalabs.h
> +++ b/drivers/misc/habanalabs/habanalabs.h
> @@ -557,7 +557,8 @@ struct hl_asic_funcs {
>                         u32 asid, u64 va, u64 size);
>         int (*send_heartbeat)(struct hl_device *hdev);
>         int (*debug_coresight)(struct hl_device *hdev, void *data);
> -       bool (*is_device_idle)(struct hl_device *hdev, struct seq_file *s);
> +       bool (*is_device_idle)(struct hl_device *hdev, u32 *mask,
> +                               struct seq_file *s);
>         int (*soft_reset_late_init)(struct hl_device *hdev);
>         void (*hw_queues_lock)(struct hl_device *hdev);
>         void (*hw_queues_unlock)(struct hl_device *hdev);
> diff --git a/drivers/misc/habanalabs/habanalabs_ioctl.c b/drivers/misc/habanalabs/habanalabs_ioctl.c
> index b04585af27ad..07127576b3e8 100644
> --- a/drivers/misc/habanalabs/habanalabs_ioctl.c
> +++ b/drivers/misc/habanalabs/habanalabs_ioctl.c
> @@ -119,7 +119,8 @@ static int hw_idle(struct hl_device *hdev, struct hl_info_args *args)
>         if ((!max_size) || (!out))
>                 return -EINVAL;
>
> -       hw_idle.is_idle = hdev->asic_funcs->is_device_idle(hdev, NULL);
> +       hw_idle.is_idle = hdev->asic_funcs->is_device_idle(hdev,
> +                                       &hw_idle.busy_engines_mask, NULL);
>
>         return copy_to_user(out, &hw_idle,
>                 min((size_t) max_size, sizeof(hw_idle))) ? -EFAULT : 0;
> diff --git a/include/uapi/misc/habanalabs.h b/include/uapi/misc/habanalabs.h
> index 204ab9b4ae67..3956c226ca35 100644
> --- a/include/uapi/misc/habanalabs.h
> +++ b/include/uapi/misc/habanalabs.h
> @@ -45,6 +45,30 @@ enum goya_queue_id {
>         GOYA_QUEUE_ID_SIZE
>  };
>
> +/*
> + * Engine Numbering
> + *
> + * Used in the "busy_engines_mask" field in `struct hl_info_hw_idle'
> + */
> +
> +enum goya_engine_id {
> +       GOYA_ENGINE_ID_DMA_0 = 0,
> +       GOYA_ENGINE_ID_DMA_1,
> +       GOYA_ENGINE_ID_DMA_2,
> +       GOYA_ENGINE_ID_DMA_3,
> +       GOYA_ENGINE_ID_DMA_4,
> +       GOYA_ENGINE_ID_MME_0,
> +       GOYA_ENGINE_ID_TPC_0,
> +       GOYA_ENGINE_ID_TPC_1,
> +       GOYA_ENGINE_ID_TPC_2,
> +       GOYA_ENGINE_ID_TPC_3,
> +       GOYA_ENGINE_ID_TPC_4,
> +       GOYA_ENGINE_ID_TPC_5,
> +       GOYA_ENGINE_ID_TPC_6,
> +       GOYA_ENGINE_ID_TPC_7,
> +       GOYA_ENGINE_ID_SIZE
> +};
> +
>  enum hl_device_status {
>         HL_DEVICE_STATUS_OPERATIONAL,
>         HL_DEVICE_STATUS_IN_RESET,
> @@ -86,7 +110,11 @@ struct hl_info_dram_usage {
>
>  struct hl_info_hw_idle {
>         __u32 is_idle;
> -       __u32 pad;
> +       /*
> +        * Bitmask of busy engines.
> +        * Bits definition is according to `enum <chip>_enging_id'.
> +        */
> +       __u32 busy_engines_mask;
>  };
>
>  struct hl_info_device_status {
> --
> 2.17.1
>

This patch-set is:
Reviewed-by: Oded Gabbay <oded.gabbay@gmail.com>

  reply	other threads:[~2019-07-03  7:31 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-07-01 13:59 [PATCH v2 1/3] habanalabs: Update the device idle check Tomer Tayar
2019-07-01 13:59 ` [PATCH v2 3/3] habanalabs: Add busy engines bitmask to HW idle IOCTL Tomer Tayar
2019-07-03  7:31   ` Oded Gabbay [this message]
2019-07-01 13:59 ` [PATCH v2 2/3] habanalabs: Add debugfs node for engines status Tomer Tayar

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=CAFCwf12mnOY+QxVY-Ro5vkuso_Zb5LLAka9AJy4hvMQ4i7G3nQ@mail.gmail.com \
    --to=oded.gabbay@gmail.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=ttayar@habana.ai \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).