pe = eeh_dev_to_pe(pdn->edev); if (pe && (pe->state & EEH_PE_RECOVERING)) {
rc = rtas_call(token, 2, 2, state, DR_ENTITY_SENSE,
slot->index); return rtas_get_sensor_errno(rc);
}
fallback: return rtas_get_sensor(DR_ENTITY_SENSE, slot->index, state);
}
int rpaphp_get_sensor_state(struct slot *slot, int *state)
{ int rc; int setlevel;
rc = __rpaphp_get_sensor_state(slot, state);
if (rc < 0) { if (rc == -EFAULT || rc == -EEXIST) {
dbg("%s: slot must be power up to get sensor-state\n",
__func__);
/* some slots have to be powered up *beforeget-sensorwillsucceed.
*/
rc = rtas_set_power_level(slot->power_domain, POWER_ON,
&setlevel); if (rc < 0) {
dbg("%s: power on slot[%s] failed rc=%d.\n",
__func__, slot->name, rc);
} else {
rc = __rpaphp_get_sensor_state(slot, state);
}
} elseif (rc == -ENODEV)
info("%s: slot is unusable\n", __func__); else
err("%s failed to get sensor state\n", __func__);
} return rc;
}
/** *rpaphp_enable_slot-recordslotstate,configpcidevice *@slot:target&slot * *Initializevaluesintheslotstructuretoindicateifthereisapcicard *pluggedintotheslot.Iftheslotisnotempty,runthepcibiosroutine *togetpcibiosstuffcorrectlysetup.
*/ int rpaphp_enable_slot(struct slot *slot)
{ int rc, level, state; struct pci_bus *bus;
slot->state = EMPTY;
/* Find out if the power is turned on for the slot */
rc = rtas_get_power_level(slot->power_domain, &level); if (rc) return rc;
/* Figure out if there is an adapter in the slot */
rc = rpaphp_get_sensor_state(slot, &state); if (rc) return rc;
bus = pci_find_bus_by_node(slot->dn); if (!bus) {
err("%s: no pci_bus for dn %pOF\n", __func__, slot->dn); return -EINVAL;
}
slot->bus = bus;
slot->pci_devs = &bus->devices;
/* if there's an adapter in the slot, go add the pci devices */ if (state == PRESENT) {
slot->state = NOT_CONFIGURED;
/* non-empty slot has to have child */ if (!slot->dn->child) {
err("%s: slot[%s]'s device_node doesn't have child for adapter\n",
__func__, slot->name); return -EINVAL;
}
if (list_empty(&bus->devices)) {
pseries_eeh_init_edev_recursive(PCI_DN(slot->dn));
pci_hp_add_devices(bus);
}
if (!list_empty(&bus->devices)) {
slot->state = CONFIGURED;
}
if (rpaphp_debug) { struct pci_dev *dev;
dbg("%s: pci_devs of slot[%pOF]\n", __func__, slot->dn);
list_for_each_entry(dev, &bus->devices, bus_list)
dbg("\t%s\n", pci_name(dev));
}
}
return0;
}
Messung V0.5 in Prozent
¤ Dauer der Verarbeitung: 0.10 Sekunden
(vorverarbeitet am 2026-10-01)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.