From: Philippe Gerum <[email protected]>

We have no architecture enabling this feature anymore.

Signed-off-by: Philippe Gerum <[email protected]>
---
 include/cobalt/kernel/sched.h       | 34 ---------------
 include/cobalt/kernel/thread.h      |  2 +-
 include/cobalt/uapi/kernel/thread.h |  1 -
 kernel/cobalt/sched.c               | 66 ++---------------------------
 kernel/cobalt/thread.c              | 23 +---------
 5 files changed, 5 insertions(+), 121 deletions(-)

diff --git a/include/cobalt/kernel/sched.h b/include/cobalt/kernel/sched.h
index 1f5714fe0..5d278838f 100644
--- a/include/cobalt/kernel/sched.h
+++ b/include/cobalt/kernel/sched.h
@@ -94,9 +94,6 @@ struct xnsched {
        struct xntimer rrbtimer;
        /*!< Root thread control block. */
        struct xnthread rootcb;
-#ifdef CONFIG_IPIPE_WANT_PREEMPTIBLE_SWITCH
-       struct xnthread *last;
-#endif
 #ifdef CONFIG_XENO_ARCH_FPU
        /*!< Thread owning the current FPU context. */
        struct xnthread *fpuholder;
@@ -351,37 +348,6 @@ static inline int xnsched_primary_p(void)
        return !xnsched_unblockable_p();
 }
 
-#ifdef CONFIG_IPIPE_WANT_PREEMPTIBLE_SWITCH
-
-struct xnsched *xnsched_finish_unlocked_switch(struct xnsched *sched);
-
-#define xnsched_resched_after_unlocked_switch() xnsched_run()
-
-static inline
-int xnsched_maybe_resched_after_unlocked_switch(struct xnsched *sched)
-{
-       return sched->status & XNRESCHED;
-}
-
-#else /* !CONFIG_IPIPE_WANT_PREEMPTIBLE_SWITCH */
-
-static inline struct xnsched *
-xnsched_finish_unlocked_switch(struct xnsched *sched)
-{
-       XENO_BUG_ON(COBALT, !hard_irqs_disabled());
-       return xnsched_current();
-}
-
-static inline void xnsched_resched_after_unlocked_switch(void) { }
-
-static inline int
-xnsched_maybe_resched_after_unlocked_switch(struct xnsched *sched)
-{
-       return 0;
-}
-
-#endif /* !CONFIG_IPIPE_WANT_PREEMPTIBLE_SWITCH */
-
 bool xnsched_set_effective_priority(struct xnthread *thread,
                                    int prio);
 
diff --git a/include/cobalt/kernel/thread.h b/include/cobalt/kernel/thread.h
index 03adb2529..21a8603b4 100644
--- a/include/cobalt/kernel/thread.h
+++ b/include/cobalt/kernel/thread.h
@@ -38,7 +38,7 @@
  * @addtogroup cobalt_core_thread
  * @{
  */
-#define XNTHREAD_BLOCK_BITS   
(XNSUSP|XNPEND|XNDELAY|XNDORMANT|XNRELAX|XNMIGRATE|XNHELD|XNDBGSTOP)
+#define XNTHREAD_BLOCK_BITS   
(XNSUSP|XNPEND|XNDELAY|XNDORMANT|XNRELAX|XNHELD|XNDBGSTOP)
 #define XNTHREAD_MODE_BITS    (XNRRB|XNWARN|XNTRAPLB)
 
 struct xnthread;
diff --git a/include/cobalt/uapi/kernel/thread.h 
b/include/cobalt/uapi/kernel/thread.h
index 0802a16dc..664def08e 100644
--- a/include/cobalt/uapi/kernel/thread.h
+++ b/include/cobalt/uapi/kernel/thread.h
@@ -37,7 +37,6 @@
 #define XNZOMBIE  0x00000020 /**< Zombie thread in deletion process */
 #define XNMAPPED  0x00000040 /**< Thread is mapped to a linux task */
 #define XNRELAX   0x00000080 /**< Relaxed shadow thread (blocking bit) */
-#define XNMIGRATE 0x00000100 /**< Thread is currently migrating to another 
CPU. */
 #define XNHELD    0x00000200 /**< Thread is held to process emergency. */
 #define XNBOOST   0x00000400 /**< PI/PP boost undergoing */
 #define XNSSTEP   0x00000800 /**< Single-stepped by debugger */
diff --git a/kernel/cobalt/sched.c b/kernel/cobalt/sched.c
index 75adbc49e..7ff8a6c82 100644
--- a/kernel/cobalt/sched.c
+++ b/kernel/cobalt/sched.c
@@ -345,34 +345,6 @@ struct xnthread *xnsched_pick_next(struct xnsched *sched)
 #endif /* CONFIG_XENO_OPT_SCHED_CLASSES */
 }
 
