/* * XXX - This needs to be much smarter about where it puts copies of the * kernel. For example, we should never put a copy on a headless node, * and we should respect the topology of the machine.
*/ void __init setup_replication_mask(void)
{ /* Set only the master cnode's bit. The master cnode is always 0. */
nodes_clear(ktext_repmask);
node_set(0, ktext_repmask);
#ifdef CONFIG_REPLICATE_KTEXT #ifndef CONFIG_MAPPED_KERNEL #error Kernel replication works with mapped kernel support. No calias support. #endif
{
nasid_t nasid;
for_each_online_node(nasid) { if (nasid == 0) continue; /* Advertise that we have a copy of the kernel */
node_set(nasid, ktext_repmask);
}
} #endif /* Set up a GDA pointer to the replication mask. */
GDA->g_ktext_repmask = &ktext_repmask;
}
/* XXX - When the BTE works, we should use it instead of this. */ static __init void copy_kernel(nasid_t dest_nasid)
{ unsignedlong dest_kern_start, source_start, source_end, kern_size;
/* Record where the master node should get its kernel text */
set_ktext_source(master_nasid, master_nasid);
for_each_online_node(client_nasid) { if (client_nasid == 0) continue;
/* Check if this node should get a copy of the kernel */ if (node_isset(client_nasid, ktext_repmask)) {
server_nasid = client_nasid;
copy_kernel(server_nasid);
}
/* Record where this node should get its kernel text */
set_ktext_source(client_nasid, server_nasid);
}
}
/* * Return pfn of first free page of memory on a node. PROM may allocate * data structures on the first couple of pages of the first slot of each * node. If this is the case, getfirstfree(node) > getslotstart(node, 0).
*/ unsignedlong node_getfirstfree(nasid_t nasid)
{ unsignedlong loadbase = REP_BASE; unsignedlong offset;
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.