/* The crash region must not overlap the current kernel */ if ((kernel_start + kernel_size > crash_base) && (kernel_start <= crash_end)) {
pr_warn("Crash kernel can not overlap current kernel\n"); return;
}
/* Values we need to export to the second kernel via the device tree. */ static phys_addr_t kernel_end; static phys_addr_t crashk_base; static phys_addr_t crashk_size; staticunsignedlonglong mem_limit;
staticvoid __init export_crashk_values(struct device_node *node)
{ /* There might be existing crash kernel properties, but we can't
* be sure what's in them, so remove them. */
of_remove_property(node, of_find_property(node, "linux,crashkernel-base", NULL));
of_remove_property(node, of_find_property(node, "linux,crashkernel-size", NULL));
node = of_find_node_by_path("/chosen"); if (!node) return -ENOENT;
/* remove any stale properties so ours can be found */
of_remove_property(node, of_find_property(node, kernel_end_prop.name, NULL));
/* information needed by userspace when using default_machine_kexec */
kernel_end = cpu_to_be_ulong(__pa(_end));
of_add_property(node, &kernel_end_prop);
¤ 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.0.3Bemerkung:
¤
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.