Merge bootprocess branch overlay into 0.2.0
Restore all bootprocess branch files that were overwritten by later 0.2.0 commits. This overlay brings back the complete boot infrastructure: - Configs: redbear-full, redbear-mini, redbear-device-services, driver .d files - Kernel: IRQ affinity, x2APIC, C-states, NUMA (SLIT/SRAT), MCS locks, cpuidle - Base patches: P0-P55 + new P6 (lived block_size=512) + P57 (fbbootlogd graceful init) - Driver infra: driver-manager, udev-shim, thermald, cpufreqd, iommu, redox-driver-sys/core - GPU: redox-drm with improved connector handling - System: redbear-info, redbear-hwutils phase-timer-check - Build system: fetch.rs improvements, build-iso.sh, run_full.sh - Kernel source: new ACPI (SLIT, SRAT), cpuidle, cstate, MCS lock modules 83 files changed, +3966/-1248 lines
This commit is contained in:
@@ -26,7 +26,6 @@ pub fn run_hotplug_loop(
|
||||
);
|
||||
|
||||
let mut deferred_retries: BTreeMap<(String, String), u32> = BTreeMap::new();
|
||||
let mut permanently_fatal: BTreeSet<(String, String)> = BTreeSet::new();
|
||||
|
||||
loop {
|
||||
thread::sleep(Duration::from_millis(poll_interval_ms));
|
||||
@@ -67,15 +66,6 @@ pub fn run_hotplug_loop(
|
||||
track_pci_device(device, &mut seen_pci_devices);
|
||||
let key = (device.path.clone(), driver_name.clone());
|
||||
|
||||
// Skip devices that were permanently fatal in a previous cycle.
|
||||
// enumerate() re-probes all unbound devices each poll, but a Fatal
|
||||
// result means the driver binary is genuinely absent (e.g. ided on
|
||||
// a live ISO that doesn't ship it) — no amount of re-probing will
|
||||
// change the outcome.
|
||||
if permanently_fatal.contains(&key) {
|
||||
continue;
|
||||
}
|
||||
|
||||
match result {
|
||||
ProbeResult::Bound => {
|
||||
log::info!("hotplug: bound {} -> {}", device.path, driver_name);
|
||||
@@ -99,6 +89,12 @@ pub fn run_hotplug_loop(
|
||||
MAX_DEFERRED_RETRIES,
|
||||
reason
|
||||
);
|
||||
if let Ok(mut skipped) = crate::config::PERMANENTLY_SKIPPED.lock() {
|
||||
skipped.insert((
|
||||
device.path.clone(),
|
||||
driver_name.clone(),
|
||||
));
|
||||
}
|
||||
}
|
||||
}
|
||||
ProbeResult::Fatal { reason } => {
|
||||
@@ -108,9 +104,20 @@ pub fn run_hotplug_loop(
|
||||
driver_name,
|
||||
reason
|
||||
);
|
||||
permanently_fatal.insert(key);
|
||||
if let Ok(mut skipped) = crate::config::PERMANENTLY_SKIPPED.lock() {
|
||||
skipped.insert(key);
|
||||
}
|
||||
}
|
||||
ProbeResult::NotSupported => {
|
||||
log::debug!(
|
||||
"hotplug: not supported {} -> {}",
|
||||
device.path,
|
||||
driver_name
|
||||
);
|
||||
if let Ok(mut skipped) = crate::config::PERMANENTLY_SKIPPED.lock() {
|
||||
skipped.insert(key);
|
||||
}
|
||||
}
|
||||
_ => {}
|
||||
}
|
||||
}
|
||||
ProbeEvent::NoDriverFound { device } => {
|
||||
@@ -200,6 +207,8 @@ fn track_pci_device(device: &DeviceId, seen_pci_devices: &mut BTreeSet<String>)
|
||||
}
|
||||
|
||||
fn notify_bound_device(scheme: &DriverManagerScheme, device: &DeviceId, driver_name: &str) {
|
||||
// PCI devices use the pcid-compatible bind notification.
|
||||
// ACPI devices may be notified through other mechanisms in the future.
|
||||
if device.bus == "pci" {
|
||||
notify_bind(scheme, &device.path, driver_name);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user