forked from Mirrors/opensbi
		
	lib: sbi: Fix shift bug in sbi_system_reset
There is a problem with judging whether the current hart belongs to hmask. If cur_hartid minus hbase is greater than BITS_PER_LONG, the previous hmask will also have a bit cleared incorrectly, which will cause some harts to lose ipi. Signed-off-by: Xiang W <wxjstz@126.com> Reviewed-by: Anup Patel <anup@brainfault.org>
This commit is contained in:
		@@ -72,7 +72,8 @@ void __noreturn sbi_system_reset(u32 reset_type, u32 reset_reason)
 | 
			
		||||
 | 
			
		||||
	/* Send HALT IPI to every hart other than the current hart */
 | 
			
		||||
	while (!sbi_hsm_hart_interruptible_mask(dom, hbase, &hmask)) {
 | 
			
		||||
		if (hbase <= cur_hartid)
 | 
			
		||||
		if ((hbase <= cur_hartid)
 | 
			
		||||
			  && (cur_hartid < hbase + BITS_PER_LONG))
 | 
			
		||||
			hmask &= ~(1UL << (cur_hartid - hbase));
 | 
			
		||||
		if (hmask)
 | 
			
		||||
			sbi_ipi_send_halt(hmask, hbase);
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user