cpu-exec.c: Allow disabling of IRQs on ARM Cortex-M CPUs
Correct an error in the logic for deciding whether we can take an IRQ interrupt which meant that on M profile cores it was never possible to disable them. The design here is still bogus in that M profile doesn't have separate "IRQ" and "FIQ", which are an A/R profile concept; we should ideally implement the proper priority based scheme. Signed-off-by: David Hoover <spm@boiteauxlettres.sent.at> [PMM: Wrote a proper commit message] Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
		
							parent
							
								
									f022b8e953
								
							
						
					
					
						commit
						c3c8d6b3dd
					
				@ -618,8 +618,8 @@ int cpu_exec(CPUArchState *env)
 | 
				
			|||||||
                       We avoid this by disabling interrupts when
 | 
					                       We avoid this by disabling interrupts when
 | 
				
			||||||
                       pc contains a magic address.  */
 | 
					                       pc contains a magic address.  */
 | 
				
			||||||
                    if (interrupt_request & CPU_INTERRUPT_HARD
 | 
					                    if (interrupt_request & CPU_INTERRUPT_HARD
 | 
				
			||||||
                        && ((IS_M(env) && env->regs[15] < 0xfffffff0)
 | 
					                        && !(env->daif & PSTATE_I)
 | 
				
			||||||
                            || !(env->daif & PSTATE_I))) {
 | 
					                        && (!IS_M(env) || env->regs[15] < 0xfffffff0)) {
 | 
				
			||||||
                        cpu->exception_index = EXCP_IRQ;
 | 
					                        cpu->exception_index = EXCP_IRQ;
 | 
				
			||||||
                        cc->do_interrupt(cpu);
 | 
					                        cc->do_interrupt(cpu);
 | 
				
			||||||
                        next_tb = 0;
 | 
					                        next_tb = 0;
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user