[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 <= N
<= 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>