Date: Tue, 20 Apr 2021 12:07:01 -0700 From: Mark Millard <marklmi@yahoo.com> To: Brandon Bergren <bdragon@FreeBSD.org> Cc: FreeBSD PowerPC ML <freebsd-ppc@freebsd.org> Subject: mttb in sys/powerpc/include/cpufunc.h still does not handle/protect-against interrupts Message-ID: <3498B555-6C88-4DF4-8291-14E8B9120D4B@yahoo.com>
index | next in thread | raw e-mail
Looking at sys/powerpc/include/cpufunc.h in main (and so older too):
static __inline void
mttb(u_quad_t time)
{
mtspr(TBR_TBWL, 0);
mtspr(TBR_TBWU, (uint32_t)(time >> 32));
mtspr(TBR_TBWL, (uint32_t)(time & 0xffffffff));
}
This code still does not protect against interrupts
(only suggestive):
mtspr(TBR_TBWL, 0);
HERE?
mtspr(TBR_TBWU, (uint32_t)(time >> 32));
HERE?
mtspr(TBR_TBWL, (uint32_t)(time & 0xffffffff));
My code disabled interrupts around the update:
static __inline void
mttb(u_quad_t time)
{
const uint32_t high= time>>32;
const uint32_t low= time&0xffffffffu;
const register_t predisable_msr= intr_disable();
mtspr(TBR_TBWL, 0);
mtspr(TBR_TBWU, high);
mtspr(TBR_TBWL, low);
intr_restore(predisable_msr);
}
As I remember, I found powerpc documentation that indicated
such was important to reliable settings.
===
Mark Millard
marklmi at yahoo.com
( dsl-only.net went
away in early 2018-Mar)
home |
help
Want to link to this message? Use this
URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?3498B555-6C88-4DF4-8291-14E8B9120D4B>
