Errata
The errata list is a list of errors and their corrections that were found after the product was released. If the error was corrected in a later version or reprint the date of the correction will be displayed in the column titled "Date Corrected".
The following errata were submitted by our customers and approved as valid errors by the author or editor.
Color key: Serious technical mistake Minor technical mistake Language or formatting error Typo Question Note Update
Version | Location | Description | Submitted By | Date submitted | Date corrected |
---|---|---|---|---|---|
Printed | Page xi last paragraph |
twelth |
Anonymous | May 01, 2007 | |
Printed | Page xiii first para, Greg's introduction |
... but whose kernel had never taken the time to look into. |
Anonymous | May 01, 2007 | |
Printed | Page xiv Second-last paragraph, last sentence |
In Chapters 1 and 1, however... |
Anonymous | May 01, 2007 | |
Printed | Page xvii 3rd paragraph under Acknowledgements |
"Michael Boerner" added to the list of technical reviewers thanked. |
Anonymous | May 01, 2007 | |
Printed |
kdb> mm cf26ac0c 0x50 |
-> |
Anonymous | May 01, 2007 | |
Printed |
kdb> mm cf36ac0c 0x50 |
###################################### |
Anonymous | May 01, 2007 | |
Printed | Page back cover 3rd paragraph |
".. been competely updated for Version 2.6.10 .." |
Anonymous | Jan 01, 2010 | |
Printed | Page 7 last paragraph |
...I2O drivers. |
Anonymous | May 01, 2007 | |
Printed | Page 17 code output |
Goodbye cruel world |
Anonymous | May 01, 2007 | |
Printed | Page 26 Last sentence |
"This header file, automatically included by linux/module.h, defines the following macros:" |
Anonymous | Mar 01, 2006 | |
Printed | Page 29 third line from bottom of page |
executible |
Anonymous | May 01, 2007 | |
Printed | Page 32 3rd paragraph, last sentence |
...necessary to enable to kernel... |
Anonymous | May 01, 2007 | |
Printed | Page 34 last paragraph (the code example) |
"if (!item2 || !item2)" |
Anonymous | Mar 01, 2006 | |
Printed | Page 37 second paragraph |
The parameter "num" in module_param_array(name,type,num,perm) is actually a "pointer to a integer variable". Change the name of the parameter to "nump" to avoid the confusion. Also, the two mentions of "num" in the following paragraph should be changed to "nump." |
Anonymous | Jan 01, 2010 | |
Printed | Page 41 Two first lines |
Add the MODULE_LICENSE macro to the MODULE_XXX list. Note from the Author or Editor: |
Anonymous | Jan 01, 2010 | |
Printed | Page 41 1st definition, last sentence |
"The second form exports without using versioning information, and the third |
Anonymous | Jan 01, 2010 | |
Printed | Page 41 middle |
The following entries already appear earlier in the same list on p.39 (Quick Ref. for |
Anonymous | Jan 01, 2010 | |
Printed | Page 45 Middle of page, 5th paragraph |
"dynamicly" |
Anonymous | Mar 01, 2006 | |
Printed | Page 45 6th paragraph, last sentence |
"The count and name parameters work like those given to request_chrdev_region." |
Anonymous | Mar 01, 2006 | |
Printed | Page 47 The script scull_load |
major=$(awk "\$2=="module$" {print \$1}" /proc/devices) |
Anonymous | Mar 01, 2006 | |
Printed | Page 54 2nd Definition (f_flags) |
In parentheses the sentence says 'we discuss nonblocking I/O in the section "Blocking |
Anonymous | Jan 01, 2010 | |
Printed | Page 58 3rd to last paragraph, 1st line |
"This macro takes a pointer to a field of type container_field..." |
Anonymous | Mar 01, 2006 | |
Printed | Page 61 Last paragraph |
"In scull, each device is a linked list of pointers, each of which points to a |
Anonymous | Mar 01, 2006 | |
Printed | Page 62 1st paragraph, 2nd line |
"12,000 thousand bytes" |
Anonymous | Mar 01, 2006 | |
Printed | Page 62 2nd paragraph, 4th line |
The phrase "charge in" at end of line HAS BEEN REMOVED. |
Anonymous | Mar 01, 2006 | |
Printed | Page 64 1st normal paragraph |
...in the section "Using the ioctl Argument" in Chapter 1... |
Anonymous | Jan 01, 2010 | |
Printed | Page 67 code listing for scull_read(), 3rd line of body |
The assignments to 'quantum' and 'qset' should be protected by a Note from the Author or Editor: |
Anonymous | Jan 01, 2010 | |
Page 69 2nd paragraph of readv and writev |
'. . . is achieved by . . .' not '. . . is acheived by . . .' |
Anonymous | Nov 19, 2008 | ||
Printed | Page 82 Second section, first paragraph |
...associated withp the hardware... |
Anonymous | May 01, 2007 | |
Printed | Page 90 Last paragraph |
ioctl, which we show you how to use in Chapter 1, is ... |
Anonymous | Jan 01, 2010 | |
Printed | Page 103 3rd code snippet, 1st line |
Anonymous | May 01, 2007 | ||
Printed | Page 109 Last paragraph, 2nd sentence |
...any further processes... |
Anonymous | May 01, 2007 | |
Printed | Page 114 Completions section, first paragraph, 4th line |
It such cases... |
Anonymous | May 01, 2007 | |
Printed | Page 119 2nd paragraph under "The Spinlock Functions" heading |
"There are actually four functions that can lock a spinlock:" |
Anonymous | Mar 01, 2006 | |
Printed | Page 125 First paragraph |
But a full locking regime seems like over- |
Anonymous | May 01, 2007 | |
Printed | Page 142 last line |
" 'Type' is user-oriented" NOW READS " 'direction' is user-oriented". |
Anonymous | Mar 01, 2006 | |
Printed | Page 149 Third paragraph |
dynamicly |
Anonymous | May 01, 2007 | |
Printed | Page 158 Last comment in code block at the top of the page |
explained late in chapter 5 |
Anonymous | May 01, 2007 | |
Printed | Page 163 first paragraph, line 2 |
...each allow a process... |
Anonymous | May 01, 2007 | |
Printed | Page 163 Last line (above footnote) |
void poll_wait (struct file *, wait_queue_head_t *, poll_table *); |
Anonymous | May 01, 2007 | |
Printed | Page 181 mid-page, 1st argument in all 7 wake_up_*() function prototypes |
"struct wait_queue **q" |
Anonymous | Mar 01, 2006 | |
Printed | Page 191 4th paragraph, 2nd sentence |
"...and lines are guaranteed to be 20 bytes each." |
Anonymous | Mar 01, 2006 | |
Printed | Page 191 small paragraph next to bear trap icon, last sentence |
"...freezes the computer for 205 seconds." |
Anonymous | Mar 01, 2006 | |
Printed | Page 191 last paragraph, 1st sentence |
"The suggested command to read /proc/jitbusy is dd bs=20 < /proc/jitbusy,." |
Anonymous | Mar 01, 2006 | |
Printed | Page 191 last paragraph, 2nd sentence |
"Each 20-byte line returned by the file represents the value the jiffy counter |
Anonymous | Mar 01, 2006 | |
Printed | Page 191 computer printout at bottom of page |
phon% dd bs=20 count=5 < /proc/jitbusy |
Anonymous | May 01, 2007 | |
Printed | Page 192 computer printout at top of page |
phon% dd bs=20 count=5 < /proc/jitbusy |
Anonymous | May 01, 2007 | |
Printed | Page 192 computer printout in middle of page |
phon% dd bs=20 count=5 < /proc/jitbusy |
Anonymous | May 01, 2007 | |
Printed | Page 193 2nd line below the code snippet |
However, is still isn't optimal |
Anonymous | Sep 10, 2008 | |
Printed | Page 193 computer printout in middle of page |
phon% dd bs=20 count=5 < /proc/jitsched |
Anonymous | May 01, 2007 | |
Printed | Page 194 2nd paragraph |
Text states that the return value of wait_event_timeout and wait_event_interruptible timeout |
Anonymous | ||
Printed | Page 194 computer printout in middle of page |
phon% dd bs=20 count=5 < /proc/jitqueue |
Anonymous | May 01, 2007 | |
Printed | Page 196 3rd paragraph from bottom, 1st sentence |
The first two functions puts the calling process to sleep... |
Anonymous | May 01, 2007 | |
Printed | Page 197 4th paragraph |
... in the section "Spinlocks and Atomic Context" in Chapter 1, ... |
Anonymous | Jul 01, 2009 | |
Printed | Page 198 5th paragraph |
...(discussed in the section "Atomic Variables" in Chapter 1)... |
Anonymous | Jan 01, 2010 | |
Printed | Page 199 First paragraph, second line |
iteslf |
Anonymous | May 01, 2007 | |
Printed | Page 203 The last feature of tasklets |
A tasklets can be ... |
Anonymous | Sep 11, 2008 | |
Printed | Page 206 paragraph near top beginning with "Either one..." |
The return-value from these functions is 0 if the work was successfully |
Anonymous | May 01, 2007 | |
Printed | Page 209 2nd code block |
rdtscll(var32) |
Anonymous | May 01, 2007 | |
Printed | Page 215 paragraph under _GFP_COLD |
"Chapter 1" |
Anonymous | Jan 01, 2010 | |
Printed | Page 216 3rd paragraph |
"Chapter 1" |
Anonymous | Jan 01, 2010 | |
Printed | Page 230 paragraph under Obtaining Large Buffers |
"Chapter 1" |
Anonymous | Jan 01, 2010 | |
Printed | Page 241 Last paragraph, third line down |
... I/O port or the same size |
Anonymous | May 01, 2007 | |
Printed | Page 242 Sixth line of first paragraph under section "Pausing I/O" |
out b |
Anonymous | May 01, 2007 | |
Printed | Page 249 2nd para,2nd line |
When access passes though page tables... |
Anonymous | May 01, 2007 | |
Printed | Page 250 First line on page |
"vmalloc and Friends" in Chapter 1. |
Anonymous | Jan 01, 2010 | |
Printed | Page 251 First paragraph, first sentence |
These functions read or write count values from the given buf to the given addr. |
Anonymous | May 01, 2007 | |
Printed | Page 251 2nd Paragraph |
perform all I/O |
Anonymous | May 01, 2007 | |
Printed | Page 254 2nd code block |
iowrite8 |
Anonymous | May 01, 2007 | |
Printed | Page 257 First ten lines |
unsigned readb(address); |
Anonymous | May 01, 2007 | |
Printed | Page 262 halfway down page |
root@montalcino:/bike/corbet/write/ldd3/src/short# m /proc/interrupts |
Anonymous | May 01, 2007 | |
Printed | Page 270 5th line from the bottom |
By taking care to prevent in inconsistent value... |
Anonymous | May 01, 2007 | |
Printed | Page 271 Code for short_i_read() function, 7th line from end of function |
count0 = short_buffer + PAGE_SIZE - short_tail; |
Anonymous | May 01, 2007 | |
Printed | Page 274 11th line from bottom |
Note that flags is passed directly, not by pointer. |
Anonymous | May 01, 2007 | |
Printed | Page 275 2nd Paragraph from End (Under "Top and Bottom Halves" |
The alternative to tasklets is workqueues, which may have a higher latency |
Anonymous | May 01, 2007 | |
Printed | Page 276 last paragraph example |
There is a synchronization mistake in example shown after: |
Anonymous | ||
Printed | Page 276 2nd paragraph, 2nd sentence |
Therefore, an interrupt handler can be secure that... |
Anonymous | May 01, 2007 | |
Printed | Page 281 2nd paragraph |
"IRQ 5 is used for the serial ATA and IEEE 1394 controllers;" |
Anonymous | Jan 01, 2010 | |
Printed | Page 289 Near top of page, 3rd line of computer output |
i686 |
Anonymous | May 01, 2007 | |
Printed | Page 293 2nd last paragraph |
le16_to_cpus does not do "signed" conversion but "in situ" conversion. See kernel |
Anonymous | ||
Printed | Page 298 Both versions of the todo_add_entry() function, last line |
list_add_tail(&new->list, &todo_struct); |
Anonymous | May 01, 2007 | |
Printed | Page 308 Figure 12-2, top row of registers |
The Class Code register should be shaded, to indicate that it is |
Anonymous | ||
Printed | Page 309 15th line from bottom |
The class register is a 16-bit value... |
Anonymous | May 01, 2007 | |
Printed | Page 310 last sentence under the paragraph headed by "__u32 class_mask;" |
If a driver can handle any subsystem ID, the value PCI_ANY_ID should be used |
Anonymous | May 01, 2007 | |
Printed | Page 326 2/3 way down page, the pci_write_config_*() function prototypes |
int pci_write_config_byte (struct pci_dev *dev, int where, u8 *val); |
Anonymous | May 01, 2007 | |
Printed | Page 342 1st paragraph under Interrupt urbs |
"sent to a interrupt endpoint of a USB device:" |
Anonymous | Jan 01, 2010 | |
Printed | Page 343 Last paragraph under "Bulk urbs" |
The usb_fill_int_urb function does not set the transfer_flags... |
Anonymous | May 01, 2007 | |
Printed | Page 345 2nd line |
This value should be used if the driver is in the block I/O patch. |
Anonymous | May 01, 2007 | |
Printed | Page 349 last paragraph, 2nd sentence |
This is done with a call to usb_deregister_driver. |
Anonymous | May 01, 2007 | |
Printed | Page 355 last paragraph, line 3 |
Remember that the urb callback is running in interrupt context, so it should |
Anonymous | May 01, 2007 | |
Printed | Page 366 2nd paragraph from bottom |
A successful call to kobject_get increments the kobject's reference counter and |
Anonymous | May 01, 2007 | |
Printed | Page 369 Last paragraph (above bullets) |
...their parent's fields |
Anonymous | May 01, 2007 | |
Printed | Page 376 2nd Paragraph under "Hotplug Operations" |
...the kernel searchs up through... |
Anonymous | May 01, 2007 | |
Printed | Page 383 last code example |
#define to_ldd_device(dev) container_of(dev, struct ldd_device, dev) |
Anonymous | May 01, 2007 | |
Printed | Page 388 "The class_simple Interface", entire section |
The class_simple interface is no longer present in kernels from 2.6.13 on. All |
Anonymous | ||
Printed | Page 388 Third paragraph in "The class_simple interface" |
"Chapter 1" |
Anonymous | Jan 01, 2010 | |
Printed | Page 396 1st paragraph under "Add a Driver", 5th line |
structdevice_driver |
Anonymous | May 01, 2007 | |
Printed | Page 415 3rd paragraph, 4th line |
If you discard the offset and shift the rest of an offset to the right... |
Anonymous | May 01, 2007 | |
Printed | Page 416 Second paragraph |
...while not breaking 32-bit application and the... |
Anonymous | May 01, 2007 | |
Printed | Page 416,418 Bottom (by page number) |
The Chapter information at bottom of page is incorrect. |
Anonymous | Jan 01, 2010 | |
Printed | Page 418 2nd paragraph: kunmap |
a limited number of such mappings is available, |
Anonymous | May 01, 2007 | |
Printed | Page 419 Paragraph starting "The memory areas" |
by looking in /proc/<pid/maps> |
Anonymous | May 01, 2007 | |
Printed | Page 429 programming example under "Remapping Specific I/O Regions" |
unsigned long physical = simple_region_start + off; |
Anonymous | May 01, 2007 | |
Printed | Page 429 same example |
remap_pfn_range(vma, vma_>vm_start, physical, vsize, vma->vm_page_prot); |
Anonymous | May 01, 2007 | |
Printed | Page 442 Third paragraph |
arrises |
Anonymous | May 01, 2007 | |
Printed | Page 449 1st paragraph after bullets, 2nd sentence from end |
dma_unmap_single |
Anonymous | May 01, 2007 | |
Printed | Page 451 paragraph starting "Your driver should" |
pci_map_sg |
Anonymous | May 01, 2007 | |
Printed | Page 469 2nd & 3rd code fragments |
in second fragment it says -- |
Anonymous | ||
Printed | Page 476 5th line |
sbull_transfer(dev, req->sector, req->current_nr_sectors, |
Anonymous | May 01, 2007 | |
Printed | Page 476 3rd Paragraph |
The call to block_fs_request tells us... |
Anonymous | May 01, 2007 | |
Printed | Page 506 1st paragraph under "Hardware Information", 2nd sentence |
...most modern drivers do make use of them... |
Anonymous | May 01, 2007 | |
Printed | Page 516 3rd paragraph from bottom, 2nd sentence |
...it calls the driver's hard_start_transmit method... |
Anonymous | May 01, 2007 | |
Printed | Page 524 Code example, first line |
static void snull_regular_interrupt(int irq, void *dev_id, struct pt_regs *regs) |
Anonymous | May 01, 2007 | |
Printed | Page 524 Code example, last line before the closing "}" |
return; |
Anonymous | May 01, 2007 | |
Printed | Page 539 Code example eighth line from bottom |
/* If there's more addresses... |
Anonymous | May 01, 2007 | |
Printed | Page 548 Last paragraph, 3rd line |
"It it used to register" should be: |
Anonymous | Jan 01, 2010 | |
Printed | Page 549 Second line |
paramater |
Anonymous | May 01, 2007 | |
Printed | Page 556 3rd paragraph of the section "Flow of Data" |
This paragraph says that I cannot call copy_from_user, kmalloc, and |
Anonymous | ||
Printed | Page 561 Last paragraph, 1st sentence |
There are a two basic types of... |
Anonymous | May 01, 2007 | |
Printed | Page 575 In the appendix, third paragraph |
Deleted the second sentence, beginning "The program called repatch..." |
Anonymous | May 01, 2007 | |
Printed | Page 590-592 function listing in index |
One of the very useful things in this book is the function listing in the index. |
Anonymous | ||
Printed | Page 604 index, middle of 2nd column |
The following entries are missing: |
Anonymous | ||
Printed | Page 613 index, top of page |
The following entry is missing: |
Anonymous |