Messages in this thread | | | Date | Thu, 16 Oct 2008 01:48:42 +0200 | From | Ingo Molnar <> | Subject | Re: [PATCH] disable CPU side GART accesses |
| |
(Cc:-ed the GART folks.)
* Bob Montgomery <bob.montgomery@hp.com> wrote:
> This patch prevents improper access of the GART aperture from kdump > kernels running on AMD systems. > > Symptoms of the problem include hangs, spurious restarts, and MCE > (Machine Check Exception) panics in some AMD Opteron systems that > enable the GART IOMMU and access /proc/vmcore or /dev/oldmem from a > kdump kernel. Note that the GART IOMMU will not be enabled on systems > with less than 4 GB of RAM, so symptoms will not appear. This problem > has been reproduced on Family 10H Quad-Core AMD Opteron systems. > > This patch changes the initialization of the GART to set the > DISGARTCPU bit in the GART Aperture Control Register > (AMD64_GARTAPERTURECTL). Setting the bit prevents requests from the > CPUs from accessing the GART. In other words, CPU memory accesses to > the aperture address range will not cause the GART to perform an > address translation. The aperture area is currently being unmapped at > the kernel level with set_memory_np() in gart_iommu_init to prevent > accesses from the CPU, but that kernel level unmapping is not in > effect in the kexec'd kdump kernel. By disabling the CPU-side > accesses within the GART, which does persist through the kexec of the > kdump kernel, the kdump kernel is prevented from interacting with the > GART during accesses to the dump memory areas which include the > address range of the GART aperture. Although the patch can be applied > to the kdump kernel, it is not exercised there because the kdump > kernel doesn't attempt to initialize the GART, since it typically runs > in less than 4 GB of memory. > > Signed-off-by: Bob Montgomery <bob.montgomery@hp.com> > > > --- linux-2.6.27/include/asm-x86/gart.h 2008-10-13 16:36:34.000000000 -0600 > +++ linux-2.6.27-fix/include/asm-x86/gart.h 2008-10-14 10:37:32.000000000 -0600 > @@ -44,7 +44,8 @@ static inline void enable_gart_translati > /* Enable GART translation for this hammer. */ > pci_read_config_dword(dev, AMD64_GARTAPERTURECTL, &ctl); > ctl |= GARTEN; > - ctl &= ~(DISGARTCPU | DISGARTIO); > + ctl |= DISGARTCPU; > + ctl &= ~(DISGARTIO); > pci_write_config_dword(dev, AMD64_GARTAPERTURECTL, ctl); > } > > > > -- > To unsubscribe from this list: send the line "unsubscribe linux-kernel" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html > Please read the FAQ at http://www.tux.org/lkml/
| |