vhost: fix IOTLB pool out-of-memory handling
authorMaxime Coquelin <maxime.coquelin@redhat.com>
Mon, 5 Feb 2018 15:04:56 +0000 (16:04 +0100)
committerFerruh Yigit <ferruh.yigit@intel.com>
Mon, 5 Feb 2018 18:56:04 +0000 (19:56 +0100)
commit37771844a05c7b0a7b039dcae1b4b0a69b4acced
tree9fa4c0a70b7e4e76845a85a28ed5d5a60876f62d
parent5f29e8427c697b66f17e987d3d808501b7b9a03e
vhost: fix IOTLB pool out-of-memory handling

In the unlikely case the IOTLB memory pool runs out of memory,
an issue may happen if all entries are used by the IOTLB cache,
and an IOTLB miss happen. If the iotlb pending list is empty,
then no memory is freed and allocation fails a second time.

This patch fixes this by doing an IOTLB cache random evict if
the IOTLB pending list is empty, ensuring the second allocation
try will succeed.

In the same spirit, the opposite is done when inserting an
IOTLB entry in the IOTLB cache fails due to out of memory. In
this case, the IOTLB pending is flushed if the IOTLB cache is
empty to ensure the new entry can be inserted.

Fixes: d012d1f293f4 ("vhost: add IOTLB helper functions")
Fixes: f72c2ad63aeb ("vhost: add pending IOTLB miss request list and helpers")
Cc: stable@dpdk.org
Signed-off-by: Maxime Coquelin <maxime.coquelin@redhat.com>
lib/librte_vhost/iotlb.c