Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 9 Dec 2022 22:09:49 -0700
From:      Warner Losh <imp@bsdimp.com>
To:        Baptiste Daroussin <bapt@freebsd.org>
Cc:        hackers@freebsd.org
Subject:   Re: devctl_notify system is inconsistent
Message-ID:  <CANCZdfp6YsxmRNN%2BvGnc8wBjUmOaASvOMXCQYSb8wnK9pBjeiQ@mail.gmail.com>
In-Reply-To: <20221201174043.5yqtfbs6p63bdgqp@aniel.nours.eu>
References:  <20221201083559.xx3v5jn7sf44rfmv@aniel.nours.eu> <CANCZdfpdkxGaan6fvTYxm4YO17-t=V4yuzPWYJnGd7Ao73NQgw@mail.gmail.com> <20221201145905.ua2jlh25usqrqjy4@aniel.nours.eu> <CANCZdfoxKs9FJMyRh=gVSo9JnX-Lb7-ybXmq==NvzjdKVpckBw@mail.gmail.com> <20221201174043.5yqtfbs6p63bdgqp@aniel.nours.eu>

next in thread | previous in thread | raw e-mail | index | archive | help
--0000000000004012d805ef7248a6
Content-Type: text/plain; charset="UTF-8"

On Thu, Dec 1, 2022 at 10:40 AM Baptiste Daroussin <bapt@freebsd.org> wrote:

