microblaze: Add support from PREEMPT
This patch add core PREEMPT support for Microblaze. I tried to trace it via tracers and I was able to see any output. I also added low level debug functions to see if that code is called. Signed-off-by: Michal Simek <monstr@monstr.eu>
This commit is contained in:
parent
733cc21831
commit
7775379057
|
@ -23,7 +23,7 @@
|
|||
extern void _tlbie(unsigned long address);
|
||||
extern void _tlbia(void);
|
||||
|
||||
#define __tlbia() _tlbia()
|
||||
#define __tlbia() { preempt_disable(); _tlbia(); preempt_enable(); }
|
||||
|
||||
static inline void local_flush_tlb_all(void)
|
||||
{ __tlbia(); }
|
||||
|
|
|
@ -90,6 +90,7 @@ int main(int argc, char *argv[])
|
|||
DEFINE(TI_FLAGS, offsetof(struct thread_info, flags));
|
||||
DEFINE(TI_ADDR_LIMIT, offsetof(struct thread_info, addr_limit));
|
||||
DEFINE(TI_CPU_CONTEXT, offsetof(struct thread_info, cpu_context));
|
||||
DEFINE(TI_PREEMPT_COUNT, offsetof(struct thread_info, preempt_count));
|
||||
BLANK();
|
||||
|
||||
/* struct cpu_context */
|
||||
|
|
|
@ -853,7 +853,30 @@ no_intr_resched:
|
|||
lwi r1, r1, PT_R1 - PT_SIZE;
|
||||
bri 6f;
|
||||
/* MS: Return to kernel state. */
|
||||
2: VM_OFF /* MS: turn off MMU */
|
||||
2:
|
||||
#ifdef CONFIG_PREEMPT
|
||||
add r11, r0, CURRENT_TASK;
|
||||
lwi r11, r11, TS_THREAD_INFO;
|
||||
/* MS: get preempt_count from thread info */
|
||||
lwi r5, r11, TI_PREEMPT_COUNT;
|
||||
bgti r5, restore;
|
||||
|
||||
lwi r5, r11, TI_FLAGS; /* get flags in thread info */
|
||||
andi r5, r5, _TIF_NEED_RESCHED;
|
||||
beqi r5, restore /* if zero jump over */
|
||||
|
||||
preempt:
|
||||
/* interrupts are off that's why I am calling preempt_chedule_irq */
|
||||
bralid r15, preempt_schedule_irq
|
||||
nop
|
||||
add r11, r0, CURRENT_TASK; /* Get current task ptr into r11 */
|
||||
lwi r11, r11, TS_THREAD_INFO; /* get thread info */
|
||||
lwi r5, r11, TI_FLAGS; /* get flags in thread info */
|
||||
andi r5, r5, _TIF_NEED_RESCHED;
|
||||
bnei r5, preempt /* if non zero jump to resched */
|
||||
restore:
|
||||
#endif
|
||||
VM_OFF /* MS: turn off MMU */
|
||||
tophys(r1,r1)
|
||||
lwi r3, r1, PTO + PT_R3; /* MS: restore saved r3, r4 registers */
|
||||
lwi r4, r1, PTO + PT_R4;
|
||||
|
|
Loading…
Reference in New Issue