lkml.org 
[lkml]   [2019]   [Apr]   [4]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.0 104/246] s390/ism: ignore some errors during deregistration
    Date
    5.0-stable review patch.  If anyone has any objections, please let me know.

    ------------------

    [ Upstream commit 0ff06c44efeede4acd068847d3bf8cf894b6c664 ]

    Prior to dma unmap/free operations the ism driver tries to ensure
    that the memory is no longer accessed by the HW. When errors
    during deregistration of memory regions from the HW occur the ism
    driver will not unmap/free this memory.

    When we receive notification from the hypervisor that a PCI function
    has been detached we can no longer access the device and would never
    unmap/free these memory regions which led to complaints by the DMA
    debug API.

    Treat this kind of errors during the deregistration of memory regions
    from the HW as success since it is already ensured that the memory
    is no longer accessed by HW.

    Reported-by: Karsten Graul <kgraul@linux.ibm.com>
    Reported-by: Hans Wippel <hwippel@linux.ibm.com>
    Signed-off-by: Sebastian Ott <sebott@linux.ibm.com>
    Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/s390/net/ism_drv.c | 12 +++++++++---
    1 file changed, 9 insertions(+), 3 deletions(-)

    diff --git a/drivers/s390/net/ism_drv.c b/drivers/s390/net/ism_drv.c
    index ed8e58f09054..3e132592c1fe 100644
    --- a/drivers/s390/net/ism_drv.c
    +++ b/drivers/s390/net/ism_drv.c
    @@ -141,10 +141,13 @@ static int register_ieq(struct ism_dev *ism)

    static int unregister_sba(struct ism_dev *ism)
    {
    + int ret;
    +
    if (!ism->sba)
    return 0;

    - if (ism_cmd_simple(ism, ISM_UNREG_SBA))
    + ret = ism_cmd_simple(ism, ISM_UNREG_SBA);
    + if (ret && ret != ISM_ERROR)
    return -EIO;

    dma_free_coherent(&ism->pdev->dev, PAGE_SIZE,
    @@ -158,10 +161,13 @@ static int unregister_sba(struct ism_dev *ism)

    static int unregister_ieq(struct ism_dev *ism)
    {
    + int ret;
    +
    if (!ism->ieq)
    return 0;

    - if (ism_cmd_simple(ism, ISM_UNREG_IEQ))
    + ret = ism_cmd_simple(ism, ISM_UNREG_IEQ);
    + if (ret && ret != ISM_ERROR)
    return -EIO;

    dma_free_coherent(&ism->pdev->dev, PAGE_SIZE,
    @@ -287,7 +293,7 @@ static int ism_unregister_dmb(struct smcd_dev *smcd, struct smcd_dmb *dmb)
    cmd.request.dmb_tok = dmb->dmb_tok;

    ret = ism_cmd(ism, &cmd);
    - if (ret)
    + if (ret && ret != ISM_ERROR)
    goto out;

    ism_free_dmb(ism, dmb);
    --
    2.19.1


    \
     
     \ /
      Last update: 2019-04-04 11:27    [W:4.106 / U:0.440 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site