lkml.org 
[lkml]   [2019]   [Feb]   [11]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.20 087/352] sunvdc: Do not spin in an infinite loop when vio_ldc_send() returns EAGAIN
    Date
    4.20-stable review patch.  If anyone has any objections, please let me know.

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

    [ Upstream commit a11f6ca9aef989b56cd31ff4ee2af4fb31a172ec ]

    __vdc_tx_trigger should only loop on EAGAIN a finite
    number of times.

    See commit adddc32d6fde ("sunvnet: Do not spin in an
    infinite loop when vio_ldc_send() returns EAGAIN") for detail.

    Signed-off-by: Young Xiao <YangX92@hotmail.com>
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/block/sunvdc.c | 5 +++++
    1 file changed, 5 insertions(+)

    diff --git a/drivers/block/sunvdc.c b/drivers/block/sunvdc.c
    index b54fa6726303..6b7b0d8a2acb 100644
    --- a/drivers/block/sunvdc.c
    +++ b/drivers/block/sunvdc.c
    @@ -45,6 +45,8 @@ MODULE_VERSION(DRV_MODULE_VERSION);
    #define WAITING_FOR_GEN_CMD 0x04
    #define WAITING_FOR_ANY -1

    +#define VDC_MAX_RETRIES 10
    +
    static struct workqueue_struct *sunvdc_wq;

    struct vdc_req_entry {
    @@ -431,6 +433,7 @@ static int __vdc_tx_trigger(struct vdc_port *port)
    .end_idx = dr->prod,
    };
    int err, delay;
    + int retries = 0;

    hdr.seq = dr->snd_nxt;
    delay = 1;
    @@ -443,6 +446,8 @@ static int __vdc_tx_trigger(struct vdc_port *port)
    udelay(delay);
    if ((delay <<= 1) > 128)
    delay = 128;
    + if (retries++ > VDC_MAX_RETRIES)
    + break;
    } while (err == -EAGAIN);

    if (err == -ENOTCONN)
    --
    2.19.1


    \
     
     \ /
      Last update: 2019-02-11 15:25    [W:4.087 / U:0.024 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site