Re: [RFC PATCH v2 2/4] cxl: Add default timeout for bg mailbox commands

Jonathan Cameron
2024-10-17T15:32:19Z

On Wed, 16 Oct 2024 04:59:58 +0000
Ravis OpenSrc <Ravis.OpenSrc@micron.com> wrote:

> Allows 5s wait when no timeout parameter is explicitly mentioned.
>
> It is useful for mailbox commands to be executed in background
> when initiated from userspace.
>
> Link:
> https://lore.kernel.org/linux-mm/20240215123410.00003b8c@Huawei.com/T/
>
> Signed-off-by: Ajay Joshi <ajay.opensrc@micron.com>
> Signed-off-by: Ravi Shankar <ravis.opensrc@micron.com>
Other than patch formatting, this seems reasonable to me.

Jonathan

> ---
>  drivers/cxl/pci.c | 13 +++++++++++++
>  1 file changed, 13 insertions(+)
>
> diff --git a/drivers/cxl/pci.c b/drivers/cxl/pci.c
> index 188412d45e0d..d5d6142f6aa3 100644
> --- a/drivers/cxl/pci.c
> +++ b/drivers/cxl/pci.c
> @@ -41,6 +41,10 @@
>  /* CXL 2.0 - 8.2.8.4 */
>  #define CXL_MAILBOX_TIMEOUT_MS (2 * HZ)
>
> +/* Default timeout for background operations */
> +#define CXL_BG_POLL_CNT                        5
> +#define CXL_BG_POLL_INTERVAL_MS                1000
> +
>  /*
>   * CXL 2.0 ECN "Add Mailbox Ready Time" defines a capability field to
>   * dictate how long to wait for the mailbox to become ready. The new
> @@ -317,6 +321,15 @@ static int __cxl_pci_mbox_send_cmd(struct cxl_mailbox *cxl_mbox,
>                  dev_dbg(dev, "Mailbox background operation (0x%04x) started\n",
>                          mbox_cmd->opcode);
>
> +               /*
> +                * Add a default timeout of 5 seconds when background operation
> +                * starts but no timeout is specified.
> +                */
> +               if (!mbox_cmd->poll_interval_ms) {
> +                       mbox_cmd->poll_interval_ms = CXL_BG_POLL_INTERVAL_MS;
> +                       mbox_cmd->poll_count = CXL_BG_POLL_CNT;
> +               }
> +
>                  timeout = mbox_cmd->poll_interval_ms;
>                  for (i = 0; i < mbox_cmd->poll_count; i++) {
>                          if (rcuwait_wait_event_timeout(&cxl_mbox->mbox_wait,