21 Aug, 2009

1 commit

  • swiotlb_full() in lib/swiotlb.c throws one of two panic messages
    based on whether the direction of transfer is from the device
    or to the device. The logic around this is somewhat weird in
    the case of bidirectional transfers. It appears to want to
    throw both in succession, but since its a panic only the first
    makes it.

    This patch adds a third, separate error for DMA_BIDIRECTIONAL
    to make things a bit clearer.

    Signed-off-by: Casey Dahlin
    Cc: FUJITA Tomonori
    Cc: Becky Bruce
    [ further fixed the error message ]
    Signed-off-by: Andrew Morton
    LKML-Reference:
    Signed-off-by: Ingo Molnar

    Casey Dahlin
     

28 Jul, 2009

6 commits


08 Apr, 2009

7 commits

  • Add a hwdev argument that is needed on some architectures
    in order to access a per-device offset that is taken into
    account when producing a physical address (also needed to
    get from bus address to virtual address because the physical
    address is an intermediate step).

    Also make swiotlb_bus_to_virt weak so architectures can
    override it.

    Signed-off-by: Becky Bruce
    Acked-by: FUJITA Tomonori
    Signed-off-by: Kumar Gala
    Cc: jeremy@goop.org
    Cc: ian.campbell@citrix.com
    LKML-Reference:
    Signed-off-by: Ingo Molnar

    Becky Bruce
     
  • Right now both swiotlb_sync_single_range and swiotlb_sync_sg
    were duplicating the code in swiotlb_sync_single. Just call it
    instead. Also rearrange the sync_single code for readability.

    Note that the swiotlb_sync_sg code was previously doing
    a complicated comparison to determine if an addresses needed
    to be unmapped where a simple is_swiotlb_buffer() call
    would have sufficed.

    Signed-off-by: Becky Bruce
    Acked-by: FUJITA Tomonori
    Signed-off-by: Kumar Gala
    Cc: jeremy@goop.org
    Cc: ian.campbell@citrix.com
    LKML-Reference:
    Signed-off-by: Ingo Molnar

    Becky Bruce
     
  • Previously, swiotlb_unmap_page and swiotlb_unmap_sg were
    duplicating very similar code. Refactor that code into a
    new unmap_single and unmap_single use do_unmap_single.

    Note that the swiotlb_unmap_sg code was previously doing
    a complicated comparison to determine if an addresses needed
    to be unmapped where a simple is_swiotlb_buffer() call
    would have sufficed.

    Signed-off-by: Becky Bruce
    Signed-off-by: Kumar Gala
    Cc: jeremy@goop.org
    Cc: ian.campbell@citrix.com
    LKML-Reference:
    Signed-off-by: Ingo Molnar

    Becky Bruce
     
  • Some architectures require additional checking to determine
    if a device can dma to an address and need to provide their
    own address_needs_mapping..

    Signed-off-by: Becky Bruce
    Acked-by: FUJITA Tomonori
    Signed-off-by: Kumar Gala
    Cc: jeremy@goop.org
    Cc: ian.campbell@citrix.com
    LKML-Reference:
    Signed-off-by: Ingo Molnar

    Becky Bruce
     
  • The current code calls virt_to_phys() on address that might
    be in highmem, which is bad. This wasn't needed, anyway, because
    we already have the physical address we need.

    Get rid of the now-unused virtual address as well.

    Signed-off-by: Becky Bruce
    Acked-by: FUJITA Tomonori
    Signed-off-by: Kumar Gala
    Cc: jeremy@goop.org
    Cc: ian.campbell@citrix.com
    LKML-Reference:
    Signed-off-by: Ingo Molnar

    Becky Bruce
     
  • Squash a build warning seen on 32-bit powerpc caused by
    calling min() with 2 different types. Use min_t() instead.

    Signed-off-by: Becky Bruce
    Acked-by: FUJITA Tomonori
    Signed-off-by: Kumar Gala
    Cc: jeremy@goop.org
    Cc: ian.campbell@citrix.com
    LKML-Reference:
    Signed-off-by: Ingo Molnar

    Becky Bruce
     
  • Impact: cleanup

    swiotlb_map/unmap_single are now swiotlb_map/unmap_page;
    trivially change all the comments to reference new names.

    Also, there were some comments that should have been
    referring to just plain old map_single, not swiotlb_map_single;
    fix those as well.

    Also change a use of the word "pointer", when what is
    referred to is actually a dma/physical address.

    Signed-off-by: Becky Bruce
    Acked-by: FUJITA Tomonori
    Signed-off-by: Kumar Gala
    Cc: jeremy@goop.org
    Cc: ian.campbell@citrix.com
    LKML-Reference:
    Signed-off-by: Ingo Molnar

    Becky Bruce
     

07 Apr, 2009

1 commit


11 Jan, 2009

3 commits


07 Jan, 2009

