From 8b47644a43f4d7ab257eb28830ae879b795a32dd Mon Sep 17 00:00:00 2001 From: Martin Spinler Date: Thu, 16 Feb 2023 11:08:00 +0100 Subject: [PATCH] drivers - NDP: [FEATURE] try to restart already running queue on start --- drivers/kernel/drivers/nfb/ndp/ctrl_ndp.c | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/drivers/kernel/drivers/nfb/ndp/ctrl_ndp.c b/drivers/kernel/drivers/nfb/ndp/ctrl_ndp.c index 0e25a0dd..f5b4c000 100644 --- a/drivers/kernel/drivers/nfb/ndp/ctrl_ndp.c +++ b/drivers/kernel/drivers/nfb/ndp/ctrl_ndp.c @@ -454,9 +454,17 @@ static int ndp_ctrl_start(struct ndp_channel *channel, uint64_t *hwptr) ret = nc_ndp_ctrl_start(&ctrl->c, &sp); if (ret == -EALREADY) { - dev_err(ctrl->nfb->dev, "NDP queue %s is in dirty state, can't be started\n", - dev_name(&channel->dev)); - return -1; + /* Try to stop */ + nc_ndp_ctrl_stop_force(&ctrl->c); + msleep(10); + ret = nc_ndp_ctrl_start(&ctrl->c, &sp); + if (ret == 0) { + dev_err(ctrl->nfb->dev, "NDP queue %s was in dirty state, restart seems succesfull, " + "but errors can occur\n", dev_name(&channel->dev)); + } else { + dev_err(ctrl->nfb->dev, "NDP queue %s is in dirty state, can't be started\n", dev_name(&channel->dev)); + return -1; + } } else if (ret) { return ret; }