Errata
Submit your own errata for this product.
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 "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
| Version | Location | Description | Submitted By | Corrected |
|---|---|---|---|---|
| Printed | Page back cover 3rd paragraph |
".. been competely updated for Version 2.6.10 .." |
Anonymous | |
| Printed | Page xi last paragraph |
twelth |
Anonymous | May 2007 |
| Printed | Page xiii first para, Greg's introduction |
... but whose kernel had never taken the time to look into. |
Anonymous | May 2007 |
| Printed | Page xiv Second-last paragraph, last sentence |
In Chapters 1 and 1, however... |
Anonymous | May 2007 |
| Printed | Page xvii 3rd paragraph under Acknowledgements |
"Michael Boerner" added to the list of technical reviewers thanked. |
Anonymous | May 2007 |
| Printed | kdb> mm cf26ac0c 0x50 | -> |
Anonymous | May 2007 |
| Printed | kdb> mm cf36ac0c 0x50 | ###################################### |
Anonymous | May 2007 |
| Printed | Page 7 last paragraph |
...I2O drivers. |
Anonymous | May 2007 |
| Printed | Page 17 code output |
Goodbye cruel world |
Anonymous | May 2007 |
| Printed | Page 26 Last sentence |
"This header file, automatically included by linux/module.h, defines the following macros:" |
Anonymous | Mar 2006 |
| Printed | Page 29 third line from bottom of page |
executible |
Anonymous | May 2007 |
| Printed | Page 32 3rd paragraph, last sentence |
...necessary to enable to kernel... |
Anonymous | May 2007 |
| Printed | Page 34 last paragraph (the code example) |
"if (!item2 || !item2)" |
Anonymous | Mar 2006 |
| Printed | Page 37 second paragraph |
The parameter "num" in module_param_array(name,type,num,perm) is actually a "pointer |
Anonymous | |
| Printed | Page 41 Two first lines |
Add the MODULE_LICENSE macro to the MODULE_XXX list. |
Anonymous | |
| Printed | Page 41 1st definition, last sentence |
"The second form exports without using versioning information, and the third |
Anonymous | |
| Printed | Page 41 middle |
The following entries already appear earlier in the same list on p.39 (Quick Ref. for |
Anonymous | |
| Printed | Page 45 Middle of page, 5th paragraph |
"dynamicly" |
Anonymous | Mar 2006 |
| Printed | Page 45 6th paragraph, last sentence |
"The count and name parameters work like those given to request_chrdev_region." |
Anonymous | Mar 2006 |
| Printed | Page 47 The script scull_load |
major=$(awk "\$2=="module$" {print \$1}" /proc/devices) |
Anonymous | Mar 2006 |
| Printed | Page 54 2nd Definition (f_flags) |
In parentheses the sentence says 'we discuss nonblocking I/O in the section "Blocking |
Anonymous | |
| Printed | Page 58 3rd to last paragraph, 1st line |
"This macro takes a pointer to a field of type container_field..." |
Anonymous | Mar 2006 |
| Printed | Page 61 Last paragraph |
"In scull, each device is a linked list of pointers, each of which points to a |
Anonymous | Mar 2006 |
| Printed | Page 62 1st paragraph, 2nd line |
"12,000 thousand bytes" |
Anonymous | Mar 2006 |
| Printed | Page 62 2nd paragraph, 4th line |
The phrase "charge in" at end of line HAS BEEN REMOVED. |
Anonymous | Mar 2006 |
| Printed | Page 64 1st normal paragraph |
...in the section "Using the ioctl Argument" in Chapter 1... |
Anonymous | |
| Printed | Page 67 code listing for scull_read(), 3rd line of body |
The assignments to 'quantum' and 'qset' should be protected by a |
Anonymous | |
| Printed | Page 82 Second section, first paragraph |
...associated withp the hardware... |
Anonymous | May 2007 |
| Printed | Page 90 Last paragraph |
ioctl, which we show you how to use in Chapter 1, is ... |
Anonymous | |
| Printed | Page 103 3rd code snippet, 1st line |
Anonymous | May 2007 | |
| Printed | Page 109 Last paragraph, 2nd sentence |
...any further processes... |
Anonymous | May 2007 |
| Printed | Page 114 Completions section, first paragraph, 4th line |
It such cases... |
Anonymous | May 2007 |
| Printed | Page 119 2nd paragraph under "The Spinlock Functions" heading |
"There are actually four functions that can lock a spinlock:" |
Anonymous | Mar 2006 |
| Printed | Page 125 First paragraph |
But a full locking regime seems like over- |
Anonymous | May 2007 |
| Printed | Page 142 last line |
" 'Type' is user-oriented" NOW READS " 'direction' is user-oriented". |
Anonymous | Mar 2006 |
| Printed | Page 149 Third paragraph |
dynamicly |
Anonymous | May 2007 |
| Printed | Page 158 Last comment in code block at the top of the page |
explained late in chapter 5 |
Anonymous | May 2007 |
| Printed | Page 163 first paragraph, line 2 |
...each allow a process... |
Anonymous | May 2007 |
| Printed | Page 163 Last line (above footnote) |
void poll_wait (struct file *, wait_queue_head_t *, poll_table *); |
Anonymous | May 2007 |
| Printed | Page 181 mid-page, 1st argument in all 7 wake_up_*() function prototypes |
"struct wait_queue **q" |
Anonymous | Mar 2006 |
| Printed | Page 191 4th paragraph, 2nd sentence |
"...and lines are guaranteed to be 20 bytes each." |
Anonymous | Mar 2006 |
| Printed | Page 191 small paragraph next to bear trap icon, last sentence |
"...freezes the computer for 205 seconds." |
Anonymous | Mar 2006 |
| Printed | Page 191 last paragraph, 1st sentence |
"The suggested command to read /proc/jitbusy is dd bs=20 < /proc/jitbusy,." |
Anonymous | Mar 2006 |
| Printed | Page 191 last paragraph, 2nd sentence |
"Each 20-byte line returned by the file represents the value the jiffy counter |
Anonymous | Mar 2006 |
| Printed | Page 191 computer printout at bottom of page |
phon% dd bs=20 count=5 < /proc/jitbusy |
Anonymous | May 2007 |
| Printed | Page 192 computer printout at top of page |
phon% dd bs=20 count=5 < /proc/jitbusy |
Anonymous | May 2007 |
| Printed | Page 192 computer printout in middle of page |
phon% dd bs=20 count=5 < /proc/jitbusy |
Anonymous | May 2007 |
| Printed | Page 193 computer printout in middle of page |
phon% dd bs=20 count=5 < /proc/jitsched |
Anonymous | May 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 2007 |
| Printed | Page 196 3rd paragraph from bottom, 1st sentence |
The first two functions puts the calling process to sleep... |
Anonymous | May 2007 |
| Printed | Page 197 4th paragraph |
... in the section "Spinlocks and Atomic Context" in Chapter 1, ... |
Anonymous | |
| Printed | Page 198 5th paragraph |
...(discussed in the section "Atomic Variables" in Chapter 1)... |
Anonymous | |
| Printed | Page 199 First paragraph, second line |
iteslf |
Anonymous | May 2007 |
| 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 2007 |
| Printed | Page 209 2nd code block |
rdtscll(var32) |
Anonymous | May 2007 |
| Printed | Page 215 paragraph under _GFP_COLD |
"Chapter 1" |
Anonymous | |
| Printed | Page 216 3rd paragraph |
"Chapter 1" |
Anonymous | |
| Printed | Page 230 paragraph under Obtaining Large Buffers |
"Chapter 1" |
Anonymous | |
| Printed | Page 241 Last paragraph, third line down |
... I/O port or the same size |
Anonymous | May 2007 |
| Printed | Page 242 Sixth line of first paragraph under section "Pausing I/O" |
out b |
Anonymous | May 2007 |
| Printed | Page 249 2nd para,2nd line |
When access passes though page tables... |
Anonymous | May 2007 |
| Printed | Page 250 First line on page |
"vmalloc and Friends" in Chapter 1. |
Anonymous | |
| Printed | Page 251 First paragraph, first sentence |
These functions read or write count values from the given buf to the given addr. |
Anonymous | May 2007 |
| Printed | Page 251 2nd Paragraph |
perform all I/O |
Anonymous | May 2007 |
| Printed | Page 254 2nd code block |
iowrite8 |
Anonymous | May 2007 |
| Printed | Page 257 First ten lines |
unsigned readb(address); |
Anonymous | May 2007 |
| Printed | Page 262 halfway down page |
root@montalcino:/bike/corbet/write/ldd3/src/short# m /proc/interrupts |
Anonymous | May 2007 |
| Printed | Page 270 5th line from the bottom |
By taking care to prevent in inconsistent value... |
Anonymous | May 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 2007 |
| Printed | Page 274 11th line from bottom |
Note that flags is passed directly, not by pointer. |
Anonymous | May 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 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 2007 |
| Printed | Page 281 2nd paragraph |
"IRQ 5 is used for the serial ATA and IEEE 1394 controllers;" |
Anonymous | |
| Printed | Page 289 Near top of page, 3rd line of computer output |
i686 |
Anonymous | May 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 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 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 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 2007 |
| Printed | Page 342 1st paragraph under Interrupt urbs |
"sent to a interrupt endpoint of a USB device:" |
Anonymous | |
| Printed | Page 343 Last paragraph under "Bulk urbs" |
The usb_fill_int_urb function does not set the transfer_flags... |
Anonymous | May 2007 |
| Printed | Page 345 2nd line |
This value should be used if the driver is in the block I/O patch. |
Anonymous | May 2007 |
| Printed | Page 349 last paragraph, 2nd sentence |
This is done with a call to usb_deregister_driver. |
Anonymous | May 2007 |
| Printed | Page 355 last paragraph, line 3 |
Remember that the urb callback is running in interrupt context, so it should |
Anonymous | May 2007 |
| Printed | Page 366 2nd paragraph from bottom |
A successful call to kobject_get increments the kobject's reference counter and |
Anonymous | May 2007 |
| Printed | Page 369 Last paragraph (above bullets) |
...their parent's fields |
Anonymous | May 2007 |
| Printed | Page 376 2nd Paragraph under "Hotplug Operations" |
...the kernel searchs up through... |
Anonymous | May 2007 |
| Printed | Page 383 last code example |
#define to_ldd_device(dev) container_of(dev, struct ldd_device, dev) |
Anonymous | May 2007 |
| Printed | Page 388 Third paragraph in "The class_simple interface" |
"Chapter 1" |
Anonymous | |
| 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 396 1st paragraph under "Add a Driver", 5th line |
structdevice_driver |
Anonymous | May 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 2007 |
| Printed | Page 416,418 Bottom (by page number) |
The Chapter information at bottom of page is incorrect. |
Anonymous | |
| Printed | Page 416 Second paragraph |
...while not breaking 32-bit application and the... |
Anonymous | May 2007 |
| Printed | Page 418 2nd paragraph: kunmap |
a limited number of such mappings is available, |
Anonymous | May 2007 |
| Printed | Page 419 Paragraph starting "The memory areas" |
by looking in /proc/<pid/maps> |
Anonymous | May 2007 |
| Printed | Page 429 programming example under "Remapping Specific I/O Regions" |
unsigned long physical = simple_region_start + off; |
Anonymous | May 2007 |
| Printed | Page 429 same example |
remap_pfn_range(vma, vma_>vm_start, physical, vsize, vma->vm_page_prot); |
Anonymous | May 2007 |
| Printed | Page 442 Third paragraph |
arrises |
Anonymous | May 2007 |
| Printed | Page 449 1st paragraph after bullets, 2nd sentence from end |
dma_unmap_single |
Anonymous | May 2007 |
| Printed | Page 451 paragraph starting "Your driver should" |
pci_map_sg |
Anonymous | May 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 2007 |
| Printed | Page 476 3rd Paragraph |
The call to block_fs_request tells us... |
Anonymous | May 2007 |
| Printed | Page 506 1st paragraph under "Hardware Information", 2nd sentence |
...most modern drivers do make use of them... |
Anonymous | May 2007 |
| Printed | Page 516 3rd paragraph from bottom, 2nd sentence |
...it calls the driver's hard_start_transmit method... |
Anonymous | May 2007 |
| Printed | Page 524 Code example, first line |
static void snull_regular_interrupt(int irq, void *dev_id, struct pt_regs *regs) |
Anonymous | May 2007 |
| Printed | Page 524 Code example, last line before the closing "}" |
return; |
Anonymous | May 2007 |
| Printed | Page 539 Code example eighth line from bottom |
/* If there's more addresses... |
Anonymous | May 2007 |
| Printed | Page 548 Last paragraph, 3rd line |
"It it used to register" should be: |
Anonymous | |
| Printed | Page 549 Second line |
paramater |
Anonymous | May 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 2007 |
| Printed | Page 575 In the appendix, third paragraph |
Deleted the second sentence, beginning "The program called repatch..." |
Anonymous | May 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 |
