Errata
From Siwiki
Contents |
[edit] Solaris Internals 2nd Edition Errata
[edit] 1st printing
- Page 17, paragraph 4, line 6
"has been" -> "have been"
- Page 17, paragraph 4, line 7
"code ore" -> "codes are"
- Page 25, paragraph 2, line 2
Obsolete parameters in /etc/system are not always ignored.
- Page 25, paragraph 3, lines 7-9
Similar sentence repetition. The last two sentences in section 1.5.3 POSIX IPC read:
"The object type exported to the program through the POSIX interfaces is handled within the files. The obejct type exported to the program through the POSIX interfaces is handled within the library routines."
The next to last sentence ("...handled within the files") should be stricken - only the last sentence ("...handled within the library routines") is correct.
- Page 434, top of the page: "task.max.lwps" -> "task.max-lwps"
All underscores in the code samples have been replaced by dots. The first code sample should read:
rctlblk_t *blk = malloc(rctlblk_size());
...
rctlblk_set_privilege(blk, RCPRIV_PRIVILEGED);
rctlblk_set_local_action(blk, RCTL_LOCAL_SIGNAL, SIGXRES);
rctlblk_set_value(blk, 32);
if (setrctl("task.max-lwps", NULL, blk, RCTL_REPLACE) == -1 && errno == ESRCH) {
if (setrctl("task.max-lwps", NULL, blk, RCTL_INSERT) == -1)
/* log error message */
}
The second code sample should read:
/* allocate blk and blk2 */
rctlblk_set_privilege(blk, RCPRIV_BASIC);
rctlblk_set_local_action(blk, RCTL_LOCAL_NOACTION, 0);
rctlblk_set_value(blk, 24);
rctlblk_set_privilege(blk2, RCPRIV_PRIVILEGED);
rctlblk_set_local_action(blk2, RCTL_LOCAL_DENY | RCTL_LOCAL_SIGNAL, SIGXRES);
rctlblk_set_value(blk2, 32);
if (setrctl("task.max-lwps", NULL, blk, RCTL_REPLACE) == -1 && errno == ESRCH) {
if (setrctl("task.max-lwps", NULL, blk, RCTL_INSERT) == -1)
/* log error message */
...
if (setrctl("task.max-lwps", NULL, blk2, RCTL_REPLACE) == -1 && errno == ESRCH) {
if (setrctl("task.max-lwps", NULL, blk2, RCTL_INSERT) == -1)
/* log error message */
...
- Page 557, figure 11.6
black area with white lettering says "Spam", should be "span"
- Page 561, figure 11.7
Plotted data lines are mis-labeled. Dark line should be rmalloc. Legend "vmen" should be "vmem".
[edit] 2nd printing
- Page 23, 2nd bullet "FSS" line 3
"and processor utilitzation." -> "and processor utilization."
- Page 36, paragraph 1, line 2
"configured opn the FSS" -> "configured in the FSS"
- Page 48, paragraph 2, line 4
"Many of these are will be examined" -> "Many of these will be examined"
- Page 61, code block, comment for SRUN
"running" -> "runnable"
- Page 61, paragraph 1, line 4
"pstat is set to ZOMB" -> "p_stat is set to SZOMB"
- Page 62, 1st code block, lines 6 and 7
"prt" in the comments should be "ptr"
- Page 63, figure 2.4 and first paragraph after figure
PID Structure is missing *pid_pgtail between *pid_link and pid_ref, and *pid_pgtail should be explained in the following paragraph
- Page 64, paragraph 2, lines 6-8
The p_zomblist member discussed does not appear in the code block shown or in the source code.
- Page 71, paragraph 2, line 10
"implementation private" -> "private implementation"
- Page 89, pseudocode block, line 10
"weUre in the parent" -> "we're in the parent"
- Page 92, paragraph 4, line 5
"with adb" -> "with mdb"
- Page 99, last paragraph, line 5
"The kernel function then places the system call number in register %g1" -> "The libc wrapper function then places the system call number in register %g1"
- Page 102, paragraph 1, lines 1 and 2
"The AM bit in the PSTATE register at the time we trapped executed the ta instruction and is available in the %tstate register" -> "The AM bit in the PSTATE register at the time we trapped (executed the ta instruction) is available in the %tstate register"
- Page 103, second code block, line 5
"YSCALLTRACE" -> "#ifdef SYSCALLTRACE"
- Page 103, second code block, line 9
"" -> "#else"
- Page 103, second code block, line 11
"* SYSCALLTRACE */" -> "#endif /* SYSCALLTRACE */"
- Page 126, 3rd paragraph, line 3
"the new_mstate() function, which is passed as an argument flag" -> "the new_mstate() function, which is passed an argument flag"
- Page 128, 5th paragraph, line 4
"accounting for 100% of the threads time" -> "accounting for 100% of the thread's time"
- Page 131, SIGWAITING and SIGLWP descriptions
"used by the thread's library" -> "used by the threads library"
- Page 133, last line
"invocation of the abort(3C) library." -> "invocation of the abort(3C) library call."
- Page 136, under _file union:
"fs" (Variable name) -> "fd"
- Page 139, last paragraph, line 3
"An array of pointers signals dispositions" -> "An array of pointers contains signal dispositions"
- Page 141, 1st paragraph, line 3
"described in (missingCRef)" -> "described in (Table 2.8)"
- Page 141, pseudocode block, line 17
"SIGTDTP" -> "SIGTSTP"
- Page 158, 2nd paragraph, line 3
"transition between these states in managed" -> "transition between these states is managed"
- Page 164, command output block, next-to-last line
"200 MHz" -> "1200 MHz"
- Page 165, 4th bullet item, line 8
"exist within a bound latency" -> "exist within a bounded latency"
- Page 169, 3rd paragraph, line 2
"Solaris Perfarmance and Tools" -> "Solaris Performance and Tools"
- Page 169, 1st example
"::walk cpu | ::print cpu_t cpu_lpl | ::print lgrp_t lgrp_id" -> "::walk cpu | ::print cpu_t cpu_lpl | ::print lpl_t lpl_lgrpid"
- Page 177, mdb -k output block
Missing "no" in KRNRN column for cpu ID 0
- Page 186, 3rd paragraph, line 4
"elevated PIL (DISP_LOCK)" -> "elevated PIL (DISP_LEVEL)"
- Page 186, 2nd paragraph, line 5
"PIL is already at PIL" -> "PIL is already at DISP_LEVEL"
- Page 187, 1st paragraph, line 1
"elevated PIL (DISP_LOCK)" -> "elevated PIL (DISP_LEVEL)"
- Page 190, 2nd paragprah, line 5
"Table 3.1 described" -> "Table 3.1 describes"
- Page 193, 1st paragraph, line 6
"account)." -> "account."
- Page 196, 1st paragraph, lines 1-2
"Figure 3.6" -> "Figure 3.7"
- Page 199, 5th bullet item (cl_vaparmsin, cl_vaparmsout), line 2
"take an addition argument" -> "take an additional argument"
- Page 200, 7th bullet item (cl_swapout), line 2
"(sched()," -> "(sched()),"
- Page 201, 1st bullet item (cl_setrun), line 4
"inordinate amount time" -> "inordinate amount of time"
- Page 204, 2nd bullet item (PRIORITY LEVEL), line 4
"TS/IA)" -> "TS/IA"
- Page 208, Figure 3.8
"TImeshare" should be "Timeshare"
- Page 208, 2nd paragraph, lines 2-3
"We see from Figure 3.2" -> "We see from Figure 3.4"
- Page 214, 2nd bullet item
"and send a signal" -> "and sends a signal"
- Page 220, 1st paragraph, line 1
"This is accomplish this by" -> This is accomplished by"
- Page 223, 2nd paragraph, line 3
"see page 212)" -> "see page 212."
- Page 227, last line
"translate directory to global" -> "translate directly to global"
- Page 229, 3rd paragraph, line 2
"fast, bound, and consistent" -> "fast, bounded, and consistent"
- Page 244, 2nd code block, next-to-last line
"processorUs cpu_dispthread" -> "processor's cpu_dispthread"
- Page 256, Figure 3.12
"cv_boradcast" should be "cv_broadcast"
- Page 259, code block, first comment
Spurious ")"
- Page 262, 3rd paragraph, lines 1-2
"if dispwait > dispatch_table[priority]dispwait" -> "if dispwait > dispatch_table[priority].maxwait"
- Page 265, Figure 3.15
High Priority Interrrupts -> High Priority Interrupts
- Page 265, 1st paragraph, line 7
..uses the interrupt thread's stack, -> ...used the interrupted thread's stack
- Page 275, 1st paragraph, line 5
"less than those." -> "less than those requested."
- Page 277, last paragraph, line 2
"we employed a scheme much like that employed for file descriptors (see Section 14.2.1) is used." -> "we used a scheme similar to that employed for file descriptors (see Section 14.2.1)."
- Page 279, line 3
"ipc_lock" appears to be extraneous
- Page 280, description for ipc_rmid(), line 2
"the a facility-specific function" -> "a facility-specific function"
- Page 282, 3rd bullet point in section 4.2, line 3
"(See 4381822)" -> "(See http://bugs.opensolaris.org/bugdatabase/view_bug.do?bug_id=4381822)"
- Page 286, 1st paragraph, line 8
"standard 3C language library" -> "standard C language library"
- Page 288, 1st bullet item (max-shm-memory), line 6
"The size is deallocated" -> "The space is deallocated"
- Page 291, 1st paragraph, last lines
"maintained in the ipc_perm data structure, which is ... described in Table 4.2"
This is not described in Table 4.2 (New Resource Controls). The definition of ipc_perm is given in a code block under Table 4.1 on page 281. (Note that this was described in Table 10-2 (ipc_perm Data Structure) on page 423 of the first edition.)
- Page 294, paragraph 3, lines 1 and 2 (last lines on page)
"The application, not the kernel does the locking is done by using mlock()." -> "The application, not the kernel, does the locking, and this is done by using mlock()."
- Page 297, section 4.5.2
The description of the handling of semmni is obsolete.
- Page 297, section 4.5.3, 1st paragraph, line 2
"described by a semds_id data structure" -> "described by a semid_ds data structure"
- Page 299, 3rd paragraph, line 3
"msgct(2)" -> "msgctl(2)"
- Page 303
List items 3, 4, and 5 (describing msgctl invoked with the IPC_RMID flag) should be a separate list from items 1 and 2 (describing msgrcv).
- Page 308, 1st paragraph, line 5
"The full file name is prefix plus the strings" -> "The full file name is this prefix plus the string"
- Page 309
List items 3 and 4 don't follow the sequence of events presented in items 1 and 2 on page 308. In item 4, "close." appears to be extraneous.
- Page 311, list item 8, line 3
"that used to synchronize" -> "that are used to synchronize"
- Pages 312-320 (section 4.8, Solaris Doors)
All man page references listed as "3X" should read "3DOOR".
- Page 313, paragraph 1, line 6
The reference to Stevens' book is incorrect ("Steven's book [35]"). It's actually the bibliography that is incorrect. The correct book is "Unix Network Programming. Interprocess Communication." Volume 2. Second Edition. Chapter 15 (page 355) covers the Doors API.
Note that Doors APIs are also covered in Rich Teer's "Solaris Systems Programming".,
- Page 316, list item 11, lines 1-2
"door_return(3X) returns processor control to the thread that issued door_call(3X)" -> "door_return(3DOOR) returns processor control to the thread that issued door_create(3DOOR)"
- Page 320, Figure 4.8
"door_get_served()" -> "door_get_server()"
- Page 359, Section 5.5.8 title, "Using Privileges with Role-Based Access Control" is wrong.
Section 5.5.8 title should be "Privileges and the Service Management Facility".
- Page 361, 2nd paragraph, line 2
"While we plan on keeping just slap uid0 working" -> "While we plan on keeping uid 0 working"
- Page 378, 3rd paragraph, line 3
"the global zone's init, process" -> "the global zone's init process"
- Page 378, 4th paragraph, lines 2-3
"waiting for the zone's status to been changed" -> "waiting for the zone's status to be changed"
- Page 392, last bullet item, 1st paragraph, line 3
"must unmounted" -> "must be unmounted"
- Page 394, lines 4 and 5
"bindings such they can" should be "bindings such that they can"
- Page 396, section 6.7.3.1, Line 1
"Unlike IPv4 in which where the" => "Unlike IPv4, where the"
- Page 401, 3rd paragraph
The last sentence of section 6.8.3 should be removed.
- Page 415, 3rd paragraph line 4
"key uses for the Project and Tasks" -> "key uses for projects and tasks"
- Page 416, 1st complete bullet item, line 2
"For example, we wanted" -> "For example, if we wanted"
- Page 416, section 7.1.2, 1st paragraph, lines 3-4
"All processes that are started by a process inherit" -> "All processes inherit"
- Page 418, 2nd paragraph
"The /etc/projects file is represented" -> "The /etc/project file is represented"
- Page 421, 1st paragraph, lines 4-5
"You can issue settaskid() with the TASK_FINAL." -> "You can issue settaskid() with the TASK_FINAL flag set to prevent further settaskid() calls by the created task."
- Page 429, 3rd paragraph, last line
"does not emerge" -> "does emerge"
- Page 436, 2nd paragraph, line 1
"The setrctl(2), getrctl(2), setrctl(2), and getrctl(2) system calls" -> "The setrctl(2) and getrctl(2) system calls"
- Page 451, last line
"permenant" -> "permanent"
- Page 458, 3rd paragraph, lines 2-3
"Executable text and data are shared in the same manner" -> "Executable text is shared in the same manner"
- Page 463, Table 9.1
"onUltraSPARC" should be "on UltraSPARC"
- Page 470, 2nd paragraph, line 5
"calling the as_setat() function" -> "calling the as_segat() function"
- Page 472, Table 9.3
"as_setat()" -> "as_segat()"
- Page 491, Paragraph 2, Line 9
"swap -1" should be "swap -l"
- Page 496, Section 9.10.3.1, 1st paragraph, line 6
"mpss_stkkpgszsel" -> "mpss_stkpgszsel"
- Page 498, 3rd paragraph, line 6
"are of at a short enough duration" -> "are of a short enough duration"
- Page 499, 3rd bullet item, line 2
"using it for PAGESIZES pages" -> "using it for PAGESIZE pages"
- Page 501, Table 9.8 "walk anon" entry
"Given an amp, list of anon structures" -> "Given an amp, walk the list of anon structures"
- Page 501, Table 9.8 "walk seg" entry
"Given an as, list of segments" -> "Given an as, walk the list of segments"
- Page 503, 3rd paragraph, line 1
"central pool physical memory" -> "central pool of physical memory"
- Page 505, 4th paragraph, line 1
- "The cachelist is typically 12% of the physical memory size on SPARC
systems." -> "The resident size of segmap is typically 12% of the physical memory size on SPARC systems."
- Page 522, Table 10.3, maxpgio
Defaults are 40 or 60 pages/s
- Page 523, Figure 10.8
- "page-out_scanner()" -> "pageout_scanner()"
- "one at a time by calling check_page()" -> "one at a time by calling checkpage()"
- "page-" -> "pageout()"
- Page 542, Table 11.7, kmem_cache_create(), 3rd paragraph
"Flags can supplied as" -> "Flags can be supplied as"
- Page 554, vmem_alloc(), line 4
"as described in 4.3.2" -> "as described in 11.3.3.2"
- Page 555, 2nd paragraph, lines 1-2
"natural unit of currency, or qu" -> "natural unit of currency, or quantum"
- Page 555, 6th paragraph
"In this example, addr will be 262: It is 8 bytes away from a 64-byte boundary (262 mod 64 = 8), and the segment [262,282) lies within [200,300)." -> "In this example, addr will be 264: It is 8 bytes away from a 64-byte boundary (264 mod 64 = 8), and the segment [264,284) lies within [200,300)."
- Page 564
The 3rd MDB output block doesn't match the following paragraph, which seems to describe it (e.g., "The name of the kmem_cache (in this case, kmem_alloc_24)...") The block matching this text appears to be the third block on page 572.
- Page 597, 2nd paragrpah, line 10
"have 512-Kbyte have HME" -> "have HME"
- Page 610, 5th paragraph, line 5
"fmmu_idtlb_slowpath()" -> "sfmmu_uitlb_slowpath()"
- Page 615, 2nd paragraph, line 2
"for the given the virtual address" -> "for the given virtual address"
- Page 615, 2nd paragraph, line 6
"chains to created the mappings." -> chains to create the mappings."
- Page 615, 3rd paragraph, line 3
"32-Mbyte and 512-Mbyte pages, respectively." -> "32-Mbyte and 256-Mbyte pages, respectively."
- Page 615, 4th paragraph, line 9
"that a virtual is contained" -> "that a virtual address is contained"
- Page 629, 3rd paragraph, line 7
"64 applications" -> "64-bit applications"
- Page 661, 2nd paragraph, lines 12-13
"(typically ... open() function." -> "(typically ... open() function.)"
- Page 669, line 2
"(See Section 14.8.1.)" -> "(See Section 14.7.2.)"
- Page 683, 1st bullet item, lines 2-3
"the requested mount. This is best done with a call to secpolicy_fs_mount()" -> "the requested unmount. This is best done with a call to secpolicy_fs_unmount()"
- Page 683, 2nd bullet item, line 1
"if the mount is a forced mount" -> "if the unmount is a forced unmount"
- Page 709, 1st paragraph, line 4
"unless the segment is mapped MA_SHARED" -> "unless the segment is mapped MAP_SHARED"
- Page 711, 1st paragraph, line 3
"shown on page 714" -> "shown on page 713"
- Page 720, 5th paragraph, line 1
"central pool physical memory" -> "central pool of physical memory"
- Page 752, last paragraph, bullet item line 2
"equals 1, t and the i_nlink is greater then 0" -> "equals 1 and i_nlink is greater than 0"
- Page 762, list item 2, line 3
"a call is made segmap_pageunlock()" -> "a call is made to segmap_pageunlock()"
- Page 768, 3rd paragraph, line 2
"The can be turned off" -> "This can be turned off"
- Page 781, 2nd paragraph, line 2
"linked into the mt_amp" -> "linked into the mt_map"
- Page 784, paragraph 1, last line
"entereing" should be "entering"
- Page 802, 3rd paragraph, lines 1, 2, and 4
"[Aa]n thread's home lgroup" -> "[Aa] thread's home lgroup"
- Page 805, 7th paragraph, lines 4-5
"starting with the Solaris 9" -> "starting with the Solaris 9 OS"
- Page 831, 1st paragraph, line 1
"The 128-bit mutex object" -> "The 64-bit mutex object"
- Page 834, pseudocode block, line 4
"cpu_sysinfo.ademters" -> "cpu_sysinfo.adenters"
- Page 846, 7th paragraph, line 1
"content-event probes" -> "contention-event probes"
- Page 861, 4th paragraph, line 9
"where its not possible" -> "where it is not possible"
- Page 864, 1st paragraph, line 3
"The then current perimeter" -> "The current perimeter"
- Page 867, 6th paragraph, bullet 2, line 2
"The connections are randomly bounded" -> "The connections are randomly bound"
- Page 872, 1st paragraph, lines 2-3
"an interface based on a function calls" -> "an interface based on function calls"
- Page 877, 4th paragraph, line 6
"obtain direct access to IP9." -> "obtain direct access to IP."
- Page 879, 1st paragraph, lines 2-3
"This avoids a call strrput()" -> "This avoids a call to strrput()"
- Page 887, 7th paragraph, line 1
"The function mac_rx() function delivers" -> "The function mac_rx delivers"
- Page 890, 2nd paragraph, line 5
"IPV64" -> "IPV6"
- Page 892, 6th paragraph, line 5
"and the squeue moveg" -> "and the squeue moves"
- Page 894, 1st paragraph, line 8
"bound to same squeue" -> "bound to the same squeue"
- Page 929, Procesing Latency bullet, line 8
The s of blocks is printed in grey and underlined
- Page 930, last paragraph, lines 1-2
"the upper boundary requirement 6" -> "the upper boundary requirement 7"
- Page 931, 3rd paragraph, line 3
"priority dispatching (requirement 7)" -> "priority dispatching (requirement 6)"
- Page 931 taskq-create bullet, line 5
There is a spurious backtick in "`backing queue"
- Page 940, 5th paragraph, line 4
"a good idea of the STREAMS scheduler from," -> "a good idea of the STREAMS scheduler from [33],"
- Page 955, 3rd paragraph, line 11
"normal Normal interrupt processing will" -> "normal interrupt processing will"
- Page 972, 1st paragraph, lines 2-3
"add a new file schrock.c to usr/src/uts/common/syscall.c" -> "add a new file schrock.c to usr/src/uts/common/syscall/"
- Page 976
Garbled characters in call to srtchr, should probably be '/'
- Page 981, item 38
"subblOcking" -> "Subblocking"
- Page 997 (index)
"kernalmap segment, 536" -> "kernelmap segment, 536"
[edit] Solaris Performance and Tools Errata
[edit] 1st printing
- Page 330, paragraph 2, line 5 (item 2 in bullet list)
"dcmnds" -> "dcmds"
- Page 355, paragraph 2
Repetition of paragraph 1
[edit] 2nd printing
- Page xxix, table P.1
"Examples that are applicable..." should be replaced with actual examples that are applicable!
- Page 14, last paragraph, line 1
"An server" -> "A server"
- Page 24 last but 1 line
For the figures given, the average (mean) is 0.4%, not 0.2%
- Page 27, last paragraph, lines 1/2
"which is of cpu_sys_stats_t" should be "which is of type cpu_sys_stats_t"
- Page 39, paragraph 1, line 3
"you can use the TFL and DTL" -> "you can use the TFL and DFL"
- Page 181, last word on page
nicestat should be nicstat
- Page 220, boxed example
Only half of the busstat command is in bold
- Page 223 (very minor!), boxed example
At the end of the first sample there is a missing carriage return between 'sys_syscall32' and the '---'s that follow it
