From d2978ee987b12bb22c0eb9a2f501a86a1a05712b Mon Sep 17 00:00:00 2001 From: Joel Sherrill Date: Thu, 10 Aug 2000 14:09:51 +0000 Subject: 2000-08-10 Charles-Antoine Gauthier * shared/src/cache_manager.c (rtems_cache_flush_multiple_data_lines, rtems_cache_invalidate_multiple_data_lines): Do not operate on the entire address space when flushing zero bytes. --- c/src/lib/libcpu/shared/src/cache_manager.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'c') diff --git a/c/src/lib/libcpu/shared/src/cache_manager.c b/c/src/lib/libcpu/shared/src/cache_manager.c index 9f4b746761..ba39f25a39 100644 --- a/c/src/lib/libcpu/shared/src/cache_manager.c +++ b/c/src/lib/libcpu/shared/src/cache_manager.c @@ -57,6 +57,10 @@ rtems_cache_flush_multiple_data_lines( const void * d_addr, size_t n_bytes ) * the resulting line until final_address is passed. */ + if( n_bytes == 0 ) + /* Do nothing if number of bytes to flush is zero */ + return; + final_address = (void *)((size_t)d_addr + n_bytes - 1); d_addr = (void *)((size_t)d_addr & ~(CPU_DATA_CACHE_ALIGNMENT - 1)); while( d_addr <= final_address ) { @@ -85,6 +89,10 @@ rtems_cache_invalidate_multiple_data_lines( const void * d_addr, size_t n_bytes * invalidate the resulting line until final_address is passed. */ + if( n_bytes == 0 ) + /* Do nothing if number of bytes to invalidate is zero */ + return; + final_address = (void *)((size_t)d_addr + n_bytes - 1); d_addr = (void *)((size_t)d_addr & ~(CPU_DATA_CACHE_ALIGNMENT - 1)); while( final_address > d_addr ) { @@ -208,6 +216,10 @@ rtems_cache_invalidate_multiple_instruction_lines( const void * i_addr, size_t n * invalidate the resulting line until final_address is passed. */ + if( n_bytes == 0 ) + /* Do nothing if number of bytes to invalidate is zero */ + return; + final_address = (void *)((size_t)i_addr + n_bytes - 1); i_addr = (void *)((size_t)i_addr & ~(CPU_INSTRUCTION_CACHE_ALIGNMENT - 1)); while( final_address > i_addr ) { -- cgit v1.2.3