Bug 222242 - [patch] allow masks smaller than cpuset_t, if large enough for mp_maxid
Summary: [patch] allow masks smaller than cpuset_t, if large enough for mp_maxid
Status: New
Alias: None
Product: Base System
Classification: Unclassified
Component: kern (show other bugs)
Version: 11.1-RELEASE
Hardware: amd64 Any
: --- Affects Some People
Assignee: freebsd-bugs mailing list
URL:
Keywords: patch
Depends on:
Blocks:
 
Reported: 2017-09-11 21:30 UTC by Richard Russo
Modified: 2017-09-11 22:09 UTC (History)
3 users (show)

See Also:


Attachments
patch to check that mask is actually too small, not just smaller than the kernel compiled type (1.39 KB, patch)
2017-09-11 21:30 UTC, Richard Russo
no flags Details | Diff

Note You need to log in before you can comment on or make changes to this bug.
Description Richard Russo 2017-09-11 21:30:18 UTC
Created attachment 186278 [details]
patch to check that mask is actually too small, not just smaller than the kernel compiled type

As mentioned in Bug 200802, increasing MAXCPUS breaks compatibility for software setting cpu affinity compiled on earlier versions of FreeBSD.

With this patch, the calls will only fail with ERANGE if the mask size is actually too small.

In case of running old binaries on new systems with more cpus than fit in the mask, that's still not going to work with this patch. 

In response to a comment on that bug: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=200802#c4

> Shouldn't cpuset users be querying the cpuset size from sysctl and using that as their allocation base?

Possibly, but then the calling code wouldn't be able to use cpuset_t types, or CPU_SET macros.

Some updates of documentation would be required too, as the documentation currently says when using a too small mask, get returns an error, and set runs without error (which doesn't appear to be correct).