[eros-cvs] cvs commit: eros/src/doc/www/devel/ObRef/primary Node.html

shap@eros.cs.jhu.edu shap@eros.cs.jhu.edu
Wed, 29 Aug 2001 08:27:44 -0400


shap        01/08/29 08:27:44

  Modified:    src/base/sys/eros NodeKey.h
               src/base/sys/key pk_NodeKey.cxx
               src/base/sys/libkey lk_ndwritenumber.c
               src/doc/www/devel/ObRef/primary Node.html
  Log:
  Revise the "write number" operation to take the slot number as a
  register argument and the number value as a strong.

Revision  Changes    Path
1.33      +1 -1      eros/src/base/sys/eros/NodeKey.h

Index: NodeKey.h
===================================================================
RCS file: /cvs/eros/src/base/sys/eros/NodeKey.h,v
retrieving revision 1.32
retrieving revision 1.33
diff -u -r1.32 -r1.33
--- NodeKey.h	2001/05/29 06:16:37	1.32
+++ NodeKey.h	2001/08/29 12:27:44	1.33
@@ -37,6 +37,7 @@
 
 #define OC_Node_Copy(k)          (0+(k))
 #define OC_Node_Swap(k)          (32+(k)) /* for parallel w/ dom key */
+#define OC_Node_WriteNumber      96
 
 #define OC_Node_MakeNodeKey      64
 #define OC_Node_MakeSegmentKey   65
@@ -52,7 +53,6 @@
 #endif
 #define OC_Node_Clone		 80
 
-#define OC_Node_WriteNumber(k)   (96+(k))
 
 #define RC_Node_Range		 1
 



1.83      +19 -39    eros/src/base/sys/key/pk_NodeKey.cxx

Index: pk_NodeKey.cxx
===================================================================
RCS file: /cvs/eros/src/base/sys/key/pk_NodeKey.cxx,v
retrieving revision 1.82
retrieving revision 1.83
diff -u -r1.82 -r1.83
--- pk_NodeKey.cxx	2001/06/10 19:41:52	1.82
+++ pk_NodeKey.cxx	2001/08/29 12:27:44	1.83
@@ -376,46 +376,26 @@
       return;
     }
 
