• Adrian Hunter's avatar
    mmc: block: Add CQE support · 1e8e55b6
    Adrian Hunter authored
    Add CQE support to the block driver, including:
        - optionally using DCMD for flush requests
        - "manually" issuing discard requests
        - issuing read / write requests to the CQE
        - supporting block-layer timeouts
        - handling recovery
        - supporting re-tuning
    
    CQE offers 25% - 50% better random multi-threaded I/O.  There is a slight
    (e.g. 2%) drop in sequential read speed but no observable change to sequential
    write.
    
    CQE automatically sends the commands to complete requests.  However it only
    supports reads / writes and so-called "direct commands" (DCMD).  Furthermore
    DCMD is limited to one command at a time, but discards require 3 commands.
    That makes issuing discards through CQE very awkward, but some CQE's don't
    support DCMD anyway.  So for discards, the existing non-CQE approach is
    taken, where the mmc core code issues the 3 commands one at a time i.e.
    mmc_erase(). Where DCMD is used, is for issuing flushes.
    Signed-off-by: default avatarAdrian Hunter <adrian.hunter@intel.com>
    Acked-by: default avatarLinus Walleij <linus.walleij@linaro.org>
    Signed-off-by: default avatarUlf Hansson <ulf.hansson@linaro.org>
    Tested-by: default avatarLinus Walleij <linus.walleij@linaro.org>
    1e8e55b6
block.c 89.1 KB