summaryrefslogtreecommitdiff
path: root/README
diff options
context:
space:
mode:
authormarcus <marcus>2005-01-31 13:56:43 +0000
committermarcus <marcus>2005-01-31 13:56:43 +0000
commit659a6925317031788a1ea8d28c2f49aa1355674b (patch)
tree3cc582fe44b38f12859a4d6e1d9b3d25a92cd602 /README
parent1e16c52a3c55c85344513e07486945c8775a7280 (diff)
2005-01-31 Marcus Brinkmann <marcus@gnu.org>
* README: Add patch for L4 local and remote xfer timeouts support.
Diffstat (limited to 'README')
-rw-r--r--README412
1 files changed, 412 insertions, 0 deletions
diff --git a/README b/README
index 562d70c..cbf4f23 100644
--- a/README
+++ b/README
@@ -478,3 +478,415 @@ diff -rupN pistachio/user/include/l4/ia32/vregs.h pistachio/user/include/l4/ia32
: /* outputs */
"=r"(utcb)
+
+
+This patch extends the L4 kernel by allowing to set different xfer
+timeouts for local and remote page faults.
+
+2005-01-31 Matthieu Lemerre <racin@free.fr>
+
+ * kernel/src/api/v4/space.cc (handle_xfer_timeouts): Accept
+ new argument FAULT_IN_SENDER_AS which specifies if the fault happened
+ in the sender's address space. Adjust the timeouts taking
+ this parameter into account.
+ (space_t::handle_pagefaults): Pass new argument to
+ handle_xfer_timeouts.
+ * kernel/include/api/v4/tcb.h (tcb_t): New accessor function
+ prototypes get_local_xfer_timeout_snd and
+ get_local_xfer_timeout_rcv.
+ (tcb_t::get_local_xfer_timeout_snd, tcb_t::get_local_xfer_timeout_rcv):
+ New inline functions.
+ * kernel/include/glue/v4-alpha/utcb.h (utcb_t): New members
+ thread_word_0, thread_word_1 and local_xfer_timeout. Adjust
+ padding.
+ * kernel/include/glue/v4/v4-amd64/utcb.h (utcb_t): Likewise.
+ * kernel/include/glue/v4/v4-arm/utcb.h (utcb_t): Likewise.
+ * kernel/include/glue/v4/v4-ia32/utcb.h (utcb_t): Likewise.
+ * kernel/include/glue/v4/v4-ia64/utcb.h (utcb_t): Likewise.
+ * kernel/include/glue/v4/v4-mips64/utcb.h (utcb_t): Likewise.
+ * kernel/include/glue/v4/v4-powerpc/utcb.h (utcb_t): Likewise.
+ * kernel/include/glue/v4/v4-powerpc64/utcb.h (utcb_t): Likewise.
+ * user/include/l4/alpha/vregs.h,
+ user/include/l4/amd64/vregs.h, user/include/l4/arm/vregs.h,
+ user/include/l4/ia32/vregs.h, user/include/l4/ia64/vregs.h,
+ user/include/l4/mips64/vregs.h, user/include/l4/powerpc/vregs.h,
+ user/include/l4/powerpc64/vregs.h: For all these files:
+ (__L4_TCR_LOCAL_XFER_TIMEOUT): Define macro.
+ (__L4_TCR_XferTimeout): Set local transfer timeout as well.
+
+diff -rup pistachio/kernel/include/api/v4/tcb.h pistachio-to/kernel/include/api/v4/tcb.h
+--- pistachio/kernel/include/api/v4/tcb.h 2005-01-22 01:45:47.000000000 +0100
++++ pistachio-to/kernel/include/api/v4/tcb.h 2005-01-31 13:56:52.000000000 +0100
+@@ -130,6 +130,8 @@ public:
+
+ time_t get_xfer_timeout_snd ();
+ time_t get_xfer_timeout_rcv ();
++ time_t get_local_xfer_timeout_snd ();
++ time_t get_local_xfer_timeout_rcv ();
+ void set_actual_sender(threadid_t tid);
+ threadid_t get_virtual_sender();
+ threadid_t get_intended_receiver();
+@@ -588,6 +590,24 @@ INLINE time_t tcb_t::get_xfer_timeout_rc
+ return get_utcb()->xfer_timeout.get_rcv();
+ }
+
++/**
++ * Get a thread's local send transfer timeout
++ * @return local send transfer timeout
++ */
++INLINE time_t tcb_t::get_local_xfer_timeout_snd (void)
++{
++ return get_utcb()->local_xfer_timeout.get_snd();
++}
++
++/**
++ * Get a thread's local receive transfer timeout
++ * @return local receive transfer timeout
++ */
++INLINE time_t tcb_t::get_local_xfer_timeout_rcv (void)
++{
++ return get_utcb()->local_xfer_timeout.get_rcv();
++}
++
+
+ /**
+ * enqueues the tcb into the send queue of tcb
+diff -rup pistachio/kernel/include/glue/v4-alpha/utcb.h pistachio-to/kernel/include/glue/v4-alpha/utcb.h
+--- pistachio/kernel/include/glue/v4-alpha/utcb.h 2003-09-24 21:12:21.000000000 +0200
++++ pistachio-to/kernel/include/glue/v4-alpha/utcb.h 2005-01-31 14:15:12.000000000 +0100
+@@ -54,7 +54,10 @@ public:
+ word_t error_code; /* 56 */
+ threadid_t intended_receiver; /* 64 */
+ threadid_t virtual_sender; /* 72 */
+- word_t __padding0[6]; /* 80 .. 128 */
++ word_t thread_word_0; /* 80 */
++ word_t thread_word_1; /* 88 */
++ timeout_t local_xfer_timeout; /* 96 */
++ word_t __padding0[3]; /* 104 .. 128 */
+ word_t mr[IPC_NUM_MR]; /* 128 .. 640 */
+ word_t br[IPC_NUM_BR]; /* 640 .. 904 */
+ word_t __padding1[15]; /* 904 .. 1024 */
+diff -rup pistachio/kernel/include/glue/v4-amd64/utcb.h pistachio-to/kernel/include/glue/v4-amd64/utcb.h
+--- pistachio/kernel/include/glue/v4-amd64/utcb.h 2004-06-02 13:26:42.000000000 +0200
++++ pistachio-to/kernel/include/glue/v4-amd64/utcb.h 2005-01-31 14:17:42.000000000 +0100
+@@ -49,7 +49,10 @@ public:
+ timeout_t xfer_timeout; /* - 64 */
+ threadid_t intended_receiver; /* - 56 */
+ threadid_t virtual_sender; /* - 48 */
+- word_t reserved1[5]; /* - 40 .. -1 */
++ word_t thread_word_1; /* - 40 */
++ word_t thread_word_0; /* - 32 */
++ timeout_t local_xfer_timeout; /* - 24 */
++ word_t reserved1[2]; /* - 16 .. -1 */
+ word_t mr[IPC_NUM_MR]; /* 0 .. 511 */
+
+ /* do not delete this TCB_END_MARKER */
+diff -rup pistachio/kernel/include/glue/v4-arm/utcb.h pistachio-to/kernel/include/glue/v4-arm/utcb.h
+--- pistachio/kernel/include/glue/v4-arm/utcb.h 2004-06-04 04:26:52.000000000 +0200
++++ pistachio-to/kernel/include/glue/v4-arm/utcb.h 2005-01-31 14:19:25.000000000 +0100
+@@ -35,7 +35,7 @@
+ #include INC_API(thread.h)
+ #include INC_API(types.h)
+
+-#define PADDING_0 ((64-sizeof(threadid_t)*5-sizeof(word_t)*3-sizeof(timeout_t)-sizeof(u8_t)*2-sizeof(u16_t))/4)
++#define PADDING_0 ((64-sizeof(threadid_t)*5-sizeof(word_t)*5-sizeof(timeout_t)*2-sizeof(u8_t)*2-sizeof(u16_t))/4)
+
+ #define PADDING_1 ((448-sizeof(word_t)*(IPC_NUM_MR+IPC_NUM_BR))/4)
+
+@@ -57,7 +57,10 @@ public:
+ word_t error_code; /* 28 */
+ threadid_t intended_receiver; /* 32 */
+ threadid_t virtual_sender; /* 36 */
+- word_t __padding0[PADDING_0]; /* 40 .. 64 */
++ word_t thread_word_0; /* 40 */
++ word_t thread_word_1; /* 44 */
++ timeout_t local_xfer_timeout; /* 48 */
++ word_t __padding0[PADDING_0]; /* 52 .. 64 */
+ word_t mr[IPC_NUM_MR]; /* 64 .. 320 */
+ word_t br[IPC_NUM_BR]; /* 320 .. 452 */
+ word_t __padding1[PADDING_1]; /* 452 .. 512 */
+diff -rup pistachio/kernel/include/glue/v4-ia32/utcb.h pistachio-to/kernel/include/glue/v4-ia32/utcb.h
+--- pistachio/kernel/include/glue/v4-ia32/utcb.h 2003-09-24 21:12:22.000000000 +0200
++++ pistachio-to/kernel/include/glue/v4-ia32/utcb.h 2005-01-31 14:03:38.000000000 +0100
+@@ -51,7 +51,10 @@ public:
+ timeout_t xfer_timeout; /* -32 */
+ threadid_t intended_receiver; /* -28 */
+ threadid_t virtual_sender; /* -24 */
+- word_t reserved1[5]; /* -20 .. -4 */
++ word_t thread_word_1; /* -20 */
++ word_t thread_word_0; /* -16 */
++ timeout_t local_xfer_timeout; /* -12 */
++ word_t reserved1[2]; /* -8 .. -4 */
+ word_t mr[IPC_NUM_MR]; /* 0 .. 252 */
+
+ /* do not delete this TCB_END_MARKER */
+diff -rup pistachio/kernel/include/glue/v4-ia64/utcb.h pistachio-to/kernel/include/glue/v4-ia64/utcb.h
+--- pistachio/kernel/include/glue/v4-ia64/utcb.h 2003-09-24 21:12:23.000000000 +0200
++++ pistachio-to/kernel/include/glue/v4-ia64/utcb.h 2005-01-31 14:20:56.000000000 +0100
+@@ -55,7 +55,10 @@ public:
+ word_t error_code; // 72 (9)
+
+ word_t br[IPC_NUM_BR]; // 80 (10)
+- word_t __padding1[5]; // 344 (43)
++ word_t thread_word_0; // 88 (11)
++ word_t thread_word_1; // 88 (12)
++ timeout_t local_xfer_timeout; // 96 (13)
++ word_t __padding1[2]; // 368 (46)
+
+ word_t mr[IPC_NUM_MR]; // 384 (48)
+ word_t __padding2[16]; // 896 (112)
+diff -rup pistachio/kernel/include/glue/v4-mips64/utcb.h pistachio-to/kernel/include/glue/v4-mips64/utcb.h
+--- pistachio/kernel/include/glue/v4-mips64/utcb.h 2004-10-06 21:13:40.000000000 +0200
++++ pistachio-to/kernel/include/glue/v4-mips64/utcb.h 2005-01-31 14:21:56.000000000 +0100
+@@ -54,7 +54,10 @@ public:
+ word_t error_code; /* 56 */
+ threadid_t intended_receiver; /* 64 */
+ threadid_t virtual_sender; /* 72 */
+- word_t __padding0[6]; /* 80 .. 128 */
++ word_t thread_word_0; /* 80 */
++ word_t thread_word_1; /* 88 */
++ timeout_t local_xfer_timeout; /* 96 */
++ word_t __padding0[3]; /* 104 .. 128 */
+ word_t mr[IPC_NUM_MR]; /* 128 .. 640 */
+ word_t br[IPC_NUM_BR]; /* 640 .. 904 */
+ word_t __padding1[15]; /* 904 .. 1024 */
+diff -rup pistachio/kernel/include/glue/v4-powerpc/utcb.h pistachio-to/kernel/include/glue/v4-powerpc/utcb.h
+--- pistachio/kernel/include/glue/v4-powerpc/utcb.h 2003-11-17 12:17:19.000000000 +0100
++++ pistachio-to/kernel/include/glue/v4-powerpc/utcb.h 2005-01-31 14:22:40.000000000 +0100
+@@ -52,7 +52,8 @@ public:
+ threadid_t virtual_sender; /* -24 */
+ word_t thread_word1; /* -20 */
+ word_t thread_word0; /* -16 */
+- word_t reserved1[3]; /* -12 .. -4 */
++ timeout_t local_xfer_timeout; /* -12 */
++ word_t reserved1[2]; /* -8 .. -4 */
+ word_t mr[IPC_NUM_MR]; /* 0 .. 252 */
+ } __attribute__((packed));
+
+diff -rup pistachio/kernel/include/glue/v4-powerpc64/utcb.h pistachio-to/kernel/include/glue/v4-powerpc64/utcb.h
+--- pistachio/kernel/include/glue/v4-powerpc64/utcb.h 2004-06-04 04:52:57.000000000 +0200
++++ pistachio-to/kernel/include/glue/v4-powerpc64/utcb.h 2005-01-31 14:23:32.000000000 +0100
+@@ -49,7 +49,10 @@ public:
+ word_t error_code; /* 56 */
+ threadid_t intended_receiver; /* 64 */
+ threadid_t virtual_sender; /* 72 */
+- word_t __padding0[6]; /* 80 .. 128 */
++ word_t thread_word_0; /* 80 */
++ word_t thread_word_1; /* 88 */
++ timeout_t local_xfer_timeout; /* 96 */
++ word_t __padding0[3]; /* 104 .. 128 */
+ word_t mr[IPC_NUM_MR]; /* 128 .. 640 */
+ word_t br[IPC_NUM_BR]; /* 640 .. 904 */
+ word_t __padding1[15]; /* 904 .. 1024 */
+diff -rup pistachio/kernel/src/api/v4/space.cc pistachio-to/kernel/src/api/v4/space.cc
+--- pistachio/kernel/src/api/v4/space.cc 2004-10-06 21:13:42.000000000 +0200
++++ pistachio-to/kernel/src/api/v4/space.cc 2005-01-31 14:11:48.000000000 +0100
+@@ -149,8 +149,9 @@ void tunnel_pagefault (word_t addr)
+ * up a timeout for the sender thread.
+ *
+ * @param sender sender thread
++ * @param fault_in_sender_as page fault happened in the space of the sender
+ */
+-static void handle_xfer_timeouts (tcb_t * sender)
++static void handle_xfer_timeouts (tcb_t * sender, bool fault_in_sender_as)
+ {
+ #warning Handle priority inversion for xfer timeouts
+
+@@ -163,9 +164,27 @@ static void handle_xfer_timeouts (tcb_t
+ ASSERT (! sender->get_partner ().is_nilthread ());
+ ASSERT (sender->get_state() == thread_state_t::locked_running);
+ ASSERT (partner->get_state() == thread_state_t::locked_waiting);
+-
+- time_t snd_to = sender->get_xfer_timeout_snd ();
+- time_t rcv_to = partner->get_xfer_timeout_rcv ();
++
++ time_t snd_to;
++ time_t rcv_to;
++ time_t timeout;
++
++ if (fault_in_sender_as)
++ {
++ /* The page fault happened in the sender. So the timeouts
++ that matter are the local pf send timeout of the sender
++ and the remote pf receive timeout of the partner. */
++ snd_to = sender->get_local_xfer_timeout_snd ();
++ rcv_to = partner->get_xfer_timeout_rcv ();
++ }
++ else
++ {
++ /* The page fault happened in the partner. So the timeouts
++ that matter are the remote pf send timeout of the sender
++ and the local pf receive timeout of the partner. */
++ snd_to = sender->get_xfer_timeout_snd ();
++ rcv_to = partner->get_local_xfer_timeout_rcv ();
++ }
+
+ if (snd_to.is_zero () || rcv_to.is_zero ())
+ {
+@@ -225,7 +244,7 @@ void space_t::handle_pagefault(addr_t ad
+ // Pagefault during IPC copy. Initiate xfer timeout
+ // counters before handling pagefault.
+ current->misc.ipc_copy.copy_fault = addr;
+- handle_xfer_timeouts (current);
++ handle_xfer_timeouts (current, true);
+ }
+
+ // if we have a user fault we may have a stale partner
+@@ -279,7 +298,7 @@ void space_t::handle_pagefault(addr_t ad
+ {
+ // Fault in copy area. Tunnel pagefault through partner.
+ current->misc.ipc_copy.copy_fault = addr;
+- handle_xfer_timeouts (current);
++ handle_xfer_timeouts (current, false);
+
+ // On PF tunneling we temporarily set the current thread
+ // into waiting for partner.
+
+
+diff -rup pistachio/user/include/l4/alpha/vregs.h pistachio-to/user/include/l4/alpha/vregs.h
+--- pistachio/user/include/l4/alpha/vregs.h 2004-10-06 21:13:47.000000000 +0200
++++ pistachio-to/user/include/l4/alpha/vregs.h 2005-01-31 14:42:41.000000000 +0100
+@@ -52,6 +52,8 @@ L4_INLINE L4_Word_t *__L4_Alpha_Utcb( vo
+
+ #define __L4_TCR_BR_OFFSET (80)
+ #define __L4_TCR_MR_OFFSET (16)
++#define __L4_TCR_LOCAL_XFER_TIMEOUT (12)
++#define __L4_TCR_THREAD_WORD1 (11)
+ #define __L4_TCR_THREAD_WORD0 (10)
+ #define __L4_TCR_VIRTUAL_ACTUAL_SENDER (9)
+ #define __L4_TCR_INTENDED_RECEIVER (8)
+@@ -128,6 +130,7 @@ L4_INLINE L4_Word_t __L4_TCR_XferTimeout
+ L4_INLINE void __L4_TCR_Set_XferTimeout( L4_Word_t w )
+ {
+ (__L4_Alpha_Utcb())[ __L4_TCR_XFER_TIMEOUT ] = w;
++ (__L4_Alpha_Utcb())[ __L4_TCR_LOCAL_XFER_TIMEOUT ] = w;
+ }
+
+ L4_INLINE L4_Word_t __L4_TCR_IntendedReceiver( void )
+diff -rup pistachio/user/include/l4/amd64/vregs.h pistachio-to/user/include/l4/amd64/vregs.h
+--- pistachio/user/include/l4/amd64/vregs.h 2003-09-24 21:06:22.000000000 +0200
++++ pistachio-to/user/include/l4/amd64/vregs.h 2005-01-31 14:43:02.000000000 +0100
+@@ -65,6 +65,7 @@ L4_INLINE L4_Word_t * __L4_X86_Utcb (voi
+ * Location of TCRs within UTCB. (Counted in word_t)
+ */
+
++#define __L4_TCR_XFER_TIMEOUT (-3)
+ #define __L4_TCR_THREAD_WORD_0 (-4)
+ #define __L4_TCR_THREAD_WORD_1 (-5)
+ #define __L4_TCR_VIRTUAL_ACTUAL_SENDER (-6)
+@@ -144,6 +145,7 @@ L4_INLINE L4_Word_t __L4_TCR_XferTimeout
+ L4_INLINE void __L4_TCR_Set_XferTimeout (L4_Word_t w)
+ {
+ (__L4_X86_Utcb ())[__L4_TCR_XFER_TIMEOUT] = w;
++ (__L4_X86_Utcb ())[__L4_TCR_LOCAL_XFER_TIMEOUT] = w;
+ }
+
+ L4_INLINE L4_Word_t __L4_TCR_IntendedReceiver(void)
+diff -rup pistachio/user/include/l4/arm/vregs.h pistachio-to/user/include/l4/arm/vregs.h
+--- pistachio/user/include/l4/arm/vregs.h 2004-06-04 10:20:12.000000000 +0200
++++ pistachio-to/user/include/l4/arm/vregs.h 2005-01-31 14:43:59.000000000 +0100
+@@ -35,6 +35,9 @@ L4_INLINE L4_Word_t *__L4_ARM_Utcb( void
+
+ #define __L4_TCR_BR_OFFSET (80)
+ #define __L4_TCR_MR_OFFSET (16)
++#define __L4_TCR_XFER_TIMEOUT (12)
++#define __L4_TCR_THREAD_WORD1 (11)
++#define __L4_TCR_THREAD_WORD0 (10)
+ #define __L4_TCR_VIRTUAL_ACTUAL_SENDER (9)
+ #define __L4_TCR_INTENDED_RECEIVER (8)
+ #define __L4_TCR_ERROR_CODE (7)
+diff -rup pistachio/user/include/l4/ia32/vregs.h pistachio-to/user/include/l4/ia32/vregs.h
+--- pistachio/user/include/l4/ia32/vregs.h 2004-11-17 01:48:13.000000000 +0100
++++ pistachio-to/user/include/l4/ia32/vregs.h 2005-01-31 14:40:47.000000000 +0100
+@@ -66,6 +66,7 @@ L4_INLINE L4_Word_t * __L4_X86_Utcb (voi
+ * Location of TCRs within UTCB.
+ */
+
++#define __L4_TCR_LOCAL_XFER_TIMEOUT (-3)
+ #define __L4_TCR_THREAD_WORD_0 (-4)
+ #define __L4_TCR_THREAD_WORD_1 (-5)
+ #define __L4_TCR_VIRTUAL_ACTUAL_SENDER (-6)
+@@ -145,6 +146,7 @@ L4_INLINE L4_Word_t __L4_TCR_XferTimeout
+ L4_INLINE void __L4_TCR_Set_XferTimeout (L4_Word_t w)
+ {
+ (__L4_X86_Utcb ())[__L4_TCR_XFER_TIMEOUT] = w;
++ (__L4_X86_Utcb ())[__L4_TCR_LOCAL_XFER_TIMEOUT] = w;
+ }
+
+ L4_INLINE L4_Word_t __L4_TCR_IntendedReceiver(void)
+diff -rup pistachio/user/include/l4/ia64/vregs.h pistachio-to/user/include/l4/ia64/vregs.h
+--- pistachio/user/include/l4/ia64/vregs.h 2003-09-24 21:13:50.000000000 +0200
++++ pistachio-to/user/include/l4/ia64/vregs.h 2005-01-31 14:44:41.000000000 +0100
+@@ -62,6 +62,7 @@ L4_INLINE L4_Word_t * __L4_IA64_Utcb (vo
+ */
+
+ #define __L4_TCB_MR_OFFSET (48)
++#define __L4_TCR_LOCAL_XFER_TIMEOUT (45)
+ #define __L4_TCR_THREAD_WORD_1 (44)
+ #define __L4_TCR_THREAD_WORD_0 (43)
+ #define __L4_TCB_BR_OFFSET (10)
+@@ -154,6 +155,7 @@ L4_INLINE L4_Word_t __L4_TCR_XferTimeout
+ L4_INLINE void __L4_TCR_Set_XferTimeout (L4_Word_t w)
+ {
+ (__L4_IA64_Utcb ())[__L4_TCR_XFER_TIMEOUT] = w;
++ (__L4_IA64_Utcb ())[__L4_TCR_LOCAL_XFER_TIMEOUT] = w;
+ }
+
+ L4_INLINE L4_Word_t __L4_TCR_IntendedReceiver(void)
+diff -rup pistachio/user/include/l4/mips64/vregs.h pistachio-to/user/include/l4/mips64/vregs.h
+--- pistachio/user/include/l4/mips64/vregs.h 2004-10-06 21:13:47.000000000 +0200
++++ pistachio-to/user/include/l4/mips64/vregs.h 2005-01-31 14:45:34.000000000 +0100
+@@ -48,6 +48,7 @@ L4_INLINE L4_Word_t *__L4_Mips64_Utcb( v
+
+ #define __L4_TCR_BR_OFFSET (80)
+ #define __L4_TCR_MR_OFFSET (16)
++#define __L4_TCR_LOCAL_XFER_TIMEOUT (12)
+ #define __L4_TCR_THREAD_WORD1 (11)
+ #define __L4_TCR_THREAD_WORD0 (10)
+ #define __L4_TCR_VIRTUAL_ACTUAL_SENDER (9)
+@@ -131,6 +132,7 @@ L4_INLINE L4_Word_t __L4_TCR_XferTimeout
+ L4_INLINE void __L4_TCR_Set_XferTimeout( L4_Word_t w )
+ {
+ (__L4_Mips64_Utcb())[ __L4_TCR_XFER_TIMEOUT ] = w;
++ (__L4_Mips64_Utcb())[ __L4_TCR_LOCAL_XFER_TIMEOUT ] = w;
+ }
+
+ L4_INLINE L4_Word_t __L4_TCR_IntendedReceiver( void )
+diff -rup pistachio/user/include/l4/powerpc/vregs.h pistachio-to/user/include/l4/powerpc/vregs.h
+--- pistachio/user/include/l4/powerpc/vregs.h 2003-10-27 21:50:41.000000000 +0100
++++ pistachio-to/user/include/l4/powerpc/vregs.h 2005-01-31 14:46:01.000000000 +0100
+@@ -53,6 +53,7 @@ L4_INLINE L4_Word_t *__L4_PPC_Utcb( void
+ * Location of TCRs within UTCB.
+ */
+
++#define __L4_TCR_LOCAL_XFER_TIMEOUT (-3)
+ #define __L4_TCR_THREAD_WORD_0 (-4)
+ #define __L4_TCR_THREAD_WORD_1 (-5)
+ #define __L4_TCR_VIRTUAL_ACTUAL_SENDER (-6)
+@@ -131,6 +132,7 @@ L4_INLINE L4_Word_t __L4_TCR_XferTimeout
+ L4_INLINE void __L4_TCR_Set_XferTimeout( L4_Word_t w )
+ {
+ (__L4_PPC_Utcb())[ __L4_TCR_XFER_TIMEOUT ] = w;
++ (__L4_PPC_Utcb())[ __L4_TCR_LOCAL_XFER_TIMEOUT ] = w;
+ }
+
+ L4_INLINE L4_Word_t __L4_TCR_IntendedReceiver( void )
+diff -rup pistachio/user/include/l4/powerpc64/vregs.h pistachio-to/user/include/l4/powerpc64/vregs.h
+--- pistachio/user/include/l4/powerpc64/vregs.h 2003-10-28 02:26:17.000000000 +0100
++++ pistachio-to/user/include/l4/powerpc64/vregs.h 2005-01-31 14:46:25.000000000 +0100
+@@ -48,6 +48,7 @@ L4_INLINE L4_Word_t *__L4_PPC64_Utcb( vo
+
+ #define __L4_TCR_BR_OFFSET (80)
+ #define __L4_TCR_MR_OFFSET (16)
++#define __L4_TCR_LOCAL_XFER_TIMEOUT (12)
+ #define __L4_TCR_THREAD_WORD1 (11)
+ #define __L4_TCR_THREAD_WORD0 (10)
+ #define __L4_TCR_VIRTUAL_ACTUAL_SENDER (9)
+@@ -131,6 +132,7 @@ L4_INLINE L4_Word_t __L4_TCR_XferTimeout
+ L4_INLINE void __L4_TCR_Set_XferTimeout( L4_Word_t w )
+ {
+ (__L4_PPC64_Utcb())[ __L4_TCR_XFER_TIMEOUT ] = w;
++ (__L4_PPC64_Utcb())[ __L4_TCR_LOCAL_XFER_TIMEOUT ] = w;
+ }
+
+ L4_INLINE L4_Word_t __L4_TCR_IntendedReceiver( void )