forked from Mirrors/opensbi
		
	lib: zero-out memory allocated using sbi_scratch_alloc_offset()
We should zero-out memory allocated from extra scratch space using sbi_scratch_alloc_offset() API hence this patch. This will not impact performance because we mostly allocate from extra scratch space only at cold boot time. Signed-off-by: Anup Patel <anup@brainfault.org> Reviewed-by: Atish Patra <atish.patra@wdc.com>
This commit is contained in:
		@@ -8,14 +8,21 @@
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include <sbi/riscv_locks.h>
 | 
			
		||||
#include <sbi/sbi_hart.h>
 | 
			
		||||
#include <sbi/sbi_platform.h>
 | 
			
		||||
#include <sbi/sbi_scratch.h>
 | 
			
		||||
#include <sbi/sbi_string.h>
 | 
			
		||||
 | 
			
		||||
static spinlock_t extra_lock = SPIN_LOCK_INITIALIZER;
 | 
			
		||||
static unsigned long extra_offset = SBI_SCRATCH_EXTRA_SPACE_OFFSET;
 | 
			
		||||
 | 
			
		||||
unsigned long sbi_scratch_alloc_offset(unsigned long size, const char *owner)
 | 
			
		||||
{
 | 
			
		||||
	u32 i;
 | 
			
		||||
	void *ptr;
 | 
			
		||||
	unsigned long ret = 0;
 | 
			
		||||
	struct sbi_scratch *scratch, *rscratch;
 | 
			
		||||
	const struct sbi_platform *plat;
 | 
			
		||||
 | 
			
		||||
	/*
 | 
			
		||||
	 * We have a simple brain-dead allocator which never expects
 | 
			
		||||
@@ -43,6 +50,16 @@ unsigned long sbi_scratch_alloc_offset(unsigned long size, const char *owner)
 | 
			
		||||
done:
 | 
			
		||||
	spin_unlock(&extra_lock);
 | 
			
		||||
 | 
			
		||||
	if (ret) {
 | 
			
		||||
		scratch = sbi_scratch_thishart_ptr();
 | 
			
		||||
		plat = sbi_platform_ptr(scratch);
 | 
			
		||||
		for (i = 0; i < sbi_platform_hart_count(plat); i++) {
 | 
			
		||||
			rscratch = sbi_hart_id_to_scratch(scratch, i);
 | 
			
		||||
			ptr = sbi_scratch_offset_ptr(rscratch, ret);
 | 
			
		||||
			sbi_memset(ptr, 0, size);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return ret;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user