dm: test: Clear the block cache after running a test

Some tests access data in block devices and so cause the cache to fill
up. This results in memory being allocated.

Some tests check the malloc usage at the beginning and then again at the
end, to ensure there is no memory leak caused by the test. The block cache
makes this difficult, since the any test may cause entries to be allocated
or even freed, if the cache becomes full.

It is simpler to clear the block cache after each test. This ensures that
it will not introduce noise in tests which check malloc usage.

Add the logic to clear the cache, using the existing blkcache_invalidate()
function. Drop the duplicate code at the same time.

Signed-off-by: Simon Glass <sjg@chromium.org>
diff --git a/drivers/block/blkcache.c b/drivers/block/blkcache.c
index b53420a..f99465a 100644
--- a/drivers/block/blkcache.c
+++ b/drivers/block/blkcache.c
@@ -150,8 +150,8 @@
 
 	list_for_each_safe(entry, n, &block_cache) {
 		node = (struct block_cache_node *)entry;
-		if ((node->iftype == iftype) &&
-		    (node->devnum == devnum)) {
+		if (iftype == -1 ||
+		    (node->iftype == iftype && node->devnum == devnum)) {
 			list_del(entry);
 			free(node->cache);
 			free(node);
@@ -162,18 +162,10 @@
 
 void blkcache_configure(unsigned blocks, unsigned entries)
 {
-	struct block_cache_node *node;
+	/* invalidate cache if there is a change */
 	if ((blocks != _stats.max_blocks_per_entry) ||
-	    (entries != _stats.max_entries)) {
-		/* invalidate cache */
-		while (!list_empty(&block_cache)) {
-			node = (struct block_cache_node *)block_cache.next;
-			list_del(&node->lh);
-			free(node->cache);
-			free(node);
-		}
-		_stats.entries = 0;
-	}
+	    (entries != _stats.max_entries))
+		blkcache_invalidate(-1, 0);
 
 	_stats.max_blocks_per_entry = blocks;
 	_stats.max_entries = entries;
@@ -188,3 +180,8 @@
 	_stats.hits = 0;
 	_stats.misses = 0;
 }
+
+void blkcache_free(void)
+{
+	blkcache_invalidate(-1, 0);
+}