[lkml]   [2007]   [Nov]   [3]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
Messages in this thread
    SubjectRe: 2.6.24-rc1-54866f032307063776b4eff7eadb131d47f9f9b4 fails to boot: kernel BUG at include/linux/scatterlist.h:49!
    On 11/2/07, Stefan Richter <> wrote:
    > Torsten Kaiser wrote:
    > > Both 2.6.24-rc1 and the current git version fail to boot for me:
    > >
    > > [ 57.182205] ohci1394: fw-host0: OHCI-1394 1.1 (PCI): IRQ=[16]
    > > MMIO=[effff800-efffffff] Max Packet=
    > > [2048] IR/IT contexts=[4/8]
    > > [ 57.194032] eth1394: eth2: IPv4 over IEEE 1394 (fw-host0)
    > > [ 57.199527] ------------[ cut here ]------------
    > > [ 57.204154] kernel BUG at include/linux/scatterlist.h:49!
    > To which extent do you need IEEE 1394 drivers?

    Using eth1394 as primary network connection on this computer.
    So switching to the new stack is currently not an option, or did I
    missing something?
    (I also have a firewire disk, but that is not used right now)

    > > from gdb:
    > > 0xffffffff80463512 is in dma_region_alloc (include/linux/scatterlist.h:49).
    > > 44 * In order for the low bit stealing approach to work, pages
    > > 45 * must be aligned at a 32-bit boundary as a minimum.
    > > 46 */
    > > 47 BUG_ON((unsigned long) page & 0x03);
    > > 48 #ifdef CONFIG_DEBUG_SG
    > > 49 BUG_ON(sg->sg_magic != SG_MAGIC);
    > > 50 #endif
    > > 51 sg->page_link = page_link | (unsigned long) page;
    > > 52 }
    > > 53
    > Uh oh...

    Looking that calltrace upwards, it seems replacing the
    memset(dma->sglist,...) with sg_init_table(...) would fix the BUG_ON()
    as that inits the SG_MAGIC. But I do not trust myself to fixing all
    the iterators correctly to convert this completely to the new API.

    What I noticed trying to find the definition of sg_dma_address() is
    that all architectures seem to implement identical macros for
    sg_dma_address() and sg_dma_length(). The only difference is that some
    archs call their fields different.

    But I stopped looking if unifiying all names was possible when I found
    swiotlb_map_sg() in lib/swiotlb.c...

    Why is there a comment about using "sg_dma_{address,length}(SG)" to
    obtain the "appropriate dma address and length" when I see no instance
    of this macros there? Instead there are direct accesses to sg->length
    and sg->dma_length. And the field dma_length only exists in some
    arches! (alpha, ia64, powerpc only if __powerpc64__ is defined,
    sparc64 and the 64bit variant of x86)
    On the other hand I can't find any other "iova_length" in the hole
    tree apart from include/asm-parisc/scatterlist.h...

    ... so I can't really make sense of the sg mechanism and abstain from
    trying to fix this myself.

    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to
    More majordomo info at
    Please read the FAQ at

     \ /
      Last update: 2007-11-03 14:17    [W:0.024 / U:17.716 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site