[lkml]   [2009]   [Dec]   [15]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
Messages in this thread
    Patch in this message
    SubjectRe: bisected crash due to "x86: Move swiotlb initialization before dma32_free_bootmem"
    FUJITA Tomonori wrote:
    > On Mon, 14 Dec 2009 23:47:07 -0800
    > Roland Dreier <> wrote:
    >> I have a big box (64 threads, 256GB memory) that is crashing early in
    >> boot as below. I bisected it down to f4780ca0 ("x86: Move swiotlb
    >> initialization before dma32_free_bootmem"); reverting just this commit
    >> from the latest git (3ea6b3d0 is what I tested) fixes things.
    > Ah, really sorry about that.
    >> I haven't tried to debug this yet, but I guess on such a huge box there
    >> is not enough memory below 4GB for swiotlb if we don't free the
    > Yeah, Yinghai also hit this (his box has more memory than yours).
    >> stuff allocated earlier? I don't know why that would be, since the
    >> bootmem is grabbing 512MB and I have pretty close to 4GB below 4GB.
    >> Anyway, I'm going to go to bed soon, but if you need more information or
    >> have anything you want me to try, I will do it tomorrow morning.
    > It makes the swiotlb initialization into two stages. I don't like it
    > much since I like to avoid complicating the initialization.
    > dma32_reserve_bootmem() allocates 128MB for broken GART IOMMU but I
    > think 64MB should be enough since broken GART IOMMU allocates
    > 64MB. The following simple patch might work too because swiotlb uses
    > 64MB.
    > With coming huge memory boxes, we might need to work on ZONE_DMA32
    > shortage issue anyway (sparse-vmemmap, anything else)?

    maybe just revert f4780ca0... for now

    actually dma32_free_bootmem will also make sure it will give some buffer to pci_swiotlb_init...


    diff --git a/arch/x86/kernel/pci-dma.c b/arch/x86/kernel/pci-dma.c
    index fcc2f2b..afcc58b 100644
    --- a/arch/x86/kernel/pci-dma.c
    +++ b/arch/x86/kernel/pci-dma.c
    @@ -120,14 +120,11 @@ static void __init dma32_free_bootmem(void)

    void __init pci_iommu_alloc(void)
    - int use_swiotlb;
    - use_swiotlb = pci_swiotlb_init();
    #ifdef CONFIG_X86_64
    /* free the range so iommu could get some range less than 4G */
    - if (use_swiotlb)
    + if (pci_swiotlb_init())


     \ /
      Last update: 2009-12-15 10:15    [W:0.023 / U:4.172 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site