5851974b20
Release fork infrastructure: - REDBEAR_RELEASE=0.1.1 with offline enforcement (fetch/distclean/unfetch blocked) - 195 BLAKE3-verified source archives in standard format - Atomic provisioning via provision-release.sh (staging + .complete sentry) - 5-phase improvement plan: restore format auto-detection, source tree validation (validate-source-trees.py), archive-map.json, REPO_BINARY fallback Archive normalization: - Removed 87 duplicate/unversioned archives from shared pool - Regenerated all archives in consistent format with source/ + recipe.toml - BLAKE3SUMS and manifest.json generated from stable tarball set Patch management: - verify-patches.sh: pre-sync dry-run report (OK/REVERSED/CONFLICT) - 121 upstream-absorbed patches moved to absorbed/ directories - 43 active patches verified clean against rebased sources - Stress test: base updated to upstream HEAD, relibc reset and patched Compilation fixes: - relibc: Vec imports in redox-rt (proc.rs, lib.rs, sys.rs) - relibc: unsafe from_raw_parts in mod.rs (2024 edition) - fetch.rs: rev comparison handles short/full hash prefixes - kibi recipe: corrected rev mismatch New scripts: restore-sources.sh, provision-release.sh, verify-sources-archived.sh, check-upstream-releases.sh, validate-source-trees.py, verify-patches.sh, repair-archive-format.sh, generate-manifest.py Documentation: AGENTS.md, README.md, local/AGENTS.md updated for release fork model
71 lines
2.4 KiB
Plaintext
71 lines
2.4 KiB
Plaintext
diff --git a/src/scheme/proc.rs b/src/scheme/proc.rs
|
|
--- a/src/scheme/proc.rs
|
|
+++ b/src/scheme/proc.rs
|
|
@@ -145,8 +145,9 @@ enum ContextHandle {
|
|
// TODO: Remove this once openat is implemented, or allow openat-via-dup via e.g. the top-level
|
|
// directory.
|
|
OpenViaDup,
|
|
+ Priority,
|
|
SchedAffinity,
|
|
SchedPolicy,
|
|
Name,
|
|
|
|
MmapMinAddr(Arc<AddrSpaceWrapper>),
|
|
@@ -160,6 +161,17 @@ pub struct ProcScheme;
|
|
static NEXT_ID: AtomicUsize = AtomicUsize::new(1);
|
|
static HANDLES: RwLock<L1, HashMap<usize, Handle>> =
|
|
RwLock::new(HashMap::with_hasher(DefaultHashBuilder::new()));
|
|
+
|
|
+const NICE_MIN: i32 = -20;
|
|
+const NICE_MAX: i32 = 19;
|
|
+
|
|
+fn nice_to_kernel_prio(nice: i32) -> usize {
|
|
+ (nice.saturating_add(20)).clamp(0, 39) as usize
|
|
+}
|
|
+
|
|
+fn kernel_prio_to_nice(prio: usize) -> i32 {
|
|
+ (prio.min(39) as i32) - 20
|
|
+}
|
|
|
|
#[cfg(feature = "debugger")]
|
|
#[allow(dead_code)]
|
|
pub fn foreach_addrsp(
|
|
@@ -253,6 +265,7 @@ impl ProcScheme {
|
|
"sighandler" => (ContextHandle::Sighandler, false),
|
|
"start" => (ContextHandle::Start, false),
|
|
"open_via_dup" => (ContextHandle::OpenViaDup, false),
|
|
+ "priority" => (ContextHandle::Priority, false),
|
|
"mmap-min-addr" => (
|
|
ContextHandle::MmapMinAddr(Arc::clone(
|
|
context
|
|
@@ -1191,6 +1204,17 @@ impl ContextHandle {
|
|
|
|
Ok(size_of_val(&mask))
|
|
}
|
|
+ Self::Priority => {
|
|
+ let nice = unsafe { buf.read_exact::<i32>()? };
|
|
+ if !(NICE_MIN..=NICE_MAX).contains(&nice) {
|
|
+ return Err(Error::new(EINVAL));
|
|
+ }
|
|
+
|
|
+ context
|
|
+ .write(token.token())
|
|
+ .set_sched_other_prio(nice_to_kernel_prio(nice));
|
|
+
|
|
+ Ok(size_of::<i32>())
|
|
+ }
|
|
Self::SchedPolicy => {
|
|
if buf.len() != 2 {
|
|
return Err(Error::new(EINVAL));
|
|
@@ -1522,6 +1546,10 @@ impl ContextHandle {
|
|
|
|
buf.copy_exactly(crate::cpu_set::mask_as_bytes(&mask))?;
|
|
Ok(size_of_val(&mask))
|
|
+ }
|
|
+ ContextHandle::Priority => {
|
|
+ let nice = kernel_prio_to_nice(context.read(token.token()).prio);
|
|
+ buf.copy_common_bytes_from_slice(&nice.to_ne_bytes())
|
|
}
|
|
ContextHandle::SchedPolicy => {
|
|
let context = context.read(token.token());
|