Understanding the Linux Kernel By Daniel P. Bovet and Marco Cesati This errata page lists errors outstanding in the most recent printing. If you have technical questions or error reports, you can send them to booktech@oreilly.com. (Please specify the printing date of your copy.) This page was last modified on April 2, 2003. Here's a key to the markup: [page-number]: serious technical mistake {page-number}: minor technical mistake : important language/formatting problem (page-number): language change or minor formatting problem ?page-number?: reader question or request for clarification Confirmed errors: (copyright page) Printing History should be - November 2000: First Edition. December 2002: Second Edition. (37) Figure 2-2; Bit 53 should be labeled with the digit "0" instead of the letter "O" in all three descriptors. (41) Figure 2-4; replace: "gdt or ldt" with: "GDT or LDT" (63) 10th paragraph; replace: "swapper_ pg_dir" with: "swapper_pg_dir" (148) first paragraph(below Table 4-7.); The index of a sofirq determines its priority: should be - The index of a softirq determines its priority: {283} 2nd paragraph; append the following sentence to the paragraph: "The kernel also sets the SCHED_YIELD flag and invokes the schedule() function whenever it is executing a long non-critical task and wishes to give a chance to other processes to run." <360> There are several text formatting mistakes. The second paragraph of page 360 starting with "If the first component name is neither (.) nor (..)" should be a new item labeled "f" (it does not refer to reserved_lookup()). The third paragraph starting with "If the required dentry object is not in the dentry cache," should be a new item labeled "g". The following six paragraphs are the items of a new list with label ranging from "1" to "6": they refer to the real_lookup() function. Following items should be re-labeled as follow: (on page 360) item "f" -> item "h" item "g" -> item "i" (on page 361) item "h" -> item "j" item "i" -> item "k" item "j" -> item "l" (405) 3rd paragraph; replace: "then returns the address of the descriptor of the request being serviced..." with: "then returns the address of a pointer to the descriptor of the request being serviced..." (501) Table 17-2, the last line; replace: "24 bytes" with: "12 bytes" (606) entry "free_one_pgd" delete: "function is" (606) entry "free_one_pmd" delete: "function" ---- ERRATA FOR ONLINE EDITIONS (Safari Books Online) ---- [2.2] Section 2.2.1 Last Paragraph; The error is in Section 2.2.1: Segmentation registers. It's in the last paragraph of Section 2.2.1 which I am quoting below: "The cs register has another important function: it includes a 2-bit field that specifies the Current Privilege Level (CPL) of the CPU. The value denotes the highest privilege level, while the value 3 denotes the lowest one. Linux uses only levels and 3, which are respectively called Kernel Mode and User Mode." The value of the highest privilege level is not given. Also, same info is omitted where it says "Linux uses only levels and 3, which are respectively called Kernel Mode and User Mode. Both of these missing values should be 0 (as in the printed edition)