Message ID | 20220121053816.82253-2-joel@jms.id.au |
---|---|
State | Accepted, archived |
Headers | show |
Series | fsi: sbefifo: Add userspace timeout control | expand |
On 1/20/22 23:38, Joel Stanley wrote: > From: Amitay Isaacs <amitay@ozlabs.org> > > For some of the chip-ops where sbe needs to collect trace information, > sbe can take a long time (>30s) to respond. Currently these chip-ops > will timeout as the start of response timeout defaults to 10s. > > Instead of default value, use specified value. The require timeout > value will be set using ioctl. Reviewed-by: Eddie James <eajames@linux.ibm.com> > > Signed-off-by: Amitay Isaacs <amitay@ozlabs.org> > Signed-off-by: Joel Stanley <joel@jms.id.au> > --- > drivers/fsi/fsi-sbefifo.c | 4 +++- > 1 file changed, 3 insertions(+), 1 deletion(-) > > diff --git a/drivers/fsi/fsi-sbefifo.c b/drivers/fsi/fsi-sbefifo.c > index 52328adef643..1e9b326e8f67 100644 > --- a/drivers/fsi/fsi-sbefifo.c > +++ b/drivers/fsi/fsi-sbefifo.c > @@ -125,6 +125,7 @@ struct sbefifo { > bool dead; > bool async_ffdc; > bool timed_out; > + u32 timeout_start_rsp_ms; > }; > > struct sbefifo_user { > @@ -549,7 +550,7 @@ static int sbefifo_read_response(struct sbefifo *sbefifo, struct iov_iter *respo > > dev_vdbg(dev, "reading response, buflen = %zd\n", iov_iter_count(response)); > > - timeout = msecs_to_jiffies(SBEFIFO_TIMEOUT_START_RSP); > + timeout = msecs_to_jiffies(sbefifo->timeout_start_rsp_ms); > for (;;) { > /* Grab FIFO status (this will handle parity errors) */ > rc = sbefifo_wait(sbefifo, false, &status, timeout); > @@ -972,6 +973,7 @@ static int sbefifo_probe(struct device *dev) > sbefifo->fsi_dev = fsi_dev; > dev_set_drvdata(dev, sbefifo); > mutex_init(&sbefifo->lock); > + sbefifo->timeout_start_rsp_ms = SBEFIFO_TIMEOUT_START_RSP; > > /* > * Try cleaning up the FIFO. If this fails, we still register the
diff --git a/drivers/fsi/fsi-sbefifo.c b/drivers/fsi/fsi-sbefifo.c index 52328adef643..1e9b326e8f67 100644 --- a/drivers/fsi/fsi-sbefifo.c +++ b/drivers/fsi/fsi-sbefifo.c @@ -125,6 +125,7 @@ struct sbefifo { bool dead; bool async_ffdc; bool timed_out; + u32 timeout_start_rsp_ms; }; struct sbefifo_user { @@ -549,7 +550,7 @@ static int sbefifo_read_response(struct sbefifo *sbefifo, struct iov_iter *respo dev_vdbg(dev, "reading response, buflen = %zd\n", iov_iter_count(response)); - timeout = msecs_to_jiffies(SBEFIFO_TIMEOUT_START_RSP); + timeout = msecs_to_jiffies(sbefifo->timeout_start_rsp_ms); for (;;) { /* Grab FIFO status (this will handle parity errors) */ rc = sbefifo_wait(sbefifo, false, &status, timeout); @@ -972,6 +973,7 @@ static int sbefifo_probe(struct device *dev) sbefifo->fsi_dev = fsi_dev; dev_set_drvdata(dev, sbefifo); mutex_init(&sbefifo->lock); + sbefifo->timeout_start_rsp_ms = SBEFIFO_TIMEOUT_START_RSP; /* * Try cleaning up the FIFO. If this fails, we still register the