OpenCloudOS-Kernel/arch/s390/pci
Sebastian Ott 13954fd691 s390/pci_dma: improve lazy flush for unmap
Lazy unmap (defer tlb flush after unmap until dma address reuse) can
greatly reduce the number of RPCIT instructions in the best case. In
reality we are often far away from the best case scenario because our
implementation suffers from the following problem:

To create dma addresses we maintain an iommu bitmap and a pointer into
that bitmap to mark the start of the next search. That pointer moves from
the start to the end of that bitmap and we issue a global tlb flush
once that pointer wraps around. To prevent address reuse before we issue
the tlb flush we even have to move the next pointer during unmaps - when
clearing a bit > next. This could lead to a situation where we only use
the rear part of that bitmap and issue more tlb flushes than expected.

To fix this we no longer clear bits during unmap but maintain a 2nd
bitmap which we use to mark addresses that can't be reused until we issue
the global tlb flush after wrap around.

Signed-off-by: Sebastian Ott <sebott@linux.vnet.ibm.com>
Reviewed-by: Gerald Schaefer <gerald.schaefer@de.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
2016-09-22 13:42:33 +02:00
..
Makefile s390/kernel: add system calls for PCI memory access 2014-11-19 09:46:43 +01:00
pci.c s390/pci: add zpci_report_error interface 2016-08-24 09:23:56 +02:00
pci_clp.c s390/pci: PCI function group 0 is valid for clp_query_pci_fn 2016-04-01 08:42:35 +02:00
pci_debug.c s390/pci: fmb enhancements 2016-04-15 18:16:40 +02:00
pci_dma.c s390/pci_dma: improve lazy flush for unmap 2016-09-22 13:42:33 +02:00
pci_event.c s390/pci: Delete an unnecessary check before the function call "pci_dev_put" 2016-07-18 10:17:24 +02:00
pci_insn.c s390/pci: use basic blocks for pci inline assemblies 2016-06-28 09:32:32 +02:00
pci_mmio.c s390/pci: fix possible information leak in mmio syscall 2015-02-26 09:24:48 +01:00
pci_sysfs.c s390/pci: add report_error attribute 2016-04-15 18:16:39 +02:00