/* * Copy the cpu registers which have been saved in the IP27prom format * into the eframe format for the node under consideration.
*/
staticvoid nmi_cpu_eframe_save(nasid_t nasid, int slice)
{ struct reg_struct *nr; int i;
/* Get the pointer to the current cpu's register set. */
nr = (struct reg_struct *)
(TO_UNCAC(TO_NODE(nasid, IP27_NMI_KREGS_OFFSET)) +
slice * IP27_NMI_KREGS_CPU_SIZE);
/* * Copy the cpu registers which have been saved in the IP27prom format * into the eframe format for the node under consideration.
*/ staticvoid nmi_node_eframe_save(nasid_t nasid)
{ int slice;
if (nasid == INVALID_NASID) return;
/* Save the registers into eframe for each cpu */ for (slice = 0; slice < NODE_NUM_CPUS(slice); slice++) {
nmi_cpu_eframe_save(nasid, slice);
nmi_dump_hub_irq(nasid, slice);
}
}
/* * Save the nmi cpu registers for all cpus in the system.
*/ staticvoid nmi_eframes_save(void)
{
nasid_t nasid;
atomic_inc(&nmied_cpus); #endif /* * Only allow 1 cpu to proceed
*/
arch_spin_lock(&nmi_lock);
#ifdef REAL_NMI_SIGNAL /* * Wait up to 15 seconds for the other cpus to respond to the NMI. * If a cpu has not responded after 10 sec, send it 1 additional NMI. * This is for 2 reasons: * - sometimes a MMSC fail to NMI all cpus. * - on 512p SN0 system, the MMSC will only send NMIs to * half the cpus. Unfortunately, we don't know which cpus may be * NMIed - it depends on how the site chooses to configure. * * Note: it has been measure that it takes the MMSC up to 2.3 secs to * send NMIs to all cpus on a 256p system.
*/ for (i=0; i < 1500; i++) {
for_each_online_node(node) if (NODEPDA(node)->dump_count == 0) break; if (node == MAX_NUMNODES) break; if (i == 1000) {
for_each_online_node(node) if (NODEPDA(node)->dump_count == 0) {
cpu = cpumask_first(cpumask_of_node(node)); for (n=0; n < CNODE_NUM_CPUS(node); cpu++, n++) {
CPUMASK_SETB(nmied_cpus, cpu); /* * cputonasid, cputoslice * needs kernel cpuid
*/
SEND_NMI((cputonasid(cpu)), (cputoslice(cpu)));
}
}
}
udelay(10000);
} #else while (atomic_read(&nmied_cpus) != num_online_cpus()); #endif
/* * Save the nmi cpu registers for all cpu in the eframe format.
*/
nmi_eframes_save();
LOCAL_HUB_S(NI_PORT_RESET, NPR_PORTRESET | NPR_LOCALRESET);
}
Messung V0.5
¤ Dauer der Verarbeitung: 0.14 Sekunden
(vorverarbeitet)
¤
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.