| Summary: | IDE disk driver ad has defect when doing kernel dump using reboot -d on large memory system | ||||||
|---|---|---|---|---|---|---|---|
| Product: | Base System | Reporter: | twatson <twatson> | ||||
| Component: | kern | Assignee: | Søren Schmidt <sos> | ||||
| Status: | Closed FIXED | ||||||
| Severity: | Affects Only Me | ||||||
| Priority: | Normal | ||||||
| Version: | Unspecified | ||||||
| Hardware: | Any | ||||||
| OS: | Any | ||||||
| Attachments: |
|
||||||
Responsible Changed From-To: freebsd-bugs->sos Soren is Mr. ATA State Changed From-To: open->closed fixed in 4.2 |
The function addump in file ata-disk.c is called with interrupts off to do a crashdump. This function calls ad_transfer to transfer a page size chunk. Ad_transfer calls timeout if panicstr is NULL. Not all dump situations result from a panic, e.g. "reboot -d", meaning panicstr isn't always NULL when doing a dump. The timeouts are never cleared by the interrupt handler since interrupts are disabled. Consequently, on large memory machines, the timeout table overflows and you panic during the crashdump with panic("timeout table full"). Fix: I changed the ata-disk.c driver as follows (calling untimeout in addump): How-To-Repeat: Do a "reboot -d" with crash dumps configured on a 256 MB. machine with IDE swap device.