27 Jun, 2006

3 commits

  • This patch hooks Calgary into the build, the x86-64 IOMMU
    initialization paths, and introduces the Calgary specific bits. The
    implementation draws inspiration from both PPC (which has support for
    the same chip but requires firmware support which we don't have on
    x86-64) and gart. Calgary is different from gart in that it support a
    translation table per PHB, as opposed to the single gart aperture.

    Changes from previous version:
    * Addition of boot-time disablement for bus-level translation/isolation
    (e.g, enable userspace DMA for things like X)
    * Usage of newer IOMMU abstraction functions

    Signed-off-by: Muli Ben-Yehuda
    Signed-off-by: Jon Mason
    Signed-off-by: Andi Kleen
    Signed-off-by: Linus Torvalds

    Jon Mason
     
  • This patch creates a new interface for IOMMUs by adding a centralized
    location for IOMMU allocation (for translation tables/apertures) and
    IOMMU initialization. In creating these, code was moved around for
    abstraction, uniformity, and consiceness.

    Take note of the move of the iommu_setup bootarg parsing code to
    __setup. This is enabled by moving back the location of the aperture
    allocation/detection to mem init (which while ugly, was already the
    location of the swiotlb_init).

    While a slight departure from the previous patch, I belive this provides
    the true intention of the previous versions of the patch which changed
    this code. It also makes the addition of the upcoming calgary code much
    cleaner than previous patches.

    [AK: Removed one broken change. iommu_setup still has to be called
    early]

    Signed-off-by: Muli Ben-Yehuda
    Signed-off-by: Jon Mason
    Signed-off-by: Andi Kleen
    Signed-off-by: Linus Torvalds

    Jon Mason
     
  • - Rename the GART_IOMMU option to IOMMU to make clear it's not
    just for AMD
    - Rewrite the help text to better emphatise this fact
    - Make it an embedded option because too many people get it wrong.

    To my astonishment I discovered the aacraid driver tests this
    symbol directly. This looks quite broken to me - it's an internal
    implementation detail of the PCI DMA API. Can the maintainer
    please clarify what this test was intended to do?

    Cc: linux-scsi@vger.kernel.org
    Cc: alan@redhat.com
    Cc: markh@osdl.org
    Signed-off-by: Andi Kleen
    Signed-off-by: Linus Torvalds

    Andi Kleen
     

26 Apr, 2006

1 commit


27 Feb, 2006

1 commit

  • In previous versions of pci-gart.c, no_iommu was used to determine if IOMMU was
    disabled in the GART DMA mapping functions. This changed in 2.6.16 and now
    gart_xxx() functions are only called if gart is enabled. Therefore, uses of
    no_iommu in the GART code are no longer necessary and can be removed.

    Also, it removes double deceleration of no_iommu and force_iommu in pci.h and
    proto.h, by removing the deceleration in pci.h.

    Lastly, end_pfn off by one error.

    Tested (along with patch 1/2) on dual opteron with gart enabled, iommu=soft,
    and iommu=off.

    Signed-off-by: Jon Mason
    Signed-off-by: Andi Kleen
    Signed-off-by: Linus Torvalds

    Jon Mason
     

12 Jan, 2006

1 commit

  • AK: I hacked Muli's original patch a lot and there were a lot
    of changes - all bugs are probably to blame on me now.
    There were also some changes in the fall back behaviour
    for swiotlb - in particular it doesn't try to use GFP_DMA
    now anymore. Also all DMA mapping operations use the
    same core dma_alloc_coherent code with proper fallbacks now.
    And various other changes and cleanups.

    Known problems: iommu=force swiotlb=force together breaks
    needs more testing.

    This patch cleans up x86_64's DMA mapping dispatching code. Right now
    we have three possible IOMMU types: AGP GART, swiotlb and nommu, and
    in the future we will also have Xen's x86_64 swiotlb and other HW
    IOMMUs for x86_64. In order to support all of them cleanly, this
    patch:

    - introduces a struct dma_mapping_ops with function pointers for each
    of the DMA mapping operations of gart (AMD HW IOMMU), swiotlb
    (software IOMMU) and nommu (no IOMMU).

    - gets rid of:

    if (swiotlb)
    return swiotlb_xxx();

    - PCI_DMA_BUS_IS_PHYS is now checked against the dma_ops being set
    This makes swiotlb faster by avoiding double copying in some cases.

    Signed-Off-By: Muli Ben-Yehuda
    Signed-Off-By: Jon D. Mason
    Signed-off-by: Andi Kleen
    Signed-off-by: Linus Torvalds

    Muli Ben-Yehuda
     

