pub struct PciHotplug {
pub present: bool,
pub evidence: String,
}Expand description
Does the RUNNING kernel have PCI hot-plug? Measured, never declared.
Why it matters: UpCloud resizes only DETACHED volumes, so a runtime growth
is detach → resize → re-attach, and a kernel with # CONFIG_HOTPLUG_PCI is not set never sees the member leave or come back (511 HOTPLUG_FAILED).
The rule, in order — both work on a no-OS PID 1 with no shell and a kernel
built with CONFIG_MODULES=n:
/proc/config.gz(only when the kernel hasCONFIG_IKCONFIG_PROC;tunnr-kernel’snukedpreset does NOT):CONFIG_HOTPLUG_PCI=yAND at least one controller (_ACPI,_PCIE,_SHPC)=y.- Otherwise the built-in controllers’ parameter directories:
/sys/module/acpiphp(acpiphp.disable),/sys/module/pciehp(pciehp.pciehp_poll_mode),/sys/module/shpchp(shpchp.shpchp_debug).param_sysfs_builtincreates these for built-in code with parameters whether or not modules exist; nothing else in the tree creates them.
NOT used: /sys/bus/pci/slots — drivers/pci/slot.o builds on SYSFS
alone, so the directory exists on a kernel with no hot-plug at all.
Fields§
§present: bool§evidence: StringWhat was read, for the reason line: config.gz: … or sys/module: ….
Trait Implementations§
Source§impl Clone for PciHotplug
impl Clone for PciHotplug
Source§impl Debug for PciHotplug
impl Debug for PciHotplug
impl Eq for PciHotplug
Source§impl PartialEq for PciHotplug
impl PartialEq for PciHotplug
impl StructuralPartialEq for PciHotplug
Auto Trait Implementations§
impl Freeze for PciHotplug
impl RefUnwindSafe for PciHotplug
impl Send for PciHotplug
impl Sync for PciHotplug
impl Unpin for PciHotplug
impl UnsafeUnpin for PciHotplug
impl UnwindSafe for PciHotplug
Blanket Implementations§
impl<T> Allocation for T
Source§impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
Source§impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
Compare self to
key and return true if they are equal.Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
Source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
Wrap the input message
T in a tonic::Request