• Michael S. Tsirkin's avatar
    IB/mthca: Fix data corruption after FMR unmap on Sinai · 608d8268
    Michael S. Tsirkin authored
    In mthca_arbel_fmr_unmap(), the high bits of the key are masked off.
    This gets rid of the effect of adjust_key(), which makes sure that
    bits 3 and 23 of the key are equal when the Sinai throughput
    optimization is enabled, and so it may happen that an FMR will end up
    with bits 3 and 23 in the key being different.  This causes data
    corruption, because when enabling the throughput optimization, the
    driver promises the HCA firmware that bits 3 and 23 of all memory keys
    will always be equal.
    
    Fix by re-applying adjust_key() after masking the key.
    
    Thanks to Or Gerlitz for reproducing the problem, and Ariel Shahar for
    help in debug.
    Signed-off-by: default avatarMichael S. Tsirkin <mst@dev.mellanox.co.il>
    Signed-off-by: default avatarRoland Dreier <rolandd@cisco.com>
    608d8268
mthca_mr.c 23.6 KB