]> rtime.felk.cvut.cz Git - l4.git/blobdiff - kernel/fiasco/src/kern/thread.cpp
update
[l4.git] / kernel / fiasco / src / kern / thread.cpp
index 83000e4ba29aa2af00b6db4e94ec2ad4b0393a57..27f2206efaeb600e8cd9f5f6cffbf7cfefff9d2e 100644 (file)
@@ -60,10 +60,6 @@ public:
   enum Control_flags
   {
     Ctl_set_pager       = 0x0010000,
-    Ctl_set_scheduler   = 0x0020000,
-    Ctl_set_mcp         = 0x0040000,
-    Ctl_set_prio        = 0x0080000,
-    Ctl_set_quantum     = 0x0100000,
     Ctl_bind_task       = 0x0200000,
     Ctl_alien_thread    = 0x0400000,
     Ctl_ux_native       = 0x0800000,
@@ -409,6 +405,16 @@ bool
 Thread::exception_triggered() const
 { return _exc_cont.valid(); }
 
+PUBLIC inline
+bool
+Thread::continuation_test_and_restore()
+{
+  bool v = _exc_cont.valid();
+  if (v)
+    _exc_cont.restore(regs());
+  return v;
+}
+
 //
 // state requests/manipulation
 //
@@ -555,7 +561,7 @@ Thread::do_kill()
   }
 
   // if engaged in IPC operation, stop it
-  if (receiver())
+  if (in_sender_list())
     sender_dequeue(receiver()->sender_list());
 
   Context::do_kill();
@@ -677,49 +683,6 @@ Thread::control(Thread_ptr const &pager, Thread_ptr const &exc_handler)
   return 0;
 }
 
-
-PRIVATE static inline
-bool FIASCO_WARN_RESULT
-Thread::copy_utcb_to_utcb(L4_msg_tag const &tag, Thread *snd, Thread *rcv,
-                          unsigned char rights)
-{
-  assert (cpu_lock.test());
-
-  Utcb *snd_utcb = snd->utcb().access();
-  Utcb *rcv_utcb = rcv->utcb().access();
-  Mword s = tag.words();
-  Mword r = Utcb::Max_words;
-
-  Mem::memcpy_mwords (rcv_utcb->values, snd_utcb->values, r < s ? r : s);
-
-  bool success = true;
-  if (tag.items())
-    success = transfer_msg_items(tag, snd, snd_utcb, rcv, rcv_utcb, rights);
-
-  if (tag.transfer_fpu() && rcv_utcb->inherit_fpu() && (rights & L4_fpage::W))
-    snd->transfer_fpu(rcv);
-
-  return success;
-}
-
-
-PUBLIC inline NEEDS[Thread::copy_utcb_to_ts, Thread::copy_utcb_to_utcb,
-                    Thread::copy_ts_to_utcb]
-bool FIASCO_WARN_RESULT
-Thread::copy_utcb_to(L4_msg_tag const &tag, Thread* receiver,
-                     unsigned char rights)
-{
-  // we cannot copy trap state to trap state!
-  assert_kdb (!this->_utcb_handler || !receiver->_utcb_handler);
-  if (EXPECT_FALSE(this->_utcb_handler != 0))
-    return copy_ts_to_utcb(tag, this, receiver, rights);
-  else if (EXPECT_FALSE(receiver->_utcb_handler != 0))
-    return copy_utcb_to_ts(tag, this, receiver, rights);
-  else
-    return copy_utcb_to_utcb(tag, this, receiver, rights);
-}
-
-
 PUBLIC static inline
 bool
 Thread::is_tcb_address(Address a)
@@ -733,7 +696,7 @@ void
 Thread::assert_irq_entry()
 {
   assert_kdb(current_thread()->schedule_in_progress()
-             || current_thread()->state() & (Thread_ready_mask | Thread_drq_wait | Thread_waiting));
+             || current_thread()->state() & (Thread_ready_mask | Thread_drq_wait | Thread_waiting | Thread_ipc_transfer));
 }