Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

xtensa: enable kernel preemption

Signed-off-by: Max Filippov <jcmvbkbc@gmail.com>
Signed-off-by: Chris Zankel <chris@zankel.net>

authored by

Max Filippov and committed by
Chris Zankel
16c5becf aea8e7c8

+17 -28
+17 -28
arch/xtensa/kernel/entry.S
··· 31 31 /* Unimplemented features. */ 32 32 33 33 #undef KERNEL_STACK_OVERFLOW_CHECK 34 - #undef PREEMPTIBLE_KERNEL 35 34 #undef ALLOCA_EXCEPTION_IN_IRAM 36 35 37 36 /* Not well tested. ··· 428 429 /* Jump if we are returning from kernel exceptions. */ 429 430 430 431 l32i a3, a1, PT_PS 431 - _bbci.l a3, PS_UM_BIT, 4f 432 + GET_THREAD_INFO(a2, a1) 433 + l32i a4, a2, TI_FLAGS 434 + _bbci.l a3, PS_UM_BIT, 6f 432 435 433 436 /* Specific to a user exception exit: 434 437 * We need to check some flags for signal handling and rescheduling, ··· 438 437 * in the register file that were in use in the user task. 439 438 * Note that we don't disable interrupts here. 440 439 */ 441 - 442 - GET_THREAD_INFO(a2,a1) 443 - l32i a4, a2, TI_FLAGS 444 440 445 441 _bbsi.l a4, TIF_NEED_RESCHED, 3f 446 442 _bbsi.l a4, TIF_NOTIFY_RESUME, 2f ··· 461 463 callx4 a4 462 464 j 1b 463 465 466 + #ifdef CONFIG_PREEMPT 467 + 6: 468 + _bbci.l a4, TIF_NEED_RESCHED, 4f 469 + 470 + /* Check current_thread_info->preempt_count */ 471 + 472 + l32i a4, a2, TI_PRE_COUNT 473 + bnez a4, 4f 474 + movi a4, preempt_schedule_irq 475 + callx4 a4 476 + j 1b 477 + #endif 478 + 464 479 5: 465 480 #ifdef CONFIG_DEBUG_TLB_SANITY 466 481 l32i a4, a1, PT_DEPC ··· 481 470 movi a4, check_tlb_sanity 482 471 callx4 a4 483 472 #endif 473 + 6: 484 474 4: 485 475 #ifdef CONFIG_TRACE_IRQFLAGS 486 476 l32i a4, a1, PT_DEPC ··· 584 572 */ 585 573 586 574 kernel_exception_exit: 587 - 588 - #ifdef PREEMPTIBLE_KERNEL 589 - 590 - #ifdef CONFIG_PREEMPT 591 - 592 - /* 593 - * Note: We've just returned from a call4, so we have 594 - * at least 4 addt'l regs. 595 - */ 596 - 597 - /* Check current_thread_info->preempt_count */ 598 - 599 - GET_THREAD_INFO(a2) 600 - l32i a3, a2, TI_PREEMPT 601 - bnez a3, 1f 602 - 603 - l32i a2, a2, TI_FLAGS 604 - 605 - 1: 606 - 607 - #endif 608 - 609 - #endif 610 575 611 576 /* Check if we have to do a movsp. 612 577 *