Re: git: 9e007a88d65b - main - atkbd: Reduce polling rate from 10Hz to ~1Hz.
- In reply to: Warner Losh : "Re: git: 9e007a88d65b - main - atkbd: Reduce polling rate from 10Hz to ~1Hz."
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Wed, 05 Jan 2022 18:19:01 UTC
I saw scenarios with lost edge-triggered MSI interrupts on weird Marvell AHCIs. So I can believe it may be weird for atkbd too, if it is edge-triggered aswell. I haven't looked into its specs for very long time. If you are sure it is not needed, then I have no problem to set it to 0 in separate commit, I've planned that possibility. On 05.01.2022 12:26, Warner Losh wrote: > Maybe we default hw.atkbd.hz to 0. That will give us more info if this > is even a thing still. And it would give users hit by this a no > recompile fix and give us feedback as to how often this happens. > > We used to miss ISA interrupts in the early SMPNG days, and that's the > time this change was introduced. The PIC does a good job of latching the > state and we have no other drivers that have this workaround absent > issues with the device itself. > > Warner > > On Wed, Jan 5, 2022, 9:41 AM Alexander Motin <mav@freebsd.org > <mailto:mav@freebsd.org>> wrote: > > The branch main has been updated by mav: > > URL: > https://cgit.FreeBSD.org/src/commit/?id=9e007a88d65ba0d23e73c3c052d474a78260d503 > <https://cgit.FreeBSD.org/src/commit/?id=9e007a88d65ba0d23e73c3c052d474a78260d503> > > commit 9e007a88d65ba0d23e73c3c052d474a78260d503 > Author: Alexander Motin <mav@FreeBSD.org> > AuthorDate: 2022-01-05 16:32:44 +0000 > Commit: Alexander Motin <mav@FreeBSD.org> > CommitDate: 2022-01-05 16:41:26 +0000 > > atkbd: Reduce polling rate from 10Hz to ~1Hz. > > In my understanding this is only needed to workaround lost > interrupts. > I was thinking to remove it completely, but the comment about edge- > triggered interrupt may be true and needs deeper > investigation. ~1Hz > should be often enough to handle the supposedly rare loss > cases, but > rare enough to not appear in top. Add sysctl hw.atkbd.hz to > tune it. > > MFC after: 1 month > --- > sys/dev/atkbdc/atkbd.c | 15 +++++++++++++-- > 1 file changed, 13 insertions(+), 2 deletions(-) > > diff --git a/sys/dev/atkbdc/atkbd.c b/sys/dev/atkbdc/atkbd.c > index 40dd698984e3..cee1207df973 100644 > --- a/sys/dev/atkbdc/atkbd.c > +++ b/sys/dev/atkbdc/atkbd.c > @@ -42,6 +42,7 @@ __FBSDID("$FreeBSD$"); > #include <sys/proc.h> > #include <sys/limits.h> > #include <sys/malloc.h> > +#include <sys/sysctl.h> > > #include <machine/bus.h> > #include <machine/resource.h> > @@ -73,6 +74,13 @@ typedef struct atkbd_state { > #endif > } atkbd_state_t; > > +static SYSCTL_NODE(_hw, OID_AUTO, atkbd, CTLFLAG_RD | > CTLFLAG_MPSAFE, 0, > + "AT keyboard"); > + > +static int atkbdhz = 1; > +SYSCTL_INT(_hw_atkbd, OID_AUTO, hz, CTLFLAG_RWTUN, &atkbdhz, 0, > + "Polling frequency (in hz)"); > + > static void atkbd_timeout(void *arg); > static int atkbd_reset(KBDC kbdc, int flags, int c); > > @@ -198,8 +206,11 @@ atkbd_timeout(void *arg) > kbdd_intr(kbd, NULL); > } > splx(s); > - state = (atkbd_state_t *)kbd->kb_data; > - callout_reset(&state->ks_timer, hz / 10, atkbd_timeout, arg); > + if (atkbdhz > 0) { > + state = (atkbd_state_t *)kbd->kb_data; > + callout_reset_sbt(&state->ks_timer, SBT_1S / atkbdhz, 0, > + atkbd_timeout, arg, C_PREL(1)); > + } > } > > /* LOW-LEVEL */ > -- Alexander Motin