Hardware Environment: Intel Celeron 2.8GHz CPU, Abit LG-81 motherboard, 512 MB ram, SATA 160GB HDD Software Environment: Debian Sarge installation with the updated kernel and running from an LVM root. Problem Description: The "acpi_operand" allocation in the kernel keeps increasing until memory is exhausted. This happens in all kernels that I have tried, up to and including 2.6.17.13. Steps to reproduce: Boot the system as described above with ACPI enabled. Run the command "cat /proc/slabinfo | grep acpi_operand" and watch the allocation increase. I have tried all the different BIOS for this motherboard and they all have the same problem. DMESG output: mouse:~# dmesg Linux version 2.6.17.13.rwl1 (root@deb1) (gcc version 3.3.5 (Debian 1:3.3.5-13)) #1 Fri Sep 15 20:13:23 BST 2006 BIOS-provided physical RAM map: BIOS-e820: 0000000000000000 - 000000000009f800 (usable) BIOS-e820: 000000000009f800 - 00000000000a0000 (reserved) BIOS-e820: 00000000000f0000 - 0000000000100000 (reserved) BIOS-e820: 0000000000100000 - 000000001f7f0000 (usable) BIOS-e820: 000000001f7f0000 - 000000001f7f3000 (ACPI NVS) BIOS-e820: 000000001f7f3000 - 000000001f800000 (ACPI data) BIOS-e820: 00000000e0000000 - 00000000f0000000 (reserved) BIOS-e820: 00000000fec00000 - 0000000100000000 (reserved) 0MB HIGHMEM available. 503MB LOWMEM available. found SMP MP-table at 000f5400 On node 0 totalpages: 129008 DMA zone: 4096 pages, LIFO batch:0 Normal zone: 124912 pages, LIFO batch:31 DMI 2.3 present. ACPI: RSDP (v000 IntelR ) @ 0x000f9540 ACPI: RSDT (v001 IntelR AWRDACPI 0x42302e31 AWRD 0x00000000) @ 0x1f7f3040 ACPI: FADT (v001 IntelR AWRDACPI 0x42302e31 AWRD 0x00000000) @ 0x1f7f30c0 ACPI: BOOT (v001 IntelR AWRDACPI 0x42302e31 AWRD 0x00000000) @ 0x1f7f79c0 ACPI: MCFG (v001 IntelR AWRDACPI 0x42302e31 AWRD 0x00000000) @ 0x1f7f7b40 ACPI: MADT (v001 IntelR AWRDACPI 0x42302e31 AWRD 0x00000000) @ 0x1f7f7a40 ACPI: DSDT (v001 INTELR AWRDACPI 0x00001000 MSFT 0x0100000e) @ 0x00000000 ACPI: PM-Timer IO Port: 0x408 ACPI: Local APIC address 0xfee00000 ACPI: LAPIC (acpi_id[0x00] lapic_id[0x00] enabled) Processor #0 15:4 APIC version 20 ACPI: LAPIC (acpi_id[0x01] lapic_id[0x01] disabled) ACPI: LAPIC (acpi_id[0x02] lapic_id[0x02] disabled) ACPI: LAPIC (acpi_id[0x03] lapic_id[0x03] disabled) ACPI: LAPIC_NMI (acpi_id[0x00] high edge lint[0x1]) ACPI: LAPIC_NMI (acpi_id[0x01] high edge lint[0x1]) ACPI: LAPIC_NMI (acpi_id[0x02] high edge lint[0x1]) ACPI: LAPIC_NMI (acpi_id[0x03] high edge lint[0x1]) ACPI: IOAPIC (id[0x04] address[0xfec00000] gsi_base[0]) IOAPIC[0]: apic_id 4, version 32, address 0xfec00000, GSI 0-23 ACPI: INT_SRC_OVR (bus 0 bus_irq 0 global_irq 2 dfl dfl) ACPI: INT_SRC_OVR (bus 0 bus_irq 9 global_irq 9 high level) ACPI: IRQ0 used by override. ACPI: IRQ2 used by override. ACPI: IRQ9 used by override. Enabling APIC mode: Flat. Using 1 I/O APICs Using ACPI (MADT) for SMP configuration information Allocating PCI resources starting at 20000000 (gap: 1f800000:c0800000) Built 1 zonelists Kernel command line: root=/dev/mapper/clientstore-root ro mapped APIC to ffffd000 (fee00000) mapped IOAPIC to ffffc000 (fec00000) Enabling fast FPU save and restore... done. Enabling unmasked SIMD FPU exception support... done. Initializing CPU#0 PID hash table entries: 2048 (order: 11, 8192 bytes) Detected 2828.444 MHz processor. Using pmtmr for high-res timesource Console: colour VGA+ 80x25 Dentry cache hash table entries: 65536 (order: 6, 262144 bytes) Inode-cache hash table entries: 32768 (order: 5, 131072 bytes) Memory: 503972k/516032k available (1560k kernel code, 11452k reserved, 599k data, 256k init, 0k highmem) Checking if this processor honours the WP bit even in supervisor mode... Ok. Calibrating delay using timer specific routine.. 5663.32 BogoMIPS (lpj=11326652) Security Framework v1.0.0 initialized Mount-cache hash table entries: 512 CPU: After generic identify, caps: bfebfbff 20100000 00000000 00000000 0000651d 00000000 00000001 CPU: After vendor identify, caps: bfebfbff 20100000 00000000 00000000 0000651d 00000000 00000001 monitor/mwait feature present. using mwait in idle threads. CPU: Trace cache: 12K uops, L1 D cache: 16K CPU: L2 cache: 256K CPU: After all inits, caps: bfebfbff 20100000 00000000 00000180 0000651d 00000000 00000001 CPU: Intel(R) Celeron(R) CPU 2.80GHz stepping 09 Checking 'hlt' instruction... OK. SMP alternatives: switching to UP code Freeing SMP alternatives: 0k freed ENABLING IO-APIC IRQs ..TIMER: vector=0x31 apic1=0 pin1=2 apic2=-1 pin2=-1 checking if image is initramfs... it is Freeing initrd memory: 4358k freed NET: Registered protocol family 16 EISA bus registered ACPI: bus type pci registered PCI: Using MMCONFIG Setting up standard PCI resources ACPI: Subsystem revision 20060127 ACPI: Interpreter enabled ACPI: Using IOAPIC for interrupt routing ACPI: PCI Root Bridge [PCI0] (0000:00) PCI: Probing PCI hardware (bus 00) Boot video device is 0000:00:02.0 PCI: Ignoring BAR0-3 of IDE controller 0000:00:1f.1 PCI: Transparent bridge - 0000:00:1e.0 ACPI: PCI Interrupt Routing Table [\_SB_.PCI0._PRT] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.PEX0._PRT] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.HUB0._PRT] ACPI: PCI Interrupt Link [LNKA] (IRQs 3 4 5 7 *10 11) ACPI: PCI Interrupt Link [LNKB] (IRQs 3 4 5 7 10 11) *0, disabled. ACPI: PCI Interrupt Link [LNKC] (IRQs *3 4 5 7 10 11) ACPI: PCI Interrupt Link [LNKD] (IRQs 3 4 5 7 10 *11) ACPI: PCI Interrupt Link [LNKE] (IRQs 3 4 5 7 10 11) *0, disabled. ACPI: PCI Interrupt Link [LNKF] (IRQs 3 4 5 7 10 11) *0, disabled. ACPI: PCI Interrupt Link [LNK0] (IRQs 3 4 5 7 10 11) *0, disabled. ACPI: PCI Interrupt Link [LNK1] (IRQs 3 4 *5 7 10 11) Linux Plug and Play Support v0.97 (c) Adam Belay pnp: PnP ACPI init pnp: PnP ACPI: found 15 devices PCI: Using ACPI for IRQ routing PCI: If a device doesn't work, try "pci=routeirq". If it helps, post a report pnp: 00:0b: ioport range 0x400-0x4bf could not be reserved PCI: Ignore bogus resource 6 [0:0] of 0000:00:02.0 PCI: Bridge: 0000:00:1c.0 IO window: d000-dfff MEM window: fde00000-fdefffff PREFETCH window: fdb00000-fdbfffff PCI: Bridge: 0000:00:1e.0 IO window: e000-efff MEM window: fdd00000-fddfffff PREFETCH window: fdc00000-fdcfffff ACPI: PCI Interrupt 0000:00:1c.0[A] -> GSI 16 (level, low) -> IRQ 169 PCI: Setting latency timer of device 0000:00:1c.0 to 64 PCI: Setting latency timer of device 0000:00:1e.0 to 64 NET: Registered protocol family 2 IP route cache hash table entries: 4096 (order: 2, 16384 bytes) TCP established hash table entries: 16384 (order: 4, 65536 bytes) TCP bind hash table entries: 8192 (order: 3, 32768 bytes) TCP: Hash tables configured (established 16384 bind 8192) TCP reno registered Simple Boot Flag at 0x7f set to 0x1 VFS: Disk quotas dquot_6.5.1 Dquot-cache hash table entries: 1024 (order 0, 4096 bytes) Initializing Cryptographic API io scheduler noop registered io scheduler anticipatory registered (default) io scheduler deadline registered io scheduler cfq registered ACPI: PCI Interrupt 0000:00:1c.0[A] -> GSI 16 (level, low) -> IRQ 169 PCI: Setting latency timer of device 0000:00:1c.0 to 64 assign_interrupt_mode Found MSI capability Allocate Port Service[0000:00:1c.0:pcie00] Allocate Port Service[0000:00:1c.0:pcie02] Allocate Port Service[0000:00:1c.0:pcie03] isapnp: Scanning for PnP cards... isapnp: No Plug & Play device found smapi::smapi_init, ERROR invalid usSmapiID mwave: tp3780i::tp3780I_InitializeBoardData: Error: SMAPI is not available on this machine mwave: mwavedd::mwave_init: Error: Failed to initialize board data mwave: mwavedd::mwave_init: Error: Failed to initialize Serial: 8250/16550 driver $Revision: 1.90 $ 4 ports, IRQ sharing enabled serial8250: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A 00:07: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A FDC 0 is a post-1991 82077 RAMDISK driver initialized: 16 RAM disks of 8192K size 1024 blocksize loop: loaded (max 8 devices) xd: Out of memory. PNP: PS/2 Controller [PNP0303:PS2K,PNP0f13:PS2M] at 0x60,0x64 irq 1,12 serio: i8042 AUX port at 0x60,0x64 irq 12 serio: i8042 KBD port at 0x60,0x64 irq 1 EISA: Probing bus 0 at eisa.0 EISA: Detected 0 cards. TCP bic registered Using IPI Shortcut mode ACPI wakeup devices: PCI0 PEX0 PEX1 PEX2 PEX3 PEX4 PEX5 HUB0 UAR1 USB0 USB1 USB2 USB3 USBE AC97 AZAL ACPI: (supports S0 S3 S4 S5) Freeing unused kernel memory: 256k freed NET: Registered protocol family 1 input: AT Translated Set 2 keyboard as /class/input/input0 ACPI: Fan [FAN] (on) ACPI: Thermal Zone [THRM] (41 C) usbcore: registered new driver usbfs usbcore: registered new driver hub USB Universal Host Controller Interface driver v3.0 ACPI: PCI Interrupt 0000:00:1d.0[A] -> GSI 23 (level, low) -> IRQ 193 PCI: Setting latency timer of device 0000:00:1d.0 to 64 uhci_hcd 0000:00:1d.0: UHCI Host Controller uhci_hcd 0000:00:1d.0: new USB bus registered, assigned bus number 1 uhci_hcd 0000:00:1d.0: irq 193, io base 0x0000fe00 usb usb1: configuration #1 chosen from 1 choice hub 1-0:1.0: USB hub found hub 1-0:1.0: 2 ports detected Uniform Multi-Platform E-IDE driver Revision: 7.00alpha2 ide: Assuming 33MHz system bus speed for PIO modes; override with idebus=xx ACPI: PCI Interrupt 0000:00:1d.1[B] -> GSI 19 (level, low) -> IRQ 201 PCI: Setting latency timer of device 0000:00:1d.1 to 64 uhci_hcd 0000:00:1d.1: UHCI Host Controller uhci_hcd 0000:00:1d.1: new USB bus registered, assigned bus number 2 uhci_hcd 0000:00:1d.1: irq 201, io base 0x0000fd00 usb usb2: configuration #1 chosen from 1 choice hub 2-0:1.0: USB hub found hub 2-0:1.0: 2 ports detected ACPI: PCI Interrupt 0000:00:1d.2[C] -> GSI 18 (level, low) -> IRQ 209 PCI: Setting latency timer of device 0000:00:1d.2 to 64 uhci_hcd 0000:00:1d.2: UHCI Host Controller uhci_hcd 0000:00:1d.2: new USB bus registered, assigned bus number 3 uhci_hcd 0000:00:1d.2: irq 209, io base 0x0000fc00 usb usb3: configuration #1 chosen from 1 choice hub 3-0:1.0: USB hub found hub 3-0:1.0: 2 ports detected ACPI: PCI Interrupt 0000:00:1d.3[D] -> GSI 16 (level, low) -> IRQ 169 PCI: Setting latency timer of device 0000:00:1d.3 to 64 uhci_hcd 0000:00:1d.3: UHCI Host Controller uhci_hcd 0000:00:1d.3: new USB bus registered, assigned bus number 4 uhci_hcd 0000:00:1d.3: irq 169, io base 0x0000fb00 usb usb4: configuration #1 chosen from 1 choice hub 4-0:1.0: USB hub found hub 4-0:1.0: 2 ports detected ACPI: PCI Interrupt 0000:00:1d.7[A] -> GSI 23 (level, low) -> IRQ 193 PCI: Setting latency timer of device 0000:00:1d.7 to 64 ehci_hcd 0000:00:1d.7: EHCI Host Controller ehci_hcd 0000:00:1d.7: new USB bus registered, assigned bus number 5 PCI: cache line size of 128 is not supported by device 0000:00:1d.7 ehci_hcd 0000:00:1d.7: irq 193, io mem 0xfdfff000 ehci_hcd 0000:00:1d.7: USB 2.0 started, EHCI 1.00, driver 10 Dec 2004 usb usb5: configuration #1 chosen from 1 choice hub 5-0:1.0: USB hub found hub 5-0:1.0: 8 ports detected ICH7: IDE controller at PCI slot 0000:00:1f.1 ACPI: PCI Interrupt 0000:00:1f.1[A] -> GSI 18 (level, low) -> IRQ 209 ICH7: chipset revision 1 ICH7: not 100% native mode: will probe irqs later ide0: BM-DMA at 0xfa00-0xfa07, BIOS settings: hda:pio, hdb:pio ide1: BM-DMA at 0xfa08-0xfa0f, BIOS settings: hdc:pio, hdd:pio Probing IDE interface ide0... SCSI subsystem initialized libata version 1.20 loaded. Probing IDE interface ide1... tg3.c:v3.59.1 (August 25, 2006) ACPI: PCI Interrupt 0000:01:00.0[A] -> GSI 16 (level, low) -> IRQ 169 PCI: Setting latency timer of device 0000:01:00.0 to 64 eth0: Tigon3 [partno(BCM95789) rev 4101 PHY(5750)] (PCI Express) 10/100/1000BaseT Ethernet 00:50:8d:7e:80:87 eth0: RXcsums[1] LinkChgREG[0] MIirq[0] ASF[0] Split[0] WireSpeed[1] TSOcap[1] eth0: dma_rwctrl[76180000] dma_mask[64-bit] ata_piix 0000:00:1f.2: version 1.05 ata_piix 0000:00:1f.2: MAP [ P0 P2 P1 P3 ] ACPI: PCI Interrupt 0000:00:1f.2[B] -> GSI 19 (level, low) -> IRQ 201 PCI: Setting latency timer of device 0000:00:1f.2 to 64 ata1: SATA max UDMA/133 cmd 0xF900 ctl 0xF802 bmdma 0xF500 irq 201 ata2: SATA max UDMA/133 cmd 0xF700 ctl 0xF602 bmdma 0xF508 irq 201 ata1: dev 0 cfg 49:2f00 82:346b 83:7d01 84:4023 85:3469 86:3c01 87:4023 88:207f ata1: dev 0 ATA-7, max UDMA/133, 312581808 sectors: LBA48 ata1: dev 0 configured for UDMA/133 scsi0 : ata_piix ata2: SATA port has no device. scsi1 : ata_piix Vendor: ATA Model: ST3160812AS Rev: 3.AA Type: Direct-Access ANSI SCSI revision: 05 SCSI device sda: 312581808 512-byte hdwr sectors (160042 MB) sda: Write Protect is off sda: Mode Sense: 00 3a 00 00 SCSI device sda: drive cache: write back SCSI device sda: 312581808 512-byte hdwr sectors (160042 MB) sda: Write Protect is off sda: Mode Sense: 00 3a 00 00 SCSI device sda: drive cache: write back sda: sda1 sda2 sd 0:0:0:0: Attached scsi disk sda Probing IDE interface ide0... Probing IDE interface ide1... device-mapper: 4.6.0-ioctl (2006-02-17) initialised: dm-devel@redhat.com kjournald starting. Commit interval 5 seconds EXT3-fs: mounted filesystem with ordered data mode. Real Time Clock Driver v1.12ac hw_random hardware driver 1.0.0 loaded Linux agpgart interface v0.101 (c) Dave Jones agpgart: Detected an Intel 945G Chipset. agpgart: Detected 7932K stolen memory. agpgart: AGP aperture is 256M @ 0xd0000000 parport: PnPBIOS parport detected. parport0: PC-style at 0x378, irq 7 [PCSPP,TRISTATE] input: ImExPS/2 Generic Explorer Mouse as /class/input/input1 input: PC Speaker as /class/input/input2 EXT3 FS on dm-0, internal journal md: md driver 0.90.3 MAX_MD_DEVS=256, MD_SB_DISKS=27 md: bitmap version 4.39 kjournald starting. Commit interval 5 seconds EXT3 FS on sda1, internal journal EXT3-fs: mounted filesystem with ordered data mode. ReiserFS: dm-1: found reiserfs format "3.6" with standard journal ReiserFS: dm-1: using ordered data mode ReiserFS: dm-1: journal params: device dm-1, size 8192, journal first block 18, max trans len 1024, max batch 900, max commit age 30, max trans age 30 ReiserFS: dm-1: checking transaction log (dm-1) ReiserFS: dm-1: Using r5 hash to sort names NET: Registered protocol family 17 tg3: eth0: Link is up at 100 Mbps, full duplex. tg3: eth0: Flow control is on for TX and on for RX. tg3: eth0: Link is up at 100 Mbps, full duplex. tg3: eth0: Flow control is on for TX and on for RX. ACPI: Power Button (FF) [PWRF] ACPI: Power Button (CM) [PWRB] NET: Registered protocol family 10 lo: Disabled Privacy Extensions IPv6 over IPv4 tunneling driver ReiserFS: dm-3: found reiserfs format "3.6" with standard journal ReiserFS: dm-3: using ordered data mode ReiserFS: dm-3: journal params: device dm-3, size 8192, journal first block 18, max trans len 1024, max batch 900, max commit age 30, max trans age 30 ReiserFS: dm-3: checking transaction log (dm-3) ReiserFS: dm-3: Using r5 hash to sort names w83627ehf 9191-0290: fan3 low limit and alarm disabled HTB: quantum of class 10001 is big. Consider r2q change. u32 classifier OLD policer on eth0: no IPv6 routers present mouse:~#
Created attachment 9029 [details] DSDT information Result from "cat /proc/acpi/dsdt" > dsdt-bios15.dat
Actually Thermal providing AML code in the DSDT contains a number of places mentioned in the Bug 6514 as provoking memory leak. Let's consider the workaround proposed by the FreeBSD guys. The following updates of the DSDT could avoid memory leak of Bug 6514 kind without the appropriate AML interpreter fix: Method (STOS, 3, NotSerialized) { Store (GBYT (0x4E), Local0) And (Local0, 0xF8, Local1) // Or (Local1, 0x01, Local1) Store (Or (Local1, 0x01), Local1) SBYT (0x4E, Local1) SBYT (0x55, Arg1) SBYT (0x56, Arg0) SBYT (0x4E, Local0) } Method (STHY, 3, NotSerialized) { Store (GBYT (0x4E), Local0) And (Local0, 0xF8, Local1) // Or (Local1, 0x01, Local1) Store (Or (Local1, 0x01), Local1) SBYT (0x4E, Local1) SBYT (0x53, Arg1) SBYT (0x54, Arg0) SBYT (0x4E, Local0) } Method (RTMP, 0, NotSerialized) { Store (GBYT (0x4E), Local0) And (Local0, 0xF8, Local1) // Or (Local1, 0x01, Local1) Store (Or (Local1, 0x01), Local1) SBYT (0x4E, Local1) Store (GBYT (0x50), Local1) Store (GBYT (0x51), Local2) SBYT (0x4E, Local0) ShiftLeft (Local1, 0x08, Local1) Or (Local1, Local2, Local3) ShiftRight (Local3, 0x07, Local3) ShiftLeft (Local3, 0x02, Local1) Add (Local3, Local1, Local3) Add (Local3, 0x0AAC, Local3) If (LGreater (Local3, 0x0E8A)) { Store (0x0AAC, Local3) } Return (Local3) } Method (SBEP, 2, NotSerialized) { Store (GBYT (0x4E), Local0) // And (Local0, 0xF8, Local1) Store (And (Local0, 0xF8), Local1) SBYT (0x4E, Local1) Store (GBYT (0x56), Local1) And (Local1, Arg0, Local1) // Or (Local1, Arg1, Local1) Store (Or (Local1, Arg1), Local1) SBYT (0x56, Local1) SBYT (0x4E, Local0) Return (Local1) } ... Method (RFAN, 0, NotSerialized) { Store (GBYT (0x4E), Local0) // And (Local0, 0xF8, Local1) Store (And (Local0, 0xF8), Local1) SBYT (0x4E, Local1) GBYT (0x41) GBYT (0x42) Store (GBYT (0x43), Local1) Not (Local1, Local1) And (Local1, 0xC0, Local2) Store (GBYT (0x44), Local1) Not (Local1, Local1) And (Local1, 0x08, Local1) Or (Local2, Local1, Local2) Store (GBYT (0x46), Local1) Not (Local1, Local1) And (Local1, 0x06, Local1) Or (Local2, Local1, Local2) And (Local0, 0xF8, Local1) // Or (Local1, 0x04, Local1) Store (Or (Local1, 0x04), Local1) SBYT (0x4E, Local1) Store (GBYT (0x59), Local1) And (Local1, 0xC0, Local3) Store (GBYT (0x5A), Local1) And (Local1, 0x08, Local1) Or (Local1, Local3, Local3) Store (GBYT (0x5A), Local1) And (Local1, 0x04, Local1) ShiftRight (Local1, 0x01, Local1) Or (Local1, Local3, Local3) Store (GBYT (0x5B), Local1) And (Local1, 0x80, Local1) ShiftRight (Local1, 0x06, Local1) Or (Local1, Local3, Local3) And (Local2, Local3, Local2) SBYT (0x4E, Local0) Return (Local2) }
Linux version 2.6.17.13 does not contain the memory leak fix proposed in Bug 6514. It is certainly presented since 2.6.18.rc1
Hi Fiodor, Thanks for all your work tracking this down. I checked the code in the 2.6.17.13 tree and came to the same conclusion about the patch not being there :-) When you say "It is certainly presented since 2.6.18.rc1", do you mean that the patch is applied to the 2.6.18.rc1 Linus kernel release or do you mean that the problem still exists with the code in the 2.6.18.rc1 Linus kernel release? Best regards, Roger
Hi Roger, I meant the patch ;-) Thanks, Fiodor
Hi Fiodor, These DSDT code changes fix the leak. The ACPI works perfectly now with 2.6.17.13. Thank you for all your help on this. BR, Roger
Please verify that 2.6.18-rc7 has no leak -- when running the un-modified DSDT. On the assumption the answer is "yes", closing this as a duplicate of bug 6514, which will surely need to be back-ported to 2.6.17.stable.
*** This bug has been marked as a duplicate of 6514 ***
Bug not present in 2.6.18 with the original DSDT from the BIOS.