• Sebastian Ott's avatar
    s390/pci_dma: improve lazy flush for unmap · 13954fd6
    Sebastian Ott authored
    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: default avatarSebastian Ott <sebott@linux.vnet.ibm.com>
    Reviewed-by: default avatarGerald Schaefer <gerald.schaefer@de.ibm.com>
    Signed-off-by: default avatarMartin Schwidefsky <schwidefsky@de.ibm.com>
    13954fd6
pci_dma.c 16.3 KB