> On Thu, Dec 01, 2022 at 08:38:37AM -0700, Warner Losh wrote:
> > On Thu, Dec 1, 2022 at 7:59 AM Baptiste Daroussin <bapt@freebsd.org>
> wrote:
> >
> > > On Thu, Dec 01, 2022 at 07:45:32AM -0700, Warner Losh wrote:
> > > > On Thu, Dec 1, 2022 at 1:36 AM Baptiste Daroussin <bapt@freebsd.org>
> > > wrote:
> > > >
> > > > > Hello,
> > > > >
> > > > > After the addition of netlink(4) by melifaro@, I started working
> on a
> > > new
> > > > > genetlink(4) module, to send kernel notification to the userland
> via
> > > > > netlink.
> > > > >
> > > > > The goal is to be able to have multiple consumers without the need
> of
> > > devd
> > > > > to be
> > > > > running.
> > > > >
> > > > > The goal is also to be able subscribe to the events the consumer is
> > > > > willing to
> > > > > receive.
> > > > >
> > > > > https://reviews.freebsd.org/D37574
> > > > >
> > > > > I also added a hook to devctl_notify to make sure all its event got
> > > sent
> > > > > via
> > > > > nlsysevent. (https://reviews.freebsd.org/D37573)
> > > > >
> > > >
> > > > You're connecting it at the wrong level: it will miss all device
> events.
> > > > devctl_notify
> > > > is used by everything except newbus's device attach, detach and
> nomatch
> > > > events, so none of those events will make it through.
> > >
> > > Where should I hook to get the device events?
> > >
> >
> > Either you need to drop down a level to where the formated events are
> > queued,
> > or you'll need to add something in devaddq() to deal with the events.
> These
> > are
> > a slightly different format than the devctl_notify() events because the
> > latter was
> > added later and I didn't want to cope with transitioning the old
> formatted
> > messages
> > to the new at that time (silly me).
> >
> >
> > > >
> > > >
> > > > > It works great and so far I am happy with it. on thing I figured
> out
> > > it is:
> > > > > the "system" argment of devctl_notify is inconsistent:
> > > > > Upper case vs lower case
> > > > > "kern" vs "kernel"
> > > > >
> > > >
> > > > They are consistent. With one exception that I deprecated in 13.x to
> be
> > > > removed in 14.x. I documented all of them at the time in devd.conf. I
> > > think
> > > > I'll go ahead and complete the deprecation.
> > > >
> > > >
> > > > > I intent to fix the following way:
> > > > > Create a new function similar to devctl_notify but with the first
> > > argument
> > > > > being
> > > > > an enum.
> > > > >
> > > >
> > > > I'm a pretty hard no on the enum. I rejected doing it that way when I
> > > wrote
> > > > devd
> > > > years ago. These have always been strings, and need to continue to
> > > always be
> > > > strings, or we're forever modifying devd(8) when we add a new one and
> > > > introducing
> > > > yet another opportunity for mismatch. I don't think this is a good
> idea
> > > at
> > > > all.
> > > >
> > > > There's been users of devd in the past that are loadable modules that
> > > pass
> > > > their
> > > > own system name in that devd.conf files would then process. Having an
> > > enum
> > > > with
> > > > enforcement would just get in the way of this.
> > > >
> > > > I have toyed with the idea of having a centralized list in bus.h
> that's a
> > > > bunch of
> > > > #defines, ala old-school X11 resources (which this is very very
> loosely
> > > > based on),
> > > > but it didn't seem worth the effort.
> > >
> > > That is fine with me and actually I do need the string name to
> register as
> > > group
> > > name, that I didn't want to trash the strings away.
> > >
> > > But I need a way to list them all.
> > >
> >
> > We have no current mechanism to do that. We could add something that
> would
> > register / deregister them with a sysinit + call to something in
> > kern_devctl.c which
> > could do the trick (and also deal with the ordering issues), though
> having
> > netlink(4)
> > as a loadable modules might be an interesting case to get right.
> >
> > If we did that, we could return a 'token' that you'd use to call a new
> > version of
> > devctl_notify(), perhaps with some glue for legacy users (or perhaps not:
> > we change
> > kernel interfaces all the time, and could just rename it and convert
> > everything in the
> > tree).
> >
> > >
> > > >
> > > > > Make the current devctl_notify convert its first argument into that
> > > enum
> > > > > and
> > > > > yell if an unkwown "system" is passed. (and probably declare
> > > devctl_notify
> > > > > deprecated)
> > > > >
> > > >
> > > > I don't think this buys us anything. devctl_notify cannot possibly
> know
> > > > about all
> > > > the possible subsystems, so this is likely doomed to high maintenance
> > > that
> > > > would
> > > > be largely ineffective.
> > > >
> > > > Then fix the inconsistencies: all upper case as it seems the most
> wildly
> > > use
> > > > > case
> > > > > s/kern/kernel/g
> > > > >
> > > > > WDYT?
> > > > >
> > > >
> > > > I wouldn't worry about the upper vs lower case. All the documented
> ones
> > > are
> > > > upper case, except kernel. There's no harm it being one exception
> since
> > > > changing
> > > > it will break user's devd.conf setups. I got enough feedback when I
> > > changed
> > > > "kern" to "kernel" last year for power events. And as far as I know,
> I've
> > > > documented
> > > > all the events that are generated today.
> > > >
> > > > Warner
> > >
> > >
> > > Note that if you think nlsysevent is a bad idea, I will just forget
> about
> > > it.
> > >
> >
> > I love the idea. I got over any resistance I had when melifaro@ moved
> > things into kern_devctl.c and we talked through the issues at that time.
> > I've been hoping that someone would replace the hacky thing I did with
> > a 'routing socket'-like interface (I never could figure out hose to do
> it so
> > many years ago w/o gross hacks). netlink(4) has finally provided a way
> > to do it that doesn't get the routing code all jumbled up for this.
> >
> > I just have some specific issues with your proposal. In hindsight, I
> should
> > have led with that in my first message :).
> >
> > Warner
>
> Here is my new proposal:
>
> What about:
>
> 1. I add a static list of systems in sys/devctl.h something like
>
> enum {
>  DEVCTL_SYSTEM_ACPI = 0,
>  DEVCTL_SYSTEM_AEON = 1,
>  ...
>  DEVCTL_SYSTEM_ZFS = 19
> };
>
> static const char *devctl_systems[] = {
>   "ACPI",
>   "AEON",
>   ...
>   "ZFS",
> };
>
> this way we have a list of official freebsd's systems.
> We don't change the devctl_notify interface
>
> and in the kernel we change the devctl_notify("ZFS" into
> devctl_notify(devctl_systems[DEVCTL_SYSTEM_ZFS],...
>
> This is not too intrusive, and breaks none of the existing code
>

So what happens if you see one not in the list?


> 2. I also hook devadq using the same interface as I already have done, but
> all the attach,detach,nomatch become an event (only in nlsysevent) in the
> "DEVICE" system,
> the "SUBSYSTEM" is the current what of devaddq
>
> The type is changed into:
> + -> ATTACH
> - -> DETACH
> anythingelse -> NOMATCH
> and the rest of the current line becomes the data
>

This is fine. I kinda think it might not be terrible to expose this to devd
and have it cope, but that's a zero sum for not a lot of gain.

so from nlsysvent point of view this is exactly the same kind of events as
> the
> one hooked in devctl_notify.
>

Sure.


> 3. in nlsysevent we have one category one can subscribe per known systems.
> All other "systems" falls into a new category named "extra" "vendor" or
> "other"
>

So all events that match elements of the array are 'system' and the others
are something else?


> from the consumer point of view the name of the system is anyway contained
> in
> the message itself, so the category it is subscribed to can differ.
>

Right. No data is lost...


> This way, I should be able to get ALL the events in a consistent way.
> I should be compatible with people who uses devctl_notify in their custom
> kernel
> modules.
>

Yea.


> Sounds easy enough without the requirement of complexifying kern_devctl.c
> with a
> registration of extra systems.
>

Yea, I kinda prefer that... Unless we add too many new systems. It's still
extra work to add one, but likely not enough extra to be worth the
automation.


> What do you think?
>

Not bad.

Warner

--0000000000004012d805ef7248a6
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr"><div dir=3D"ltr"><br></div><br><div class=3D"gmail_quote">=
<div dir=3D"ltr" class=3D"gmail_attr">On Thu, Dec 1, 2022 at 10:40 AM Bapti=
ste Daroussin &lt;<a href=3D"mailto:bapt@freebsd.org">bapt@freebsd.org</a>&=
gt; wrote:<br></div><blockquote class=3D"gmail_quote" style=3D"margin:0px 0=
px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">On Th=
u, Dec 01, 2022 at 08:38:37AM -0700, Warner Losh wrote:<br>
&gt; On Thu, Dec 1, 2022 at 7:59 AM Baptiste Daroussin &lt;<a href=3D"mailt=
o:bapt@freebsd.org" target=3D"_blank">bapt@freebsd.org</a>&gt; wrote:<br>
&gt; <br>
&gt; &gt; On Thu, Dec 01, 2022 at 07:45:32AM -0700, Warner Losh wrote:<br>
&gt; &gt; &gt; On Thu, Dec 1, 2022 at 1:36 AM Baptiste Daroussin &lt;<a hre=
f=3D"mailto:bapt@freebsd.org" target=3D"_blank">bapt@freebsd.org</a>&gt;<br=
>
&gt; &gt; wrote:<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; Hello,<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; After the addition of netlink(4) by melifaro@, I starte=
d working on a<br>
&gt; &gt; new<br>
&gt; &gt; &gt; &gt; genetlink(4) module, to send kernel notification to the=
 userland via<br>
&gt; &gt; &gt; &gt; netlink.<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; The goal is to be able to have multiple consumers witho=
ut the need of<br>
&gt; &gt; devd<br>
&gt; &gt; &gt; &gt; to be<br>
&gt; &gt; &gt; &gt; running.<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; The goal is also to be able subscribe to the events the=
 consumer is<br>
&gt; &gt; &gt; &gt; willing to<br>
&gt; &gt; &gt; &gt; receive.<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; <a href=3D"https://reviews.freebsd.org/D37574" rel=3D"n=
oreferrer" target=3D"_blank">https://reviews.freebsd.org/D37574</a><br>;
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; I also added a hook to devctl_notify to make sure all i=
ts event got<br>
&gt; &gt; sent<br>
&gt; &gt; &gt; &gt; via<br>
&gt; &gt; &gt; &gt; nlsysevent. (<a href=3D"https://reviews.freebsd.org/D37=
573" rel=3D"noreferrer" target=3D"_blank">https://reviews.freebsd.org/D3757=
3</a>)<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; You&#39;re connecting it at the wrong level: it will miss al=
l device events.<br>
&gt; &gt; &gt; devctl_notify<br>
&gt; &gt; &gt; is used by everything except newbus&#39;s device attach, det=
ach and nomatch<br>
&gt; &gt; &gt; events, so none of those events will make it through.<br>
&gt; &gt;<br>
&gt; &gt; Where should I hook to get the device events?<br>
&gt; &gt;<br>
&gt; <br>
&gt; Either you need to drop down a level to where the formated events are<=
br>
&gt; queued,<br>
&gt; or you&#39;ll need to add something in devaddq() to deal with the even=
ts. These<br>
&gt; are<br>
&gt; a slightly different format than the devctl_notify() events because th=
e<br>
&gt; latter was<br>
&gt; added later and I didn&#39;t want to cope with transitioning the old f=
ormatted<br>
&gt; messages<br>
&gt; to the new at that time (silly me).<br>
&gt; <br>
&gt; <br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; It works great and so far I am happy with it. on thing =
I figured out<br>
&gt; &gt; it is:<br>
&gt; &gt; &gt; &gt; the &quot;system&quot; argment of devctl_notify is inco=
nsistent:<br>
&gt; &gt; &gt; &gt; Upper case vs lower case<br>
&gt; &gt; &gt; &gt; &quot;kern&quot; vs &quot;kernel&quot;<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; They are consistent. With one exception that I deprecated in=
 13.x to be<br>
&gt; &gt; &gt; removed in 14.x. I documented all of them at the time in dev=
d.conf. I<br>
&gt; &gt; think<br>
&gt; &gt; &gt; I&#39;ll go ahead and complete the deprecation.<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; I intent to fix the following way:<br>
&gt; &gt; &gt; &gt; Create a new function similar to devctl_notify but with=
 the first<br>
&gt; &gt; argument<br>
&gt; &gt; &gt; &gt; being<br>
&gt; &gt; &gt; &gt; an enum.<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; I&#39;m a pretty hard no on the enum. I rejected doing it th=
at way when I<br>
&gt; &gt; wrote<br>
&gt; &gt; &gt; devd<br>
&gt; &gt; &gt; years ago. These have always been strings, and need to conti=
nue to<br>
&gt; &gt; always be<br>
&gt; &gt; &gt; strings, or we&#39;re forever modifying devd(8) when we add =
a new one and<br>
&gt; &gt; &gt; introducing<br>
&gt; &gt; &gt; yet another opportunity for mismatch. I don&#39;t think this=
 is a good idea<br>
&gt; &gt; at<br>
&gt; &gt; &gt; all.<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; There&#39;s been users of devd in the past that are loadable=
 modules that<br>
&gt; &gt; pass<br>
&gt; &gt; &gt; their<br>
&gt; &gt; &gt; own system name in that devd.conf files would then process. =
Having an<br>
&gt; &gt; enum<br>
&gt; &gt; &gt; with<br>
&gt; &gt; &gt; enforcement would just get in the way of this.<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; I have toyed with the idea of having a centralized list in b=
us.h that&#39;s a<br>
&gt; &gt; &gt; bunch of<br>
&gt; &gt; &gt; #defines, ala old-school X11 resources (which this is very v=
ery loosely<br>
&gt; &gt; &gt; based on),<br>
&gt; &gt; &gt; but it didn&#39;t seem worth the effort.<br>
&gt; &gt;<br>
&gt; &gt; That is fine with me and actually I do need the string name to re=
gister as<br>
&gt; &gt; group<br>
&gt; &gt; name, that I didn&#39;t want to trash the strings away.<br>
&gt; &gt;<br>
&gt; &gt; But I need a way to list them all.<br>
&gt; &gt;<br>
&gt; <br>
&gt; We have no current mechanism to do that. We could add something that w=
ould<br>
&gt; register / deregister them with a sysinit + call to something in<br>
&gt; kern_devctl.c which<br>
&gt; could do the trick (and also deal with the ordering issues), though ha=
ving<br>
&gt; netlink(4)<br>
&gt; as a loadable modules might be an interesting case to get right.<br>
&gt; <br>
&gt; If we did that, we could return a &#39;token&#39; that you&#39;d use t=
o call a new<br>
&gt; version of<br>
&gt; devctl_notify(), perhaps with some glue for legacy users (or perhaps n=
ot:<br>
&gt; we change<br>
&gt; kernel interfaces all the time, and could just rename it and convert<b=
r>
&gt; everything in the<br>
&gt; tree).<br>
&gt; <br>
&gt; &gt;<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; Make the current devctl_notify convert its first argume=
nt into that<br>
&gt; &gt; enum<br>
&gt; &gt; &gt; &gt; and<br>
&gt; &gt; &gt; &gt; yell if an unkwown &quot;system&quot; is passed. (and p=
robably declare<br>
&gt; &gt; devctl_notify<br>
&gt; &gt; &gt; &gt; deprecated)<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; I don&#39;t think this buys us anything. devctl_notify canno=
t possibly know<br>
&gt; &gt; &gt; about all<br>
&gt; &gt; &gt; the possible subsystems, so this is likely doomed to high ma=
intenance<br>
&gt; &gt; that<br>
&gt; &gt; &gt; would<br>
&gt; &gt; &gt; be largely ineffective.<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; Then fix the inconsistencies: all upper case as it seems the=
 most wildly<br>
&gt; &gt; use<br>
&gt; &gt; &gt; &gt; case<br>
&gt; &gt; &gt; &gt; s/kern/kernel/g<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; WDYT?<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; I wouldn&#39;t worry about the upper vs lower case. All the =
documented ones<br>
&gt; &gt; are<br>
&gt; &gt; &gt; upper case, except kernel. There&#39;s no harm it being one =
exception since<br>
&gt; &gt; &gt; changing<br>
&gt; &gt; &gt; it will break user&#39;s devd.conf setups. I got enough feed=
back when I<br>
&gt; &gt; changed<br>
&gt; &gt; &gt; &quot;kern&quot; to &quot;kernel&quot; last year for power e=
vents. And as far as I know, I&#39;ve<br>
&gt; &gt; &gt; documented<br>
&gt; &gt; &gt; all the events that are generated today.<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; Warner<br>
&gt; &gt;<br>
&gt; &gt;<br>
&gt; &gt; Note that if you think nlsysevent is a bad idea, I will just forg=
et about<br>
&gt; &gt; it.<br>
&gt; &gt;<br>
&gt; <br>
&gt; I love the idea. I got over any resistance I had when melifaro@ moved<=
br>
&gt; things into kern_devctl.c and we talked through the issues at that tim=
e.<br>
&gt; I&#39;ve been hoping that someone would replace the hacky thing I did =
with<br>
&gt; a &#39;routing socket&#39;-like interface (I never could figure out ho=
se to do it so<br>
&gt; many years ago w/o gross hacks). netlink(4) has finally provided a way=
<br>
&gt; to do it that doesn&#39;t get the routing code all jumbled up for this=
.<br>
&gt; <br>
&gt; I just have some specific issues with your proposal. In hindsight, I s=
hould<br>
&gt; have led with that in my first message :).<br>
&gt; <br>
&gt; Warner<br>
<br>
Here is my new proposal:<br>
<br>
What about:<br>
<br>
1. I add a static list of systems in sys/devctl.h something like<br>
<br>
enum {<br>
=C2=A0DEVCTL_SYSTEM_ACPI =3D 0,<br>
=C2=A0DEVCTL_SYSTEM_AEON =3D 1,<br>
=C2=A0...<br>
=C2=A0DEVCTL_SYSTEM_ZFS =3D 19<br>
};<br>
<br>
static const char *devctl_systems[] =3D {<br>
=C2=A0 &quot;ACPI&quot;,<br>
=C2=A0 &quot;AEON&quot;,<br>
=C2=A0 ...<br>
=C2=A0 &quot;ZFS&quot;,<br>
};<br>
<br>
this way we have a list of official freebsd&#39;s systems.<br>
We don&#39;t change the devctl_notify interface<br>
<br>
and in the kernel we change the devctl_notify(&quot;ZFS&quot; into<br>
devctl_notify(devctl_systems[DEVCTL_SYSTEM_ZFS],...<br>
<br>
This is not too intrusive, and breaks none of the existing code<br></blockq=
uote><div><br></div><div>So what happens if you see one not in the list?</d=
iv><div>=C2=A0</div><blockquote class=3D"gmail_quote" style=3D"margin:0px 0=
px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
2. I also hook devadq using the same interface as I already have done, but<=
br>
all the attach,detach,nomatch become an event (only in nlsysevent) in the<b=
r>
&quot;DEVICE&quot; system,<br>
the &quot;SUBSYSTEM&quot; is the current what of devaddq<br>
<br>
The type is changed into:<br>
+ -&gt; ATTACH<br>
- -&gt; DETACH<br>
anythingelse -&gt; NOMATCH<br>
and the rest of the current line becomes the data<br></blockquote><div><br>=
</div><div>This is fine. I kinda think it might not be terrible to expose t=
his to devd and have it cope, but that&#39;s a zero sum for not a lot of ga=
in.</div><div><br></div><blockquote class=3D"gmail_quote" style=3D"margin:0=
px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">s=
o from nlsysvent point of view this is exactly the same kind of events as t=
he<br>
one hooked in devctl_notify.<br></blockquote><div><br></div><div>Sure.</div=
><div>=C2=A0</div><blockquote class=3D"gmail_quote" style=3D"margin:0px 0px=
 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
3. in nlsysevent we have one category one can subscribe per known systems.<=
br>
All other &quot;systems&quot; falls into a new category named &quot;extra&q=
uot; &quot;vendor&quot; or &quot;other&quot;<br></blockquote><div><br></div=
><div>So all events that match elements of the array are &#39;system&#39; a=
nd the others are something else?</div><div>=C2=A0</div><blockquote class=
=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rg=
b(204,204,204);padding-left:1ex">
from the consumer point of view the name of the system is anyway contained =
in<br>
the message itself, so the category it is subscribed to can differ.<br></bl=
ockquote><div><br></div><div>Right. No data is lost...</div><div>=C2=A0</di=
v><blockquote class=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;borde=
r-left:1px solid rgb(204,204,204);padding-left:1ex">
This way, I should be able to get ALL the events in a consistent way.<br>
I should be compatible with people who uses devctl_notify in their custom k=
ernel<br>
modules.<br></blockquote><div><br></div><div>Yea.=C2=A0</div><div>=C2=A0</d=
iv><blockquote class=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;bord=
er-left:1px solid rgb(204,204,204);padding-left:1ex">
Sounds easy enough without the requirement of complexifying kern_devctl.c w=
ith a<br>
registration of extra systems.<br></blockquote><div><br></div><div>Yea, I k=
inda prefer that... Unless we add too many new systems. It&#39;s still extr=
a work to add one, but likely not enough extra to be worth the automation.<=
/div><div>=C2=A0</div><blockquote class=3D"gmail_quote" style=3D"margin:0px=
 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
What do you think?<br></blockquote><div><br></div><div>Not bad.</div><div><=
br></div><div>Warner=C2=A0</div></div></div>

--0000000000004012d805ef7248a6--



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