lkml.org 
[lkml]   [2020]   [Mar]   [30]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v4 21/25] nvdimm/ocxl: Implement the heartbeat command
    Date
    The heartbeat admin command is a simple admin command that exercises
    the communication mechanisms within the controller.

    This patch issues a heartbeat command to the card during init to ensure
    we can communicate with the card's controller.

    Signed-off-by: Alastair D'Silva <alastair@d-silva.org>
    Reviewed-by: Andrew Donnellan <ajd@linux.ibm.com>
    ---
    drivers/nvdimm/ocxl/main.c | 30 ++++++++++++++++++++++++++++++
    1 file changed, 30 insertions(+)

    diff --git a/drivers/nvdimm/ocxl/main.c b/drivers/nvdimm/ocxl/main.c
    index a4315472683c..2fbe3f2f77d9 100644
    --- a/drivers/nvdimm/ocxl/main.c
    +++ b/drivers/nvdimm/ocxl/main.c
    @@ -272,6 +272,30 @@ static int setup_command_metadata(struct ocxlpmem *ocxlpmem)
    return 0;
    }

    +/**
    + * heartbeat() - Issue a heartbeat command to the controller
    + * @ocxlpmem: the device metadata
    + * Return: 0 if the controller responded correctly, negative on error
    + */
    +static int heartbeat(struct ocxlpmem *ocxlpmem)
    +{
    + int rc;
    +
    + mutex_lock(&ocxlpmem->admin_command.lock);
    +
    + rc = admin_command_execute(ocxlpmem, ADMIN_COMMAND_HEARTBEAT);
    + if (rc < 0)
    + goto out;
    + if (rc != STATUS_SUCCESS)
    + warn_status(ocxlpmem, "Unexpected status from heartbeat", rc);
    +
    + (void)admin_response_handled(ocxlpmem);
    +
    +out:
    + mutex_unlock(&ocxlpmem->admin_command.lock);
    + return rc;
    +}
    +
    /**
    * allocate_minor() - Allocate a minor number to use for an OpenCAPI pmem device
    * @ocxlpmem: the device metadata
    @@ -1460,6 +1484,12 @@ static int probe(struct pci_dev *pdev, const struct pci_device_id *ent)
    goto err;
    }

    + rc = heartbeat(ocxlpmem);
    + if (rc) {
    + dev_err(&pdev->dev, "Heartbeat failed\n");
    + goto err;
    + }
    +
    elapsed = 0;
    timeout = ocxlpmem->readiness_timeout +
    ocxlpmem->memory_available_timeout;
    --
    2.24.1
    \
     
     \ /
      Last update: 2020-03-30 07:53    [W:4.169 / U:0.040 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site