• Russell King's avatar
    mmc: sdhci: clean up host cookie handling · 94538e51
    Russell King authored
    Commit d31911b9 ("mmc: sdhci: fix dma memory leak in sdhci_pre_req()")
    added a complicated method to manage the DMA map state for the data
    transfer, but this complexity is not required.
    
    There are three states:
    * Unmapped
    * Mapped by sdhci_pre_req()
    * Mapped by sdhci_prepare_data()
    
    sdhci_prepare_data() needs to know when the data buffers have been
    successfully mapped by sdhci_pre_req(), and if so, there is no need to
    map them a second time.
    
    When we come to tear down the mapping, we want to know whether
    sdhci_post_req() will be called (which is determined by sdhci_pre_req()
    having been previously called) so that we can postpone the unmap
    operation.
    
    Hence, it makes sense to simply record when the successful DMA map
    happened (via COOKIE_PRE_MAPPED vs COOKIE_MAPPED) rather than having
    the complex mechanics involving COOKIE_MAPPED vs COOKIE_GIVEN.
    
    If a mapping is created by sdhci_prepare_data(), we must tear it down
    ourselves, without waiting for sdhci_post_req() (hence, the new
    COOKIE_MAPPED case).  If the mapping is created by sdhci_pre_req()
    then sdhci_post_req() is responsible for tearing the mapping down.
    Signed-off-by: default avatarRussell King <rmk+kernel@arm.linux.org.uk>
    Signed-off-by: default avatarAdrian Hunter <adrian.hunter@intel.com>
    Tested-by: default avatarGregory CLEMENT <gregory.clement@free-electrons.com>
    Signed-off-by: default avatarUlf Hansson <ulf.hansson@linaro.org>
    94538e51
sdhci.c 90.7 KB