Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 19 Jan 2023 00:57:28 +0000
From:      Brooks Davis <brooks@freebsd.org>
To:        Warner Losh <imp@bsdimp.com>
Cc:        Mitchell Horne <mhorne@freebsd.org>, Brooks Davis <brooks@freebsd.org>, src-committers@freebsd.org, dev-commits-src-all@freebsd.org, dev-commits-src-main@freebsd.org
Subject:   Re: git: b75062f23431 - main - riscv: Fix thread0.td_kstack_pages init
Message-ID:  <Y8iVeJsN1b8RnhId@spindle.one-eyed-alien.net>
In-Reply-To: <CANCZdfrMm0Kd46pfOYUaiAU%2BsMvYecU0whDH2jH0ck3C-Jjy0w@mail.gmail.com>
References:  <202301171638.30HGcP3C091184@gitrepo.freebsd.org> <b2a60e9a-c918-5a88-5eb9-5d8322ca2326@freebsd.org> <CANCZdfrMm0Kd46pfOYUaiAU%2BsMvYecU0whDH2jH0ck3C-Jjy0w@mail.gmail.com>

next in thread | previous in thread | raw e-mail | index | archive | help
On Wed, Jan 18, 2023 at 04:53:51PM -0700, Warner Losh wrote:
> On Wed, Jan 18, 2023 at 3:07 PM Mitchell Horne <mhorne@freebsd.org> wrote:
>=20
> >
> >
> > On 1/17/23 12:38, Brooks Davis wrote:
> > > The branch main has been updated by brooks:
> > >
> > > URL:
> > https://cgit.FreeBSD.org/src/commit/?id=3Db75062f23431fbabef1e7d665cae2=
70b144f71b1
> > >
> > > commit b75062f23431fbabef1e7d665cae270b144f71b1
> > > Author:     Brooks Davis <brooks@FreeBSD.org>
> > > AuthorDate: 2023-01-17 16:36:15 +0000
> > > Commit:     Brooks Davis <brooks@FreeBSD.org>
> > > CommitDate: 2023-01-17 16:37:42 +0000
> > >
> > >      riscv: Fix thread0.td_kstack_pages init
> > >
> > >      Commit 0ef3ca7ae37c70e9dc83475dc2e68e98e1c2a418 initialized
> > >      thread0.td_kstack_pages to KSTACK_PAGES.  Due to the lack of an
> > >      include of opt_kstack_pages.h it used the fallback value of 4 fr=
om
> > >      machine/param.h.
> >
> > Does this mean that we could/should include opt_kstack_pages.h within
> > machine/param.h (under #ifdef _KERNEL)? This header is both a consumer
> > and provider of the KSTACK_PAGES definition, by virtue of the #ifndef. I
> > think the hidden dependency should be avoided, if possible.
> >
>=20
> No. Including opt_XXXX.h is never OK in our .h files. They are used in too
> many places, some of which "cheat" and define _KERNEL becuse, well, they
> need to get to the kernel bits....  That will break...

We could potentially use the __has_include extension.  I don't think we
care about building the kernel with a compiler that isn't clang or gcc
and the usage pattern defined by gcc is safe for compilers that don't
define it.  We could do something like:

#ifdef _KERNEL
#ifndef KSTACK_PAGES
#ifdef __has_include
#if __has_include("opt_kstack_pages.h")
#include "opt_kstack_pages.h"
#endif
#endif
#endif
#endif
<old #ifndef KSTACK_PAGES code>

>=20
> I do agree, however, that the current interface is less than ideal...
>=20
>=20
> > Of course, the problem at hand has been fixed and we want to keep direct
> > consumers of KSTACK_PAGES to a minimum, but I think the point still sta=
nds.
> >
>=20
> I think it's a good point, but the current way is likely the least-bad way
> to accomplish things.
>=20
> It would be much better if we could remove it from machine/param.h and
> opt_XXX.h always defines it, even the default value when it's not otherwi=
se
> specified. However, we don't (currently) have a way to set default values
> in config(8). We could add it, since the efforts at config++ have thus far
> fallen flat....

I think this is probably the better direction to move.  There aren't any
in-tree uses of KSTACK_PAGES so removing the definition should be fine.

-- Brooks



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?Y8iVeJsN1b8RnhId>