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-head mailing list