mirror of https://github.com/torvalds/linux.git
The DMA Contiguous Memory Allocator support on x86 is disabled when swiotlb config option is enabled. So DMA CMA is always disabled on x86_64 because swiotlb is always enabled. This attempts to support for DMA CMA with enabling swiotlb config option. The contiguous memory allocator on x86 is integrated in the function dma_generic_alloc_coherent() which is .alloc callback in nommu_dma_ops for dma_alloc_coherent(). x86_swiotlb_alloc_coherent() which is .alloc callback in swiotlb_dma_ops tries to allocate with dma_generic_alloc_coherent() firstly and then swiotlb_alloc_coherent() is called as a fallback. The main part of supporting DMA CMA with swiotlb is that changing x86_swiotlb_free_coherent() which is .free callback in swiotlb_dma_ops for dma_free_coherent() so that it can distinguish memory allocated by dma_generic_alloc_coherent() from one allocated by swiotlb_alloc_coherent() and release it with dma_generic_free_coherent() which can handle contiguous memory. This change requires making is_swiotlb_buffer() global function. This also needs to change .free callback in the dma_map_ops for amd_gart and sta2x11, because these dma_ops are also using dma_generic_alloc_coherent(). Signed-off-by: Akinobu Mita <akinobu.mita@gmail.com> Acked-by: Marek Szyprowski <m.szyprowski@samsung.com> Acked-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com> Cc: David Woodhouse <dwmw2@infradead.org> Cc: Don Dutile <ddutile@redhat.com> Cc: Thomas Gleixner <tglx@linutronix.de> Cc: Ingo Molnar <mingo@redhat.com> Cc: "H. Peter Anvin" <hpa@zytor.com> Cc: Andi Kleen <andi@firstfloor.org> Cc: Yinghai Lu <yinghai@kernel.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> |
||
|---|---|---|
| .. | ||
| crypto | ||
| numachip | ||
| trace | ||
| uv | ||
| xen | ||
| Kbuild | ||
| a.out-core.h | ||
| acenv.h | ||
| acpi.h | ||
| agp.h | ||
| alternative-asm.h | ||
| alternative.h | ||
| amd_nb.h | ||
| apb_timer.h | ||
| apic.h | ||
| apic_flat_64.h | ||
| apicdef.h | ||
| apm.h | ||
| arch_hweight.h | ||
| archrandom.h | ||
| asm-offsets.h | ||
| asm.h | ||
| atomic.h | ||
| atomic64_32.h | ||
| atomic64_64.h | ||
| barrier.h | ||
| bios_ebda.h | ||
| bitops.h | ||
| boot.h | ||
| bootparam_utils.h | ||
| bug.h | ||
| bugs.h | ||
| cache.h | ||
| cacheflush.h | ||
| calgary.h | ||
| calling.h | ||
| ce4100.h | ||
| checksum.h | ||
| checksum_32.h | ||
| checksum_64.h | ||
| clocksource.h | ||
| cmdline.h | ||
| cmpxchg.h | ||
| cmpxchg_32.h | ||
| cmpxchg_64.h | ||
| compat.h | ||
| context_tracking.h | ||
| cpu.h | ||
| cpu_device_id.h | ||
| cpufeature.h | ||
| cpumask.h | ||
| current.h | ||
| debugreg.h | ||
| delay.h | ||
| desc.h | ||
| desc_defs.h | ||
| device.h | ||
| div64.h | ||
| dma-contiguous.h | ||
| dma-mapping.h | ||
| dma.h | ||
| dmi.h | ||
| dwarf2.h | ||
| e820.h | ||
| edac.h | ||
| efi.h | ||
| elf.h | ||
| emergency-restart.h | ||
| entry_arch.h | ||
| exec.h | ||
| fb.h | ||
| fixmap.h | ||
| floppy.h | ||
| fpu-internal.h | ||
| frame.h | ||
| ftrace.h | ||
| futex.h | ||
| gart.h | ||
| genapic.h | ||
| geode.h | ||
| gpio.h | ||
| hardirq.h | ||
| hash.h | ||
| highmem.h | ||
| hpet.h | ||
| hugetlb.h | ||
| hw_breakpoint.h | ||
| hw_irq.h | ||
| hypertransport.h | ||
| hypervisor.h | ||
| i387.h | ||
| i8259.h | ||
| ia32.h | ||
| ia32_unistd.h | ||
| idle.h | ||
| inat.h | ||
| inat_types.h | ||
| init.h | ||
| insn.h | ||
| inst.h | ||
| intel-mid.h | ||
| intel_mid_vrtc.h | ||
| intel_scu_ipc.h | ||
| io.h | ||
| io_apic.h | ||
| iomap.h | ||
| iommu.h | ||
| iommu_table.h | ||
| iosf_mbi.h | ||
| ipi.h | ||
| irq.h | ||
| irq_regs.h | ||
| irq_remapping.h | ||
| irq_vectors.h | ||
| irqflags.h | ||
| ist.h | ||
| jump_label.h | ||
| kbdleds.h | ||
| kdebug.h | ||
| kexec.h | ||
| kgdb.h | ||
| kmap_types.h | ||
| kmemcheck.h | ||
| kprobes.h | ||
| kvm_emulate.h | ||
| kvm_guest.h | ||
| kvm_host.h | ||
| kvm_para.h | ||
| lguest.h | ||
| lguest_hcall.h | ||
| linkage.h | ||
| local.h | ||
| local64.h | ||
| mach_timer.h | ||
| mach_traps.h | ||
| math_emu.h | ||
| mc146818rtc.h | ||
| mce.h | ||
| microcode.h | ||
| microcode_amd.h | ||
| microcode_intel.h | ||
| misc.h | ||
| mmconfig.h | ||
| mmu.h | ||
| mmu_context.h | ||
| mmx.h | ||
| mmzone.h | ||
| mmzone_32.h | ||
| mmzone_64.h | ||
| module.h | ||
| mpspec.h | ||
| mpspec_def.h | ||
| mshyperv.h | ||
| msidef.h | ||
| msr.h | ||
| mtrr.h | ||
| mutex.h | ||
| mutex_32.h | ||
| mutex_64.h | ||
| mwait.h | ||
| nmi.h | ||
| nops.h | ||
| numa.h | ||
| numa_32.h | ||
| olpc.h | ||
| olpc_ofw.h | ||
| page.h | ||
| page_32.h | ||
| page_32_types.h | ||
| page_64.h | ||
| page_64_types.h | ||
| page_types.h | ||
| paravirt.h | ||
| paravirt_types.h | ||
| parport.h | ||
| pat.h | ||
| pci-direct.h | ||
| pci-functions.h | ||
| pci.h | ||
| pci_64.h | ||
| pci_x86.h | ||
| percpu.h | ||
| perf_event.h | ||
| perf_event_p4.h | ||
| pgalloc.h | ||
| pgtable-2level.h | ||
| pgtable-2level_types.h | ||
| pgtable-3level.h | ||
| pgtable-3level_types.h | ||
| pgtable.h | ||
| pgtable_32.h | ||
| pgtable_32_types.h | ||
| pgtable_64.h | ||
| pgtable_64_types.h | ||
| pgtable_types.h | ||
| posix_types.h | ||
| preempt.h | ||
| probe_roms.h | ||
| processor-cyrix.h | ||
| processor-flags.h | ||
| processor.h | ||
| prom.h | ||
| proto.h | ||
| ptrace.h | ||
| pvclock-abi.h | ||
| pvclock.h | ||
| realmode.h | ||
| reboot.h | ||
| reboot_fixups.h | ||
| required-features.h | ||
| resume-trace.h | ||
| rio.h | ||
| rmwcc.h | ||
| rtc.h | ||
| rwlock.h | ||
| rwsem.h | ||
| scatterlist.h | ||
| seccomp.h | ||
| seccomp_32.h | ||
| seccomp_64.h | ||
| sections.h | ||
| segment.h | ||
| serial.h | ||
| setup.h | ||
| setup_arch.h | ||
| shmparam.h | ||
| sigcontext.h | ||
| sigframe.h | ||
| sighandling.h | ||
| signal.h | ||
| simd.h | ||
| smap.h | ||
| smp.h | ||
| smpboot_hooks.h | ||
| sparsemem.h | ||
| special_insns.h | ||
| spinlock.h | ||
| spinlock_types.h | ||
| sta2x11.h | ||
| stackprotector.h | ||
| stacktrace.h | ||
| string.h | ||
| string_32.h | ||
| string_64.h | ||
| suspend.h | ||
| suspend_32.h | ||
| suspend_64.h | ||
| svm.h | ||
| swiotlb.h | ||
| switch_to.h | ||
| sync_bitops.h | ||
| sys_ia32.h | ||
| syscall.h | ||
| syscalls.h | ||
| sysfb.h | ||
| tce.h | ||
| thread_info.h | ||
| time.h | ||
| timer.h | ||
| timex.h | ||
| tlb.h | ||
| tlbflush.h | ||
| topology.h | ||
| trace_clock.h | ||
| traps.h | ||
| tsc.h | ||
| uaccess.h | ||
| uaccess_32.h | ||
| uaccess_64.h | ||
| unaligned.h | ||
| unistd.h | ||
| uprobes.h | ||
| user.h | ||
| user32.h | ||
| user_32.h | ||
| user_64.h | ||
| vdso.h | ||
| vdso32.h | ||
| vga.h | ||
| vgtod.h | ||
| virtext.h | ||
| vm86.h | ||
| vmx.h | ||
| vsyscall.h | ||
| vvar.h | ||
| word-at-a-time.h | ||
| x2apic.h | ||
| x86_init.h | ||
| xcr.h | ||
| xor.h | ||
| xor_32.h | ||
| xor_64.h | ||
| xor_avx.h | ||
| xsave.h | ||