Date: Wed, 03 Apr 2019 17:48:52 +0100 From: Andrew Gierth <andrew@tao11.riddles.org.uk> To: Ian Lepore <ian@freebsd.org> Cc: Karl Denninger <karl@denninger.net>, ticso@cicely.de, "freebsd-arm\@freebsd.org" <freebsd-arm@freebsd.org> Subject: Re: insanely-high interrupt rates Message-ID: <874l7fyrpr.fsf@news-spur.riddles.org.uk> In-Reply-To: <dc56a8964cae942354cbe2b5b0620f2eebb569bb.camel@freebsd.org> (Ian Lepore's message of "Tue, 02 Apr 2019 20:58:01 -0600") References: <004ddba628b94b80845d8e509ddcb648d21fd6c9.camel@freebsd.org> <C68D7E6E-03C1-448F-8638-8BD1717DBF44@jeditekunum.com> <ac7d434f16f3a89f5ef247678d6becdbeded5c3f.camel@freebsd.org> <CE40E2B5-2244-4EF9-B67F-34A54D71E2E8@jeditekunum.com> <f60ea6d2-b696-d896-7bcb-ac628f41f7b8@denninger.net> <20190319161423.GH57400@cicely7.cicely.de> <52df098fdc0caf5de1879c93239534fffbd49b56.camel@freebsd.org> <40f57de2-2b25-3981-a416-b9958cc97636@denninger.net> <669892ac3fc37b0843a156c0ab102316829103fd.camel@freebsd.org> <663f2566-b035-7011-70eb-4163b41e6e55@denninger.net> <20190325164827.GL57400@cicely7.cicely.de> <3db9cf8a-68ee-e339-67bf-760ee51464fd@denninger.net> <fc17ac0f77832e840b9fffa9b1074561f1e766d8.camel@freebsd.org> <d96c7f42-f01b-8990-a558-ee92d631b51d@denninger.net> <dc56a8964cae942354cbe2b5b0620f2eebb569bb.camel@freebsd.org>
next in thread | previous in thread | raw e-mail | index | archive | help
--=-=-= Content-Type: text/plain Per my earlier analysis, and the discussion on IRC, I'm now running my RPI2B with the attached patch (against 12-stable). So far, I'm not seeing any issues. I don't think this patch is really a complete fix (in particular, on arm64 I would expect the opposite problem to exist, with spurious physical timer interrupts instead). I'm only running it to confirm my analysis of the problem and to get a working system. It should do fine on 32-bit arm though. -- Andrew. --=-=-= Content-Type: text/x-patch Content-Disposition: inline; filename=armtimer.diff Content-Description: patch to arm generic_timer.c diff --git a/sys/arm/arm/generic_timer.c b/sys/arm/arm/generic_timer.c index df8fca4674c1..08f00608fb67 100644 --- a/sys/arm/arm/generic_timer.c +++ b/sys/arm/arm/generic_timer.c @@ -450,6 +450,8 @@ arm_tmr_attach(device_t dev) /* If we do not have the interrupt, skip it. */ if (sc->res[i] == NULL) continue; + if (sc->physical && i >= 2) + continue; error = bus_setup_intr(dev, sc->res[i], INTR_TYPE_CLK, arm_tmr_intr, NULL, sc, &sc->ihl[i]); if (error) { --=-=-=--
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?874l7fyrpr.fsf>