• Bernhard Walle's avatar
    [IA64] Don't reserve crashkernel memory > 4 GB · 8a3360f0
    Bernhard Walle authored
    Some IA64 machines map all cell-local memory above 4 GB (32 bit limit).
    However, in most cases, the kernel needs some memory below that limit that is
    DMA-capable. So in this machine configuration, the crashkernel will be reserved
    above 4 GB.
    
    For machines that use SWIOTLB implementation because they lack an I/O MMU
    the low memory is required by the SWIOTLB implementation. In that case,
    it doesn't make sense to reserve the crashkernel at all because it's unusable
    for kdump.
    
    A special case is the "hpzx1" machine vector. In theory, it has a I/O MMU, so
    it can be booted above 4 GB. However, in the kdump case that is not possible
    because of changeset 51b58e3e:
    
        On HP zx1 machines, the 'machvec=dig' parameter is needed for the kdump
        kernel to avoid problems with the HP sba iommu.  The problem is that during
        the boot of the kdump kernel, the iommu is re-initialized, so in-flight DMA
        from improperly shutdown drivers causes an IOTLB miss which leads to an
        MCA.  With kdump, the idea is to get into the kdump kernel with as little
        code as we can, so shutting down drivers properly is not an option.
    
        The workaround is to add 'machvec=dig' to the kdump kernel boot parameters.
        This makes the kdump kernel avoid using the sba iommu altogether, leaving
        the IOTLB intact.  Any ongoing DMA falls harmlessly outside the kdump
        kernel.  After the kdump kernel reboots, all devices will have been
        shutdown properly and DMA stopped.
    
    This patch pushes that functionality into the sba iommu initialization
    code, so that users won't have to find the obscure documentation telling
    them about 'machvec=dig'.
    
    This means that also for hpzx1 it's not possible to boot when all
    memory is above the 4 GB limit. So the only machine vectors that can handle
    this case are "sn2" and "uv".
    Signed-off-by: default avatarBernhard Walle <bwalle@suse.de>
    Signed-off-by: default avatarTony Luck <tony.luck@intel.com>
    8a3360f0
setup.c 27.8 KB