Date: Mon, 1 Feb 2021 06:02:22 +0100 From: Mateusz Guzik <mjguzik@gmail.com> To: Oleksandr Tymoshenko <gonzo@freebsd.org> Cc: src-committers@freebsd.org, dev-commits-src-all@freebsd.org, dev-commits-src-main@freebsd.org Subject: Re: git: e0a0a3efcb09 - main - mips: fix early kernel panic when setting up interrupt counters Message-ID: <CAGudoHGcg4iyEm0w_=s03S1YK3pFCR8aS=XgPfVKjve4CZSYWg@mail.gmail.com> In-Reply-To: <202101312144.10VLiwhn025787@gitrepo.freebsd.org> References: <202101312144.10VLiwhn025787@gitrepo.freebsd.org>
next in thread | previous in thread | raw e-mail | index | archive | help
This breaks building mips XLP64: linking kernel.full ld: error: undefined symbol: intrcnt >>> referenced by kern_clock.c:813 (/usr/src/sys/kern/kern_clock.c:813) >>> kern_clock.o:(hardclock) >>> referenced by kern_clock.c:813 (/usr/src/sys/kern/kern_clock.c:813) >>> kern_clock.o:(hardclock) >>> referenced by kern_clock.c:813 (/usr/src/sys/kern/kern_clock.c:813) >>> kern_clock.o:(hardclock) >>> referenced 21 more times and so on On 1/31/21, Oleksandr Tymoshenko <gonzo@freebsd.org> wrote: > The branch main has been updated by gonzo: > > URL: > https://cgit.FreeBSD.org/src/commit/?id=e0a0a3efcb09a10ad1de29aca622ea580b2663d2 > > commit e0a0a3efcb09a10ad1de29aca622ea580b2663d2 > Author: Oleksandr Tymoshenko <gonzo@FreeBSD.org> > AuthorDate: 2021-01-30 06:11:24 +0000 > Commit: Oleksandr Tymoshenko <gonzo@FreeBSD.org> > CommitDate: 2021-01-31 21:44:45 +0000 > > mips: fix early kernel panic when setting up interrupt counters > > Commit 248f0ca converted intrcnt and intrnames from u_long[] > and char[] to u_long* and char* respectively, but for non-INTRNG mips > these symbols were defined in .S file as a pre-allocated static arrays, > so the problem wasn't cought at compile time. Conversion from an array > to a pointer requires pointer initialization and it wasn't done > for MIPS, so whatever happenned to be in the begginning of intcnt[] > array was used as a pointer value. > > Move intrcnt/intrnames to C code and allocate them dynamically > although with a fixed size at the moment. > > Reviewed by: emaste > PR: 253051 > Differential Revision: https://reviews.freebsd.org/D28424 > MFC after: 1 day > --- > sys/mips/mips/exception.S | 36 ------------------------------------ > sys/mips/mips/intr_machdep.c | 22 ++++++++++++++++++++++ > 2 files changed, 22 insertions(+), 36 deletions(-) > > diff --git a/sys/mips/mips/exception.S b/sys/mips/mips/exception.S > index 892bebc8f37f..719904ac83b7 100644 > --- a/sys/mips/mips/exception.S > +++ b/sys/mips/mips/exception.S > @@ -80,12 +80,6 @@ dtrace_invop_calltrap_addr: > .text > #endif > > -/* > - * Reasonable limit > - */ > -#define INTRCNT_COUNT 256 > - > - > /* > > *---------------------------------------------------------------------------- > * > @@ -1206,36 +1200,6 @@ FPReturn: > .set pop > END(MipsFPTrap) > > -#ifndef INTRNG > -/* > - * Interrupt counters for vmstat. > - */ > - .data > - .globl intrcnt > - .globl sintrcnt > - .globl intrnames > - .globl sintrnames > -intrnames: > - .space INTRCNT_COUNT * (MAXCOMLEN + 1) * 2 > -sintrnames: > -#ifdef __mips_n64 > - .quad INTRCNT_COUNT * (MAXCOMLEN + 1) * 2 > -#else > - .int INTRCNT_COUNT * (MAXCOMLEN + 1) * 2 > -#endif > - > - .align (_MIPS_SZLONG / 8) > -intrcnt: > - .space INTRCNT_COUNT * (_MIPS_SZLONG / 8) * 2 > -sintrcnt: > -#ifdef __mips_n64 > - .quad INTRCNT_COUNT * (_MIPS_SZLONG / 8) * 2 > -#else > - .int INTRCNT_COUNT * (_MIPS_SZLONG / 8) * 2 > -#endif > -#endif /* INTRNG */ > - > - > /* > * Vector to real handler in KSEG1. > */ > diff --git a/sys/mips/mips/intr_machdep.c b/sys/mips/mips/intr_machdep.c > index 3b278276865c..a36944f657ca 100644 > --- a/sys/mips/mips/intr_machdep.c > +++ b/sys/mips/mips/intr_machdep.c > @@ -50,6 +50,19 @@ __FBSDID("$FreeBSD$"); > #include <machine/md_var.h> > #include <machine/trap.h> > > +#ifndef INTRNG > +#define INTRCNT_COUNT 256 > +#define INTRNAME_LEN (2*MAXCOMLEN + 1) > + > +MALLOC_DECLARE(M_MIPSINTR); > +MALLOC_DEFINE(M_MIPSINTR, "mipsintr", "MIPS interrupt handling"); > + > +u_long *intrcnt; > +char *intrnames; > +size_t sintrcnt; > +size_t sintrnames; > +#endif > + > static struct intr_event *hardintr_events[NHARD_IRQS]; > static struct intr_event *softintr_events[NSOFT_IRQS]; > static mips_intrcnt_t mips_intr_counters[NSOFT_IRQS + NHARD_IRQS]; > @@ -121,6 +134,15 @@ cpu_init_interrupts() > int i; > char name[MAXCOMLEN + 1]; > > +#ifndef INTRNG > + intrcnt = mallocarray(INTRCNT_COUNT, sizeof(u_long), M_MIPSINTR, > + M_WAITOK | M_ZERO); > + intrnames = mallocarray(INTRCNT_COUNT, INTRNAME_LEN, M_MIPSINTR, > + M_WAITOK | M_ZERO); > + sintrcnt = INTRCNT_COUNT * sizeof(u_long); > + sintrnames = INTRCNT_COUNT * INTRNAME_LEN; > +#endif > + > /* > * Initialize all available vectors so spare IRQ > * would show up in systat output > _______________________________________________ > dev-commits-src-all@freebsd.org mailing list > https://lists.freebsd.org/mailman/listinfo/dev-commits-src-all > To unsubscribe, send any mail to > "dev-commits-src-all-unsubscribe@freebsd.org" > -- Mateusz Guzik <mjguzik gmail.com>
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CAGudoHGcg4iyEm0w_=s03S1YK3pFCR8aS=XgPfVKjve4CZSYWg>