2 commits

  • …/git/tip/linux-2.6-tip

    * 'core-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip:
    rcu: fix rcutorture bug
    rcu: eliminate synchronize_rcu_xxx macro
    rcu: make treercu safe for suspend and resume
    rcu: fix rcutree grace-period-latency bug on small systems
    futex: catch certain assymetric (get|put)_futex_key calls
    futex: make futex_(get|put)_key() calls symmetric
    locking, percpu counters: introduce separate lock classes
    swiotlb: clean up EXPORT_SYMBOL usage
    swiotlb: remove unnecessary declaration
    swiotlb: replace architecture-specific swiotlb.h with linux/swiotlb.h
    swiotlb: add support for systems with highmem
    swiotlb: store phys address in io_tlb_orig_addr array
    swiotlb: add hwdev to swiotlb_phys_to_bus() / swiotlb_sg_to_bus()

    Linus Torvalds
     
  • Signed-off-by: Kay Sievers
    Signed-off-by: Greg Kroah-Hartman

    Kay Sievers
     

06 Jan, 2009

2 commits

  • This adds swiotlb_map_page and swiotlb_unmap_page to lib/swiotlb.c and
    remove IA64 and X86's swiotlb_map_page and swiotlb_unmap_page.

    This also removes unnecessary swiotlb_map_single, swiotlb_map_single_attrs,
    swiotlb_unmap_single and swiotlb_unmap_single_attrs.

    Signed-off-by: FUJITA Tomonori
    Acked-by: Tony Luck
    Signed-off-by: Ingo Molnar

    FUJITA Tomonori
     
  • This converts X86 and IA64 to use include/linux/dma-mapping.h.

    It's a bit large but pretty boring. The major change for X86 is
    converting 'int dir' to 'enum dma_data_direction dir' in DMA mapping
    operations. The major changes for IA64 is using map_page and
    unmap_page instead of map_single and unmap_single.

    Signed-off-by: FUJITA Tomonori
    Acked-by: Tony Luck
    Signed-off-by: Ingo Molnar

    FUJITA Tomonori
     

05 Jan, 2009

1 commit


04 Jan, 2009

1 commit


03 Jan, 2009

1 commit

  • Impact: cleanup, reduce kernel size a bit

    The current kernel build warns:

    WARNING: vmlinux.o(.text+0x11458): Section mismatch in reference from the function swiotlb_alloc_boot() to the function .init.text:__alloc_bootmem_low()
    The function swiotlb_alloc_boot() references
    the function __init __alloc_bootmem_low().
    This is often because swiotlb_alloc_boot lacks a __init
    annotation or the annotation of __alloc_bootmem_low is wrong.

    WARNING: vmlinux.o(.text+0x1011f2): Section mismatch in reference from the function swiotlb_late_init_with_default_size() to the function .init.text:__alloc_bootmem_low()
    The function swiotlb_late_init_with_default_size() references
    the function __init __alloc_bootmem_low().
    This is often because swiotlb_late_init_with_default_size lacks a __init
    annotation or the annotation of __alloc_bootmem_low is wrong.

    and indeed the functions calling __alloc_bootmem_low() can be marked
    __init as well.

    Signed-off-by: Roland Dreier
    Signed-off-by: Ingo Molnar

    Roland Dreier
     

28 Dec, 2008

5 commits


18 Dec, 2008

6 commits


17 Dec, 2008

2 commits


17 Nov, 2008

1 commit

  • Impact: fix DMA buffer allocation coherency bug in certain configs

    This patch fixes swiotlb to use dev->coherent_dma_mask in
    swiotlb_alloc_coherent().

    coherent_dma_mask is a subset of dma_mask (equal to it most of
    the time), enumerating the address range that a given device
    is able to DMA to/from in a cache-coherent way.

    But currently, swiotlb uses dev->dma_mask in alloc_coherent()
    implicitly via address_needs_mapping(), but alloc_coherent is really
    supposed to use coherent_dma_mask.

    This bug could break drivers that uses smaller coherent_dma_mask than
    dma_mask (though the current code works for the majority that use the
    same mask for coherent_dma_mask and dma_mask).

    Signed-off-by: FUJITA Tomonori
    Cc: tony.luck@intel.com
    Signed-off-by: Ingo Molnar

    FUJITA Tomonori
     

24 Oct, 2008

1 commit

  • swiotlb_alloc_coherent calls panic() when allocated swiotlb pages is
    not fit for a device's dma mask. However, alloc_coherent failure is
    not a disaster at all. AFAIK, none of other x86 and IA64 IOMMU
    implementations don't crash in case of alloc_coherent failure.

    There are some drivers that don't check alloc_coherent failure but not
    many (about ten and I've already started to fix some of
    them). alloc_coherent returns NULL in case of failure so it's likely
    that these guilty drivers crash immediately. So swiotlb doesn't need
    to call panic() just for them.

    Reported-by: Takashi Iwai
    Signed-off-by: FUJITA Tomonori
    Tested-by: Takashi Iwai
    Signed-off-by: Ingo Molnar

    FUJITA Tomonori