-#ifdef CONFIG_IPIPE_WANT_PREEMPTIBLE_SWITCH
-
-struct xnsched *xnsched_finish_unlocked_switch(struct xnsched *sched)
-{
-       struct xnthread *last;
-       spl_t s;
-
-       xnlock_get_irqsave(&nklock, s);
-
-#ifdef CONFIG_SMP
-       /* If current thread migrated while suspended */
-       sched = xnsched_current();
-#endif /* CONFIG_SMP */
-
-       last = sched->last;
-       sched->status &= ~XNINSW;
-
-       /* Detect a thread which has migrated. */
-       if (last->sched != sched) {
-               xnsched_putback(last);
-               xnthread_clear_state(last, XNMIGRATE);
-       }
-
-       return sched;
-}
-
-#endif /* CONFIG_IPIPE_WANT_PREEMPTIBLE_SWITCH */
-
 void xnsched_lock(void)
 {
        struct xnsched *sched = xnsched_current();
@@ -628,17 +600,8 @@ void xnsched_migrate(struct xnthread *thread, struct 
xnsched *sched)
 {
        xnsched_set_resched(thread->sched);
        migrate_thread(thread, sched);
-
-#ifdef CONFIG_IPIPE_WANT_PREEMPTIBLE_SWITCH
-       /*
-        * Mark the thread in flight, xnsched_finish_unlocked_switch()
-        * will put the thread on the remote runqueue.
-        */
-       xnthread_set_state(thread, XNMIGRATE);
-#else
        /* Move thread to the remote run queue. */
        xnsched_putback(thread);
-#endif
 }
 
 /*
@@ -840,18 +803,6 @@ struct xnthread *xnsched_rt_pick(struct xnsched *sched)
 
 #endif /* !CONFIG_XENO_OPT_SCALABLE_SCHED */
 
-static inline void switch_context(struct xnsched *sched,
-                                 struct xnthread *prev, struct xnthread *next)
-{
-#ifdef CONFIG_IPIPE_WANT_PREEMPTIBLE_SWITCH
-       sched->last = prev;
-       sched->status |= XNINSW;
-       xnlock_clear_irqon(&nklock);
-#endif
-
-       xnarch_switch_to(prev, next);
-}
-
 /**
  * @fn int xnsched_run(void)
  * @brief The rescheduling procedure.
@@ -920,15 +871,9 @@ static inline int test_resched(struct xnsched *sched)
 
 static inline void enter_root(struct xnthread *root)
 {
-       struct xnarchtcb *rootcb __maybe_unused = xnthread_archtcb(root);
-
 #ifdef CONFIG_XENO_OPT_WATCHDOG
        xntimer_stop(&root->sched->wdtimer);
 #endif
-#ifdef CONFIG_IPIPE_WANT_PREEMPTIBLE_SWITCH
-       if (rootcb->core.mm == NULL)
-               set_ti_thread_flag(rootcb->core.tip, TIF_MMSWITCH_INT);
-#endif
 }
 
 static inline void leave_root(struct xnthread *root)
@@ -984,7 +929,7 @@ int ___xnsched_run(struct xnsched *sched)
         * "current" for disambiguating.
         */
        xntrace_pid(task_pid_nr(current), xnthread_current_priority(curr));
-reschedule:
+
        if (xnthread_test_state(curr, XNUSER))
                do_lazy_user_work(curr);
 
@@ -1030,8 +975,7 @@ reschedule:
 
        xnstat_exectime_switch(sched, &next->stat.account);
        xnstat_counter_inc(&next->stat.csw);
-
-       switch_context(sched, prev, next);
+       xnarch_switch_to(prev, next);
 
        /*
         * Test whether we transitioned from primary mode to secondary
@@ -1043,7 +987,7 @@ reschedule:
                goto shadow_epilogue;
 
        switched = 1;
-       sched = xnsched_finish_unlocked_switch(sched);
+       sched = xnsched_current();
        /*
         * Re-read the currently running thread, this is needed
         * because of relaxed/hardened transitions.
@@ -1052,10 +996,6 @@ reschedule:
        xnthread_switch_fpu(sched);
        xntrace_pid(task_pid_nr(current), xnthread_current_priority(curr));
 out:
-       if (switched &&
-           xnsched_maybe_resched_after_unlocked_switch(sched))
-               goto reschedule;
-
        xnlock_put_irqrestore(&nklock, s);
 
        return switched;
diff --git a/kernel/cobalt/thread.c b/kernel/cobalt/thread.c
index 5260fb1e7..49f749f1c 100644
--- a/kernel/cobalt/thread.c
+++ b/kernel/cobalt/thread.c
@@ -406,22 +406,6 @@ void xnthread_prepare_wait(struct xnthread_wait_context 
*wc)
 }
 EXPORT_SYMBOL_GPL(xnthread_prepare_wait);
 
-static inline int moving_target(struct xnsched *sched, struct xnthread *thread)
-{
-       int ret = 0;
-#ifdef CONFIG_IPIPE_WANT_PREEMPTIBLE_SWITCH
-       /*
-        * When deleting a thread in the course of a context switch or
-        * in flight to another CPU with nklock unlocked on a distant
-        * CPU, do nothing, this case will be caught in
-        * xnsched_finish_unlocked_switch.
-        */
-       ret = (sched->status & XNINSW) ||
-               xnthread_test_state(thread, XNMIGRATE);
-#endif
-       return ret;
-}
-
 #ifdef CONFIG_XENO_ARCH_FPU
 
 static inline void giveup_fpu(struct xnsched *sched,
@@ -494,10 +478,6 @@ static inline void cleanup_tcb(struct xnthread *curr) /* 
nklock held, irqs off *
        release_all_ownerships(curr);
 
        giveup_fpu(sched, curr);
-
-       if (moving_target(sched, curr))
-               return;
-
        xnsched_forget(curr);
        xnthread_deregister(curr);
 }
@@ -1954,11 +1934,10 @@ int xnthread_harden(void)
        }
 
        /* "current" is now running into the Xenomai domain. */
-       sched = xnsched_finish_unlocked_switch(thread->sched);
+       sched = xnsched_current();
        xnthread_switch_fpu(sched);
 
        xnlock_clear_irqon(&nklock);
-       xnsched_resched_after_unlocked_switch();
        xnthread_test_cancel();
 
        trace_cobalt_shadow_hardened(thread);
-- 
2.26.2


Reply via email to