-  case OC_Node_WriteNumber(0):
-  case OC_Node_WriteNumber(1):
-  case OC_Node_WriteNumber(2):
-  case OC_Node_WriteNumber(3):
-  case OC_Node_WriteNumber(4):
-  case OC_Node_WriteNumber(5):
-  case OC_Node_WriteNumber(6):
-  case OC_Node_WriteNumber(7):
-  case OC_Node_WriteNumber(8):
-  case OC_Node_WriteNumber(9):
-  case OC_Node_WriteNumber(10):
-  case OC_Node_WriteNumber(11):
-  case OC_Node_WriteNumber(12):
-  case OC_Node_WriteNumber(13):
-  case OC_Node_WriteNumber(14):
-  case OC_Node_WriteNumber(15):
-  case OC_Node_WriteNumber(16):
-  case OC_Node_WriteNumber(17):
-  case OC_Node_WriteNumber(18):
-  case OC_Node_WriteNumber(19):
-  case OC_Node_WriteNumber(20):
-  case OC_Node_WriteNumber(21):
-  case OC_Node_WriteNumber(22):
-  case OC_Node_WriteNumber(23):
-  case OC_Node_WriteNumber(24):
-  case OC_Node_WriteNumber(25):
-  case OC_Node_WriteNumber(26):
-  case OC_Node_WriteNumber(27):
-  case OC_Node_WriteNumber(28):
-  case OC_Node_WriteNumber(29):
-  case OC_Node_WriteNumber(30):
-  case OC_Node_WriteNumber(31):
+  case OC_Node_WriteNumber:
     {
       if (isFetch) {
+	COMMIT_POINT();
 	inv.exit.code = RC_NoAccess;
 	return;
       }
 
-      uint32_t slot = inv.entry.code - OC_Node_WriteNumber(0);
+      uint32_t slot = inv.entry.w1;
 
+      if (slot >= EROS_NODE_SIZE || inv.entry.len != sizeof(nk_value)) {
+	COMMIT_POINT();
+	inv.exit.code = RC_RequestError;
+	return;
+      }
+
+#ifndef OPTION_PURE_ENTRY_STRINGS
+      Thread::CurContext()->SetupEntryString(inv);
+#endif
+
       /* If we overwrite it, we're going to nail all of it's
        * dependencies anyway:
        */
@@ -428,19 +408,19 @@
 	oldReserve =
 	  &CpuReserve::CpuReserveTable[theNode->slot[slot].keyData];
 
-      nk_value nkv;
-      bzero (&nkv, sizeof(nkv));
-
       theNode->MakeObjectDirty();
 
       COMMIT_POINT();
 	
+      nk_value nkv;
+      inv.CopyIn(inv.entry.len, &nkv);
+
       theNode->ClearHazard(slot);
 
       assert( (*theNode)[slot].IsUnprepared() );
-      (*theNode)[slot].KS_SetNumberKey(inv.entry.w3,
-                                       inv.entry.w2,
-                                       inv.entry.w1 );
+      (*theNode)[slot].KS_SetNumberKey(nkv.value[2],
+				       nkv.value[1],
+				       nkv.value[0]);
       
       if (oldReserve) {
           Key voidKey;		/* default constructor == void */



1.18      +6 -5      eros/src/base/sys/libkey/lk_ndwritenumber.c

Index: lk_ndwritenumber.c
===================================================================
RCS file: /cvs/eros/src/base/sys/libkey/lk_ndwritenumber.c,v
retrieving revision 1.17
retrieving revision 1.18
diff -u -r1.17 -r1.18
--- lk_ndwritenumber.c	2001/05/24 04:37:59	1.17
+++ lk_ndwritenumber.c	2001/08/29 12:27:44	1.18
@@ -29,15 +29,16 @@
 {
   Message msg;
 
-  msg.snd_w1 = pnkv->value[0];
-  msg.snd_w2 = pnkv->value[1];
-  msg.snd_w3 = pnkv->value[2];
+  msg.snd_w1 = slot;
+  msg.snd_w2 = 0;
+  msg.snd_w3 = 0;
   
   msg.snd_key0 = KR_VOID;
   msg.snd_key1 = KR_VOID;
   msg.snd_key2 = KR_VOID;
   msg.snd_key3 = KR_VOID;
-  msg.snd_len = 0;
+  msg.snd_data = pnkv;
+  msg.snd_len = sizeof(*pnkv);
 
   msg.rcv_key0 = KR_VOID;
   msg.rcv_key1 = KR_VOID;
@@ -46,7 +47,7 @@
   msg.rcv_len = 0;		/* no data returned */
 
   msg.snd_invKey = krNode;
-  msg.snd_code = OC_Node_WriteNumber(slot);
+  msg.snd_code = OC_Node_WriteNumber;
 
   return CALL(&msg);
 }



1.35      +15 -7     eros/src/doc/www/devel/ObRef/primary/Node.html

Index: Node.html
===================================================================
RCS file: /cvs/eros/src/doc/www/devel/ObRef/primary/Node.html,v
retrieving revision 1.34
retrieving revision 1.35
diff -u -r1.34 -r1.35
--- Node.html	2001/05/09 14:20:48	1.34
+++ Node.html	2001/08/29 12:27:44	1.35
@@ -467,36 +467,44 @@
 	   </tr>
 	 </table>
 	 <p> 
-    <dt> <strong>Write Number to Slot N</strong> (OC = 96 + N)
+    <dt> <strong>Write Number</strong> (OC = 96)
     <dd> 
 	 <p> Fabricates a number key in slot N (0 &lt;= N
 	 &lt;= 31) whose values are obtained from the sent registers.
 	 <table>
 	   <tr valign=top>
-	     <td rowspan=3>
+	     <td rowspan=4>
 	       <strong>Request</strong>
 	     </td>
 	     <td align=right>
 	       <strong>R1</strong>
 	     </td>
 	     <td>
-	       The first integer value.
+	       The slot number to overwrite.
 	     </td>
 	   </tr>
 	   <tr valign=top>
 	     <td align=right>
-	       <strong>R2</strong>
+	       <strong>W</strong>
 	     </td>
 	     <td>
-	       The second integer value.
+	       The least significant 32 bits of the value.
 	     </td>
 	   </tr>
 	   <tr valign=top>
 	     <td align=right>
-	       <strong>R3</strong>
+	       <strong>W</strong>
 	     </td>
 	     <td>
-	       The third integer value.
+	       The middle 32 bits of the value.
+	     </td>
+	   </tr>
+	   <tr valign=top>
+	     <td align=right>
+	       <strong>W</strong>
+	     </td>
+	     <td>
+	       The most significant 32 bits of the value.
 	     </td>
 	   </tr>
 	   <tr valign=top>