svn commit: r298933 - in head: share/man/man9 sys/amd64/include sys/dev/acpica sys/dev/drm2 sys/dev/drm2/i915 sys/kern sys/sys sys/x86/acpica sys/x86/x86
John Baldwin
jhb at freebsd.org
Tue May 3 16:35:26 UTC 2016
On Tuesday, May 03, 2016 03:52:56 PM Bruce Evans wrote:
> On Mon, 2 May 2016, Pedro Giffuni wrote:
> >
> > On 05/02/16 15:52, John Baldwin wrote:
> >> On Monday, May 02, 2016 11:45:41 AM Ngie Cooper wrote:
> >>>
> >>>> On May 2, 2016, at 11:00, John Baldwin <jhb at FreeBSD.org> wrote:
> >>>>
> >>>> Author: jhb
> >>>> [... excessive quoting trimmed]
> >>>> New Revision: 298933
> >>>> URL: https://svnweb.freebsd.org/changeset/base/298933
> >>>>
> >>>> Log:
> >>>> Add a new bus method to fetch device-specific CPU sets.
> >>>> [... excessive quoting trimmed]
> >>>> kernel
> >>>
> >>> This broke the build with gcc:
> >>> https://jenkins.freebsd.org/job/FreeBSD_HEAD_amd64_gcc/1211/
> >>
> >> I saw. What is odd though is that my tinderbox builds all passed. This
> >> might
> >> be due to the recent howmany() changes since _bitset.h only needed
> >> <sys/types.h>
> >> before but now needs <sys/param.h> (which is borderline to being pointless
> >> for
> >> a _foo.h header).
> >
> > TBH, I thought so too, but I avoided applying such changes to headers,
> > and I haven't touched _bitset.h,
>
> _foo.h headers cannot use howmany() due to namespace pollution.
>
> _bitset.h was already broken, unless it is supposed to be kernel-only --
> it uses howmany(). It is kernel-only according to its documention --
> bitset is only documented in kernel manpages (in a single unreadable one
> than is linked ad nauseum).
cpuset.h is used in userland for cpuset_getaffinity(2), etc.
> It is otherwise fairly clean. It defines the symbols BITSET_DEFINE,
> BITSET_T_INITIALIZER, and BITSET_SET in the application namespace
> This is not completely clean for a _foo.h header. All other BITSET*
> macros are already in bitset.h I think only BITSET_DEFINE should be
> in _bitset.h (for use declarations in other headers).
>
> select.h avoids this problem by defining its own howmany() macro. This
> seems to be correct except for the bogus ifdef around the private macro.
> This ifdef is a little more than a style bug (verboseness) -- it breaks
> detection of other definitions that might be different. Lexical
> differences wouldn't matter, but it is easier to never have them.
>
> Old versions of select polluted <sys.types.h>. The select macros just
> used howmany(). howmany() was in <sys/types.h> too.
I would be happy to fix _bitset.h and _cpuset.h to not need sys/param.h.
However, they also use NBBY which is defined in sys/param.h. _sigset.h
gets around this because it uses an array of uint32_t and hardcodes a
shift count of 5 in _SIG_WORD() and a mask of 31 in _SIG_BIT(). If you
think it is fine to hardcode '8' instead of 'NBBY' I'll do that. Hmm,
sys/select.h hardcodes '8' for _NFDBITS, so I guess that is fine.
I will fix _bitset.h and _cpuset.h first and then come back to
bus_get_cpus().
--
John Baldwin
More information about the svn-src-all
mailing list