28 Oct, 2005

1 commit


13 Sep, 2005

1 commit


15 Aug, 2005

1 commit

  • This reverts commits

    71db63acff69618b3d9d3114bd061938150e146b
    [PATCH] increase PCIBIOS_MIN_IO on x86

    and

    0b2bfb4e7ff61f286676867c3508569bea6fbf7a
    ACPI: increase PCIBIOS_MIN_IO on x86

    since Lukas Sandströ reports that this breaks
    his on-board nvidia audio.

    We should re-visit this later. For now we revert the change

    Signed-off-by: Linus Torvalds

    Linus Torvalds
     

03 Aug, 2005

1 commit

  • There is a number of x86 laptops that have some non-PCI IO ports
    in the 0x1000-0x1fff range, and it's quite hard to control the correct
    order of resource allocation between PCI and other subsystems controlling
    these ports. Especially with modular kernel.

    So just increase PCIBIOS_MIN_IO to 0x4000 to prevent any new PCI
    resource allocations in the problematic range (this limitation must
    apply _only_ to the root bus resources - see Linus' change in
    pci_bus_alloc_resource). As PCIBIOS_MIN_IO and PCIBIOS_MIN_CARDBUS_IO
    are the same now on i386 and x86-64, we can remove the latter.

    Signed-off-by: Ivan Kokshaysky
    Signed-off-by: Linus Torvalds

    Ivan Kokshaysky
     

13 Jul, 2005

1 commit


12 Jul, 2005

1 commit


28 Jun, 2005

2 commits

  • With CONFIG_PCI=n:

    In file included from include/linux/pci.h:917,
    from lib/iomap.c:6:
    include/asm/pci.h:104: warning: `enum pci_dma_burst_strategy' declared inside parameter list
    include/asm/pci.h:104: warning: its scope is only this definition or declaration, which is probably not what you want.
    include/asm/pci.h: In function `pci_dma_burst_advice':
    include/asm/pci.h:106: dereferencing pointer to incomplete type
    include/asm/pci.h:106: `PCI_DMA_BURST_INFINITY' undeclared (first use in this function)
    include/asm/pci.h:106: (Each undeclared identifier is reported only once
    include/asm/pci.h:106: for each function it appears in.)
    make[1]: *** [lib/iomap.o] Error 1

    Signed-off-by: Andrew Morton
    Signed-off-by: Greg Kroah-Hartman

    Andrew Morton
     
  • After seeing, at best, "guesses" as to the following kind
    of information in several drivers, I decided that we really
    need a way for platforms to specifically give advice in this
    area for what works best with their PCI controller implementation.

    Basically, this new interface gives DMA bursting advice on
    PCI. There are three forms of the advice:

    1) Burst as much as possible, it is not necessary to end bursts
    on some particular boundary for best performance.

    2) Burst on some byte count multiple. A DMA burst to some multiple of
    number of bytes may be done, but it is important to end the burst
    on an exact multiple for best performance.

    The best example of this I am aware of are the PPC64 PCI
    controllers, where if you end a burst mid-cacheline then
    chip has to refetch the data and the IOMMU translations
    which hurts performance a lot.

    3) Burst on a single byte count multiple. Bursts shall end
    exactly on the next multiple boundary for best performance.

    Sparc64 and Alpha's PCI controllers operate this way. They
    disconnect any device which tries to burst across a cacheline
    boundary.

    Actually, newer sparc64 PCI controllers do not have this behavior.
    That is why the "pdev" is passed into the interface, so I can
    add code later to check which PCI controller the system is using
    and give advice accordingly.

    Signed-off-by: David S. Miller
    Signed-off-by: Greg Kroah-Hartman

    David S. Miller
     

17 Apr, 2005

1 commit

  • Initial git repository build. I'm not bothering with the full history,
    even though we have it. We can create a separate "historical" git
    archive of that later if we want to, and in the meantime it's about
    3.2GB when imported into git - space that would just make the early
    git days unnecessarily complicated, when we don't have a lot of good
    infrastructure for it.

    Let it rip!

    Linus Torvalds