Here is a patch to do that. We use this internally, but I had forgotten to post it.
Not that it matters a huge amount, but this has been in RHEL5 for sometime and does fix the "machvec=dig" nuisance.
(Sorry for not replying earlier Terry -- I had a huge backlog of things to get to before this ...)
P.
-T ---diff --git a/arch/ia64/hp/common/sba_iommu.c b/arch/ia64/hp/common/sba_iommu.c--- a/arch/ia64/hp/common/sba_iommu.c +++ b/arch/ia64/hp/common/sba_iommu.c @@ -42,6 +42,9 @@ #include <asm/dma.h> #include <asm/system.h> /* wmb() */ #include <asm/acpi-ext.h> +#include <linux/crash_dump.h> + +extern int swiotlb_late_init_with_default_size (size_t size); #define PFX "IOC: " @@ -2026,11 +2029,24 @@ sba_init(void)if (!ia64_platform_is("hpzx1") && !ia64_platform_is("hpzx1_swiotlb"))return 0; +#ifdef CONFIG_CRASH_DUMP + /* If we are booting a kdump kernel, the sba_iommu will + * cause devices that were not shutdown properly to MCA + * as soon as they are turned back on. Our only option for + * a successful kdump kernel boot is to use the swiotlb. + */ + if (elfcorehdr_addr < ELFCORE_ADDR_MAX) { + if (swiotlb_late_init_with_default_size(64 * (1<<20)) != 0) + panic("Unable to initialize software I/O TLB:" + " Try machvec=dig boot option"); + machvec_init("dig"); + return 0; + } +#endif + acpi_bus_register_driver(&acpi_sba_ioc_driver); if (!ioc_list) { #ifdef CONFIG_IA64_GENERIC - extern int swiotlb_late_init_with_default_size (size_t size); - /* * If we didn't find something sba_iommu can claim, we * need to setup the swiotlb and switch to the dig machvec. - To unsubscribe from this list: send the line "unsubscribe linux-ia64" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html
- To unsubscribe from this list: send the line "unsubscribe linux-ia64" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html
![]() |