2021-04-20 15:45:43

by Michael Kelley (LINUX)

[permalink] [raw]
Subject: [PATCH 1/1] video: hyperv_fb: Add ratelimit on error message

Due to a full ring buffer, the driver may be unable to send updates to
the Hyper-V host. But outputing the error message can make the problem
worse because console output is also typically written to the frame
buffer. As a result, in some circumstances the error message is output
continuously.

Break the cycle by rate limiting the error message. Also output
the error code for additional diagnosability.

Signed-off-by: Michael Kelley <[email protected]>
---
drivers/video/fbdev/hyperv_fb.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/video/fbdev/hyperv_fb.c b/drivers/video/fbdev/hyperv_fb.c
index 4dc9077..a7e6eea 100644
--- a/drivers/video/fbdev/hyperv_fb.c
+++ b/drivers/video/fbdev/hyperv_fb.c
@@ -308,7 +308,7 @@ static inline int synthvid_send(struct hv_device *hdev,
VM_PKT_DATA_INBAND, 0);

if (ret)
- pr_err("Unable to send packet via vmbus\n");
+ pr_err_ratelimited("Unable to send packet via vmbus; error %d\n", ret);

return ret;
}
--
1.8.3.1


2021-04-20 19:53:44

by Wei Liu

[permalink] [raw]
Subject: Re: [PATCH 1/1] video: hyperv_fb: Add ratelimit on error message

On Tue, Apr 20, 2021 at 08:44:19AM -0700, Michael Kelley wrote:
> Due to a full ring buffer, the driver may be unable to send updates to
> the Hyper-V host. But outputing the error message can make the problem
> worse because console output is also typically written to the frame
> buffer. As a result, in some circumstances the error message is output
> continuously.
>
> Break the cycle by rate limiting the error message. Also output
> the error code for additional diagnosability.
>
> Signed-off-by: Michael Kelley <[email protected]>

Applied to hyperv-next. Thanks.

> ---
> drivers/video/fbdev/hyperv_fb.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/drivers/video/fbdev/hyperv_fb.c b/drivers/video/fbdev/hyperv_fb.c
> index 4dc9077..a7e6eea 100644
> --- a/drivers/video/fbdev/hyperv_fb.c
> +++ b/drivers/video/fbdev/hyperv_fb.c
> @@ -308,7 +308,7 @@ static inline int synthvid_send(struct hv_device *hdev,
> VM_PKT_DATA_INBAND, 0);
>
> if (ret)
> - pr_err("Unable to send packet via vmbus\n");
> + pr_err_ratelimited("Unable to send packet via vmbus; error %d\n", ret);
>
> return ret;
> }
> --
> 1.8.3.1
>

2021-04-20 20:00:27

by Joe Perches

[permalink] [raw]
Subject: Re: [PATCH 1/1] video: hyperv_fb: Add ratelimit on error message

On Tue, 2021-04-20 at 08:44 -0700, Michael Kelley wrote:
> Due to a full ring buffer, the driver may be unable to send updates to
> the Hyper-V host. But outputing the error message can make the problem
> worse because console output is also typically written to the frame
> buffer. As a result, in some circumstances the error message is output
> continuously.
>
> Break the cycle by rate limiting the error message. Also output
> the error code for additional diagnosability.
>
> Signed-off-by: Michael Kelley <[email protected]>

None of the callers of this function ever check the return status.
Why is important/useful to emit this message at all?

> ---
> ?drivers/video/fbdev/hyperv_fb.c | 2 +-
> ?1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/drivers/video/fbdev/hyperv_fb.c b/drivers/video/fbdev/hyperv_fb.c
> index 4dc9077..a7e6eea 100644
> --- a/drivers/video/fbdev/hyperv_fb.c
> +++ b/drivers/video/fbdev/hyperv_fb.c
> @@ -308,7 +308,7 @@ static inline int synthvid_send(struct hv_device *hdev,
> ? VM_PKT_DATA_INBAND, 0);
> ?
>
> ? if (ret)
> - pr_err("Unable to send packet via vmbus\n");
> + pr_err_ratelimited("Unable to send packet via vmbus; error %d\n", ret);
> ?
>
> ? return ret;
> ?}


2021-04-21 21:12:17

by Michael Kelley (LINUX)

[permalink] [raw]
Subject: RE: [PATCH 1/1] video: hyperv_fb: Add ratelimit on error message

From: Joe Perches <[email protected]> Sent: Tuesday, April 20, 2021 12:59 PM
>
> On Tue, 2021-04-20 at 08:44 -0700, Michael Kelley wrote:
> > Due to a full ring buffer, the driver may be unable to send updates to
> > the Hyper-V host. But outputing the error message can make the problem
> > worse because console output is also typically written to the frame
> > buffer. As a result, in some circumstances the error message is output
> > continuously.
> >
> > Break the cycle by rate limiting the error message. Also output
> > the error code for additional diagnosability.
> >
> > Signed-off-by: Michael Kelley <[email protected]>
>
> None of the callers of this function ever check the return status.
> Why is important/useful to emit this message at all?
>

Except during device initialization, the messages tell Hyper-V
about updates to the frame buffer contents. The fbdev
framework functions (such as fillrect) that eventually call synthvid_send()
are void functions. So the message is the only alert that something
has gone wrong in the communication with Hyper-V, which makes
it useful for diagnostic purposes.

Michael


> > ---
> > ?drivers/video/fbdev/hyperv_fb.c | 2 +-
> > ?1 file changed, 1 insertion(+), 1 deletion(-)
> >
> > diff --git a/drivers/video/fbdev/hyperv_fb.c b/drivers/video/fbdev/hyperv_fb.c
> > index 4dc9077..a7e6eea 100644
> > --- a/drivers/video/fbdev/hyperv_fb.c
> > +++ b/drivers/video/fbdev/hyperv_fb.c
> > @@ -308,7 +308,7 @@ static inline int synthvid_send(struct hv_device *hdev,
> > ? VM_PKT_DATA_INBAND, 0);
> >
> >
> > ? if (ret)
> > - pr_err("Unable to send packet via vmbus\n");
> > + pr_err_ratelimited("Unable to send packet via vmbus; error %d\n", ret);
> >
> >
> > ? return ret;
> > ?}
>