Linux 2.6.21-rc4
Subsystems (14)
I pushed out the -git trees yesterday, but then got distracted, so the patches and tar-balls and the announcement got delayed until this morning. Oops. I'm a scatter-brain.
Anyway, the good news about -rc4 is that there's just lots of random fixes. I'm hoping that we've seriously cut down on the regression list, and I'd ask everybody who is on Adrian's list to please re-verify their regression, and in case it's one of the "patches available" ones but I haven't merged (maybe because it hasn't been sent to me!), make sure I do.
Shortlog appended. Nothing really stands out.
Linus
---
Adrian Bunk (2):
[DLM] fs/dlm/user.c should #include "user.h"
asus-laptop: make code static
Adrian Hunter (2):
[MTD] Correct partition failed erase address [MTD] [OneNAND] add Nokia Copyright and a credit
Aji Srinivas (1):
[BRIDGE]: adding new device to bridge should enable if up
Akiyama, Nobuyuki (1):
[IA64] add missing syscall trace clear
Al Viro (31):
fix deadlock in audit_log_task_context()
sanitize security_getprocattr() API
ibmtr probe is __devinit, not __init
const file_operations fallout
appldata build fix
(uml) sparse flags for userland glue are missing $(CF)
zatm __init abuse
stacktrace doesn't work on uml
fix ipath_dma_free_coherent() prototype
m32r dma-mapping.h should simply include generic/dma-mapping-broken.h include of asm/pgtable.h in nfsfh is bogus
BLK_DEV_IDE_CELLEB dependency fix
sparc: have dma-mapping.h include generic/dma-mapping-broken in non-PCI case rtc-cmos needs RTC_ALWAYS_BCD known
misc NULL noise
fastcall still doesn't make sense in paravirt
dmfe trivial endianness annotations
constant should be long
pasemi trivial iomem annotations
sparc: nr_free_pages() is unsigned long
trivial ATA iomem annotations
cciss endian annotations
qeth gfp_t annotations
C99 initializers, proper use of const in drivers/ps3
cifs endianness annotations
hid-core endianness annotations
ANSIfy powerpc floppy.h
atl1 trivial endianness misannotations
kill bogus casts in amd64 uaccess.h
paride endianness annotations
m68k dma-mapping: gfp_t annotations
Alan Cox (4):
[MTD] [MAPS] dilnetpc: Fix printk warning
libata-acpi: Try and stop all the non PCI devices crashing
ata_piix: Remove ugly layering violation
z85230: Fix FIFO handling
Alan Stern (4):
USB: set the correct interval for interrupt URBs
UHCI: fix port resume problem
sysfs and driver core: add callback helper, used by SCSI and S390
sysfs: reinstate exclusion between method calls and attribute unregistration
Alexey Starikovskiy (2):
ACPICA: Fix ACPI Global Lock re-entrancy
ACPI: ec: fix race in status register access
Andre Spahlinger (1):
USB: ipaq.c: Additional devices
Andrew Morton (1):
sony-laptop: fix uninitialised variable
Andrew Nayenko (1):
USB storage: Nokia 6288 unusual_devs entry
Anthony Godshall, Ampro Computers, Inc (1):
ACPI: make blacklist more verbose
Arnd Bergmann (2):
[POWERPC] spufs: fix possible memory corruption is spufs_mem_write [POWERPC] update cell_defconfig
Artem Bityutskiy (1):
[JFFS2] print a message when marking bad block
Benjamin Herrenschmidt (4):
[POWERPC] Fix warning in prom_parse.c of_irq_map_oldworld() [POWERPC] Fix warning in powermac feature.c [POWERPC] Fix warning in powermac pci.c
[POWERPC] Fix spu SLB invalidations
Bernhard Walle (1):
ACPI: Add kernel-parameters hint that acpi=off doesn't work on IA64.
Brice Goglin (4):
myri10ge: fix error checking and return value in myri10ge_allocate_rings
myri10ge: use pci_map_page to prepare the dmatest buffer
myri10ge: prevent 4k rdma on SGI TIOCE chipset
myri10ge: add a wc_enabled flag to myri10ge_priv
Chris Dearman (1):
[MIPS] Oprofile: Reset all performance registers for MIPS_MT_SMP configs
Chris Wright (1):
[IPV6] fix ipv6_getsockopt_sticky copy_to_user leak
Christoph Hellwig (1):
[POWERPC] avoid SPU_ACTIVATE_NOWAKE optimization
Cyrill Gorcunov (2):
[MTD] ESB2 check for closed ROM window
USB Elan FTDI: check for workqueue creation
Dale Farnsworth (1):
mv643xx: Clear pending interrupts before calling request_irq
Dan Williams (1):
[ARM] 4248/1: lh7a40x: fix missing definitions for get_irqnr_preamble
Dave Jones (2):
update 'getting sparse' info.
build fix for i386 earlyquirk.c
David Brownell (1):
USB: at91_udc, fix more modpost bogosity (rename driver struct)
David Miller (1):
RDMA/cxgb3: Fix build on sparc64
David S. Miller (5):
[IPV6]: Handle np->opt being NULL in ipv6_getsockopt_sticky(). [SPARC64]: Fix PARPORT build (again).
[SPARC]: We do not need OLD_GETRLIMIT.
[SPARC]: Hook up missing syscalls.
[SPARC64]: Add missing HPAGE_MASK masks on address parameters.
David Woodhouse (2):
[JFFS2] Use yield() between GC passes in background thread. [JFFS2] Check for all-zero node headers
Davide Libenzi (1):
Add epoll compat_ code to fs/compat.c
Dirk Behme (1):
ARM: OMAP: Fix missing workqueue include in board-h2.c
Dmitriy Monakhov (1):
kobject: new_device->kref wasn't putted after error in kobject_move()
Dmitry Torokhov (1):
Input: i8042 - another attempt to fix AUX delivery checks
Eric Paris (3):
[IPSEC]: xfrm_policy delete security check misplaced [IPSEC]: Add xfrm policy change auditing to pfkey_spdget [IPSEC]: xfrm audit hook misplaced in pfkey_delete and xfrm_del_sa
Eric W. Biederman (2):
msi: Safer state caching.
pci: Repair pci_save/restore_state so we can restore one save many times.
Evgeniy Polyakov (1):
[IPV4]: Fix rtm_to_ifaddr() error handling.
Fenghua Yu (1):
[IA64] fsys_getcpu for IA64
Francois Romieu (2):
r8169: revert bogus BMCR reset
r8169: fix a race between PCI probe and dev_open
Gard Spreemann (1):
USB: Product ID for FT232RL in ftdi_sio
Gary Zambrano (1):
avr32: dma-mapping.h
Geert Uytterhoeven (2):
[POWERPC] ps3: always make sure were running on a PS3 [IPV4]: Fix warning in ip_mc_rejoin_group.
Gerrit Renker (2):
[DCCP]: Revert patch which disables bidirectional mode [DCCP]: Initialise write_xmit_timer also on passive sockets
Greg Kroah-Hartman (2):
Revert "driver core: refcounting fix" Driver core: add device symlink back to sysfs
Haavard Skinnemoen (5):
[AVR32] at32_spi_setup_slaves should be __init [AVR32] show_trace: Only walk valid stack addresses [AVR32] Fix typo in include/asm-avr32/Kbuild [AVR32] Fix bogus ti->flags manipulation in debug handler [AVR32] Don't use kmap() in flush_icache_page()
Henrique de Moraes Holschuh (3):
ACPI: ibm-acpi: fix initial status of backlight device
ACPI: ibm-acpi: make ibm-acpi bay support optional
ACPI: ibm-acpi: improve backlight power handling
Herbert Xu (2):
[UDP]: Reread uh pointer after pskb_trim [IPV6]: Do not set IF_READY if device is down
Hideo Saito (1):
sh: Fix kernel thread stack corruption with preempt.
Hoang-Nam Nguyen (1):
IB/ehca: Fix sync between completion handler and destroy cq
Horms (3):
[IA64] remove duplicate declaration of efi_initialize_iomem_resources [IA64] whitespace fixes for include/asm-ia64/sal.h
[IA64] put kdump_find_rsvd_region in __init
Ingo Molnar (1):
CPU hotplug: call check_tsc_sync_source() with irqs off
Ishizaki Kou (1):
[POWERPC] Celleb: bug fix caused by not casting pointer types
Jarek Poplawski (1):
[SCTP] ipv6: inconsistent lock state ipv6_add_addr/sctp_v6_copy_addrlist
Jeff Dike (1):
uml: arch_prctl should set thread fs
Jim Radford (2):
usb-serial: fix shutdown / device_unregister order
USB: ftdi_sio: use port_probe / port_remove thereby fixing access to the latency_timer
Jiri Kosina (3):
bluetooth: fix socket locking in hci_sock_dev_event()
HID: allocate hid_parser in a proper way
HID: zeroing of bytes in output fields is bogus
Joel Becker (4):
ocfs2: Proper cleanup in case of error in ocfs2_register_hb_callbacks()
ocfs2: Concurrent access of o2hb_region->hr_task was not locked
ocfs2: add some missing address space callbacks
configfs: add missing mutex_unlock()
Joerg Sommer (1):
bcm43xx: Fix bug in frequency to channel conversion
Johannes Berg (1):
driver core: export device_rename
John Keller (2):
ACPI: Altix: cannot register acpi bus driver before bus scan
ACPI: Altix: reinitialize acpi tables
Jon K Hellan (1):
USB: New device IDs for cp2101 driver
Josef Whiter (2):
[GFS2] fix locking mistake
[GFS2] fix hangup when multiple processes are trying to write to the same file
Joy Latten (1):
[XFRM]: Fix missing protocol comparison of larval SAs.
Julius Volz (1):
ACPI: video: Fix spelling and grammar mistakes
Jörn Engel (1):
Remove devfs from MAINTAINERS
KAMEZAWA Hiroyuki (1):
[IA64] fix NULL pointer in ia64/irq_chip-mask/unmask function
Keith Owens (1):
[IA64] Remove sparse warning from unwind code
Konstantin Karasyov (2):
ACPI: fix S3 fan resume issue
ACPI: ThinkPad Z60m: usb mouse stops working after suspend to RAM
Kristen Accardi (1):
libata-acpi: allow _GTF on SATA, but disable on PATA for now
Kumar Gala (1):
[POWERPC] 85xx: Enable CONFIG_SERIAL_8250_SHARE_IRQ
Kyungmin Park (4):
[MTD] [OneNAND] Use oob buffer instead of main one in oob functions [MTD] [OneNAND] Fix typo & wrong comments
[MTD] [OneNAND] Exit the loop when transferring/filling of the oob is finished [MTD] [OneNAND] Classify the page data and oob buffer
Larry Finger (1):
bcm43xx: Fix errors in specs to code translation in B6PHY init
Len Brown (3):
ACPI: fix Thinkpad 600/600E/600X interrupts
ACPI: repair nvidia early quirk breakage on x86_64
ACPI: repair nvidia early quirk breakage on x86_64
Li Yang (1):
[POWERPC] 83xx: Minor fixes for 834x_mds USB setup code
Linsys Contractor Mithlesh Thukral (2):
NetXen: Bug fix for Jumbo frames on XG card
NetXen: Fix softlockup seen during hardware access
Linus Torvalds (3):
Revert "USB: pxa2xx_udc: fix hardcoded irq number" Disable NMI watchdog by default properly Linux 2.6.21-rc4
Martin Schiller (1):
USB: RTS/DTR signal patch for airprime driver
Mathieu Desnoyers (1):
[SPARC64]: Fix atomicity of TIF update in flush_thread()
Max Dmitrichenko (1):
USB: fix Unaligned access in EHCI driver
Michael Ellerman (1):
[POWERPC] Add missing newline in xmon help output
Michael Karcher (1):
ACPI: fix parallel port IRQ after resume from S3
Michael Olberg (1):
USB: add QL355P power supply ids to fdti_sio
Milan Svoboda (2):
USB: pxa2xx_udc: fix hardcoded irq number [ARM] 4263/1: fix IXP4XX_NPE[ABC]_BASE_VIRT address
Olaf Kirch (1):
[IPV6]: Fix for ipv6_setsockopt NULL dereference
Oliver Neukum (5):
USB: ratelimit debounce error messages
USB: kill dead code from hub.c
USB: fix usb-serial device naming bug
USB: further fix for usb-serial
USB: fix spinlock recursion in cdc-acm.c
Olof Johansson (1):
[POWERPC] No DEEPNAP on 970MP 1.0
Paolo 'Blaisorblade' Giarrusso (9):
uml: hostfs: fix double free
uml: hostfs: make hostfs= option work as a jail, as intended.
um: fix a memory leak in the multicast driver
um: remove dead code about os_usr1_signal() and os_usr1_process()
um: mark both consoles as CON_ANYTIME
um: fix confusion irq early reenabling
uml: activate_fd: return ENOMEM only when appropriate
um: fix errno usage
x86_64: fix 2.6.18 regression - PTRACE_OLDSETOPTIONS should be accepted
Pat Gefre (1):
2.6 Altix: console fix for CONFIG_DEBUG_SHIRQ usage
Patrick McHardy (3):
[NETFILTER]: nf_conntrack_ipv6: fix incorrect classification of IPv6 fragments as ESTABLISHED [NETFILTER]: nfnetlink_log: zero-terminate prefix
[NETFILTER]: nfnetlink_log: fix crash on bridged packet
Paul Moore (1):
[NetLabel]: parse the CIPSO ranged tag on incoming packets
Paul Mundt (6):
doc: Add SH to vdso and earlyprintk in kernel-parameters.txt
sysctl: Support vdso_enabled sysctl on SH.
sh: Use L1_CACHE_BYTES for .data.cacheline_aligned.
sh: Enable SM501 support for RTS7751R2D.
sh: Revert lazy dcache writeback changes.
sh: Kill off I/O cruft for R7780RP.
Pavel Pisa (3):
[ARM] 4254/1: i.MX/MX1 CPU Frequency scaling honor boot loader set BCLK_DIV. [ARM] 4255/1: i.MX/MX1 Correct MPU PLL reference clock value. [ARM] 4256/1: i.MX/MX1 SDHC fix/workaround of SD card recognition problems
Pavel Roskin (1):
bcm43xx: Fix assertion failures in interrupt handler
Peter Zijlstra (1):
ecryptfs: nested locking annotation
Petr Vandrovec (1):
Fix simplex adapters with libata
Phil Dibowitz (1):
USB storage: Removed duplicate supertop unusual_dev entry
Philipp Reisner (1):
[CONNECTOR]: Bugfix for cn_call_callback()
Ralf Baechle (14):
[CHAR] ds1286: Fix handling of seconds in RTC_ALM_SET ioctl. [MIPS] ISA: Fix typo
[MIPS] ARC: Fix several compiler warnings.
[MIPS] DEC: Remove call to register_prom_console.
netxen: fix warnings
3c59x: Fix several modpost warnings
ibmtr: Drain rich supply of modpost warnings.
[MIPS] Sibyte: Do not allow enabling LDT support if PCI is disabled. [MIPS] Sibyte: Fix ZBbus profiler
USB: goku_udc: Remove crude cache coherency code
[ROSE]: Remove ourselves from waitqueue when receiving a signal [ROSE]: Socket locking is a great invention.
[MIPS] Viper2: Remove defective support.
[MIPS] kspd: ioctl needs a translation entry.
Richard Fearn (1):
[GFS2] add newline to printk message
Richard Purdie (3):
[ARM] 4249/1: Fix tosa compile failure
[ARM] 4250/1: Fix locomo backlight conversion error/compile failure [ARM] 4251/1: Fix sharpsl_pm dependency
Richard Woodruff (1):
ARM: OMAP: Fix OMAP2 dss2 so clk_set_parent works
Robert Hancock (1):
sata_nv: revert use of notifiers for now
Robert P. J. Day (3):
[MTD] [NAND] Correct misspelled preprocessor variable.
ACPI: Kconfig: hide ACPI menu when CONFIG_PM=n
[WANROUTER]: Delete superfluous source file "net/wanrouter/af_wanpipe.c".
Robert Reif (2):
[CG14]: Fix section mismatch warnings.
[BW2]: Fix section mismatch warnings.
Roger Luethi (1):
via-rhine: set avoid_D3 for broken BIOSes
Roland Dreier (2):
IPoIB: Only handle async events for one port IB/mthca: Fix error path in mthca_alloc_memfree()
Russ Anderson (2):
[IA64] Proper handling of TLB errors from duplicate itr.d dropins [IA64] Cache error recovery
Ryusuke Sakato (1):
sh: Fix sigmask trampling in signal delivery.
Sam Ravnborg (3):
pcie: fix section mismatch warning
PCI: aer: fix section mismatch warning
pci: fix section mismatch warning
Sean Hefty (2):
RDMA/cma: Initialize rdma_bind_list in cma_alloc_any_port() RDMA/ucma: Avoid sending reject if backlog is full
Segher Boessenkool (1):
[POWERPC] Select u-image as default image for Linkstation
Shaohua Li (1):
ACPI: fix boot hang w/o "noapic" on MSI MS-6390-L
Shirley Ma (1):
IPoIB: Turn on interface's carrier after broadcast group is joined
Simon Horman (2):
[IA64] kexec: declare ia64_mca_pal_base in mca.h rather than kexec.h [IA64] Cleanup in crash.c
Stephen Hemminger (2):
sky2: turn off Rx checksum on bad hardware
skge: set mac address bonding fix
Stephen Rothwell (3):
[POWERPC] Allocate syscall number for sys_getcpu [POWERPC] Wire up sys_epoll_pwait
[POWERPC] sys_move_pages should be callable from an SPU
Steve Wise (8):
RDMA/cxgb3: Start ep timer on a MPA reject RDMA/cxgb3: Don't use mm after it's freed in iwch_mmap() RDMA/cxgb3: Fixes for "normal close" failures RDMA/cxgb3: Move QP to error on destroy if the state is IDLE RDMA/cxgb3: Stop EP timer when MPA exchange is aborted by peer RDMA/cxgb3: Squelch logging AE errors
RDMA/cxgb3: Don't reuse skbs that are non-linear or cloned RDMA/cxgb3: Fix MR permission problems
Steven Whitehouse (5):
[GFS2] Fix bz 230143, incorrect flushing of rgrps
[GFS2] Fix bz 229831, lookup returns wrong inode
[GFS2] Remove unused variable
[GFS2] go_drop_bh is never used, so remove it
[GFS2] Fix bz 229873, alternate test: assertion "!ip->i_inode.i_mapping->nrpages" failed
Stuart Menefy (1):
sh: Clear UBC when not in use.
Sunil Mushran (2):
ocfs2_dlm: Missing get/put lockres in dlm_run_purge_lockres
ocfs2_dlm: Add missing locks in dlm_empty_lockres
Tejun Heo (3):
libata: fix ata_host_release() free order
devres: release resources on device_del()
PCI: allow multiple calls to pcim_pin_device()
Thomas Schleusener (1):
USB: add Additional PIDs in ftdi_sio
Tony Lindgren (1):
ARM: OMAP: Include missing header
Tony Luck (2):
[IA64] Pick highest possible saved_max_pfn for crash_dump [IA64] refresh config files
Uwe Kleine-König (1):
[ARM] 4247/1: Fix long name for cc9p9360dev
Vijay Sampath (1):
[MTD] [NOR] Fix oops in cfi_amdstd_sync
Vitaly Wool (2):
[MTD] [NAND] make oobavail public
[JFFS2] Fix writebuffer recovery in the first page of a block
Wendy Cheng (2):
[GFS2] NFS filehandle check
[GFS2] pass formal ino in do_filldir_main
William Lee Irwin III (1):
[SPARC]: Fix TIF_USEDFPU flag atomicity
Wim Van Sebroeck (1):
[WATCHDOG] i8xx TCO driver - mark for removal
YOSHIFUJI Hideaki (1):
USBNET: DM9501: Add Corega FEther USB-TXC support.
Zachary Amsden (2):
Fix VMI and COMPAT_VDSO for 2.6.21
Fix vmi time header bug
Zhang, Yanmin (1):
[IA64] pci_get_legacy_ide_irq should return irq (not GSI)
[email protected] (1):
[GFS2] build fix
[email protected] (3):
natsemi: Consistently use interrupt enable/disable functions
natsemi: Fix NAPI for interrupt sharing
natsemi: Avoid IntrStatus lossage if RX state machine resets.
suzuki (1):
check_partition(): fix error check
At Fri, 16 Mar 2007 09:33:54 -0700 (PDT),
Quoted 6 lines · Linus Torvalds
Anyway, the good news about -rc4 is that there's just lots of random fixes. I'm hoping that we've seriously cut down on the regression list, and I'd ask everybody who is on Adrian's list to please re-verify their regression, and in case it's one of the "patches available" ones but I haven't merged (maybe because it hasn't been sent to me!), make sure I do.
alsa-git merge seems missing in rc4:
http://lkml.org/lkml/2007/3/14/43
Linus, could you pull from below (linus brunch)?
master.kernel.org:/pub/scm/linux/kernel/git/perex/alsa.git linus
It includes regression fixes.
Thanks,
Takashi
Hi,
I've got *bad* news. Bug described here
http://www.ussg.iu.edu/hypermail/linux/kernel/0703.0/index.html#0889
http://www.ussg.iu.edu/hypermail/linux/kernel/0703.0/index.html#1165
probably leaked into mainline.
Fsck!
http://www.stardust.webpages.pl/files/tbf/bitis-gabonica/2.6.21-rc4/git-config
http://www.stardust.webpages.pl/files/tbf/bitis-gabonica/2.6.21-rc4/git-console.log
Takashi, unfortunately this bug isn't fixed
http://www.ussg.iu.edu/hypermail/linux/kernel/0703.0/index.html#1684
Regards,
Michal
Signature · 5 lines
Michal K. K. Piotrowski LTG - Linux Testers Group (PL) (http://www.stardust.webpages.pl/ltg/) LTG - Linux Testers Group (EN) (http://www.stardust.webpages.pl/linux_testers_group_en/)
Quoted 6 lines · On Fri, 16 Mar 2007 18:44:26 +0100 Michal Piotrowski…
I've got *bad* news. Bug described here
http://www.ussg.iu.edu/hypermail/linux/kernel/0703.0/index.html#0889
http://www.ussg.iu.edu/hypermail/linux/kernel/0703.0/index.html#1165
probably leaked into mainline.Fsck!
fsck indeed. I don't even understand what's happening with that one - it seems like the kernel schedules a user process, but never deschedules it again.
Quoted 7 lines · Andrew Morton
Quoted 5 lines · On Fri, 16 Mar 2007 18:44:26 +0100 Michal Piotrowski…
I've got *bad* news. Bug described here
http://www.ussg.iu.edu/hypermail/linux/kernel/0703.0/index.html#0889
http://www.ussg.iu.edu/hypermail/linux/kernel/0703.0/index.html#1165
probably leaked into mainline.
Quoted 6 lines
Quoted 1 line
Fsck!
fsck indeed. I don't even understand what's happening with that one - it seems like the kernel schedules a user process, but never deschedules it again.
Tomorrow, I'll try to find out how to reproduce this bug.
Regards,
Michal
Signature · 5 lines
Michal K. K. Piotrowski LTG - Linux Testers Group (PL) (http://www.stardust.webpages.pl/ltg/) LTG - Linux Testers Group (EN) (http://www.stardust.webpages.pl/linux_testers_group_en/)
Quoted 7 lines · Michal Piotrowski
Quoted 7 lines
Quoted 6 lines
I've got *bad* news. Bug described here
http: //www.ussg.iu.edu/hypermail/linux/kernel/0703.0/index.html#0889
http: //www.ussg.iu.edu/hypermail/linux/kernel/0703.0/index.html#1165 probably leaked into mainline.Fsck!
Quoted 8 lines
Quoted 4 lines
fsck indeed. I don't even understand what's happening with that one - it seems like the kernel schedules a user process, but never deschedules it again.
Tomorrow, I'll try to find out how to reproduce this bug.
From #0889:
"I have noticed some strange system behavior. When i try to build a kernel (medium load) - X, keyboard, mouse and sound hangs."
Note that ping is handled in interrupt or softirq context. So something has locked up. Try without X? Or perhaps attack a serial console/netconsole, and when it hangs, use Sysrq to dump the process' states.
Jan
Quoted 16 lines · Jan Engelhardt
Quoted 5 lines · Michal Piotrowski
Quoted 5 lines
Quoted 5 lines
I've got *bad* news. Bug described here
http: //www.ussg.iu.edu/hypermail/linux/kernel/0703.0/index.html#0889
http: //www.ussg.iu.edu/hypermail/linux/kernel/0703.0/index.html#1165 probably leaked into mainline.Quoted 8 lines
Quoted 6 lines
Quoted 1 line
Fsck!
fsck indeed. I don't even understand what's happening with that one - it seems like the kernel schedules a user process, but never deschedules it again.
Tomorrow, I'll try to find out how to reproduce this bug.
Quoted 8 lines
From #0889:
"I have noticed some strange system behavior. When i try to build a kernel (medium load) - X, keyboard, mouse and sound hangs."
Note that ping is handled in interrupt or softirq context. So something has locked up. Try without X? Or perhaps attack a serial console/netconsole, and when it hangs, use Sysrq to dump the process' states.
I already did this
http://www.stardust.webpages.pl/files/tbf/bitis-gabonica/2.6.21-rc4/git-console.log
Quoted 5 lines
Jan
--
Regards,
Michal
Signature · 5 lines
Michal K. K. Piotrowski LTG - Linux Testers Group (PL) (http://www.stardust.webpages.pl/ltg/) LTG - Linux Testers Group (EN) (http://www.stardust.webpages.pl/linux_testers_group_en/)
Hello,
Quoted 6 lines
Quoted 3 lines
Note that ping is handled in interrupt or softirq context. So something has locked up. Try without X? Or perhaps attack a serial console/netconsole, and when it hangs, use Sysrq to dump the process' states.
I already did this
http://www.stardust.webpages.pl/files/tbf/bitis-gabonica/2.6.21-rc4/git-console.log
Me too.
http://www.ussg.iu.edu/hypermail/linux/kernel/0703.0/1243.html
Although I can't reproduce it with 2.6.21-rc3-mm1.
Regards,
Mariusz Kozlowski
At Fri, 16 Mar 2007 18:44:26 +0100,
Quoted 3 lines · Michal Piotrowski
Takashi, unfortunately this bug isn't fixed
http://www.ussg.iu.edu/hypermail/linux/kernel/0703.0/index.html#1684
The patch wasn't merged to rc4.
Or, do you mean the bug is still present even with the patch?
Takashi
Quoted 7 lines · Takashi Iwai
At Fri, 16 Mar 2007 18:44:26 +0100,
Quoted 3 lines · Michal Piotrowski
Takashi, unfortunately this bug isn't fixed
http://www.ussg.iu.edu/hypermail/linux/kernel/0703.0/index.html#1684The patch wasn't merged to rc4.
I know. I use patched 2.6.21-rc3-git4 for crashdump.
Quoted 1 line
Or, do you mean the bug is still present even with the patch?
This patch doesn't fix the problem.
http://www.ussg.iu.edu/hypermail/linux/kernel/0703.0/3080.html
Tomorrow, I'll try to provide more info about this problem.
Quoted 4 lines
Takashi
Regards,
Michal
Signature · 5 lines
Michal K. K. Piotrowski LTG - Linux Testers Group (PL) (http://www.stardust.webpages.pl/ltg/) LTG - Linux Testers Group (EN) (http://www.stardust.webpages.pl/linux_testers_group_en/)
Quoted 9 lines · Michal Piotrowski
Quoted 7 lines · Takashi Iwai
At Fri, 16 Mar 2007 18:44:26 +0100,
Quoted 3 lines · Michal Piotrowski
Takashi, unfortunately this bug isn't fixed
http://www.ussg.iu.edu/hypermail/linux/kernel/0703.0/index.html#1684The patch wasn't merged to rc4.
Quoted 8 lines
I know. I use patched 2.6.21-rc3-git4 for crashdump.
Quoted 1 line
Or, do you mean the bug is still present even with the patch?
This patch doesn't fix the problem.
http://www.ussg.iu.edu/hypermail/linux/kernel/0703.0/3080.htmlTomorrow, I'll try to provide more info about this problem.
You said at [1] that the patch from [2] (not yet merged into Linus' tree) fixed this problem for you.
Or do I confuse anything?
Quoted 2 lines
Regards,
Michal
cu
Adrian
[1] http://lkml.org/lkml/2007/3/13/276
[2] http://lkml.org/lkml/2007/3/7/540
Signature · 4 lines
"Is there not promise of rain?" Ling Tan asked suddenly out
of the darkness. There had been need of rain for many days.
"Only a promise," Lao Er said.
Pearl S. Buck - Dragon SeedAdrian Bunk napisał(a):
Quoted 9 lines · Michal Piotrowski
Quoted 8 lines · Takashi Iwai
Quoted 5 lines
At Fri, 16 Mar 2007 18:44:26 +0100,
Quoted 2 lines · Michal Piotrowski
Takashi, unfortunately this bug isn't fixed
http://www.ussg.iu.edu/hypermail/linux/kernel/0703.0/index.html#1684The patch wasn't merged to rc4.
I know. I use patched 2.6.21-rc3-git4 for crashdump.
Quoted 8 lines
Quoted 5 lines
Quoted 1 line
Or, do you mean the bug is still present even with the patch?
This patch doesn't fix the problem.
http://www.ussg.iu.edu/hypermail/linux/kernel/0703.0/3080.htmlTomorrow, I'll try to provide more info about this problem.
You said at [1] that the patch from [2] (not yet merged into Linus' tree) fixed this problem for you.
Sorry, it's my fault.
This patch doesn't fix the problem.
Quoted 12 lines
Or do I confuse anything?
Quoted 2 lines
Regards,
Michalcu
Adrian[1] http://lkml.org/lkml/2007/3/13/276
[2] http://lkml.org/lkml/2007/3/7/540
Regards,
Michal
Signature · 5 lines
Michal K. K. Piotrowski LTG - Linux Testers Group (PL) (http://www.stardust.webpages.pl/ltg/) LTG - Linux Testers Group (EN) (http://www.stardust.webpages.pl/linux_testers_group_en/)
Quoted 10 lines · Linus Torvalds
I pushed out the -git trees yesterday, but then got distracted, so the patches and tar-balls and the announcement got delayed until this morning. Oops. I'm a scatter-brain.
Anyway, the good news about -rc4 is that there's just lots of random fixes. I'm hoping that we've seriously cut down on the regression list, and I'd ask everybody who is on Adrian's list to please re-verify their regression, and in case it's one of the "patches available" ones but I haven't merged (maybe because it hasn't been sent to me!), make sure I do.
I'm afraid that if CONFIG_TICK_ONESHOT or CONFIG_NO_HZ is set, we still have a problem with RCU synchronization while nonboot CPUs are being enabled during a resume (http://lkml.org/lkml/2007/3/11/144, http://lkml.org/lkml/2007/3/4/88).
Can someone who had this problem with -rc3 check if it's present in -rc4?
Thanks,
Rafael
Quoted 12 lines · Rafael J. Wysocki
Quoted 10 lines · Linus Torvalds
I pushed out the -git trees yesterday, but then got distracted, so the patches and tar-balls and the announcement got delayed until this morning. Oops. I'm a scatter-brain.
Anyway, the good news about -rc4 is that there's just lots of random fixes. I'm hoping that we've seriously cut down on the regression list, and I'd ask everybody who is on Adrian's list to please re-verify their regression, and in case it's one of the "patches available" ones but I haven't merged (maybe because it hasn't been sent to me!), make sure I do.
Quoted 5 lines
I'm afraid that if
CONFIG_TICK_ONESHOTorCONFIG_NO_HZis set, we still have a problem with RCU synchronization while nonboot CPUs are being enabled during a resume (http://lkml.org/lkml/2007/3/11/144, http://lkml.org/lkml/2007/3/4/88).Can someone who had this problem with -rc3 check if it's present in -rc4?
I finally found a box today, which shows this problem. I'm working on a fix.
tglx
PATCH 1/1 clockevents: Fix suspend/resume to disk hangs
I finally found a dual core box, which survives suspend/resume without crashing in the middle of nowhere. Sigh, I never figured out from the code and the bug reports what's going on.
The observed hangs are caused by a stale state transition of the clock event devices, which keeps the RCU synchronization away from completion, when the non boot CPU is brought back up.
The suspend/resume in oneshot mode needs the similar care as the periodic mode during suspend to RAM. My assumption that the state transitions during the different shutdown/bringups of s2disk would go through the periodic boot phase and then switch over to highres resp. nohz mode were simply wrong.
Add the appropriate suspend / resume handling for the non periodic modes.
kernel/time/tick-broadcast.c +22 -5
@@ -307,12 +307,19 @@ int tick_resume_broadcast(void)spin_lock_irqsave (&tick_broadcast_lock, flags); bc = tick_broadcast_device.evtdev; -if (bc) { -if (tick_broadcast_device.mode ==TICKDEV_MODE_PERIODIC && - !cpus_empty (tick_broadcast_mask)) -tick_broadcast_start_periodic (bc); - broadcast =cpu_isset (smp_processor_id (), tick_broadcast_mask); +if (bc) { +switch (tick_broadcast_device.mode) { +case TICKDEV_MODE_PERIODIC : +if (!cpus_empty (tick_broadcast_mask)) +tick_broadcast_start_periodic (bc); + broadcast =cpu_isset (smp_processor_id (), + tick_broadcast_mask); +break ; +case TICKDEV_MODE_ONESHOT : + broadcast =tick_resume_broadcast_oneshot (bc); +break ; + } }spin_unlock_irqrestore (&tick_broadcast_lock, flags);
@@ -347,6 +354,16 @@ static int tick_broadcast_set_event(ktime_t expires, int force) } } +int tick_resume_broadcast_oneshot (struct clock_event_device *bc) +{ +clockevents_set_mode (bc,CLOCK_EVT_MODE_ONESHOT ); + +if (!cpus_empty (tick_broadcast_oneshot_mask)) +tick_broadcast_set_event (ktime_get (),1 ); + +return cpu_isset (smp_processor_id (), tick_broadcast_oneshot_mask); +} +/* * Reprogram the broadcast device: *
kernel/time/tick-common.c +7 -6
@@ -298,18 +298,17 @@ static void tick_shutdown(unsigned int *cpup)spin_unlock_irqrestore (&tick_device_lock, flags); } -static void tick_suspend_periodic (void ) +static void tick_suspend (void ) {struct tick_device *td = &__get_cpu_var (tick_cpu_device);unsigned long flags;spin_lock_irqsave (&tick_device_lock, flags); -if (td->mode ==TICKDEV_MODE_PERIODIC ) -clockevents_set_mode (td->evtdev,CLOCK_EVT_MODE_SHUTDOWN ); +clockevents_set_mode (td->evtdev,CLOCK_EVT_MODE_SHUTDOWN );spin_unlock_irqrestore (&tick_device_lock, flags); } -static void tick_resume_periodic (void ) +static void tick_resume (void ) {struct tick_device *td = &__get_cpu_var (tick_cpu_device);unsigned long flags;
@@ -317,6 +316,8 @@ static void tick_resume_periodic(void)spin_lock_irqsave (&tick_device_lock, flags);if (td->mode ==TICKDEV_MODE_PERIODIC )tick_setup_periodic (td->evtdev,0 ); +else +tick_resume_oneshot ();spin_unlock_irqrestore (&tick_device_lock, flags); }
@@ -348,13 +349,13 @@ static int tick_notify(struct notifier_block *nb, unsigned long reason,break ;case CLOCK_EVT_NOTIFY_SUSPEND : -tick_suspend_periodic (); +tick_suspend ();tick_suspend_broadcast ();break ;case CLOCK_EVT_NOTIFY_RESUME :if (!tick_resume_broadcast ()) -tick_resume_periodic (); +tick_resume ();break ;default :
kernel/time/tick-internal.h +10 -1
@@ -19,12 +19,13 @@ extern void tick_setup_oneshot(struct clock_event_device *newdev,extern int tick_program_event (ktime_t expires,int force);extern void tick_oneshot_notify (void );extern int tick_switch_to_oneshot (void (*handler)(struct clock_event_device *)); - +extern void tick_resume_oneshot (void );# ifdef CONFIG_GENERIC_CLOCKEVENTS_BROADCAST extern void tick_broadcast_setup_oneshot (struct clock_event_device *bc);extern void tick_broadcast_oneshot_control (unsigned long reason);extern void tick_broadcast_switch_to_oneshot (void );extern void tick_shutdown_broadcast_oneshot (unsigned int *cpup); +extern int tick_resume_broadcast_oneshot (struct clock_event_device *bc);# else /* BROADCAST */ static inline void tick_broadcast_setup_oneshot (struct clock_event_device *bc) {
@@ -43,6 +44,10 @@ void tick_setup_oneshot(struct clock_event_device *newdev, {BUG (); } +static inline void tick_resume_oneshot (void ) +{ +BUG (); +}static inline int tick_program_event (ktime_t expires,int force) {return 0 ;
@@ -54,6 +59,10 @@ static inline void tick_broadcast_setup_oneshot(struct clock_event_device *bc) }static inline void tick_broadcast_oneshot_control (unsigned long reason) { }static inline void tick_shutdown_broadcast_oneshot (unsigned int *cpup) { } +static inline int tick_resume_broadcast_oneshot (struct clock_event_device *bc) +{ +return 0 ; +}#endif /* !TICK_ONESHOT */ /*
kernel/time/tick-oneshot.c +12 -0
@@ -41,6 +41,18 @@ int tick_program_event(ktime_t expires, int force) }/** +* tick_resume_onshot - resume oneshot mode +*/ +void tick_resume_oneshot (void ) +{ +struct tick_device *td = &__get_cpu_var (tick_cpu_device); +struct clock_event_device *dev = td->evtdev; + +clockevents_set_mode (dev,CLOCK_EVT_MODE_ONESHOT ); +tick_program_event (ktime_get (),1 ); +} + +/** * tick_setup_oneshot - setup the event device for oneshot mode (hres or nohz) */ void tick_setup_oneshot(struct clock_event_device *newdev,
Re: [PATCH] clockevents: Fix suspend/resume to disk hangs
Quoted 14 lines · Thomas Gleixner
I finally found a dual core box, which survives suspend/resume without crashing in the middle of nowhere. Sigh, I never figured out from the code and the bug reports what's going on.
The observed hangs are caused by a stale state transition of the clock event devices, which keeps the RCU synchronization away from completion, when the non boot CPU is brought back up.
The suspend/resume in oneshot mode needs the similar care as the periodic mode during suspend to RAM. My assumption that the state transitions during the different shutdown/bringups of s2disk would go through the periodic boot phase and then switch over to highres resp. nohz mode were simply wrong.
Quoted 4 lines
Add the appropriate suspend / resume handling for the non periodic modes.
Signed-off-by Thomas Gleixner <[email protected]>
Hi,
I can confirm that this patch fixed the problem on Thinkpad X60s.
Thanks !
Milan
--
[email protected]
Re: [PATCH] clockevents: Fix suspend/resume to disk hangs
In reply to Thomas GleixnerQuoted 14 lines · Thomas Gleixner
I finally found a dual core box, which survives suspend/resume without crashing in the middle of nowhere. Sigh, I never figured out from the code and the bug reports what's going on.
The observed hangs are caused by a stale state transition of the clock event devices, which keeps the RCU synchronization away from completion, when the non boot CPU is brought back up.
The suspend/resume in oneshot mode needs the similar care as the periodic mode during suspend to RAM. My assumption that the state transitions during the different shutdown/bringups of s2disk would go through the periodic boot phase and then switch over to highres resp. nohz mode were simply wrong.
Quoted 5 lines
Add the appropriate suspend / resume handling for the non periodic modes.
Signed-off-by Thomas Gleixner <[email protected]>
Excellent work. Now suspend to disk is working again. But:
1.) The quirk added in commit a417a21e10831bca695b4ba9c74f4ddf5a95ac06 for the appletouch driver doesn't seem to work after resume.
2.) The first suspend to disk works with no problems, but the second
suspend to disk in a row results in an oops:
->resume_device ->pci_device_resume->ata_host_resume->ahci_pci_device_resume->ata_pci_device_do_resume->pci_restore_state
Re: [PATCH] clockevents: Fix suspend/resume to disk hangs
Quoted 23 lines · Thomas Meyer
Quoted 14 lines · Thomas Gleixner
I finally found a dual core box, which survives suspend/resume without crashing in the middle of nowhere. Sigh, I never figured out from the code and the bug reports what's going on.
The observed hangs are caused by a stale state transition of the clock event devices, which keeps the RCU synchronization away from completion, when the non boot CPU is brought back up.
The suspend/resume in oneshot mode needs the similar care as the periodic mode during suspend to RAM. My assumption that the state transitions during the different shutdown/bringups of s2disk would go through the periodic boot phase and then switch over to highres resp. nohz mode were simply wrong.
Quoted 5 lines
Add the appropriate suspend / resume handling for the non periodic modes.
Signed-off-by Thomas Gleixner <[email protected]>Excellent work. Now suspend to disk is working again. But:
Quoted 7 lines
1.) The quirk added in commit
a417a21e10831bca695b4ba9c74f4ddf5a95ac06for the appletouch driver doesn't seem to work after resume.2.) The first suspend to disk works with no problems, but the second
suspend to disk in a row results in an oops:
->resume_device ->pci_device_resume->ata_host_resume->ahci_pci_device_resume->ata_pci_device_do_resume->pci_restore_state
Can you please see if this problem is already in the Adrian's list of known regressions?
Thanks,
Rafael
Re: [PATCH] clockevents: Fix suspend/resume to disk hangs
Quoted 9 lines · Rafael J. Wysocki
Quoted 5 lines · Thomas Meyer
...
2.) The first suspend to disk works with no problems, but the second
suspend to disk in a row results in an oops:
->resume_device ->pci_device_resume->ata_host_resume->ahci_pci_device_resume->ata_pci_device_do_resume->pci_restore_stateCan you please see if this problem is already in the Adrian's list of known regressions?
AFAIK not, I've given it an own entry.
Quoted 2 lines
Thanks,
Rafael
cu
Adrian
Signature · 4 lines
"Is there not promise of rain?" Ling Tan asked suddenly out
of the darkness. There had been need of rain for many days.
"Only a promise," Lao Er said.
Pearl S. Buck - Dragon Seedappletouch quirk doesn't run at resume
In reply to Thomas MeyerQuoted 18 lines · Thomas Meyer
Quoted 17 lines · Thomas Gleixner
I finally found a dual core box, which survives suspend/resume without crashing in the middle of nowhere. Sigh, I never figured out from the code and the bug reports what's going on.
The observed hangs are caused by a stale state transition of the clock event devices, which keeps the RCU synchronization away from completion, when the non boot CPU is brought back up.
The suspend/resume in oneshot mode needs the similar care as the periodic mode during suspend to RAM. My assumption that the state transitions during the different shutdown/bringups of s2disk would go through the periodic boot phase and then switch over to highres resp. nohz mode were simply wrong.
Add the appropriate suspend / resume handling for the non periodic modes.
Quoted 8 lines
Quoted 2 lines
Signed-off-by Thomas Gleixner <[email protected]>Excellent work. Now suspend to disk is working again. But:
1.) The quirk added in commit
a417a21e10831bca695b4ba9c74f4ddf5a95ac06for the appletouch driver doesn't seem to work after resume.
...
Not a regression, but still a bug.
Appropriate people added to the Cc.
cu
Adrian
Signature · 4 lines
"Is there not promise of rain?" Ling Tan asked suddenly out
of the darkness. There had been need of rain for many days.
"Only a promise," Lao Er said.
Pearl S. Buck - Dragon SeedRe: appletouch quirk doesn't run at resume
Quoted 3 lines · Adrian Bunk
Quoted 2 lines
1.) The quirk added in commit
a417a21e10831bca695b4ba9c74f4ddf5a95ac06
for the appletouch driver doesn't seem to work after resume.Not a regression, but still a bug. Appropriate people added to the Cc.
(trimmed CC a little bit)
Thomas, could you please provide more information? Did it ever work for you after suspend/resume cycle and it just broke at some point in the past, or you are not sure whether it ever worked?
Also, what exactly does it mean that it doesn't work? Are both the interfaces after resume bound to usbhid driver (you can check this in /sys)? When the quirk works correctly, only the keyboard interface should be bound to usbhid driver. Please check the binding both before and after suspend/resume cycle, and let me know.
Thanks,
Signature · 1 line
Jiri Kosina
Re: appletouch quirk doesn't run at resume
Quoted 7 lines · Jiri Kosina
On Sun, 18 Mar 2007, Adrian Bunk wrote:
Thomas, could you please provide more information? Did it ever work for you after suspend/resume cycle and it just broke at some point in the past, or you are not sure whether it ever worked?
I'm not sure whether this ever worked.
Quoted 6 lines
Also, what exactly does it mean that it doesn't work? Are both the interfaces after resume bound to usbhid driver (you can check this in /sys)? When the quirk works correctly, only the keyboard interface should be bound to usbhid driver. Please check the binding both before and after suspend/resume cycle, and let me know.
Appletouch is bound to the device:
T: Bus=01 Lev=01 Prnt=01 Port=01 Cnt=01 Dev#= 7 Spd=12 MxCh= 0 D: Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS= 8 #Cfgs= 1 P: Vendor=05ac ProdID=0218 Rev= 0.60 S: Manufacturer=Apple Computer S: Product=Apple Internal Keyboard / Trackpad
C:* #Ifs= 3 Cfg#= 1 Atr=a0 MxPwr= 40mA
I:* If#= 0 Alt= 0 #EPs= 1 Cls=03(HID ) Sub=01 Prot=01 Driver=usbhid
E: Ad=83(I) Atr=03(Int.) MxPS= 8 Ivl=8ms
I:* If#= 1 Alt= 0 #EPs= 1 Cls=03(HID ) Sub=01 Prot=02 Driver=appletouch
E: Ad=81(I) Atr=03(Int.) MxPS= 64 Ivl=8ms
I:* If#= 2 Alt= 0 #EPs= 1 Cls=03(HID ) Sub=00 Prot=00 Driver=usbhid
E: Ad=84(I) Atr=03(Int.) MxPS= 1 Ivl=8ms
But the X server touchpad driver doesn't work anymore, that means i can't emulte a right click by tapping with 3 fingers on the mouse pad. after restarting x the mouse driver works again. So i think this is maybe a problem in X?
Re: appletouch quirk doesn't run at resume
Quoted 1 line · Thomas Meyer
Appletouch is bound to the device:
OK, so the quirk actually works fine ...
Quoted 4 lines
But the X server touchpad driver doesn't work anymore, that means i can't emulte a right click by tapping with 3 fingers on the mouse pad. after restarting x the mouse driver works again. So i think this is maybe a problem in X?
... but there is something apparently wrong either with the appletouch driver or X. Could you test via evtest whether the events are properly generated by the kernel? If they do, I'd say it is almost certainly X bug.
Thanks,
Signature · 1 line
Jiri Kosina
Re: appletouch quirk doesn't run at resume
Quoted 8 lines · Jiri Kosina
Quoted 2 lines · Thomas Meyer
Appletouch is bound to the device:
OK, so the quirk actually works fine ...
Yes, it works fine, but...
Quoted 11 lines
Quoted 6 lines
But the X server touchpad driver doesn't work anymore, that means i can't emulte a right click by tapping with 3 fingers on the mouse pad. after restarting x the mouse driver works again. So i think this is maybe a problem in X?
... but there is something apparently wrong either with the appletouch driver or X. Could you test via evtest whether the events are properly generated by the kernel? If they do, I'd say it is almost certainly X bug.
It seems, that after the resume all usb devices gets removed and plug in again (virtually!). This results in a new input device name:
before suspend and resume:
appletouch Geyser 3 inited.
input: appletouch as /class/input/input2
after resume:
Restarting tasks ... <6>usb 1-2: USB disconnect, address 3
PM: Removing info for No Bus:usbdev1.3_ep83
PM: Removing info for usb:1-2:1.0
PM: Removing info for No Bus:usbdev1.3_ep81
input: appletouch disconnected
[cut]
PM: Adding info for No Bus:usbdev1.4_ep83
PM: Adding info for usb:1-2:1.1
appletouch Geyser 3 inited.
input: appletouch as /class/input/input15
This change confuses the X synaptics driver:
Touchpad no synaptics event device found (checked 11 nodes) Touchpad The /dev/input/event* device nodes seem to be missing (EE) xf86OpenSerial: Cannot open device /dev/input/event2
No such file or directory.
(WW) Touchpad: cannot open input device
And so X falls back to my second pointer device which is a UsbMouse under /dev/input/mice
One could say that the synaptics driver rightly complains about the missing event2 device!
So is this a bug in the X synaptics driver?
Comments are welcome.
Re: appletouch quirk doesn't run at resume
Quoted 2 lines · Thomas Meyer
It seems, that after the resume all usb devices gets removed and plug in again (virtually!). This results in a new input device name:
Yes, this is what actually happens. JFYI see current thread on lkml which is a bit realted - http://lkml.org/lkml/2007/3/27/149 if interested.
Quoted 8 lines
This change confuses the X synaptics driver:
Touchpad no synaptics event device found (checked 11 nodes) Touchpad The/dev/input/event*device nodes seem to be missing (EE) xf86OpenSerial: Cannot open device/dev/input/event2
No such file or directory.
(WW) Touchpad: cannot open input device
One could say that the synaptics driver rightly complains about the missing event2 device! So is this a bug in the X synaptics driver?
You can of course work this around by adding an udev rule such as
SUBSYSTEM=="input",KERNEL=="event*",SYSFS{name}=="appletouch",SYMLINK+="input/appletouchpad"
and the let Xorg use /dev/input/appletouchpad, which will always be a symlink to the correct device.
Signature · 1 line
Jiri Kosina
Re: appletouch quirk doesn't run at resume
Quoted 17 lines · Jiri Kosina
Quoted 2 lines · Thomas Meyer
It seems, that after the resume all usb devices gets removed and plug in again (virtually!). This results in a new input device name:
Yes, this is what actually happens. JFYI see current thread on lkml which is a bit realted - http://lkml.org/lkml/2007/3/27/149 if interested.
Quoted 8 lines
This change confuses the X synaptics driver:
Touchpad no synaptics event device found (checked 11 nodes) Touchpad The/dev/input/event*device nodes seem to be missing (EE) xf86OpenSerial: Cannot open device/dev/input/event2
No such file or directory.
(WW) Touchpad: cannot open input device
One could say that the synaptics driver rightly complains about the missing event2 device! So is this a bug in the X synaptics driver?
Quoted 7 lines
You can of course work this around by adding an udev rule such as
SUBSYSTEM=="input",KERNEL=="event*",SYSFS{name}=="appletouch",SYMLINK+="input/appletouchpad"
and the let Xorg use
/dev/input/appletouchpad, which will always be a symlink to the correct device.
I am not sure if this would help... According to the excerpt from X log synaptics driver attempted to scan evdev devices and locate the touchpad. However if this scan happen before udev had a chance to process the event and create new /dev/input/eventX device node it will fail.
I wonder if we should adjust the X driver to spin for a couple of seconds in EventAutoDevProbe if the touchpad was already seen once... Peter?
Signature · 1 line
Dmitry
Re: appletouch quirk doesn't run at resume
Quoted 20 lines · Dmitry Torokhov
Quoted 19 lines · Jiri Kosina
Quoted 1 line · Thomas Meyer
It seems, that after the resume all usb devices gets removed and
plug in
Quoted 1 line
again (virtually!). This results in a new input device name:
Yes, this is what actually happens. JFYI see current thread on lkml which
is a bit realted - http://lkml.org/lkml/2007/3/27/149 if interested.Quoted 8 lines
This change confuses the X synaptics driver:
Touchpad no synaptics event device found (checked 11 nodes) Touchpad The/dev/input/event*device nodes seem to be missing (EE) xf86OpenSerial: Cannot open device/dev/input/event2
No such file or directory.
(WW) Touchpad: cannot open input device
One could say that the synaptics driver rightly complains about the missing event2 device! So is this a bug in the X synaptics driver?
Quoted 8 lines
Quoted 8 lines
You can of course work this around by adding an udev rule such as
SUBSYSTEM=="input",KERNEL=="event*",SYSFS{name}=="appletouch",SYMLINK+="input/appletouchpad"
and the let Xorg use
/dev/input/appletouchpad, which will always be a symlink to the correct device.
This was my first idea, too. But then i found this entry in the Changelog of the synaptics driver:
- In the DeviceOn() function, if opening the device node fails, try to auto-detect the correct event device again. This fixes some problems which occur after a suspend/resume cycle or after rmmod/insmod-ing the psmouse kernel driver.
Quoted 6 lines
I am not sure if this would help... According to the excerpt from X log synaptics driver attempted to scan evdev devices and locate the touchpad. However if this scan happen before udev had a chance to process the event and create new
/dev/input/eventXdevice node it will fail.
Okay. This strengthens above statement. And udev is too slow to create the devices, while the driver already scanned the directory.
Quoted 5 lines
I wonder if we should adjust the X driver to spin for a couple of seconds in EventAutoDevProbe if the touchpad was already seen once... Peter?
Re: appletouch quirk doesn't run at resume
Quoted 10 lines · Thomas Meyer
Quoted 5 lines
I am not sure if this would help... According to the excerpt from X log synaptics driver attempted to scan evdev devices and locate the touchpad. However if this scan happen before udev had a chance to process the event and create new
/dev/input/eventXdevice node it will fail.Okay. This strengthens above statement. And udev is too slow to create the devices, while the driver already scanned the directory.
Quoted 3 lines
I wonder if we should adjust the X driver to spin for a couple of seconds in EventAutoDevProbe if the touchpad was already seen once... Peter?
Yes, it looks like this is the root cause.
However I must admit that I don't like this behavior too much. We shouldn't rely on drivers individual userland to wait for a reasonable time before the udev settles down. This is not a nice API to provide. Will try to think of some solution which would have reasonable nastiness/functionality ratio.
Signature · 1 line
Jiri Kosina
Re: appletouch quirk doesn't run at resume
Quoted 13 lines · Jiri Kosina
Quoted 10 lines · Thomas Meyer
Quoted 5 lines
I am not sure if this would help... According to the excerpt from X log synaptics driver attempted to scan evdev devices and locate the touchpad. However if this scan happen before udev had a chance to process the event and create new
/dev/input/eventXdevice node it will fail.Okay. This strengthens above statement. And udev is too slow to create the devices, while the driver already scanned the directory.
Quoted 3 lines
I wonder if we should adjust the X driver to spin for a couple of seconds in EventAutoDevProbe if the touchpad was already seen once... Peter?
Quoted 8 lines
Yes, it looks like this is the root cause.
However I must admit that I don't like this behavior too much. We shouldn't rely on drivers individual userland to wait for a reasonable time before the udev settles down. This is not a nice API to provide. Will try to think of some solution which would have reasonable nastiness/functionality ratio.
The proper fix would be teach X to recognize hotplug events. I've heard they are working on it.
Signature · 1 line
Dmitry
Re: [PATCH] clockevents: Fix suspend/resume to disk hangs
In reply to Thomas GleixnerQuoted 7 lines · Thomas Gleixner
I finally found a dual core box, which survives suspend/resume without crashing in the middle of nowhere. Sigh, I never figured out from the code and the bug reports what's going on.
The observed hangs are caused by a stale state transition of the clock event devices, which keeps the RCU synchronization away from completion, when the non boot CPU is brought back up.
This didn't fix the suspend problems on my Thinkpad R60. (Sorry for nagging - please let me know if I can assist in debugging this...)
Marcus
Re: [PATCH] clockevents: Fix suspend/resume to disk hangs
Quoted 6 lines · Marcus Better
Quoted 4 lines · Thomas Gleixner
I finally found a dual core box, which survives suspend/resume without crashing in the middle of nowhere. Sigh, I never figured out from the code and the bug reports what's going on.
Quoted 6 lines
Quoted 3 lines
The observed hangs are caused by a stale state transition of the clock event devices, which keeps the RCU synchronization away from completion, when the non boot CPU is brought back up.
This didn't fix the suspend problems on my Thinkpad R60. (Sorry for nagging - please let me know if I can assist in debugging this...)
I did not expect that it fixes your problem. clockevents are only used in arch/i386 right now. You are running a 64 bit kernel, so a change of your problem would have been very surprising.
You said, that the breakage came between 2.6.20 and rc2. Can you bisect it ?
tglx
Re: [PATCH] clockevents: Fix suspend/resume to disk hangs
Quoted 2 lines · Thomas Gleixner
You said, that the breakage came between 2.6.20 and rc2. Can you bisect it ?
The XFS workqueue patch [1] fixes my problem [2].
Marcus
[1] http://permalink.gmane.org/gmane.linux.kernel/507616
[2] http://permalink.gmane.org/gmane.linux.kernel/505570
Re: [PATCH] clockevents: Fix suspend/resume to disk hangs
Quoted 4 lines · Marcus Better
The XFS workqueue patch [1] fixes my problem [2].
[1] http://permalink.gmane.org/gmane.linux.kernel/507616
[2] http://permalink.gmane.org/gmane.linux.kernel/505570
Unfortunately it only fixed suspend to RAM. Suspend to disk still hangs at "snapshotting system". Will try to bisect it...
Marcus
Re: [PATCH] clockevents: Fix suspend/resume to disk hangs
Quoted 8 lines · Marcus Better
Quoted 4 lines · Marcus Better
The XFS workqueue patch [1] fixes my problem [2].
[1] http://permalink.gmane.org/gmane.linux.kernel/507616
[2] http://permalink.gmane.org/gmane.linux.kernel/505570Unfortunately it only fixed suspend to RAM. Suspend to disk still hangs at "snapshotting system". Will try to bisect it...
I don't know if this is related, but using 2.6.21-rc4 and suspend2 2.2.9.7, I also get a hang at suspend. I could try if this also happens with 2.6.20 and the same suspend2 version.
Regards,
Tino
Re: [PATCH] clockevents: Fix suspend/resume to disk hangs
In reply to Marcus BetterQuoted 8 lines · Marcus Better
Quoted 4 lines · Marcus Better
The XFS workqueue patch [1] fixes my problem [2].
[1] http://permalink.gmane.org/gmane.linux.kernel/507616
[2] http://permalink.gmane.org/gmane.linux.kernel/505570Unfortunately it only fixed suspend to RAM. Suspend to disk still hangs at "snapshotting system". Will try to bisect it...
Do you use the microcode driver?
Rafael
Re: [PATCH] clockevents: Fix suspend/resume to disk hangs
Quoted 1 line
Do you use the microcode driver?
No.
I'm in the middle of bisecting. Strange enough the symptoms change as I go. Some commits manage to suspend to RAM, but hang at resume.
Marcus
Quoted 4 lines · On Fri, 16 Mar 2007 09:33:54 -0700 (PDT) Linus Torvalds wrote:
I pushed out the -git trees yesterday, but then got distracted, so the patches and tar-balls and the announcement got delayed until this morning. Oops. I'm a scatter-brain.
allmodconfig on i386:
WARNING: "default_idle" [arch/i386/kernel/apm.ko] undefined!
WARNING: "machine_real_restart" [arch/i386/kernel/apm.ko] undefined! make[1]: *** [__modpost] Error 1
make: *** [modules] Error 2
---
~Randy
*** Remember to use Documentation/SubmitChecklist when testing your code ***
Quoted 7 lines · On Fri, 16 Mar 2007 14:11:21 -0700 Randy Dunlap wrote:
Quoted 4 lines · On Fri, 16 Mar 2007 09:33:54 -0700 (PDT) Linus Torvalds wrote:
I pushed out the -git trees yesterday, but then got distracted, so the patches and tar-balls and the announcement got delayed until this morning. Oops. I'm a scatter-brain.
Quoted 6 lines
allmodconfig on i386:
WARNING: "
default_idle" [arch/i386/kernel/apm.ko] undefined!
WARNING: "machine_real_restart" [arch/i386/kernel/apm.ko] undefined! make[1]: *** [__modpost] Error 1
make: *** [modules] Error 2
Please ignore.
I think that this was the result of doing 'make allyesconfig && make all' followed by 'make allmodconfig && make all' without doing a 'make clean' between them.
---
~Randy
Quoted 8 lines · Randy Dunlap
Quoted 6 lines
allmodconfig on i386:
WARNING: "
default_idle" [arch/i386/kernel/apm.ko] undefined!
WARNING: "machine_real_restart" [arch/i386/kernel/apm.ko] undefined! make[1]: *** [__modpost] Error 1
make: *** [modules] Error 2
Quoted 5 lines
Please ignore.
I think that this was the result of doing 'make allyesconfig && make all' followed by 'make allmodconfig && make all' without doing a 'make clean' between them.
This would seem to be a bug in the build system then. Or are you supposed to "make clean" after every config change?
Chris
Quoted 3 lines · Chris Friesen
This would seem to be a bug in the build system then. Or are you supposed to "make clean" after every config change?
No. When .config is changed, include/linux/config/ is updated, which causes things that depends on it one or the other way to rebuild. At least that is what I observed since ages.
Jan
Quoted 16 lines · Randy Dunlap
Quoted 7 lines · On Fri, 16 Mar 2007 14:11:21 -0700 Randy Dunlap wrote:
Quoted 4 lines · On Fri, 16 Mar 2007 09:33:54 -0700 (PDT) Linus Torvalds wrote:
I pushed out the -git trees yesterday, but then got distracted, so the patches and tar-balls and the announcement got delayed until this morning. Oops. I'm a scatter-brain.
Quoted 6 lines
allmodconfig on i386:
WARNING: "
default_idle" [arch/i386/kernel/apm.ko] undefined!
WARNING: "machine_real_restart" [arch/i386/kernel/apm.ko] undefined! make[1]: *** [__modpost] Error 1
make: *** [modules] Error 2
Quoted 5 lines
Please ignore.
I think that this was the result of doing 'make allyesconfig && make all' followed by 'make allmodconfig && make all' without doing a 'make clean' between them.
But then we have a dependency error somewhere we need to track down. I will try to test here.
Sam
Quoted 17 lines · Sam Ravnborg
Quoted 16 lines · Randy Dunlap
Quoted 13 lines · On Fri, 16 Mar 2007 14:11:21 -0700 Randy Dunlap wrote:
Quoted 4 lines · On Fri, 16 Mar 2007 09:33:54 -0700 (PDT) Linus Torvalds wrote:
I pushed out the -git trees yesterday, but then got distracted, so the patches and tar-balls and the announcement got delayed until this morning. Oops. I'm a scatter-brain.
allmodconfig on i386:
WARNING: "
default_idle" [arch/i386/kernel/apm.ko] undefined!
WARNING: "machine_real_restart" [arch/i386/kernel/apm.ko] undefined! make[1]: *** [__modpost] Error 1
make: *** [modules] Error 2
Quoted 7 lines
Quoted 5 lines
Please ignore.
I think that this was the result of doing 'make allyesconfig && make all' followed by 'make allmodconfig && make all' without doing a 'make clean' between them.
But then we have a dependency error somewhere we need to track down. I will try to test here.
So far no luck in reproducing this.
I will await additional reports before looking more into this one.
Sam
Quoted 20 lines · On Sun, 18 Mar 2007 13:39:45 +0100 Sam Ravnborg wrote:
Quoted 19 lines · Sam Ravnborg
Quoted 18 lines · Randy Dunlap
Quoted 7 lines · On Fri, 16 Mar 2007 14:11:21 -0700 Randy Dunlap wrote:
Quoted 4 lines · On Fri, 16 Mar 2007 09:33:54 -0700 (PDT) Linus Torvalds wrote:
I pushed out the -git trees yesterday, but then got distracted, so the patches and tar-balls and the announcement got delayed until this morning. Oops. I'm a scatter-brain.
Quoted 6 lines
allmodconfig on i386:
WARNING: "
default_idle" [arch/i386/kernel/apm.ko] undefined!
WARNING: "machine_real_restart" [arch/i386/kernel/apm.ko] undefined! make[1]: *** [__modpost] Error 1
make: *** [modules] Error 2Please ignore.
Quoted 8 lines
Quoted 5 lines
Quoted 3 lines
I think that this was the result of doing 'make allyesconfig && make all' followed by 'make allmodconfig && make all' without doing a 'make clean' between them.
But then we have a dependency error somewhere we need to track down. I will try to test here.
So far no luck in reproducing this.
I will await additional reports before looking more into this one.
Hi Sam,
It's reproducible for me.
(I'm on x86_64:)
make clean
make ARCH=i386 allyesconfig
make ARCH=i386 all
make ARCH=i386 allmodconfig
make ARCH=i386 all
What kind of debug info do you want/need on this?
---
~Randy
*** Remember to use Documentation/SubmitChecklist when testing your code ***
PATCH 1/6 2.6.21-rc4: known regressions
In reply to Linus TorvaldsThis email lists some known regressions in Linus' tree compared to 2.6.20.
If you find your name in the Cc header, you are either submitter of one of the bugs, maintainer of an affectected subsystem or driver, a patch of you caused a breakage or I'm considering you in any other way possibly involved with one or more of these issues.
Due to the huge amount of recipients, please trim the Cc when answering.
Subject : weird system hangs
References : http://lkml.org/lkml/2007/3/16/288
Submitter : Michal Piotrowski <[email protected]>
Mariusz Kozlowski <[email protected]>
Status : unknown
Subject : crashes in KDE
References : http://bugzilla.kernel.org/show_bug.cgi?id=8157
Submitter : Oliver Pinter <[email protected]>
Status : unknown
Subject : kwin dies silently
References : http://lkml.org/lkml/2007/2/28/112
Submitter : Sid Boyce <[email protected]>
Status : unknown
Re: [1/6] 2.6.21-rc4: known regressions
Quoted 1 line · Adrian Bunk
This email lists some known regressions in Linus' tree compared to 2.6.20.
Since I didn't see any mention of this:
I'm seeing an Oops when removing the ohci1394 module:
[ 16.047275] ieee1394: Node removed: ID:BUS[158717321-38:0860] GUID[c033ced600000000] [ 16.047287] BUG: unable to handle kernel NULL pointer dereference at virtual address 00000094 [ 16.047451] printing eip: [ 16.047524] c02daf3d [ 16.047527] *pde = 00000000 [ 16.047603] Oops: 0000 [#1] [ 16.047676] PREEMPT [ 16.047788] Modules linked in: backlight ohci1394 parport_pc parport [ 16.048069] CPU: 0 [ 16.048071] EIP: 0060:[<c02daf3d>] Not tainted VLI [ 16.048074] EFLAGS: 00010246 (2.6.21-rc4 #35) [ 16.048298] EIP is at class_device_remove_attrs+0xa/0x30 [ 16.048377] eax: dfd04338 ebx: 00000000 ecx: df655988 edx: 00000000 [ 16.048456] esi: 00000000 edi: dfd04338 ebp: 00000000 esp: df506e38 [ 16.048535] ds: 007b es: 007b fs: 00d8 gs: 0033 ss: 0068 [ 16.048614] Process rmmod (pid: 1455, ti=df506000 task=df6cc0b0 task.ti=df506000) [ 16.048693] Stack: dfd04338 dfd04340 00000000 c02db02f 00000000 dfd04338 dfd041e4 c0331871 [ 16.049159] 00000000 c02db065 dfd041b0 c0331858 c055006d 0975d589 00000026 0000035c [ 16.049626] 00000000 c033ced6 00000000 df24c000 c0331879 c02d859f df24c0bc df24c0bc [ 16.050091] Call Trace: [ 16.050233] [<c02db02f>] class_device_del+0xcc/0xfa [ 16.050352] [<c0331871>] __nodemgr_remove_host_dev+0x0/0xb [ 16.050475] [<c02db065>] class_device_unregister+0x8/0x10 [ 16.050595] [<c0331858>] nodemgr_remove_ne+0x61/0x7a [ 16.050714] [<c033ced6>] ether1394_header_cache+0x0/0x43 [ 16.050835] [<c0331879>] __nodemgr_remove_host_dev+0x8/0xb [ 16.050954] [<c02d859f>] device_for_each_child+0x1a/0x3c [ 16.051073] [<c0331b98>] nodemgr_remove_host+0x30/0x90 [ 16.051192] [<c032f12c>] __unregister_host+0x1a/0xad [ 16.051311] [<c032ee17>] hl_get_hostinfo+0x5b/0x76 [ 16.051430] [<c032f34a>] highlevel_remove_host+0x21/0x42 [ 16.051549] [<c032ed9d>] hpsb_remove_host+0x37/0x56 [ 16.051668] [<e0869263>] ohci1394_pci_remove+0x44/0x1c7 [ohci1394] [ 16.051794] [<c027e5b0>] pci_device_remove+0x16/0x35 [ 16.053376] [<c02da6d7>] __device_release_driver+0x6e/0x8b [ 16.053496] [<c02dab77>] driver_detach+0xa1/0xde [ 16.053613] [<c02da33f>] bus_remove_driver+0x57/0x75 [ 16.053733] [<c02dabd4>] driver_unregister+0x8/0x13 [ 16.053850] [<c027e732>] pci_unregister_driver+0xc/0x6e [ 16.053969] [<c0134d56>] sys_delete_module+0x174/0x19a [ 16.054091] [<c0113cea>] do_page_fault+0x277/0x525 [ 16.054211] [<c0148b0d>] do_munmap+0x193/0x1ac [ 16.054331] [<c0103d0c>] syscall_call+0x7/0xb [ 16.054450] ======================= [ 16.054523] Code: ff c3 85 c0 74 08 83 c0 08 e9 9b f8 ea ff b8 ea ff ff ff c3 85 c0 74 08 83 c0 08 e9 b9 db ea ff c3 57 89 c7 56 53 31 db 8b 70 44 <83> be 94 00 00 00 00 75 09 eb 17 89 f8 e8 d7 ff ff ff 89 da 83 [ 16.057248] EIP: [<c02daf3d>] class_device_remove_attrs+0xa/0x30 SS:ESP 0068:df506e38
Signature · 1 line
Tobias PGP: http://9ac7e0bc.uguu.de
Re: [1/6] 2.6.21-rc4: known regressions
Quoted 31 lines · Tobias Diedrich
Quoted 1 line · Adrian Bunk
This email lists some known regressions in Linus' tree compared to 2.6.20.
Since I didn't see any mention of this:
I'm seeing an Oops when removing the ohci1394 module:
[ 16.047275] ieee1394: Node removed: ID:BUS[158717321-38:0860] GUID[c033ced600000000] [ 16.047287] BUG: unable to handle kernel NULL pointer dereference at virtual address 00000094 [ 16.047451] printing eip: [ 16.047524] c02daf3d [ 16.047527] *pde = 00000000 [ 16.047603] Oops: 0000 [#1] [ 16.047676] PREEMPT [ 16.047788] Modules linked in: backlight ohci1394 parport_pc parport [ 16.048069] CPU: 0 [ 16.048071] EIP: 0060:[<c02daf3d>] Not tainted VLI [ 16.048074] EFLAGS: 00010246 (2.6.21-rc4 #35) [ 16.048298] EIP is at class_device_remove_attrs+0xa/0x30 [ 16.048377] eax: dfd04338 ebx: 00000000 ecx: df655988 edx: 00000000 [ 16.048456] esi: 00000000 edi: dfd04338 ebp: 00000000 esp: df506e38 [ 16.048535] ds: 007b es: 007b fs: 00d8 gs: 0033 ss: 0068 [ 16.048614] Process rmmod (pid: 1455, ti=df506000 task=df6cc0b0 task.ti=df506000) [ 16.048693] Stack: dfd04338 dfd04340 00000000 c02db02f 00000000 dfd04338 dfd041e4 c0331871 [ 16.049159] 00000000 c02db065 dfd041b0 c0331858 c055006d 0975d589 00000026 0000035c [ 16.049626] 00000000 c033ced6 00000000 df24c000 c0331879 c02d859f df24c0bc df24c0bc [ 16.050091] Call Trace: [ 16.050233] [<c02db02f>] class_device_del+0xcc/0xfa [ 16.050352] [<c0331871>] __nodemgr_remove_host_dev+0x0/0xb ... [ 16.057248] EIP: [<c02daf3d>] class_device_remove_attrs+0xa/0x30 SS:ESP 0068:df506e38
Quoted 1 line
...
You missed the following entry in my list [1]:
Subject : Oops in __nodemgr_remove_host_dev
References : http://lkml.org/lkml/2007/3/14/4
http://lkml.org/lkml/2007/3/18/87
Submitter : Ismail Dönmez <[email protected]>
Stefan Richter <[email protected]> Thomas Meyer <[email protected]>
commit 43cb76d91ee85f579a69d42bc8efc08bac560278
commit 40cf67c5fcc513406558c01b91129280208e57bfStatus : problem is being debugged
cu
Adrian
[1] not meant as an offence - there are so many items in the list that it's easy to miss one
Signature · 4 lines
"Is there not promise of rain?" Ling Tan asked suddenly out
of the darkness. There had been need of rain for many days.
"Only a promise," Lao Er said.
Pearl S. Buck - Dragon SeedRe: [1/6] 2.6.21-rc4: known regressions
In reply to Adrian BunkQuoted 6 lines · Adrian Bunk
Subject : weird system hangs
References : http://lkml.org/lkml/2007/3/16/288
Submitter : Michal Piotrowski <[email protected]>
Mariusz Kozlowski <[email protected]>
Status : unknown
According to the console log, it seems to be hung because a lot of processes are stuck in D state in various variations of this:
Call Trace: [<c01ba134>] start_this_handle+0x2d7/0x355 [<c01ba265>] journal_start+0xb3/0xe1 [<c01b2837>] ext3_journal_start_sb+0x48/0x4a [<c01b0924>] ext3_create+0x47/0xe2 [<c017820c>] vfs_create+0xcd/0x13e [<c017ab6e>] open_namei+0x176/0x5b5 [<c0170026>] do_filp_open+0x26/0x3b [<c017007e>] do_sys_open+0x43/0xc2 [<c0170135>] sys_open+0x1c/0x1e [<c0104064>] syscall_call+0x7/0xb
and then you have "kget" (whatever that is) which is doing
Call Trace: [<c0318981>] schedule_timeout+0x70/0x8e [<c03189b4>] schedule_timeout_uninterruptible+0x15/0x17 [<c01b964a>] journal_stop+0xe2/0x1e6 [<c01ba2b0>] journal_force_commit+0x1d/0x1f [<c01b29fb>] ext3_force_commit+0x22/0x24 [<c01ad607>] ext3_write_inode+0x34/0x3a [<c0189f74>] __writeback_single_inode+0x1c5/0x2cb [<c018a096>] sync_inode+0x1c/0x2e [<c01a9ff7>] ext3_sync_file+0xab/0xc0 [<c018c8c5>] do_fsync+0x4b/0x98 [<c018c932>] __do_fsync+0x20/0x2f [<c018c951>] sys_fdatasync+0x10/0x12 [<c0104064>] syscall_call+0x7/0xb
with kjournald in D sleep at
[<c01bb7b2>] journal_commit_transaction+0x15d/0x11d3 [<c01bfcbe>] kjournald+0xab/0x1e8 [<c01333dd>] kthread+0xb5/0xe0 [<c0104cd3>] kernel_thread_helper+0x7/0x10
which certainly looks like something is waiting for an IO to finish.
In contrast, the hang reported by Mariusz Kozlowski has a slightly different feel to it, but there's a tantalizing pattern in there too:
http://www.ussg.iu.edu/hypermail/linux/kernel/0703.0/1243.html
Call Trace: [<c03ec87e>] io_schedule+0x42/0x59 [<c0184915>] sleep_on_buffer+0x8/0xc [<c03ed217>] __wait_on_bit+0x47/0x6c [<c03ed297>] out_of_line_wait_on_bit+0x5b/0x64 [<c01848a8>] __wait_on_buffer+0x27/0x2d [<c01b4228>] journal_commit_transaction+0x707/0x127f [<c01b868b>] kjournald+0xac/0x1ed [<c0126af5>] kthread+0xa2/0xc9 [<c010422b>] kernel_thread_helper+0x7/0x1c
which certainly also looks like an IO never completed (or completed but never woke anything up).
It also seems to be related to *buffers*. Maybe the whole bh layer thing is a fluke, but it's not waiting for normal data, it's very much waiting for those journal things that all use buffer heads.Which just makes me worry about those patches by Nick (which did come in through Andrew). I don't think it's the memorder one (it looks safe and shouldn't matter on x86 anyway!), but what about the
fs: fix __block_write_full_page error case buffer submission
locking change for example? Or that "fs: fix nobh data leak" thing with its fix? It uses "SetPageUptodate(page);" without waking up anybody who might wait for it (but the waiters here seem to wait on buffers, so that's probably not it)..
Alternatively, maybe it really is an _io_ problem (and the buffer-head thing is just a red herring, and it could happen to other IO, it's just that metadata IO uses buffer heads), and it's the scheduler changes since 2.6.20..
Jens, Nick.. Could you take a look?
Linus
Re: [1/6] 2.6.21-rc4: known regressions
Quoted 15 lines · Linus Torvalds
In contrast, the hang reported by Mariusz Kozlowski has a slightly different feel to it, but there's a tantalizing pattern in there too:
http://www.ussg.iu.edu/hypermail/linux/kernel/0703.0/1243.html
Call Trace: [<c03ec87e>] io_schedule+0x42/0x59 [<c0184915>] sleep_on_buffer+0x8/0xc [<c03ed217>] __wait_on_bit+0x47/0x6c [<c03ed297>] out_of_line_wait_on_bit+0x5b/0x64 [<c01848a8>] __wait_on_buffer+0x27/0x2d [<c01b4228>] journal_commit_transaction+0x707/0x127f [<c01b868b>] kjournald+0xac/0x1ed [<c0126af5>] kthread+0xa2/0xc9 [<c010422b>] kernel_thread_helper+0x7/0x1c
Quoted 7 lines
which certainly also looks like an IO never completed (or completed but never woke anything up).
It also seems to be related to *buffers*. Maybe the whole bh layer thing is a fluke, but it's not waiting for normal data, it's very much waiting for those journal things that all use buffer heads.Which just makes me worry about those patches by Nick (which did come in through Andrew). I don't think it's the memorder one (it looks safe and shouldn't matter on x86 anyway!), but what about the
fs: fix
__block_write_full_pageerror case buffer submissionlocking change for example? Or that "fs: fix nobh data leak" thing with its fix? It uses "SetPageUptodate(page);" without waking up anybody who might wait for it (but the waiters here seem to wait on buffers, so that's probably not it)..
Nothing sleeps on PageUptodate, so I don't think that could explain it.
The fs: fix __block_write_full_page error case buffer submission patch does change the locking, but I'd be really suprised if that was the problem, because it changes locking to match the regular non-error path submission.
It could be possible that ext3 is doing something weird and expecting the old behaviour if it failed get_block, but that seems pretty weird to do, and would need fixing.
fs: nobh data leak... again hard to see how it could cause an unlock/wakeup to get lost. Is Mariusz using the nobh mount option?
It wouldn't hurt to test with these patches backed out...
Quoted 1 line
Alternatively, maybe it really is an _io_ problem (and the buffer-head thing is just a red herring, and it could happen to other IO, it's just that metadata IO uses buffer heads), and it's the scheduler changes since 2.6.20..
I see what you mean. Could it be an ext3 or jbd change I wonder?
Signature · 2 lines
SUSE Labs, Novell Inc. Send instant messages to your online friends http://au.messenger.yahoo.com
Re: [1/6] 2.6.21-rc4: known regressions
Quoted 2 lines · Nick Piggin
Nothing sleeps on PageUptodate, so I don't think that could explain it.
Good point. I forget that we just test "uptodate", but then always sleep on "locked".
Quoted 4 lines
The fs: fix
__block_write_full_pageerror case buffer submission patch does change the locking, but I'd be really suprised if that was the problem, because it changes locking to match the regular non-error path submission.
I'd agree, except something clearly has changed ;^)
Quoted 6 lines
Quoted 4 lines
Alternatively, maybe it really is an _io_ problem (and the buffer-head thing is just a red herring, and it could happen to other IO, it's just that metadata IO uses buffer heads), and it's the scheduler changes since 2.6.20..
I see what you mean. Could it be an ext3 or jbd change I wonder?
jbd hasn't changed since 2.6.20, and the ext3 changes are mostly things like const'ness fixes. And others were things like changing "journal_current_handle()" into "ext3_journal_current_handle()", which looked exciting considering that the hung processes were waiting for the journal, but the fact is, that's just an inline function that just calls the old function, so..
But interestingly, there *is* a "EA block reference count racing fix" that does move a lock_buffer()/unlock_buffer() to cover a bigger area. It looks "obviously correct", but maybe there's a deadlock possibility there with ext3_forget() or something?
Linus
Re: [1/6] 2.6.21-rc4: known regressions
Quoted 29 lines · Linus Torvalds
Quoted 2 lines · Nick Piggin
Nothing sleeps on PageUptodate, so I don't think that could explain it.
Good point. I forget that we just test "uptodate", but then always sleep on "locked".
Quoted 4 lines
The fs: fix
__block_write_full_pageerror case buffer submission patch does change the locking, but I'd be really suprised if that was the problem, because it changes locking to match the regular non-error path submission.I'd agree, except something clearly has changed ;^)
Quoted 6 lines
Quoted 4 lines
Alternatively, maybe it really is an _io_ problem (and the buffer-head thing is just a red herring, and it could happen to other IO, it's just that metadata IO uses buffer heads), and it's the scheduler changes since 2.6.20..
I see what you mean. Could it be an ext3 or jbd change I wonder?
jbd hasn't changed since 2.6.20, and the ext3 changes are mostly things like const'ness fixes. And others were things like changing "
journal_current_handle()" into "ext3_journal_current_handle()", which looked exciting considering that the hung processes were waiting for the journal, but the fact is, that's just an inline function that just calls the old function, so..
Quoted 5 lines
But interestingly, there *is* a "EA block reference count racing fix" that does move a lock_buffer()/unlock_buffer() to cover a bigger area. It looks "obviously correct", but maybe there's a deadlock possibility there with
ext3_forget()or something?
I might missed something, so far I can't see a deadlock yet. If there is a deadlock, I think we should see ext3_xattr_release_block() and ext3_forget() on the stack. Is this the case?
Regards,
Mingming
Quoted 7 lines
Linus
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Re: [1/6] 2.6.21-rc4: known regressions
[ Ok, I think it's those timers again...
Ingo: let me just state how *happy* I am that I told you off when you wanted to merge the hires timers and NO_HZ before 2.6.20 because they were "stable". You were wrong, and 2.6.20 is at least in reasonable shape. Now we just need to make sure that 2.6.21 will be too.. ]
Quoted 4 lines · Mingming Cao
I might missed something, so far I can't see a deadlock yet. If there is a deadlock, I think we should see
ext3_xattr_release_block()andext3_forget()on the stack. Is this the case?
No. What's strange is that two (maybe more, I didn't check) processes seem to be stuck in
[<c0318981>] schedule_timeout+0x70/0x8e [<c03189b4>] schedule_timeout_uninterruptible+0x15/0x17 [<c01b964a>] journal_stop+0xe2/0x1e6 [<c01ba2b0>] journal_force_commit+0x1d/0x1f [<c01b29fb>] ext3_force_commit+0x22/0x24 [<c01ad607>] ext3_write_inode+0x34/0x3a [<c0189f74>] __writeback_single_inode+0x1c5/0x2cb [<c018a096>] sync_inode+0x1c/0x2e [<c01a9ff7>] ext3_sync_file+0xab/0xc0 [<c018c8c5>] do_fsync+0x4b/0x98 [<c018c932>] __do_fsync+0x20/0x2f [<c018c960>] sys_fsync+0xd/0xf [<c0104064>] syscall_call+0x7/0xb
but that that thing is literally:
...
do {
old_handle_count = transaction->t_handle_count;
schedule_timeout_uninterruptible(1);
} while (old_handle_count != transaction->t_handle_count);
...and especially if nothing is happening, I'd not expect "transaction->t_handle_count" to keep changing, so it should stop very quickly.
Maybe it's CONFIG_NO_HZ again, and the problem is that timeout, and simply no timer tick happening?
Bingo. I think that's it.
active timers: #0: hardirq_stack, tick_sched_timer, S:01 # expires at 9530893000000 nsecs [in -2567889 nsecs] #1: hardirq_stack, hrtimer_wakeup, S:01 # expires at 10858649798503 nsecs [in 1327754230614 nsecs] .expires_next : 9530893000000 nsecs
See
http://lkml.org/lkml/2007/3/16/288
and that in turn points to the kernel log:
http://www.stardust.webpages.pl/files/tbf/bitis-gabonica/2.6.21-rc4/git-console.log
Re: [1/6] 2.6.21-rc4: known regressions
Quoted 56 lines · Linus Torvalds
[ Ok, I think it's those timers again...
Ingo: let me just state how *happy* I am that I told you off when you wanted to merge the hires timers and
NO_HZbefore 2.6.20 because they were "stable". You were wrong, and 2.6.20 is at least in reasonable shape. Now we just need to make sure that 2.6.21 will be too.. ]Quoted 4 lines · Mingming Cao
I might missed something, so far I can't see a deadlock yet. If there is a deadlock, I think we should see
ext3_xattr_release_block()andext3_forget()on the stack. Is this the case?No. What's strange is that two (maybe more, I didn't check) processes seem to be stuck in
[<c0318981>] schedule_timeout+0x70/0x8e [<c03189b4>] schedule_timeout_uninterruptible+0x15/0x17 [<c01b964a>] journal_stop+0xe2/0x1e6 [<c01ba2b0>] journal_force_commit+0x1d/0x1f [<c01b29fb>] ext3_force_commit+0x22/0x24 [<c01ad607>] ext3_write_inode+0x34/0x3a [<c0189f74>] __writeback_single_inode+0x1c5/0x2cb [<c018a096>] sync_inode+0x1c/0x2e [<c01a9ff7>] ext3_sync_file+0xab/0xc0 [<c018c8c5>] do_fsync+0x4b/0x98 [<c018c932>] __do_fsync+0x20/0x2f [<c018c960>] sys_fsync+0xd/0xf [<c0104064>] syscall_call+0x7/0xbbut that that thing is literally:
... do { old_handle_count = transaction->t_handle_count; schedule_timeout_uninterruptible(1); } while (old_handle_count != transaction->t_handle_count); ...and especially if nothing is happening, I'd not expect "
transaction->t_handle_count" to keep changing, so it should stop very quickly.Maybe it's
CONFIG_NO_HZagain, and the problem is that timeout, and simply no timer tick happening?Bingo. I think that's it.
active timers: #0: hardirq_stack, tick_sched_timer, S:01 # expires at 9530893000000 nsecs [in -2567889 nsecs] #1: hardirq_stack, hrtimer_wakeup, S:01 # expires at 10858649798503 nsecs [in 1327754230614 nsecs] .expires_next : 9530893000000 nsecs
Quoted 7 lines
See
http://lkml.org/lkml/2007/3/16/288and that in turn points to the kernel log:
http://www.stardust.webpages.pl/files/tbf/bitis-gabonica/2.6.21-rc4/git-console.log
Seems convincing. Michal, can you post your .config, and if you had dynticks and hrtimers enabled, try reproducing without them?
Re: [1/6] 2.6.21-rc4: known regressions
Quoted 59 lines · Nick Piggin
Quoted 58 lines · Linus Torvalds
[ Ok, I think it's those timers again...
Ingo: let me just state how *happy* I am that I told you off when you wanted to merge the hires timers and
NO_HZbefore 2.6.20 because they were "stable". You were wrong, and 2.6.20 is at least in reasonable shape. Now we just need to make sure that 2.6.21 will be too.. ]Quoted 4 lines · Mingming Cao
I might missed something, so far I can't see a deadlock yet. If there is a deadlock, I think we should see
ext3_xattr_release_block()andext3_forget()on the stack. Is this the case?No. What's strange is that two (maybe more, I didn't check) processes seem to be stuck in
[<c0318981>] schedule_timeout+0x70/0x8e [<c03189b4>] schedule_timeout_uninterruptible+0x15/0x17 [<c01b964a>] journal_stop+0xe2/0x1e6 [<c01ba2b0>] journal_force_commit+0x1d/0x1f [<c01b29fb>] ext3_force_commit+0x22/0x24 [<c01ad607>] ext3_write_inode+0x34/0x3a [<c0189f74>] __writeback_single_inode+0x1c5/0x2cb [<c018a096>] sync_inode+0x1c/0x2e [<c01a9ff7>] ext3_sync_file+0xab/0xc0 [<c018c8c5>] do_fsync+0x4b/0x98 [<c018c932>] __do_fsync+0x20/0x2f [<c018c960>] sys_fsync+0xd/0xf [<c0104064>] syscall_call+0x7/0xbbut that that thing is literally:
... do { old_handle_count = transaction->t_handle_count; schedule_timeout_uninterruptible(1); } while (old_handle_count != transaction->t_handle_count); ...and especially if nothing is happening, I'd not expect "
transaction->t_handle_count" to keep changing, so it should stop very quickly.Maybe it's
CONFIG_NO_HZagain, and the problem is that timeout, and simply no timer tick happening?Bingo. I think that's it.
active timers: #0: hardirq_stack, tick_sched_timer, S:01 # expires at 9530893000000 nsecs [in -2567889 nsecs] #1: hardirq_stack, hrtimer_wakeup, S:01 # expires at 10858649798503 nsecs [in 1327754230614 nsecs] .expires_next : 9530893000000 nsecsSee
Quoted 9 lines
Quoted 5 lines
http://lkml.org/lkml/2007/3/16/288and that in turn points to the kernel log:
http://www.stardust.webpages.pl/files/tbf/bitis-gabonica/2.6.21-rc4/git-console.logSeems convincing. Michal, can you post your .config, and if you had dynticks and hrtimers enabled, try reproducing without them?
http://www.stardust.webpages.pl/files/tbf/bitis-gabonica/2.6.21-rc4/git-config
I don't know how to reproduce this bug on 2.6.21-rc4.On 2.6.21-rc2-mm1 it was very simple, just run youtube, bash_shared_mapping etc. In fact I didn't see this bug for a week.
Unfortunately, I wasn't able to take a crash dump because of sound card driver bug (I've got crash dump from 2.6.21-rc2-mm1).
Regards,
Michal
Signature · 5 lines
Michal K. K. Piotrowski LTG - Linux Testers Group (PL) (http://www.stardust.webpages.pl/ltg/) LTG - Linux Testers Group (EN) (http://www.stardust.webpages.pl/linux_testers_group_en/)
Re: [1/6] 2.6.21-rc4: known regressions
Quoted 11 lines · Michal Piotrowski
Quoted 9 lines · Nick Piggin
Quoted 4 lines
and that in turn points to the kernel log:
http://www.stardust.webpages.pl/files/tbf/bitis-gabonica/2.6.21-rc4/git-console.log
Seems convincing. Michal, can you post your .config, and if you had dynticks and hrtimers enabled, try reproducing without them?
Quoted 5 lines
http://www.stardust.webpages.pl/files/tbf/bitis-gabonica/2.6.21-rc4/git-config
I don't know how to reproduce this bug on 2.6.21-rc4.On 2.6.21-rc2-mm1 it was very simple, just run youtube,
bash_shared_mappingetc. In fact I didn't see this bug for a week.
OK... for some reason this is listed as a regression against 2.6.21-rc4.
You do have CONFIG_NO_HZ=y, and it is likely to be the cause of your 2.6.21-rc2-mm1 problems, but maybe there have been fixes since then? Ingo?
Re: [1/6] 2.6.21-rc4: known regressions
Quoted 12 lines · Nick Piggin
Quoted 11 lines · Michal Piotrowski
Quoted 9 lines · Nick Piggin
Quoted 4 lines
and that in turn points to the kernel log:
http://www.stardust.webpages.pl/files/tbf/bitis-gabonica/2.6.21-rc4/git-console.log
Seems convincing. Michal, can you post your .config, and if you had dynticks and hrtimers enabled, try reproducing without them?
Quoted 8 lines
Quoted 5 lines
http://www.stardust.webpages.pl/files/tbf/bitis-gabonica/2.6.21-rc4/git-config
I don't know how to reproduce this bug on 2.6.21-rc4.On 2.6.21-rc2-mm1 it was very simple, just run youtube,
bash_shared_mappingetc. In fact I didn't see this bug for a week.OK... for some reason this is listed as a regression against 2.6.21-rc4.
...
Due to
http://lkml.org/lkml/2007/3/16/288
cu
Adrian
Signature · 4 lines
"Is there not promise of rain?" Ling Tan asked suddenly out
of the darkness. There had been need of rain for many days.
"Only a promise," Lao Er said.
Pearl S. Buck - Dragon SeedPATCH 1/1 hrtimers debug patch
In reply to Michal PiotrowskiQuoted 5 lines · Michal Piotrowski
http://www.stardust.webpages.pl/files/tbf/bitis-gabonica/2.6.21-rc4/git-config
I don't know how to reproduce this bug on 2.6.21-rc4. On 2.6.21-rc2-mm1 it was very simple, just run youtube,
bash_shared_mappingetc. In fact I didn't see this bug for a week.
hm. The sysrq-q info you provided shows a weird (=='impossible') high-res timers state, in that CPU#1's hrtimer_cpu_base->expires_next is at KTIME_MAX, and state has been there for around 8-9 minutes. The timers there just stay pending and never expire. Thomas and me have just spent 4 hours reviewing the affected code inside out and upside down but we can find no credible way for this condition to trigger. But it obviously happened on your box, and persisted for many minutes.
So to move this issue forward, i've written a hrtimers debug patch (attached) - which checks a couple of key assumptions in the hrtimers.c code, and which also extends the SysRq-Q debug info with this:
.expires_next : 88378000000 nsecs
.exp_prev : 88377000000 nsecs
last expires_next stacktrace:
update_cpu_base_expires_next+5f/63
hrtimer_interrupt+177/1b3
smp_apic_timer_interrupt+6e/80
apic_timer_interrupt+33/38
<ffffffff>
knowing which codepath updated expires_next to KTIME_MAX would be very helpful to us.
So could you please pick up latest git (12998096c or later), undo commit 25496caec (which broke my laptop - it might break your system too), and apply the attached patch, and keep lockdep enabled (so that you get CONFIG_STACKTRACE=y, essential for the stacktrace output above)? It might take some time for you to trigger this bug again, but that's the best idea we have so far. If we are lucky then one of the WARN_ON()s triggers much sooner.
if the hang occurs again then please do a SysRq-Q again and send us the output.
Ingo
---------------------------->
Subject: [patch] hrtimers debug patch
From: Ingo Molnar <[email protected]>
debugging helper for hrtimers. Keep a lookout for WARN_ON messages. Saves a stacktrace on every expires_next update, and makes that stack-trace available in SysRq-Q (or /proc/timer_list) output.
( make sure to run this on a lockdep-enabled kernel, so that
CONFIG_STACKTRACE=y. )
--- arch/i386/kernel/apic.c | 2 + include/linux/hrtimer.h | 7 +++++ kernel/hrtimer.c | 54 +++++++++++++++++++++++++++++++++++---------- kernel/time/tick-oneshot.c | 13 ++++++++++ kernel/time/timer_list.c | 21 ++++++++++++++++- 5 files changed, 83 insertions(+), 14 deletions(-)
arch/i386/kernel/apic.c +2 -0
@@ -523,6 +523,8 @@ void __init setup_boot_APIC_clock(void)*/ if (nmi_watchdog !=NMI_IO_APIC ) lapic_clockevent.features &= ~CLOCK_EVT_FEAT_DUMMY ; +else +printk (KERN_WARNING "APIC timer registered as dummy, due to nmi_watchdog=1!\n" ); }/* Setup the lapic or request the broadcast */
include/linux/hrtimer.h +7 -0
@@ -15,6 +15,7 @@#ifndef _LINUX_HRTIMER_H#define _LINUX_HRTIMER_H +#include <linux/stacktrace.h> #include <linux/rbtree.h> #include <linux/ktime.h> #include <linux/init.h>
@@ -196,6 +197,12 @@ struct hrtimer_cpu_base {struct hrtimer_clock_base clock_base[HRTIMER_MAX_CLOCK_BASES ];#ifdef CONFIG_HIGH_RES_TIMERS ktime_t expires_next; +# define HRTIMERS_STACK_TRACE_DEPTH 32 +# ifdef CONFIG_STACKTRACE +struct stack_trace exp_trace; +unsigned long exp_entries[HRTIMERS_STACK_TRACE_DEPTH ]; +# endif +ktime_t exp_prev;int hres_active;struct list_head cb_pending;unsigned long nr_events;
kernel/hrtimer.c +42 -12
146 lines not on this page · raw message
kernel/time/tick-oneshot.c +12 -1
@@ -73,8 +73,19 @@ int tick_switch_to_oneshot(void (*handlestruct clock_event_device *dev = td->evtdev;if (!dev || !(dev->features &CLOCK_EVT_FEAT_ONESHOT ) || - !tick_device_is_functional (dev)) + !tick_device_is_functional (dev)) { + +printk ("could not switch to one-shot clockevents mode.\n" ); +if (!dev) { +printk ("because no tick device\n" ); + }else { +if (!(dev->features &CLOCK_EVT_FEAT_ONESHOT )) +printk ("because %s does not support one-shot mode.\n" , dev->name); +if (!tick_device_is_functional (dev)) +printk ("because %s is not functional.\n" , dev->name); + }return -EINVAL ; + } td->mode =TICKDEV_MODE_ONESHOT ; dev->event_handler = handler;
kernel/time/timer_list.c +20 -1
@@ -46,7 +46,7 @@ static void print_name_offset(struct seq sym_name =kallsyms_lookup (addr, &size, &offset, &modname, namebuf);if (sym_name) -SEQ_printf (m,"%s" , sym_name); +SEQ_printf (m,"%s+%lx/%lx" , sym_name, offset, size);else SEQ_printf (m,"<%p>" , sym); }
@@ -129,6 +129,23 @@ print_base(struct seq_file *m, struct hrprint_active_timers (m, base, now); } +static void print_cpu_base_stack_trace (struct seq_file *m, +struct hrtimer_cpu_base *cpu_base) +{ +#ifdef CONFIG_STACKTRACE +struct stack_trace *trace = &cpu_base->exp_trace; +int i; + +SEQ_printf (m," last expires_next stacktrace:\n" ); +for (i =0 ; i < trace->nr_entries; i++) { +SEQ_printf (m," " ); +print_name_offset (m, (void *)trace->entries[i]); +SEQ_printf (m,"\n" ); + } +SEQ_printf (m,"\n" ); +#endif +} +static void print_cpu (struct seq_file *m,int cpu,u64 now) {struct hrtimer_cpu_base *cpu_base = &per_cpu (hrtimer_bases, cpu);
@@ -147,6 +164,8 @@ static void print_cpu(struct seq_file *m#ifdef CONFIG_HIGH_RES_TIMERS P_ns (expires_next); +P_ns (exp_prev); +print_cpu_base_stack_trace (m, cpu_base);P (hres_active);P (nr_events);#endif
A message that is not in the archive (sent off-list or not yet received): [email protected]
A message that is not in the archive (sent off-list or not yet received): [email protected]
Re: [patch] hrtimers debug patch
Quoted 6 lines · Michal Piotrowski
Quoted 3 lines
I've got a crash dump, I'll try to figure out what is causing it ;)
That might be useful
http://www.stardust.webpages.pl/files/tbf/bitis-gabonica/2.6.21-rc5/
Can you please upload a disassembly of hrtimer_interrupt() ?
I stared at hrtimer_interrupt() for quite a long time and I don't see how it can leave without reprogramming the event, when there are timers pending. And there are enough timers pending.
tglx
Re: [patch] hrtimers debug patch
Quoted 9 lines · Thomas Gleixner
Quoted 6 lines · Michal Piotrowski
Quoted 3 lines
I've got a crash dump, I'll try to figure out what is causing it ;)
That might be useful
http://www.stardust.webpages.pl/files/tbf/bitis-gabonica/2.6.21-rc5/Can you please upload a disassembly of
hrtimer_interrupt()?
http://www.stardust.webpages.pl/files/tbf/bitis-gabonica/2.6.21-rc5/dis_hrtimer_interrupt
http://www.stardust.webpages.pl/files/tbf/bitis-gabonica/2.6.21-rc5/gdb.debug
Quoted 9 lines
I stared at
hrtimer_interrupt()for quite a long time and I don't see how it can leave without reprogramming the event, when there are timers pending. And there are enough timers pending.tglx
Regards,
Michal
Signature · 5 lines
Michal K. K. Piotrowski LTG - Linux Testers Group (PL) (http://www.stardust.webpages.pl/ltg/) LTG - Linux Testers Group (EN) (http://www.stardust.webpages.pl/linux_testers_group_en/)
Re: [patch] hrtimers debug patch
Quoted 6 lines · Michal Piotrowski
Quoted 5 lines · Thomas Gleixner
Quoted 4 lines · Michal Piotrowski
Quoted 3 lines
I've got a crash dump, I'll try to figure out what is causing it ;)
Quoted 7 lines
Quoted 4 lines
Quoted 2 lines
That might be useful
http://www.stardust.webpages.pl/files/tbf/bitis-gabonica/2.6.21-rc5/Can you please upload a disassembly of
hrtimer_interrupt()?http://www.stardust.webpages.pl/files/tbf/bitis-gabonica/2.6.21-rc5/dis_hrtimer_interrupt
I just noticed, that 'dis hrtimer_interrupt > dis_hrtimer_interrupt' doesn't save the whole output.
http://www.stardust.webpages.pl/files/tbf/bitis-gabonica/2.6.21-rc5/hrtimer_interrupt
Regards,
Michal
Signature · 5 lines
Michal K. K. Piotrowski LTG - Linux Testers Group (PL) (http://www.stardust.webpages.pl/ltg/) LTG - Linux Testers Group (EN) (http://www.stardust.webpages.pl/linux_testers_group_en/)
Re: [patch] hrtimers debug patch
In reply to a message not in the archiveQuoted 1 line · Michal Piotrowski
Stardust is down, console log and config attached.
thanks! I have stared at hrtimer.c a few more hours and the good news is that i found a narrow SMP race. The bad news is that i dont think it could explain your bug symptoms: the worst-case effect of the race should be an incorrect timeout on the current CPU - not a KTIME_MAX thing like your logs show.
But maybe i didnt think through the effects of the bug well enough, and your box has a HT CPU, with HT CPUs being pretty good at triggering narrow SMP races - so maybe we are lucky? Fix attached below. Patch is build and boot-tested.
Ingo
------------------>
Subject: [patch] hrtimers: fix reprogramming SMP race
From: Ingo Molnar <[email protected]>
hrtimer_start() incorrectly set the 'reprogram' flag to enqueue_hrtimer(), which should only be 1 if the hrtimer is queued to the current CPU.
doing otherwise could result in a reprogramming of the current CPU's clockevents device, with a timer that is not queued to it - resulting in a bogus next expiry value.
--- kernel/hrtimer.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-)
kernel/hrtimer.c +6 -1
@@ -844,7 +844,12 @@ hrtimer_start(struct hrtimer *timer, ktitimer_stats_hrtimer_set_start_info (timer); -enqueue_hrtimer (timer, new_base, base == new_base); +/* +* Only allow reprogramming if the new base is on this CPU. +* (it might still be on another CPU if the timer was pending) +*/ +enqueue_hrtimer (timer, new_base, + new_base->cpu_base == &__get_cpu_var (hrtimer_bases));unlock_hrtimer_base (timer, &flags);
Re: [patch] hrtimers debug patch
Quoted 11 lines · Ingo Molnar
Quoted 1 line · Michal Piotrowski
Stardust is down, console log and config attached.
thanks! I have stared at
hrtimer.ca few more hours and the good news is that i found a narrow SMP race. The bad news is that i dont think it could explain your bug symptoms: the worst-case effect of the race should be an incorrect timeout on the current CPU - not aKTIME_MAXthing like your logs show.
Quoted 4 lines
But maybe i didnt think through the effects of the bug well enough, and your box has a HT CPU, with HT CPUs being pretty good at triggering narrow SMP races - so maybe we are lucky? Fix attached below. Patch is build and boot-tested.
Thanks. Verification may take some time.
Quoted 3 lines
Ingo
Regards,
Michal
Signature · 5 lines
Michal K. K. Piotrowski LTG - Linux Testers Group (PL) (http://www.stardust.webpages.pl/ltg/) LTG - Linux Testers Group (EN) (http://www.stardust.webpages.pl/linux_testers_group_en/)
Re: [patch] hrtimers debug patch
In reply to Ingo MolnarHi all,
Quoted 11 lines · Ingo Molnar
Quoted 1 line · Michal Piotrowski
Stardust is down, console log and config attached.
thanks! I have stared at
hrtimer.ca few more hours and the good news is that i found a narrow SMP race. The bad news is that i dont think it could explain your bug symptoms: the worst-case effect of the race should be an incorrect timeout on the current CPU - not aKTIME_MAXthing like your logs show.
Quoted 5 lines
But maybe i didnt think through the effects of the bug well enough, and your box has a HT CPU, with HT CPUs being pretty good at triggering narrow SMP races - so maybe we are lucky? Fix attached below. Patch is build and boot-tested.
I didn't see this weird hang for 12 days. I think that this patch solves this issue.
Huge thans!
Regards,
Michal
Signature · 5 lines
Michal K. K. Piotrowski LTG - Linux Testers Group (PL) (http://www.stardust.webpages.pl/ltg/) LTG - Linux Testers Group (EN) (http://www.stardust.webpages.pl/linux_testers_group_en/)
Re: [patch] hrtimers debug patch
Quoted 6 lines · Michal Piotrowski
Quoted 6 lines
thanks! I have stared at
hrtimer.ca few more hours and the good news is that i found a narrow SMP race. The bad news is that i dont think it could explain your bug symptoms: the worst-case effect of the race should be an incorrect timeout on the current CPU - not aKTIME_MAXthing like your logs show.
Quoted 7 lines
Quoted 4 lines
But maybe i didnt think through the effects of the bug well enough, and your box has a HT CPU, with HT CPUs being pretty good at triggering narrow SMP races - so maybe we are lucky? Fix attached below. Patch is build and boot-tested.
I didn't see this weird hang for 12 days. I think that this patch solves this issue.
cool :)
Quoted 1 line
Huge thans!
huge thanks to you for testing it!
Ingo
Re: [1/6] 2.6.21-rc4: known regressions
In reply to Linus Torvaldsthere's a new post-rc4 regression: my T60 hangs during early bootup. I bisected the hang down to this recent commit:
| commit 25496caec111481161e7f06bbfa12a533c43cc6f | Author: Thomas Renninger <[email protected]> | Date: Tue Feb 27 12:13:00 2007 -0500 | | ACPI: Only use IPI on known broken machines (AMD, Dothan/BaniasPentium M)
undoing this change fixes my T60 so it correctly boots again.
the commit has this confidence-raising comment:
| However, I am not sure about the naming of the parameter and how it | could/should get integrated into the dyntick part | (CONFIG_GENERIC_CLOCKEVENTS). There, a more fine grained check (TSC | still running?, ..) is needed?
could we please revert this commit until it's done correctly?
and did this end up being a 'fix'? The change weakens the scope of a hardware workaround, which IMO has no place so late in the cycle. At a minimum the clockevents maintainer (Thomas) should have been Cc:-ed on it.
Ingo
Re: [1/6] 2.6.21-rc4: known regressions
Quoted 18 lines · Ingo Molnar
there's a new post-rc4 regression: my T60 hangs during early bootup. I bisected the hang down to this recent commit:
| commit 25496caec111481161e7f06bbfa12a533c43cc6f | Author: Thomas Renninger <[email protected]> | Date: Tue Feb 27 12:13:00 2007 -0500 | | ACPI: Only use IPI on known broken machines (AMD, Dothan/BaniasPentium M)undoing this change fixes my T60 so it correctly boots again.
the commit has this confidence-raising comment:
| However, I am not sure about the naming of the parameter and how it | could/should get integrated into the dyntick part | (CONFIG_GENERIC_CLOCKEVENTS). There, a more fine grained check (TSC | still running?, ..) is needed?
Quoted 6 lines
could we please revert this commit until it's done correctly?
and did this end up being a 'fix'? The change weakens the scope of a hardware workaround, which IMO has no place so late in the cycle. At a minimum the clockevents maintainer (Thomas) should have been Cc:-ed on it.
Ingo,
I had seen it before, and I had no objections under the premise, that it does not break things and especially survives on Andrews VAIO. I expected that to come in via -mm so it gets enough testing.
We should revert that patch and add a "trust_lapic_timer_in_c2" commandline option instead. So we are on the safe side.
tglx
PATCH 1/1 i386: add command line option "local_apic_timer_c2_ok"
Quoted 2 lines · Thomas Gleixner
We should revert that patch and add a "
trust_lapic_timer_in_c2" commandline option instead. So we are on the safe side.
Here is a patch which applies after reverting25496caec111481161e7f06bbfa12a533c43cc6f
It turned out that it is almost impossible to trust ACPI, BIOS & Co. regarding the C states. This was the reason to switch the local apic timer off in C2 state already. OTOH there are sane and well behaving systems, which get punished by that decision.
Allow the user to confirm that the local apic timer is trustworthy in C2 state. This keeps the default behaviour on the safe side.
Documentation/kernel-parameters.txt +3 -0
@@ -780,6 +780,9 @@ and is between 256 and 4096 characters. It is defined in the file lapic [IA-32,APIC] Enable the local APIC even if BIOS disabled it. + lapic_timer_c2_ok [IA-32,APIC] trust the local apic timer in + C2 power state. + lasi= [HW,SCSI] PARISC LASI driver for the 53c700 chip Format: addr:<io>,irq:<irq>
arch/i386/kernel/apic.c +10 -0
@@ -64,6 +64,9 @@ static int enable_local_apic __initdata = 0;static int local_apic_timer_verify_ok;/* Disable local APIC timer from the kernel commandline or via dmi quirk */ static int local_apic_timer_disabled; +/* Local APIC timer works in C2 */ +int local_apic_timer_c2_ok; +EXPORT_SYMBOL_GPL (local_apic_timer_c2_ok);/* * Debug level, exported for io_apic.c
@@ -1232,6 +1235,13 @@ static int __init parse_disable_lapic_timer(char *arg) }early_param ("nolapic_timer" , parse_disable_lapic_timer); +static int __init parse_lapic_timer_c2_ok (char *arg) +{ + local_apic_timer_c2_ok =1 ; +return 0 ; +} +early_param ("lapic_timer_c2_ok" , parse_lapic_timer_c2_ok); +static int __init apic_set_verbosity (char *str) {if (strcmp ("debug" , str) ==0 )
drivers/acpi/processor_idle.c +2 -1
@@ -268,6 +268,7 @@ static void acpi_timer_check_state(int state, struct acpi_processor *pr, struct acpi_processor_cx *cx) {struct acpi_processor_power *pwr = &pr->power; +u8 type = local_apic_timer_c2_ok ?ACPI_STATE_C3 :ACPI_STATE_C2 ;/* * Check, if one of the previous states already marked the lapic
@@ -276,7 +277,7 @@ static void acpi_timer_check_state(int state, struct acpi_processor *pr,if (pwr->timer_broadcast_on_state < state)return ; -if (cx->type >=ACPI_STATE_C2 ) +if (cx->type >= type) pr->power.timer_broadcast_on_state = state; }
include/asm-i386/apic.h +1 -0
@@ -117,6 +117,7 @@ extern void enable_NMI_through_LVT0 (void * dummy);#define ARCH_APICTIMER_STOPS_ON_C3 1extern int timer_over_8254; +extern int local_apic_timer_c2_ok;#else /* !CONFIG_X86_LOCAL_APIC */ static inline void lapic_shutdown (void ) { }
Re: [PATCH] i386: add command line option "local_apic_timer_c2_ok"
Hi!
Quoted 7 lines
It turned out that it is almost impossible to trust ACPI, BIOS & Co. regarding the C states. This was the reason to switch the local apic timer off in C2 state already. OTOH there are sane and well behaving systems, which get punished by that decision.
Allow the user to confirm that the local apic timer is trustworthy in C2 state. This keeps the default behaviour on the safe side.
...
Documentation/kernel-parameters.txt and is between 256 and 4096 characters. It is defined in the file · line 785
Quoted 7 lines
Documentation/kernel-parameters.txt +3
-0@@ -780,6 +780,9 @@ and is between 256 and 4096 characters. It is defined in the file lapic [IA-32,APIC] Enable the local APIC even if BIOS disabled it. + lapic_timer_c2_ok [IA-32,APIC] trust the local apic timer in + C2 power state. +
Could you add comment saying that this is always ok on non-broken systems? That way perhaps it can be added to linux-firmware-test-cd, etc.
Signature · 2 lines
(english) http://www.livejournal.com/~pavelmachek (cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html
Re: [PATCH] i386: add command line option "local_apic_timer_c2_ok"
Quoted 7 lines · Pavel Machek
Documentation/kernel-parameters.txt and is between 256 and 4096 characters. It is defined in the file · line 785
Quoted 3 lines
Documentation/kernel-parameters.txt +3
-0+ lapic_timer_c2_ok [IA-32,APIC] trust the local apic timer in + C2 power state. +Could you add comment saying that this is always ok on non-broken systems? That way perhaps it can be added to linux-firmware-test-cd, etc.
Yep, post .21.
I still twist my brain how to autodetect that in a safe way, which would make it really useful for the firmware tester.
tglx
Len Brown
reviewerRe: [PATCH] i386: add command line option "local_apic_timer_c2_ok"
Quoted 7 lines · Thomas Gleixner
Quoted 3 lines · Pavel Machek
Documentation/kernel-parameters.txt and is between 256 and 4096 characters. It is defined in the file · line 785
Quoted 3 lines
Documentation/kernel-parameters.txt +3
-0+ lapic_timer_c2_ok [IA-32,APIC] trust the local apic timer in + C2 power state. +I still twist my brain how to autodetect that in a safe way, which would make it really useful for the firmware tester.
I think the only fool-proof way to do this automatically is to
1. do a boot-time calibration vs HPET, RTC, or 8254 to make sure it starts sane. ideally, this boot time test would enter the deepest available C-state -- as that would catch 99% of the failures.
2. do a _continuous_ sanity check against the same time to make sure it never gets off track. It has to be continuous because we apparently have no control over
when the BIOS breaks it on some systems. However, continuous really
means "long term" here, because over the uptime of the system we'd
probably notice the drift between different timers etc, so we'd
have to reset the sanity check periodically to not get fooled by that.
If this worked, then we could delete the new DMI entry for the nx6325, as that would get detected and disable the lapic timer use automatically. We could also delete the check for C2 and the check for C3 to disable the lapic timer.
-Len
Re: [PATCH] i386: add command line option "local_apic_timer_c2_ok"
Quoted 2 lines · Len Brown
I think the only fool-proof way to do this automatically is to
Why not just take the known-good CPUID signature?
Screw firmware or ACPI tables. They're going to be occasionally wrong.
If we know that "Core 2, version X" has a good local APIC timer, we use it. Otherwise we don't.
That's generally how we handle other APIC bugs too (the read-after-write thing, for example, or the differences between integrated and off-chip APIC's). Sometimes we check the APIC version itself, sometimes we check the CPUID information, and sometimes we check both ("modern_apic()").
Linus
Len Brown
reviewerRe: [PATCH] i386: add command line option "local_apic_timer_c2_ok"
Quoted 9 lines · Linus Torvalds
Quoted 2 lines · Len Brown
I think the only fool-proof way to do this automatically is to
Why not just take the known-good CPUID signature?
Screw firmware or ACPI tables. They're going to be occasionally wrong.
Quoted 7 lines
If we know that "Core 2, version X" has a good local APIC timer, we use it. Otherwise we don't.
That's generally how we handle other APIC bugs too (the read-after-write thing, for example, or the differences between integrated and off-chip APIC's). Sometimes we check the APIC version itself, sometimes we check the CPUID information, and sometimes we check both ("
modern_apic()").
Yep, this is what we tried to do last week.
It failed, and the patch was reverted.
I agree, the BIOS vendor can lie with ACPI tables. In particular, they can map any hardware C-state to any ACPI C-state. Our expectation that they would not map hardware C3 to ACPI C2 appears at this point to have been invalid.
So, speaking for Intel parts, every single one that supports HW C3 from the beginning of history through today has a broken LAPIC timer. (and a few listed in that patch are known to
be broken in HW C2) If we can't guarantee that the BIOS vendor
will not map that broken HW C3 to ACPI C2 (or even C1 via SMM) then we have to not use the LAPIC timer except for systems with a "known-good" signature = "part supports only C1".
If we really care about using the LAPIC timer on systems with deeper than C1 support, the only alternative seems to be to test if it actually works or not at boot and run-time. Otherwise, we wait for future hardware with guaranteed not to break under any (BIOS) conditions ships, and check for that.
Based on what I read of the HP nx6325 where the LAPIC timer is breaking C1, AMD is in the same boat.
-Len
Len Brown
reviewerRe: [PATCH] i386: add command line option "local_apic_timer_c2_ok"
Quoted 27 lines · Len Brown
Quoted 9 lines · Linus Torvalds
Quoted 2 lines · Len Brown
I think the only fool-proof way to do this automatically is to
Why not just take the known-good CPUID signature?
Screw firmware or ACPI tables. They're going to be occasionally wrong.
Quoted 7 lines
If we know that "Core 2, version X" has a good local APIC timer, we use it. Otherwise we don't.
That's generally how we handle other APIC bugs too (the read-after-write thing, for example, or the differences between integrated and off-chip APIC's). Sometimes we check the APIC version itself, sometimes we check the CPUID information, and sometimes we check both ("
modern_apic()").Yep, this is what we tried to do last week.
It failed, and the patch was reverted.I agree, the BIOS vendor can lie with ACPI tables. In particular, they can map any hardware C-state to any ACPI C-state. Our expectation that they would not map hardware C3 to ACPI C2 appears at this point to have been invalid.
Quoted 7 lines
So, speaking for Intel parts, every single one that supports HW C3 from the beginning of history through today has a broken LAPIC timer. (and a few listed in that patch are known to
be broken in HW C2) If we can't guarantee that the BIOS vendor
will not map that broken HW C3 to ACPI C2 (or even C1 via SMM) then we have to not use the LAPIC timer except for systems with a "known-good" signature = "part supports only C1".
On an Intel processor, it seems that the safe and simple route is if the system exports C2 or deeper, don't use the LAPIC timer. (which is what 2.6.21-rc5 is doing as of this moment) We may be able to white-list some systems over time.
Quoted 8 lines
If we really care about using the LAPIC timer on systems with deeper than C1 support, the only alternative seems to be to test if it actually works or not at boot and run-time. Otherwise, we wait for future hardware with guaranteed not to break under any (BIOS) conditions ships, and check for that.
Based on what I read of the HP nx6325 where the LAPIC timer is breaking C1, AMD is in the same boat.
The nx6325 (Turion 64 X2) exports only C1.
I'm not sure how the conclusion was drawn that it has a broken lapic timer as reflected in the "nolapic_timer" patch:
+ /*
+ * BIOS exports only C1 state, but uses deeper power
+ * modes behind the kernels back.
+ */
+ .callback = lapic_check_broken_bios,
+ .ident = "HP nx6325",
+ .matches = {+ DMI_MATCH(DMI_PRODUCT_NAME, "HP Compaq nx6325"),
+ },
+ },
But if this is true, then I don't know how to determine on an AMD system if the LAPIC timer is guaranteed to work -- even for systems with just C1.
Jordan, William,
can you clarify?
thanks,
-Len
Re: [PATCH] i386: add command line option "local_apic_timer_c2_ok"
Quoted 4 lines · Len Brown
On an Intel processor, it seems that the safe and simple route is if the system exports C2 or deeper, don't use the LAPIC timer. (which is what 2.6.21-rc5 is doing as of this moment) We may be able to white-list some systems over time.
On AMD it is the same, except that there seems to be at least one system that does C2 like things while only exporting C1. That is why i proposed to check for a battery too -- if there is one always disable it too.
-Andi
RE: [PATCH] i386: add command line option "local_apic_timer_c2_ok"
In reply to Len BrownQuoted 6 lines
Quoted 6 lines
If we really care about using the LAPIC timer on systems with deeper than C1 support, the only alternative seems to be to test if it actually works or not at boot and run-time. Otherwise, we wait for future hardware with guaranteed not to break under any (BIOS) conditions ships, and check for that.
Quoted 6 lines
Quoted 2 lines
Based on what I read of the HP nx6325 where the LAPIC timer is breaking C1, AMD is in the same boat.
The nx6325 (Turion 64 X2) exports only C1.
I'm not sure how the conclusion was drawn that it has a broken lapic timer as reflected in the "nolapic_timer" patch:
If both cores goes into C1 at the same time, the chipset can move the processor into a C3 like state called C1e.
Quoted 12 lines
(quoted diff) +8
-0+ /* + * BIOS exports only C1 state, but uses deeper power + * modes behind the kernels back. + */ + .callback = lapic_check_broken_bios, + .ident = "HP nx6325", + .matches = { + DMI_MATCH(DMI_PRODUCT_NAME, "HPCompaq nx6325"),
(quoted diff) +2
-0+ }, + },
Quoted 5 lines
But if this is true, then I don't know how to determine on an AMD system if the LAPIC timer is guaranteed to work -- even for systems with just C1.
Jordan, William, can you clarify?
For K7 and K8 through and including revision E, the LAPIC timer is guaranteed to work in C1.
For K8 revisions F and G, and for upcoming family 0x10 and 0x11 parts, if either bit in MSRC001_0055[28:27] is set, C1e is enabled and the LAPIC timer cannot be trusted in C1.
AMD can craft a patch to sort this out as soon as we have an idea what the framework is going to look like.
-Mark Langsdorf
Operating Systems Research Center
AMD, Inc.
Re: [PATCH] i386: add command line option "local_apic_timer_c2_ok"
Quoted 9 lines · Mark
Quoted 9 lines
Quoted 8 lines
If we really care about using the LAPIC timer on systems with deeper than C1 support, the only alternative seems to be to test if it actually works or not at boot and run-time. Otherwise, we wait for future hardware with guaranteed not to break under any (BIOS) conditions ships, and check for that.
Based on what I read of the HP nx6325 where the LAPIC timer is breaking C1, AMD is in the same boat.
Quoted 6 lines
Quoted 3 lines
The nx6325 (Turion 64 X2) exports only C1.
I'm not sure how the conclusion was drawn that it has a broken lapic timer as reflected in the "nolapic_timer" patch:If both cores goes into C1 at the same time, the chipset can move the processor into a C3 like state called C1e.
... and that seems to break the local APIC timer.
Quoted 2 lines
AMD can craft a patch to sort this out as soon as we have an idea what the framework is going to look like.
Just a snippet to detect it would be great. Then the dmi scan could be removed and replaced with that. This would be a 2.6.21 candidate imho over the DMI hack.
-Andi
Re: [PATCH] i386: add command line option "local_apic_timer_c2_ok"
Quoted 10 lines · Andi Kleen
Quoted 8 lines · Mark
Quoted 8 lines
Quoted 8 lines
If we really care about using the LAPIC timer on systems with deeper than C1 support, the only alternative seems to be to test if it actually works or not at boot and run-time. Otherwise, we wait for future hardware with guaranteed not to break under any (BIOS) conditions ships, and check for that.
Based on what I read of the HP nx6325 where the LAPIC timer is breaking C1, AMD is in the same boat.
Quoted 7 lines
Quoted 5 lines
Quoted 3 lines
The nx6325 (Turion 64 X2) exports only C1.
I'm not sure how the conclusion was drawn that it has a broken lapic timer as reflected in the "nolapic_timer" patch:If both cores goes into C1 at the same time, the chipset can move the processor into a C3 like state called C1e.
... and that seems to break the local APIC timer.
Yes. The APIC timer still runs, but no longer has an HT link to send the signal on.
Quoted 6 lines
Quoted 2 lines
AMD can craft a patch to sort this out as soon as we have an idea what the framework is going to look like.
Just a snippet to detect it would be great. Then the dmi scan could be removed and replaced with that. This would be a 2.6.21 candidate imho over the DMI hack.
Reviewed but not tested. Needs to be wrapped in an AMD specific call.
#define ENABLE_C1E_MASK 0x18000000
#define CPUID_PROCESSOR_SIGNATURE 1
#define CPUID_XFAM 0x0ff00000
#define CPUID_XFAM_K8 0x00000000
#define CPUID_XFAM_10H 0x00100000
#define CPUID_XFAM_11H 0x00200000
#define CPUID_XMOD 0x000f0000
#define CPUID_XMOD_REV_F 0x00040000
int safe_c1 = 1;
u32 eax, lo, hi;
eax = cpuid_eax(CPUID_PROCESSOR_SIGNATURE)
switch (eax & CPUID_XFAM) {
case CPUID_XFAM_K8:
if ((eax & CPUID_XMOD) < CPUID_XMOD_REV_F)
break;
case CPUID_XFAM_10H:
case CPUID_XFAM_11H:
rdmsr(MSR_ENABLE_C1E, lo, hi);
if (lo & ENABLE_C1E_MASK)
safe_c1 = 0;
break;
default:
/* err on the side of caution */
safe_c1 = 0;
}-Mark Langsdorf
Operating Systems Research Center
AMD, Inc.
Re: [PATCH] i386: add command line option "local_apic_timer_c2_ok"
Quoted 3 lines
Reviewed but not tested. Needs to be wrapped in an AMD specific call.
Here's a patch. I don't have a system with C1E, so i only tested that the apic timer still works on a older AMD box.
Would be good if someone with a Turion laptop, especially the HP nx6325 could test it with CONFIG_NO_HZ enabled.
-Andi
Disable local APIC timer use on AMD systems with C1E
AMD dual core laptops with C1E do not run the APIC timer correctly when they go idle. Previously the code assumed this only happened on C2 or deeper. But not all of these systems report support C2.
Use a AMD supplied snippet to detect C1E being enabled and then disable local apic timer use.
This supercedes an earlier workaround using DMI detection of specific systems.
arch/i386/kernel/apic.c +41 -29
@@ -272,32 +272,6 @@ static void __devinit setup_APIC_timer(v }/* -* Detect systems with known broken BIOS implementations -*/ -static int __init lapic_check_broken_bios (struct dmi_system_id *d) -{ -printk (KERN_NOTICE "%s detected: disabling lapic timer.\n" , - d->ident); - local_apic_timer_disabled =1 ; -return 0 ; -} - -static struct dmi_system_id __initdata broken_bios_dmi_table[] = { - { -/* -* BIOS exports only C1 state, but uses deeper power -* modes behind the kernels back. -*/ - .callback = lapic_check_broken_bios, - .ident ="HP nx6325" , - .matches = { -DMI_MATCH (DMI_PRODUCT_NAME ,"HP Compaq nx6325" ), - }, - }, - {} -}; - -/* * In this functions we calibrate APIC bus clocks to the external timer. * * We want to do the calibration only once since we want to have local timer
@@ -357,6 +331,44 @@ static void __init lapic_cal_handler(str } } +#define ENABLE_C1E_MASK 0x18000000 +#define CPUID_PROCESSOR_SIGNATURE 1 +#define CPUID_XFAM 0x0ff00000 +#define CPUID_XFAM_K8 0x00000000 +#define CPUID_XFAM_10H 0x00100000 +#define CPUID_XFAM_11H 0x00200000 +#define CPUID_XMOD 0x000f0000 +#define CPUID_XMOD_REV_F 0x00040000 + +/* AMD systems with C1E don't have a working lAPIC timer. Check for that. */ +static __init int amd_apic_timer_broken (void ) +{ +u32 lo, hi; +u32 eax =cpuid_eax (CPUID_PROCESSOR_SIGNATURE ); +switch (eax &CPUID_XFAM ) { +case CPUID_XFAM_K8 : +if ((eax &CPUID_XMOD ) <CPUID_XMOD_REV_F ) +break ; +case CPUID_XFAM_10H : +case CPUID_XFAM_11H : +rdmsr (MSR_K8_ENABLE_C1E , lo, hi); +if (lo &ENABLE_C1E_MASK ) +return 1 ; +break ; +default : +/* err on the side of caution */ +return 1 ; + } +return 0 ; +} + +static __init int apic_timer_broken (void ) +{ +if (boot_cpu_data.x86_vendor ==X86_VENDOR_AMD ) +return amd_apic_timer_broken (); +return 0 ; +} +/* * Setup the boot APIC *
@@ -372,12 +384,12 @@ void __init setup_boot_APIC_clock(void)long delta, deltapm;int pm_referenced =0 ; -/* Detect know broken systems */ -dmi_check_system (broken_bios_dmi_table); +if (apic_timer_broken ()) + local_apic_timer_disabled =1 ;/* * The local apic timer can be disabled via the kernel -* commandline or from the dmi quirk above. Register the lapic +* commandline or from the test above. Register the lapic * timer as a dummy clock event source on SMP systems, so the * broadcast mechanism is used. On UP systems simply ignore it. */
include/asm-i386/msr.h +2 -0
@@ -275,6 +275,8 @@ static inline void wrmsr_on_cpu(unsigned#define MSR_K7_FID_VID_CTL 0xC0010041#define MSR_K7_FID_VID_STATUS 0xC0010042 +#define MSR_K8_ENABLE_C1E 0xC0010055 +/* extended feature register */ #define MSR_EFER 0xc0000080
Re: [PATCH] i386: add command line option "local_apic_timer_c2_ok"
Quoted 3 lines · Andi Kleen
Here's a patch. I don't have a system with C1E, so i only tested that the apic timer still works on a older AMD box.
I think this looks better than what we have now, but it would look even better if the core CPUID stuff was in arch/i386/kernel/cpu/amd.c, and we simply had X86_FEATURE_BROKEN_C1_LAPIC etc..
And then the apic.c code would just check
if (boot_cpu_has(X86_FEATURE_BROKEN_C1_LAPIC)) return -1;
or similar.
Doing the same for C2 and C3 gives us a clean way to have all these per-vendor things in their relevant places, rather than having various vendor-specific checks sprinkled in random places..
That's *especially* true for something like this that can hit both on x86-64 and i386, where the cpuid logic is shared, but the APIC logic is *not* shared. If I read your patch correctly, this only fixes it on 32-bit platforms, and I don't think the problem is in any way 32-bit specific, is it?
Linus
Re: [PATCH] i386: add command line option "local_apic_timer_c2_ok"
Hi,
Quoted 10 lines · Linus Torvalds
Quoted 3 lines · Andi Kleen
Here's a patch. I don't have a system with C1E, so i only tested that the apic timer still works on a older AMD box.
I think this looks better than what we have now, but it would look even better if the core CPUID stuff was in
arch/i386/kernel/cpu/amd.c, and we simply hadX86_FEATURE_BROKEN_C1_LAPICetc..
Please don't, this would break the interface logically. X86_FEATURE_xxx usually denotes a *feature*, not a "feature" (Micro$oft speak for "bug" ;).
IOW most flags express a positive attribute, not a negative one. An exception to this probably is X86_FEATURE_FXSAVE_LEAK and X86_FEATURE_CMP_LEGACY, but all others seem to be positive, so we might want to enforce this rule.
Thus, how about e.g. X86_FEATURE_LAPIC_C1_OK?
Or is this less precise from a "C1 working ok" detection point of view? (i.e. we'd just assume by default that most machines are ok except the ones where we have issue detection code for, which might be too fuzzy)
Andreas Mohr
Re: [PATCH] i386: add command line option "local_apic_timer_c2_ok"
Quoted 4 lines · Andreas Mohr
Please don't, this would break the interface logically.
X86_FEATURE_xxxusually denotes a *feature*, not a "feature" (Micro$oft speak for "bug" ;).
Sure, we could make it positive instead, and I agree it would make code nicer to read.
Quoted 1 line
Thus, how about e.g.
X86_FEATURE_LAPIC_C1_OK?
I have no trouble at all with something like that instead. Anybody willing to cook up a patch?
Linus
Re: [PATCH] i386: add command line option "local_apic_timer_c2_ok"
In reply to Andreas MohrQuoted 7 lines · Andreas Mohr
Hi,
Quoted 4 lines · Linus Torvalds
Quoted 1 line · Andi Kleen
Quoted 8 lines
Quoted 6 lines
Quoted 2 lines
Here's a patch. I don't have a system with C1E, so i only tested that the apic timer still works on a older AMD box.
I think this looks better than what we have now, but it would look even better if the core CPUID stuff was in
arch/i386/kernel/cpu/amd.c, and we simply hadX86_FEATURE_BROKEN_C1_LAPICetc..Please don't, this would break the interface logically.
We already have several of those. And negative is much easier.
-Andi
Re: [PATCH] i386: add command line option "local_apic_timer_c2_ok"
In reply to Linus TorvaldsQuoted 10 lines · Linus Torvalds
Quoted 3 lines · Andi Kleen
Here's a patch. I don't have a system with C1E, so i only tested that the apic timer still works on a older AMD box.
I think this looks better than what we have now, but it would look even better if the core CPUID stuff was in
arch/i386/kernel/cpu/amd.c, and we simply hadX86_FEATURE_BROKEN_C1_LAPICetc..
Quoted 6 lines
And then the
apic.ccode would just checkif (boot_cpu_has(X86_FEATURE_BROKEN_C1_LAPIC)) return -1;or similar.
Ok fair point. Here's an updated patch.
Quoted 7 lines
Doing the same for C2 and C3 gives us a clean way to have all these per-vendor things in their relevant places, rather than having various vendor-specific checks sprinkled in random places..
That's *especially* true for something like this that can hit both on x86-64 and i386, where the cpuid logic is shared,
It's not shared.
Quoted 4 lines
but the APIC logic is
*not* shared. If I read your patch correctly, this only fixes it on 32-bit platforms, and I don't think the problem is in any way 32-bit specific, is it?
It is because 64bit doesn't have dyntick yet and doesn't try to use the lapic timer only by default. It has a "apicmaintimer" option, but that is never set automatically. When dyntick is ported over it will be needed there too.
-Andi
Disable local APIC timer use on AMD systems with C1E
AMD dual core laptops with C1E do not run the APIC timer correctly when they go idle. Previously the code assumed this only happened on C2 or deeper. But not all of these systems report support C2.
Use a AMD supplied snippet to detect C1E being enabled and then disable local apic timer use.
This supercedes an earlier workaround using DMI detection of specific systems.
arch/i386/kernel/apic.c +3 -29
@@ -272,32 +272,6 @@ static void __devinit setup_APIC_timer(v }/* -* Detect systems with known broken BIOS implementations -*/ -static int __init lapic_check_broken_bios (struct dmi_system_id *d) -{ -printk (KERN_NOTICE "%s detected: disabling lapic timer.\n" , - d->ident); - local_apic_timer_disabled =1 ; -return 0 ; -} - -static struct dmi_system_id __initdata broken_bios_dmi_table[] = { - { -/* -* BIOS exports only C1 state, but uses deeper power -* modes behind the kernels back. -*/ - .callback = lapic_check_broken_bios, - .ident ="HP nx6325" , - .matches = { -DMI_MATCH (DMI_PRODUCT_NAME ,"HP Compaq nx6325" ), - }, - }, - {} -}; - -/* * In this functions we calibrate APIC bus clocks to the external timer. * * We want to do the calibration only once since we want to have local timer
@@ -372,12 +346,12 @@ void __init setup_boot_APIC_clock(void)long delta, deltapm;int pm_referenced =0 ; -/* Detect know broken systems */ -dmi_check_system (broken_bios_dmi_table); +if (boot_cpu_has (X86_FEATURE_LAPIC_TIMER_BROKEN )) + local_apic_timer_disabled =1 ;/* * The local apic timer can be disabled via the kernel -* commandline or from the dmi quirk above. Register the lapic +* commandline or from the test above. Register the lapic * timer as a dummy clock event source on SMP systems, so the * broadcast mechanism is used. On UP systems simply ignore it. */
include/asm-i386/msr.h +2 -0
@@ -275,6 +275,8 @@ static inline void wrmsr_on_cpu(unsigned#define MSR_K7_FID_VID_CTL 0xC0010041#define MSR_K7_FID_VID_STATUS 0xC0010042 +#define MSR_K8_ENABLE_C1E 0xC0010055 +/* extended feature register */ #define MSR_EFER 0xc0000080
arch/i386/kernel/cpu/amd.c +34 -0
@@ -22,6 +22,37 @@extern void vide (void ); __asm__(".align 4\nvide: ret" ); +#define ENABLE_C1E_MASK 0x18000000 +#define CPUID_PROCESSOR_SIGNATURE 1 +#define CPUID_XFAM 0x0ff00000 +#define CPUID_XFAM_K8 0x00000000 +#define CPUID_XFAM_10H 0x00100000 +#define CPUID_XFAM_11H 0x00200000 +#define CPUID_XMOD 0x000f0000 +#define CPUID_XMOD_REV_F 0x00040000 + +/* AMD systems with C1E don't have a working lAPIC timer. Check for that. */ +static __cpuinit int amd_apic_timer_broken (void ) +{ +u32 lo, hi; +u32 eax =cpuid_eax (CPUID_PROCESSOR_SIGNATURE ); +switch (eax &CPUID_XFAM ) { +case CPUID_XFAM_K8 : +if ((eax &CPUID_XMOD ) <CPUID_XMOD_REV_F ) +break ; +case CPUID_XFAM_10H : +case CPUID_XFAM_11H : +rdmsr (MSR_K8_ENABLE_C1E , lo, hi); +if (lo &ENABLE_C1E_MASK ) +return 1 ; +break ; +default : +/* err on the side of caution */ +return 1 ; + } +return 0 ; +} +static void __cpuinit init_amd (struct cpuinfo_x86 *c) {u32 l, h;
@@ -241,6 +272,9 @@ static void __cpuinit init_amd(struct cpif (cpuid_eax (0x80000000 ) >=0x80000006 ) num_cache_leaves =3 ; + +if (amd_apic_timer_broken ()) +set_bit (X86_FEATURE_LAPIC_TIMER_BROKEN , c->x86_capability); }static unsigned int __cpuinit amd_size_cache (struct cpuinfo_x86 * c,unsigned int size)
include/asm-i386/cpufeature.h +1 -0
@@ -75,6 +75,7 @@#define X86_FEATURE_ARCH_PERFMON (3*32+11)/* Intel Architectural PerfMon */ #define X86_FEATURE_PEBS (3*32+12)/* Precise-Event Based Sampling */ #define X86_FEATURE_BTS (3*32+13)/* Branch Trace Store */ +#define X86_FEATURE_LAPIC_TIMER_BROKEN (3*32+ 14)/* lapic timer broken in C1 */ /* Intel-defined CPU features, CPUID level 0x00000001 (ecx), word 4 */ #define X86_FEATURE_XMM3 (4*32+ 0)/* Streaming SIMD Extensions-3 */
Re: [PATCH] i386: add command line option "local_apic_timer_c2_ok"
On Fri, 30 Mar 2007 00:05:39 +0200, Andi Kleen wrote
Quoted 11 lines · Linus Torvalds
Quoted 10 lines · Andi Kleen
Quoted 3 lines
Here's a patch. I don't have a system with C1E, so i only tested that the apic timer still works on a older AMD box.
I think this looks better than what we have now, but it would look even better if the core CPUID stuff was in
arch/i386/kernel/cpu/amd.c, and we simply hadX86_FEATURE_BROKEN_C1_LAPICetc..
Quoted 8 lines
Quoted 6 lines
And then the
apic.ccode would just checkif (boot_cpu_has(X86_FEATURE_BROKEN_C1_LAPIC)) return -1;or similar.
Ok fair point. Here's an updated patch.
This patch also works. If You want bootlog or output of /proc/interrupts I can post it.
--
Greetings - CeHo - Grzegorz Chwesewicz
Re: [PATCH] i386: add command line option "local_apic_timer_c2_ok"
In reply to Andi KleenOn Fri, 30 Mar 2007 00:05:39 +0200, Andi Kleen wrote
Quoted 11 lines · Linus Torvalds
Quoted 10 lines · Andi Kleen
Quoted 3 lines
Here's a patch. I don't have a system with C1E, so i only tested that the apic timer still works on a older AMD box.
I think this looks better than what we have now, but it would look even better if the core CPUID stuff was in
arch/i386/kernel/cpu/amd.c, and we simply hadX86_FEATURE_BROKEN_C1_LAPICetc..
Quoted 8 lines
Quoted 6 lines
And then the
apic.ccode would just checkif (boot_cpu_has(X86_FEATURE_BROKEN_C1_LAPIC)) return -1;or similar.
Ok fair point. Here's an updated patch.
I've tested this patch little bit more on my nx6325 and I've found scenario in which my box works slow. When I boot HP with connected AC (it boots fast), and then after boot I unplug AC and try to power HP off it's working very slow (powering off process take few minutes). On battery it's always booting and powering off fast. Can enybody with nx6325 confirm this ?
--
Greetings - CeHo - Grzegorz Chwesewicz
Re: [PATCH] i386: add command line option "local_apic_timer_c2_ok"
In reply to Andi KleenOn Thu, 29 Mar 2007 22:49:37 +0200, Andi Kleen wrote
Quoted 8 lines
Quoted 2 lines
Reviewed but not tested. Needs to be wrapped in an AMD specific call.
Here's a patch. I don't have a system with C1E, so i only tested that the apic timer still works on a older AMD box.
Would be good if someone with a Turion laptop, especially the HP nx6325 could test it with
CONFIG_NO_HZenabled.
I have nx6325 with Turion.
ensima-hp linux-2.6 # cat .config|grep NO_HZCONFIG_NO_HZ=y
After patching system works ok on battery and on AC.
On battery:
cat /proc/interrupts
CPU0 CPU1
0: 115771 0 local-APIC-edge-fasteoi timer 1: 508 1 IO-APIC-edge i8042 8: 1 1 IO-APIC-edge rtc 12: 147 2 IO-APIC-edge i8042 14: 36 1 IO-APIC-edge ide0 16: 0 1 IO-APIC-fasteoi yenta, sdhci:slot0 17: 4538 116 IO-APIC-fasteoi eth0 18: 1697 6 IO-APIC-fasteoi libata, HDA Intel 19: 50 1 IO-APIC-fasteoi ohci_hcd:usb1, ohci_hcd:usb2, ehci_hcd:usb3 21: 30 9 IO-APIC-fasteoi acpi NMI: 0 0 LOC: 0 115601 ERR: 1 MIS: 0
sleep 10
CPU0 CPU1
0: 125777 0 local-APIC-edge-fasteoi timer 1: 509 1 IO-APIC-edge i8042 8: 1 1 IO-APIC-edge rtc 12: 147 2 IO-APIC-edge i8042 14: 36 1 IO-APIC-edge ide0 16: 0 1 IO-APIC-fasteoi yenta, sdhci:slot0 17: 4749 116 IO-APIC-fasteoi eth0 18: 1704 6 IO-APIC-fasteoi libata, HDA Intel 19: 50 1 IO-APIC-fasteoi ohci_hcd:usb1, ohci_hcd:usb2, ehci_hcd:usb3 21: 30 9 IO-APIC-fasteoi acpi NMI: 0 0 LOC: 0 125607 ERR: 1 MIS: 0
#######################################
On AC:
cat /proc/interrupts
CPU0 CPU1
0: 261 0 local-APIC-edge-fasteoi timer 1: 346 1 IO-APIC-edge i8042 8: 1 1 IO-APIC-edge rtc 12: 147 2 IO-APIC-edge i8042 14: 36 1 IO-APIC-edge ide0 16: 0 1 IO-APIC-fasteoi yenta, sdhci:slot0 17: 1135 115 IO-APIC-fasteoi eth0 18: 1620 6 IO-APIC-fasteoi libata, HDA Intel 19: 50 1 IO-APIC-fasteoi ohci_hcd:usb1, ehci_hcd:usb2, ohci_hcd:usb3 21: 24 9 IO-APIC-fasteoi acpi NMI: 0 0 LOC: 7562 9007 ERR: 0 MIS: 0
sleep 10
CPU0 CPU1
0: 261 0 local-APIC-edge-fasteoi timer 1: 347 1 IO-APIC-edge i8042 8: 1 1 IO-APIC-edge rtc 12: 147 2 IO-APIC-edge i8042 14: 36 1 IO-APIC-edge ide0 16: 0 1 IO-APIC-fasteoi yenta, sdhci:slot0 17: 1411 115 IO-APIC-fasteoi eth0 18: 1627 6 IO-APIC-fasteoi libata, HDA Intel 19: 50 1 IO-APIC-fasteoi ohci_hcd:usb1, ehci_hcd:usb2, ohci_hcd:usb3 21: 24 9 IO-APIC-fasteoi acpi NMI: 0 0 LOC: 7592 9184 ERR: 0 MIS: 0
--
Greetings - CeHo - Grzegorz Chwesewicz
Re: [PATCH] i386: add command line option "local_apic_timer_c2_ok"
On Thu, 29 Mar 2007 23:43:28 +0200, Grzegorz Chwesewicz wrote
Quoted 10 lines
On Thu, 29 Mar 2007 22:49:37 +0200, Andi Kleen wrote
Quoted 8 lines
Quoted 2 lines
Reviewed but not tested. Needs to be wrapped in an AMD specific call.
Here's a patch. I don't have a system with C1E, so i only tested that the apic timer still works on a older AMD box.
Would be good if someone with a Turion laptop, especially the HP nx6325 could test it with
CONFIG_NO_HZenabled.
Quoted 7 lines
I have nx6325 with Turion.
ensima-hp linux-2.6 # cat .config|grep
NO_HZCONFIG_NO_HZ=yAfter patching system works ok on battery and on AC.
<cut>
Bootlogs on AC and battery can be found here:
http://bugzilla.kernel.org/show_bug.cgi?id=8235
--
Greetings - CeHo - Grzegorz Chwesewicz
Re: [PATCH] i386: add command line option "local_apic_timer_c2_ok"
In reply to Linus TorvaldsQuoted 5 lines · Linus Torvalds
Quoted 2 lines · Len Brown
I think the only fool-proof way to do this automatically is to
Why not just take the known-good CPUID signature?
I didn't think we could reliably distingush mobile cpus with C2+ versus desktop CPUs without it. Or rather you would need a table for each new CPU revision Intel/AMD put out. That would be probably quite nightmarish to maintain.
-Andi
Re: [1/6] 2.6.21-rc4: known regressions
In reply to Thomas GleixnerQuoted 3 lines · Thomas Gleixner
We should revert that patch and add a "
trust_lapic_timer_in_c2" commandline option instead. So we are on the safe side.
Damn. I applied your patch, but it breaks on x86-64:
drivers/acpi/processor_idle.c:271: error: 'local_apic_timer_c2_ok'
undeclared (f irst use in this function)
I really wish we had an x86-64 maintainer that understood that it's confusing that files in arch/i386/ are also used for arch/x86-64.
Linus
Re: [1/6] 2.6.21-rc4: known regressions
Quoted 3 lines · Linus Torvalds
I really wish we had an x86-64 maintainer that understood that it's confusing that files in
arch/i386/are also used forarch/x86-64.
Sorry, that was unfair. The patch was simply buggy. It added the test to drivers/acpi/ *without* adding it to the architectures that used it, it wasn't an i386/x86-64 thing.
Thomas, please fix.
Linus
Re: [1/6] 2.6.21-rc4: known regressions
Quoted 2 lines · Linus Torvalds
Thomas, please fix.
Here's a possible fix. It compiles. And I still wish we had common files.
ia64 shouldn't be affected, because ia64 doesn't #define the ARCH_APICTIMER_STOPS_ON_C3 flag (and then we don't use the "c2_ok" thing either. But this is still pretty damn ugly.
Maybe a field in "struct acpi_processor" for C2/C3 problems?
Linus
---
arch/x86_64/kernel/apic.c +11 -0
@@ -47,6 +47,10 @@ int apic_calibrate_pmtmr __initdata;int disable_apic_timer__initdata ; +/* Local APIC timer works in C2? */ +int local_apic_timer_c2_ok; +EXPORT_SYMBOL_GPL (local_apic_timer_c2_ok); +static struct resource *ioapic_resources;static struct resource lapic_resource = { .name ="Local APIC" ,
@@ -1192,6 +1196,13 @@ static __init int setup_nolapic(char *str) }early_param ("nolapic" , setup_nolapic); +static int __init parse_lapic_timer_c2_ok (char *arg) +{ + local_apic_timer_c2_ok =1 ; +return 0 ; +} +early_param ("lapic_timer_c2_ok" , parse_lapic_timer_c2_ok); +static __init int setup_noapictimer (char *str) {if (str[0 ] !=' ' && str[0 ] !=0 )
include/asm-x86_64/apic.h +1 -0
@@ -102,5 +102,6 @@ void switch_ipi_to_APIC_timer(void *cpumask);#define ARCH_APICTIMER_STOPS_ON_C3 1extern unsigned boot_cpu_id; +extern int local_apic_timer_c2_ok;#endif /* __ASM_APIC_H */
Re: [1/6] 2.6.21-rc4: known regressions
Quoted 6 lines · Linus Torvalds
Quoted 2 lines · Linus Torvalds
Thomas, please fix.
Here's a possible fix. It compiles. And I still wish we had common files.
You beat me by 30 seconds.
Quoted 3 lines
ia64 shouldn't be affected, because ia64 doesn't #define the
ARCH_APICTIMER_STOPS_ON_C3flag (and then we don't use the "c2_ok" thing either.
Right, ia64 does not see it.
Quoted 1 line
But this is still pretty damn ugly.
Yes it is.
Quoted 1 line
Maybe a field in "struct
acpi_processor" for C2/C3 problems?
Hmm, the acpi processor stuff is modular.
tglx
Re: [1/6] 2.6.21-rc4: known regressions
In reply to Linus TorvaldsQuoted 1 line · Linus Torvalds
[ Ok, I think it's those timers again...
agreed - this seems to be a genuine CONFIG_HIGH_RES_TIMERS=y bug. (which has probably not been fixed since -rc4 either, we have no bugfix in this area that could explain the expires_next==KTIME_MAX timer state visible in SysRq-Q.)
there seems to be a trend in the reports: HT P4 CPUs.
Quoted 4 lines
Ingo: let me just state how *happy* I am that I told you off when you wanted to merge the hires timers and
NO_HZbefore 2.6.20 because they were "stable". You were wrong, and 2.6.20 is at least in reasonable shape. [...]
yes - i was quite wrong pushing it so hard. (and doubly so given your stated focus of making v2.6.20 a quiet release) Sorry :-/
Quoted 1 line
[...] Now we just need to make sure that 2.6.21 will be too.. ]
yeah - we are working hard on it.
Ingo
Re: [1/6] 2.6.21-rc4: known regressions
In reply to Nick PigginHello,
Quoted 2 lines
Quoted 2 lines
In contrast, the hang reported by Mariusz Kozlowski has a slightly different feel to it, but there's a tantalizing pattern in there too:
Just to make things clear. I didn't say I could reproduce it on 2.6.21-rc4. In fact I'm running 2.6.21-rc4-mm1 with no problems so far. I just replied to show my sysrq dumps of processes states with 2.6.21-rc2-mm1.
I could reproduce similar (but still each time slightly different) hangs on -mm series from 2.6.20-mm1 to 2.6.21-rc2-mm1. 2.6.21-rc3-mm1 worked well for me so not sure If my report is still valid here.
Sorry if I didn't make it clear enough.
Quoted 13 lines
Quoted 13 lines
http://www.ussg.iu.edu/hypermail/linux/kernel/0703.0/1243.html
Call Trace: [<c03ec87e>] io_schedule+0x42/0x59 [<c0184915>] sleep_on_buffer+0x8/0xc [<c03ed217>] __wait_on_bit+0x47/0x6c [<c03ed297>] out_of_line_wait_on_bit+0x5b/0x64 [<c01848a8>] __wait_on_buffer+0x27/0x2d [<c01b4228>] journal_commit_transaction+0x707/0x127f [<c01b868b>] kjournald+0xac/0x1ed [<c0126af5>] kthread+0xa2/0xc9 [<c010422b>] kernel_thread_helper+0x7/0x1c
Quoted 2 lines
Quoted 2 lines
which certainly also looks like an IO never completed (or completed but never woke anything up).
As I previously noticed each time the system hang I/O activity to disk looked dead (couldn't even sysrq-s).
Quoted 1 line
It could be possible that ext3 is doing something weird and expecting
True. I'm using ext3.
Quoted 2 lines
fs: nobh data leak... again hard to see how it could cause an unlock/wakeup to get lost. Is Mariusz using the nobh mount option?
No. He is not.
Regards,
Mariusz Kozlowski
PATCH 2/6 2.6.21-rc4: known regressions
In reply to Linus TorvaldsThis email lists some known regressions in Linus' tree compared to 2.6.20.
If you find your name in the Cc header, you are either submitter of one of the bugs, maintainer of an affectected subsystem or driver, a patch of you caused a breakage or I'm considering you in any other way possibly involved with one or more of these issues.
Due to the huge amount of recipients, please trim the Cc when answering.
Subject : x86_64: boot hangs unless CONFIG_PCIEPORTBUS=n and acpi=off
References : http://bugzilla.kernel.org/show_bug.cgi?id=8162
Submitter : Randy Dunlap <[email protected]>
Status : unknown
Subject : AMD Elan: Crash after "Allocating PCI resources"
References : http://bugzilla.kernel.org/show_bug.cgi?id=8161
Submitter : Vladimir Brik <[email protected]>
Status : patch available
Subject : ACPI regression with noapic
References : http://lkml.org/lkml/2007/3/8/468
Submitter : Ray Lee <[email protected]>
Status : unknown
Subject : acpi_serialize locks system during boot
References : http://bugzilla.kernel.org/show_bug.cgi?id=8171
Submitter : Colchao <[email protected]>
Patch : http://bugzilla.kernel.org/show_bug.cgi?id=8171
Status : patch available
Subject : NCQ problem with ahci and Hitachi drive (ACPI related)
References : http://lkml.org/lkml/2007/3/4/178
http://lkml.org/lkml/2007/3/9/475
Submitter : Mathieu Bérard <[email protected]>
Status : problem is being debugged
Subject : kernels fail to boot with drives on ATIIXP controller
(ACPI/IRQ related)
References : https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=229621
http://lkml.org/lkml/2007/3/4/257
Submitter : Michal Jaegermann <[email protected]>
Status : unknown
Subject : libata: PATA UDMA/100 configured as UDMA/33
References : http://lkml.org/lkml/2007/2/20/294
http://www.mail-archive.com/[email protected]/msg04115.html http://bugzilla.kernel.org/show_bug.cgi?id=8133 http://bugzilla.kernel.org/show_bug.cgi?id=8164
Submitter : Fabio Comolli <[email protected]>
Plamen Petrov <[email protected]> Laurent Riffard <[email protected]>
Alan Cox <[email protected]>
Status : Alan: Some cases should be fixed now but probably not all
(eg the Nvidia one)
-
To unsubscribe from this list: send the line "unsubscribe linux-acpi" in the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [2/6] 2.6.21-rc4: known regressions
Quoted 4 lines · Adrian Bunk
References : http://bugzilla.kernel.org/show_bug.cgi?id=8161
Submitter : Vladimir Brik <[email protected]>Handled-By Andi Kleen <[email protected]>Status : patch available
Patch is in Linus' tree now.
-Andi
Re: [2/6] 2.6.21-rc4: known regressions
In reply to Adrian BunkQuoted 7 lines · On Sun, 18 Mar 2007 19:49:15 +0100 Adrian Bunk wrote:
This email lists some known regressions in Linus' tree compared to 2.6.20.
If you find your name in the Cc header, you are either submitter of one of the bugs, maintainer of an affectected subsystem or driver, a patch of you caused a breakage or I'm considering you in any other way possibly involved with one or more of these issues.
Quoted 7 lines
Due to the huge amount of recipients, please trim the Cc when answering.
Subject :
x86_64: boot hangs unlessCONFIG_PCIEPORTBUS=nand acpi=off
References : http://bugzilla.kernel.org/show_bug.cgi?id=8162
Submitter : Randy Dunlap <[email protected]>
Status : unknown
Bug is rejected due to user error.
This seems to be a netconsole hang, not ACPI.
---
~Randy
Re: [2/6] 2.6.21-rc4: known regressions
Quoted 12 lines · Randy Dunlap
Quoted 10 lines · On Sun, 18 Mar 2007 19:49:15 +0100 Adrian Bunk wrote:
This email lists some known regressions in Linus' tree compared to 2.6.20.
If you find your name in the Cc header, you are either submitter of one of the bugs, maintainer of an affectected subsystem or driver, a patch of you caused a breakage or I'm considering you in any other way possibly involved with one or more of these issues.
Due to the huge amount of recipients, please trim the Cc when answering.
Quoted 7 lines
Quoted 4 lines
Subject :
x86_64: boot hangs unlessCONFIG_PCIEPORTBUS=nand acpi=off
References : http://bugzilla.kernel.org/show_bug.cgi?id=8162
Submitter : Randy Dunlap <[email protected]>
Status : unknownBug is rejected due to user error.
This seems to be a netconsole hang, not ACPI.
Thanks for this information.
Is the netconsole hang a regression?
Quoted 1 line
~Randy
cu
Adrian
Signature · 4 lines
"Is there not promise of rain?" Ling Tan asked suddenly out
of the darkness. There had been need of rain for many days.
"Only a promise," Lao Er said.
Pearl S. Buck - Dragon SeedRe: [2/6] 2.6.21-rc4: known regressions
Quoted 17 lines · Adrian Bunk
Quoted 16 lines · Randy Dunlap
Quoted 14 lines · On Sun, 18 Mar 2007 19:49:15 +0100 Adrian Bunk wrote:
This email lists some known regressions in Linus' tree compared to 2.6.20.
If you find your name in the Cc header, you are either submitter of one of the bugs, maintainer of an affectected subsystem or driver, a patch of you caused a breakage or I'm considering you in any other way possibly involved with one or more of these issues.
Due to the huge amount of recipients, please trim the Cc when answering.
Subject :
x86_64: boot hangs unlessCONFIG_PCIEPORTBUS=nand acpi=off
References : http://bugzilla.kernel.org/show_bug.cgi?id=8162
Submitter : Randy Dunlap <[email protected]>
Status : unknown
Quoted 6 lines
Quoted 2 lines
Bug is rejected due to user error.
This seems to be a netconsole hang, not ACPI.Thanks for this information.
Is the netconsole hang a regression?
I have to do more debugging to find out what is going on. It may be PCIEPORTBUS-related, but 2.6.20 or later now boot for me without netconsole and hang when using netconsole. The ending lines in the console log are:
[ 17.946918] PCI: Setting latency timer of device 0000:00:02.0 to 64 [ 17.953211] assign_interrupt_mode Found MSI capability [ 17.958388] Allocate Port Service[0000:00:02.0:pcie00] [ 17.963565] Allocate Port Service[0000:00:02.0:pcie01] [ 17.968736] Allocate Port Service[0000:00:02.0:pcie02] [ 17.973903] Allocate Port Service[0000:00:02.0:pcie03] [ 17.979134] PCI: Setting latency timer of device 0000:00:03.0 to 64 [ 17.985430] assign_interrupt_mode Found MSI capability [ 17.990565] Losing some ticks... checking if CPU frequency changed. [ 17.996857] Allocate Port Service[0000:00:03.0:pcie00] [ 18.002013] Allocate Port Service[0000:00:03.0:pcie01] [ 18.007175] Allocate Port Service[0000:00:03.0:pcie02] [ 18.012336] Allocate Port Service[0000:00:03.0:pcie03] [ 18.017552] PCI: Setting latency timer of device 0000:00:03.1 to 64 [ 18.023848] assign_interrupt_mode Found MSI capability [ 18.029012] Allocate Port Service[0000:00:03.1:pcie00]
Signature · 2 lines
~Randy *** Remember to use Documentation/SubmitChecklist when testing your code ***
Re: [2/6] 2.6.21-rc4: known regressions
In reply to Adrian BunkQuoted 1 line · Adrian Bunk
This email lists some known regressions in Linus' tree compared to 2.6.20.
[...]
Quoted 4 lines
Subject : ACPI regression with noapic
References : http://lkml.org/lkml/2007/3/8/468
Submitter : Ray Lee <[email protected]>
Status : unknown
I finally have time to start bisecting this. I'll have something in the next day.
Ray
PATCH 3/6 2.6.21-rc4: known regressions
In reply to Linus TorvaldsThis email lists some known regressions in Linus' tree compared to 2.6.20.
If you find your name in the Cc header, you are either submitter of one of the bugs, maintainer of an affectected subsystem or driver, a patch of you caused a breakage or I'm considering you in any other way possibly involved with one or more of these issues.
Due to the huge amount of recipients, please trim the Cc when answering.
Subject : ThinkPad X60: resume no longer works (PCI related?)
References : http://lkml.org/lkml/2007/3/13/3
Submitter : Dave Jones <[email protected]>
Jeremy Fitzhardinge <[email protected]>
Caused-By : PCI merge
commit 78149df6d565c36675463352d0bfe0000b02b7a7
Rafael J. Wysocki <[email protected]>
Status : problem is being debugged
Subject : ThinkPad doesn't resume from suspend to RAM
References : http://lkml.org/lkml/2007/2/27/80
http://lkml.org/lkml/2007/2/28/348
Submitter : Jens Axboe <[email protected]>
Jeff Chua <[email protected]>
Status : unknown
Subject : suspend to disk hangs
References : http://lkml.org/lkml/2007/3/6/142
Submitter : Jeff Chua <[email protected]>
Status : unknown
Subject : suspend to disk hangs
References : http://lkml.org/lkml/2007/3/16/126
Submitter : Maxim Levitsky <[email protected]>
Status : unknown
Subject : suspend to disk hangs
References : http://bugzilla.kernel.org/show_bug.cgi?id=8224
Submitter : Mike Harris <[email protected]>
Status : unknown
Subject : ThinkPad R60: suspend broken
References : http://lkml.org/lkml/2007/3/16/57
Submitter : Marcus Better <[email protected]>
Status : unknown
Subject : laptop immediately resumes after suspend
References : http://lkml.org/lkml/2007/3/8/469
Submitter : Ray Lee <[email protected]>
commit ed41dab90eb40ac4911e60406bc653661f0e4ce1
Patch : http://lkml.org/lkml/2007/3/12/228
Status : patch available
Subject : second suspend to disk in a row results in an oops (libata?)
References : http://lkml.org/lkml/2007/3/17/43
Submitter : Thomas Meyer <[email protected]>
Status : unknown
Subject : SATA breakage on resume
References : http://lkml.org/lkml/2007/3/7/233
Submitter : Thomas Gleixner <[email protected]>
Soeren Sonnenburg <[email protected]>
Status : unknown
Re: [3/6] 2.6.21-rc4: known regressions
Quoted 4 lines
Subject : ThinkPad R60: suspend broken
References : http://lkml.org/lkml/2007/3/16/57
Submitter : Marcus Better <[email protected]>
Status : unknown
FWIW, it's still broken as of commit cd05a1f818073a623455a58e756c5b419fc98db9.
The in-kernel suspend to disk or RAM both hang after "Suspending consoles", with the fan stopped.
Re: [3/6] 2.6.21-rc4: known regressions
In reply to Adrian BunkQuoted 8 lines · Adrian Bunk
Subject : ThinkPad doesn't resume from suspend to RAM
References : http://lkml.org/lkml/2007/2/27/80http://lkml.org/lkml/2007/2/28/348Submitter : Jens Axboe <[email protected]>
Jeff Chua <[email protected]>
Status : unknown
Quoted 4 lines
Subject : suspend to disk hangs
References : http://lkml.org/lkml/2007/3/6/142
Submitter : Jeff Chua <[email protected]>
Status : unknown
The good news is on 2.6.21-rc5, suspend to disk, and resume from disk works. But, it only works with CONFIG_NO_HZ unset.
Setting CONFIG_NO_HZ will cause suspend to disk to hang just before saving memory to disk.
Resume from RAM (s2ram) still broke (tried with or without CONFIG_NO_HZ). Suspend to RAM seems ok, but upon resume, the screen will only display "inu" and only after pressing the power button will the system return to console. But "date" still doesn't advance.
Thanks,
Jeff.
Re: [3/6] 2.6.21-rc4: known regressions
Quoted 10 lines · Jeff Chua
Quoted 8 lines · Adrian Bunk
Subject : ThinkPad doesn't resume from suspend to RAM
References : http://lkml.org/lkml/2007/2/27/80http://lkml.org/lkml/2007/2/28/348Submitter : Jens Axboe <[email protected]>
Jeff Chua <[email protected]>
Status : unknown
Quoted 7 lines
Quoted 4 lines
Subject : suspend to disk hangs
References : http://lkml.org/lkml/2007/3/6/142
Submitter : Jeff Chua <[email protected]>
Status : unknownThe good news is on 2.6.21-rc5, suspend to disk, and resume from disk works. But, it only works with
CONFIG_NO_HZunset.
Thanks for this information.
Quoted 2 lines
Setting
CONFIG_NO_HZwill cause suspend to disk to hang just before saving memory to disk.
Thanks, noted.
Quoted 4 lines
Resume from RAM (s2ram) still broke (tried with or without
CONFIG_NO_HZ). Suspend to RAM seems ok, but upon resume, the screen will only display "inu" and only after pressing the power button will the system return to console. But "date" still doesn't advance.
This might be related to the following regression:
Subject : first disk access after resume takes several minutes
('date' does not advance after resume from RAM, CONFIG_NO_HZ=n)
References : http://lkml.org/lkml/2007/3/8/117
http://lkml.org/lkml/2007/3/25/20
Submitter : Michael S. Tsirkin <[email protected]>
Ingo Molnar <[email protected]>
Status : problem is being debugged
Quoted 2 lines
Thanks,
Jeff.
cu
Adrian
Signature · 4 lines
"Is there not promise of rain?" Ling Tan asked suddenly out
of the darkness. There had been need of rain for many days.
"Only a promise," Lao Er said.
Pearl S. Buck - Dragon SeedRe: [3/6] 2.6.21-rc4: known regressions
Quoted 7 lines · Adrian Bunk
Quoted 4 lines
Resume from RAM (s2ram) still broke (tried with or without
CONFIG_NO_HZ). Suspend to RAM seems ok, but upon resume, the screen will only display "inu" and only after pressing the power button will the system return to console. But "date" still doesn't advance.This might be related to the following regression:
Quoted 8 lines
Subject : first disk access after resume takes several minutes
('date' does not advance after resume from RAM,CONFIG_NO_HZ=n)
References : http://lkml.org/lkml/2007/3/8/117http://lkml.org/lkml/2007/3/25/20Submitter : Michael S. Tsirkin <[email protected]>
Handled-By Thomas Gleixner <[email protected]>Ingo Molnar <[email protected]>
Status : problem is being debugged
Adrian,
It's related. I tested without CONFIG_HPET_TIMER, and now my X60 can suspend and resume from RAM (s2ram). Even better, it works with/without CONFIG_NO_HZ.
But, suspend to disk still broke with CONFIG_NO_HZ set.
Thanks,
Jeff.
Re: [3/6] 2.6.21-rc4: known regressions
Quoted 18 lines · Jeff Chua
Quoted 7 lines · Adrian Bunk
Quoted 4 lines
Resume from RAM (s2ram) still broke (tried with or without
CONFIG_NO_HZ). Suspend to RAM seems ok, but upon resume, the screen will only display "inu" and only after pressing the power button will the system return to console. But "date" still doesn't advance.This might be related to the following regression:
Quoted 8 lines
Subject : first disk access after resume takes several minutes
('date' does not advance after resume from RAM,CONFIG_NO_HZ=n)
References : http://lkml.org/lkml/2007/3/8/117http://lkml.org/lkml/2007/3/25/20Submitter : Michael S. Tsirkin <[email protected]>
Handled-By Thomas Gleixner <[email protected]>Ingo Molnar <[email protected]>
Status : problem is being debugged
Quoted 5 lines
Adrian,
It's related. I tested without
CONFIG_HPET_TIMER, and now my X60 can suspend and resume from RAM (s2ram). Even better, it works with/withoutCONFIG_NO_HZ.
Does the patch below fix the HPET_TIMER=y case ?
tglx
arch/i386/kernel/hpet.c +1 -1
@@ -197,7 +197,7 @@ static int hpet_next_event(unsigned long delta, cnt += delta;hpet_writel (cnt,HPET_T0_CMP ); -return ((long )(hpet_readl (HPET_COUNTER ) - cnt ) >0 ); +return ((long )(hpet_readl (HPET_COUNTER ) - cnt ) >0 ) ? -ETIME :0 ; }/*
Re: [3/6] 2.6.21-rc4: known regressions
Quoted 5 lines · Thomas Gleixner
Quoted 3 lines
It's related. I tested without
CONFIG_HPET_TIMER, and now my X60 can suspend and resume from RAM (s2ram). Even better, it works with/withoutCONFIG_NO_HZ.Does the patch below fix the HPET_TIMER=y case ?
Thomas, I tried, but it didn't help. Upon resume from ram, "date" still didn't advance.
Thanks,
Jeff.
Re: [3/6] 2.6.21-rc4: known regressions
Quoted 10 lines · Jeff Chua
Quoted 5 lines · Thomas Gleixner
Quoted 3 lines
It's related. I tested without
CONFIG_HPET_TIMER, and now my X60 can suspend and resume from RAM (s2ram). Even better, it works with/withoutCONFIG_NO_HZ.Does the patch below fix the HPET_TIMER=y case ?
Thomas, I tried, but it didn't help. Upon resume from ram, "date" still didn't advance.
Can you please issue a SysRq-Q in this situation and provide the dmesg output ?
Thanks,
tglx
Re: [3/6] 2.6.21-rc4: known regressions
Quoted 17 lines · On Wednesday 28 March 2007 09:04:28 Thomas Gleixner wrote:
Quoted 10 lines · Jeff Chua
Quoted 5 lines · Thomas Gleixner
Quoted 3 lines
It's related. I tested without
CONFIG_HPET_TIMER, and now my X60 can suspend and resume from RAM (s2ram). Even better, it works with/withoutCONFIG_NO_HZ.Does the patch below fix the HPET_TIMER=y case ?
Thomas, I tried, but it didn't help. Upon resume from ram, "date" still didn't advance.
Can you please issue a SysRq-Q in this situation and provide the dmesg output ?
Thanks,
Quoted 9 lines
tglx
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Hi,
I almost sure Iknow why this happens,
The problem is that both hpet clock source and hpet clockevents doesn't have a suspend/resume function On resume we should enable the main counter _and_ enable legacy replacement mode,
On my system main counter in enabled, by I think by bios, but legacy replacement mode is not, so if a system doesn't use lapic as a tick source, but use hpet+broadcast, it will hang for sure on resume, and i tested it
The patch below is a temporally fix, until clock-events and clocksources will get proper suspend/resume hooks:
Regards,
Maxim Levitsky
---
Add suspend/resume for HPET
---
arch/i386/kernel/hpet.c +10 -0
@@ -152,6 +152,16 @@ static void hpet_set_mode(enum clock_event_mode mode,unsigned long cfg, cmp, now;uint64_t delta; + +if ( mode !=CLOCK_EVT_MODE_UNUSED && mode !=CLOCK_EVT_MODE_SHUTDOWN ) + { +unsigned long cfg =hpet_readl (HPET_CFG ); + cfg |=HPET_CFG_ENABLE |HPET_CFG_LEGACY ; +hpet_writel (cfg,HPET_CFG ); + + } + +switch (mode) {case CLOCK_EVT_MODE_PERIODIC : delta = ((uint64_t )(NSEC_PER_SEC /HZ )) * hpet_clockevent.mult;
Re: [3/6] 2.6.21-rc4: known regressions
Quoted 1 line · Maxim
I almost sure I know why this happens,
cool! Your patch is a definite improvement on my t60 (where suspend/resume never worked with hpet enabled). But it does not fix everything - for example the timings are way off after resume. Thomas?
Ingo
Re: [3/6] 2.6.21-rc4: known regressions
Quoted 11 lines · On Wednesday 28 March 2007 16:41:48 Ingo Molnar wrote:
Quoted 1 line · Maxim
I almost sure I know why this happens,
cool! Your patch is a definite improvement on my t60 (where suspend/resume never worked with hpet enabled). But it does not fix everything - for example the timings are way off after resume. Thomas?
Ingo
The problem is that HPET consists of two parts:
one is a main counter and second is a a timers.
To enable main counter one must set HPET_CFG_ENABLE. It is set only on boot, and not on resume now.
But on my system I think bios re-enables it.
Secondary to enable HPET to act as a timer on IRQ0 and to make it replace RTC IRQ8 one must set HPET_CFG_LEGACY
This bit is definitely not set on resume, so on my system I get a hang if I use HPET as clockevents device, and on other system where bios doesn't reenable HPET, then even if HPET is used as timing device 'date won't advance'
But I set those bits only in initialization of HPET clockevents device, and I set always, when it is turned on, It is not that good,but works.
Now I don't have a clue how to set those bits if only HPET is used as clock source because now clocksources don't have _any_ resume hook.
The timing problem you mention I think isd connected to the fact that HPET is not enabled instantly after resume, but after some time when clockevents core calls HPET to enable event timer.
Best regards,
Maxim Levitsky
Re: [3/6] 2.6.21-rc4: known regressions
Quoted 3 lines · Maxim
Now I don't have a clue how to set those bits if only HPET is used as clock source because now clocksources don't have _any_ resume hook.
One thing that drives me wild about that "clocksource resume" thing is that it seems to think that clocksources are somehow different from any other system devices..
Why isn't the HPET considered a "device", and has it's own *device* "suspend" and "resume"? Why do we seem to think that only "set_mode()" etc should wake up clock sources?
It's a *device*, dammit. It should save and resume like one (probably as a system device). The "set_mode()" etc stuff is at a completely different (higher) conceptual level.
Thomas? It does seem like Maxim has hit the nail on the head (at least partly) on the HPET timer resume problems..
Linus
Re: [linux-pm] [3/6] 2.6.21-rc4: known regressions
Quoted 3 lines · Linus Torvalds
It's a *device*, dammit. It should save and resume like one (probably as a system device). The "
set_mode()" etc stuff is at a completely different (higher) conceptual level.
Agreed, except about "probably as a system device".
Last I checked, there was no good reason to use sysdev suspend()/resume() rather than platform_device suspend_late()/early_resume(). Which more or less means no good reason to use sysdev in new code...
Also, making HPET use the legacy mode seems like a step backwards.
- Dave
Re: [linux-pm] [3/6] 2.6.21-rc4: known regressions
Quoted 8 lines · On Wednesday 28 March 2007 21:38:55 David Brownell wrote:
Quoted 3 lines · Linus Torvalds
It's a *device*, dammit. It should save and resume like one (probably as a system device). The "
set_mode()" etc stuff is at a completely different (higher) conceptual level.Agreed, except about "probably as a system device".
Quoted 9 lines
Last I checked, there was no good reason to use sysdev suspend()/resume() rather than
platform_devicesuspend_late()/early_resume(). Which more or less means no good reason to use sysdev in new code...Also, making HPET use the legacy mode seems like a step backwards.
- Dave
Hi,
It is not 'legacy' mode,
It is a legacy replacement mode.
It this mode HPET takes over IRQ0 and IRQ 8 and provides this way replacement for PIT and RTC periodic function
Best regards,
Maxim Levitsky
Re: [linux-pm] [3/6] 2.6.21-rc4: known regressions
Quoted 7 lines · Maxim
Quoted 2 lines · On Wednesday 28 March 2007 21:38:55 David Brownell wrote:
Also, making HPET use the legacy mode seems like a step backwards.
It is not 'legacy' mode,
It is a legacy replacement mode.
Typo, sorry.
Quoted 2 lines
It this mode HPET takes over IRQ0 and IRQ 8 and provides this way replacement for PIT and RTC periodic function
It's that RTC periodic thing that bothers me, I don't mind about the PIT. Remember that IRQ8 is also used for other RTC functions.
Now, if there were a way to tell rtc-cmos that HPET is active, and arrange some kind of handshake ... that would be different.
- Dave
Re: [linux-pm] [3/6] 2.6.21-rc4: known regressions
Quoted 15 lines · On Wednesday 28 March 2007 22:59:26 David Brownell wrote:
Quoted 7 lines · Maxim
Quoted 2 lines · On Wednesday 28 March 2007 21:38:55 David Brownell wrote:
Also, making HPET use the legacy mode seems like a step backwards.
It is not 'legacy' mode,
It is a legacy replacement mode.Typo, sorry.
Quoted 2 lines
It this mode HPET takes over IRQ0 and IRQ 8 and provides this way replacement for PIT and RTC periodic function
Quoted 8 lines
It's that RTC periodic thing that bothers me, I don't mind about the PIT. Remember that IRQ8 is also used for other RTC functions.
Now, if there were a way to tell rtc-cmos that HPET is active, and arrange some kind of handshake ... that would be different.
- Dave
Yes,
When HPET is active it eats RTC IRQ,
So the only way out is to emulate RTC using HPET,
It is done this way in old rtc driver, rtc-cmos should do the same.
Of course suspend resume is not supported at all by old rtc driver
I already wrote complete support for suspend/resume for old rtc driver (I wrote it long time ago)
Now I fixed it to support HPET , and this way I discovered that HPET doesn't have suspend resume functions
I will do last checks now and send this patch very soon
I am also planning to add support of HPET and suspend/resume for rtc-cmos, but I didn't start this yet.
Best regards,
Maxim Levitsky
Re: [linux-pm] [3/6] 2.6.21-rc4: known regressions
Quoted 3 lines · Maxim
On Wednesday 28 March 2007 22:59:26 David Brownell wrote:
When HPET is active it eats RTC IRQ,
Only when HPET timers 0 and 1 are set up for "Legacy Replacement Mode". In the more sensible "Standard Mode", they have their own IRQs.
Quoted 2 lines
So the only way out is to emulate RTC using HPET,
It is done this way in old rtc driver, rtc-cmos should do the same.
No. Patches like
http://marc.info/?l=linux-kernel&m=117219531503973&w=2
should be merged (I hope they're in the 2.6.22 queue!), making HPET run in "Standard Mode" so that HPET can stop sticking its fingers in code where they don't belong.
Quoted 2 lines
I am also planning to add support of HPET and suspend/resume for rtc-cmos, but I didn't start this yet.
It's already got suspend/resume support, and in the 2.6.22 queue are RTC framework updates which will let the RTC framework replace a lot more platform-specific RTC support. (Platform changes can come later, where they're needed. ARM for example doesn't need any.)
Once HPET stops using "Legacy Replacement Mode" you won't need to touch anything in the RTC stack (except maybe the legacy char/rtc.c driver, removing HPET stuff).
The open issue with suspend/resume support in rtc-cmos relates to how ACPI wakeup alarms should trigger. I've not made time to test those patches.
- Dave
Re: [linux-pm] [3/6] 2.6.21-rc4: known regressions
Quoted 33 lines · On Friday 30 March 2007 00:33:35 David Brownell wrote:
Quoted 3 lines · Maxim
On Wednesday 28 March 2007 22:59:26 David Brownell wrote:
When HPET is active it eats RTC IRQ,
Only when HPET timers 0 and 1 are set up for "Legacy Replacement Mode". In the more sensible "Standard Mode", they have their own IRQs.
Quoted 2 lines
So the only way out is to emulate RTC using HPET,
It is done this way in old rtc driver, rtc-cmos should do the same.No. Patches like
http://marc.info/?l=linux-kernel&m=117219531503973&w=2
should be merged (I hope they're in the 2.6.22 queue!), making HPET run in "Standard Mode" so that HPET can stop sticking its fingers in code where they don't belong.
Quoted 2 lines
I am also planning to add support of HPET and suspend/resume for rtc-cmos, but I didn't start this yet.
It's already got suspend/resume support, and in the 2.6.22 queue are RTC framework updates which will let the RTC framework replace a lot more platform-specific RTC support. (Platform changes can come later, where they're needed. ARM for example doesn't need any.)
Once HPET stops using "Legacy Replacement Mode" you won't need to touch anything in the RTC stack (except maybe the legacy
char/rtc.cdriver, removing HPET stuff).
Quoted 6 lines
The open issue with suspend/resume support in rtc-cmos relates to how ACPI wakeup alarms should trigger. I've not made time to test those patches.
- Dave
Hi,
It is not that simple,
Only in legacy replacement mode HPET can be put on IRQ0 (and sadly IRQ8) At least this is true on some systems, on mine for example
On my system first 2 hpet timers can only be assigned to IRQ21-23 and third to ether IRQ11, IRQ21-IRQ23
Or in legacy replacement mode first is assigned IRQ0 and second IRQ8
this will make it difficult to use it as a clockevents source
Not to mention the fact that current code assumes that BIOS assigned IRQs to all timers which is not true on my system.
I have brand new intel DG965 motherboard.
What is wrong with relying on HPET to provide RTC IRQ ?
Best regards,
Maxim Levitsky
Re: [linux-pm] [3/6] 2.6.21-rc4: known regressions
Quoted 9 lines · Maxim Levitsky
Quoted 8 lines · On Friday 30 March 2007 00:33:35 David Brownell wrote:
Quoted 2 lines · Maxim
So the only way out is to emulate RTC using HPET,
It is done this way in old rtc driver, rtc-cmos should do the same.No. Patches like
also: http://marc.info/?l=linux-kernel&m=117219531526317&w=2
Quoted 10 lines
Quoted 5 lines
should be merged (I hope they're in the 2.6.22 queue!), making HPET run in "Standard Mode" so that HPET can stop sticking its fingers in code where they don't belong.
...
It is not that simple,
Only in legacy replacement mode HPET can be put on IRQ0 (and sadly IRQ8) At least this is true on some systems, on mine for example
Right, that's the entire point of legacy replacement mode.
But so what? In standard mode, HPET just uses other IRQs. Nothing would care about irq0, and irq8 would be used by the RTC as necessary.
Quoted 1 line
this will make it difficult to use it as a clockevents source
Why? It's not like the clockevent logic cares what IRQ a given programmable timer uses. So long as the HPET driver can receive its IRQ, it'll make a fine clockevent. There's no reason to have HPET prevent other drivers from working, by insisting it use that nasty "prevent other hardware from issuing IRQs" mode.
The patches from Venkatesh sure seem to have behaved for him. And while he might have complained about difficulty, I think that'd be more likely due to the SMP issues he also addressed than because of some (historical?) attachment to irq0.
Quoted 2 lines
Not to mention the fact that current code assumes that BIOS assigned IRQs to all timers which is not true on my system.
Getting IRQ routing sorted out is a problem that's been solved numerous times before. And again, the patches referenced above seem to have resolved any such issues.
Quoted 1 line
What is wrong with relying on HPET to provide RTC IRQ ?
For starters, it's not an RTC. Why in the world would you want to make the OS think it's an RTC ... unless you're Microsoft, and are desperate to get another periodic timer (and don't much care about the other RTC functionality?
... that's all off-topic for 2.6.21 regressions though; it's too late to merge x86_64 clockevent support, or fix HPET issues like not using "standard mode".
- Dave
Re: [linux-pm] [3/6] 2.6.21-rc4: known regressions
Quoted 45 lines · On Friday 30 March 2007 03:09:14 David Brownell wrote:
Quoted 9 lines · Maxim Levitsky
Quoted 8 lines · On Friday 30 March 2007 00:33:35 David Brownell wrote:
Quoted 2 lines · Maxim
So the only way out is to emulate RTC using HPET,
It is done this way in old rtc driver, rtc-cmos should do the same.No. Patches like
also: http://marc.info/?l=linux-kernel&m=117219531526317&w=2
Quoted 10 lines
Quoted 5 lines
should be merged (I hope they're in the 2.6.22 queue!), making HPET run in "Standard Mode" so that HPET can stop sticking its fingers in code where they don't belong.
...
It is not that simple,
Only in legacy replacement mode HPET can be put on IRQ0 (and sadly IRQ8) At least this is true on some systems, on mine for example
Right, that's the entire point of legacy replacement mode.
But so what? In standard mode, HPET just uses other IRQs. Nothing would care about irq0, and irq8 would be used by the RTC as necessary.
Quoted 1 line
this will make it difficult to use it as a clockevents source
Why? It's not like the clockevent logic cares what IRQ a given programmable timer uses. So long as the HPET driver can receive its IRQ, it'll make a fine clockevent. There's no reason to have HPET prevent other drivers from working, by insisting it use that nasty "prevent other hardware from issuing IRQs" mode.
The patches from Venkatesh sure seem to have behaved for him. And while he might have complained about difficulty, I think that'd be more likely due to the SMP issues he also addressed than because of some (historical?) attachment to irq0.
Quoted 6 lines
Quoted 2 lines
Not to mention the fact that current code assumes that BIOS assigned IRQs to all timers which is not true on my system.
Getting IRQ routing sorted out is a problem that's been solved numerous times before. And again, the patches referenced above seem to have resolved any such issues.
No they don't,
First patch does that:
hd.hd_irq[i] = (timer->hpet_config &
Tn_INT_ROUTE_CNF_MASK) >>
Tn_INT_ROUTE_CNF_SHIFT;This just reads values assigned by BIOS.
Quoted 10 lines
Quoted 3 lines
What is wrong with relying on HPET to provide RTC IRQ ?
For starters, it's not an RTC. Why in the world would you want to make the OS think it's an RTC ... unless you're Microsoft, and are desperate to get another periodic timer (and don't much care about the other RTC functionality?
Quoted 7 lines
... that's all off-topic for 2.6.21 regressions though; it's too late to merge
x86_64clockevent support, or fix HPET issues like not using "standard mode".- Dave
Hi,
I feel that you are right,
You meant that one of HPET timers will be used as clock source and will be assigned some IRQ (not IRQ0)
Seems fine,
Only one thing: the kernel must assign IRQs to HPETS , relying on bios is not good, Also the IRQ for clocksource should be not shared, but maybe I am wrong here (I am afraid that latencies might be a problem here)
By the way I never thought about the fact that legacy replacement mode is a 'virtual legacy'
I mean that it is intended to simulate RTCs and PITs on systems that don't have them, am I right here ? HPET spec says that RTC is still requred to provide all its usial functions except periodic freq.
Best regards,
Maxim Levitsky
Re: [3/6] 2.6.21-rc4: known regressions
In reply to Maxim LevitskyQuoted 9 lines · Maxim Levitsky
Quoted 8 lines · On Friday 30 March 2007 00:33:35 David Brownell wrote:
Quoted 2 lines · Maxim
So the only way out is to emulate RTC using HPET,
It is done this way in old rtc driver, rtc-cmos should do the same.No. Patches like
also: http://marc.info/?l=linux-kernel&m=117219531526317&w=2
Quoted 10 lines
Quoted 5 lines
should be merged (I hope they're in the 2.6.22 queue!), making HPET run in "Standard Mode" so that HPET can stop sticking its fingers in code where they don't belong.
...
It is not that simple,
Only in legacy replacement mode HPET can be put on IRQ0 (and sadly IRQ8) At least this is true on some systems, on mine for example
Right, that's the entire point of legacy replacement mode.
But so what? In standard mode, HPET just uses other IRQs. Nothing would care about irq0, and irq8 would be used by the RTC as necessary.
Quoted 1 line
this will make it difficult to use it as a clockevents source
Why? It's not like the clockevent logic cares what IRQ a given programmable timer uses. So long as the HPET driver can receive its IRQ, it'll make a fine clockevent. There's no reason to have HPET prevent other drivers from working, by insisting it use that nasty "prevent other hardware from issuing IRQs" mode.
The patches from Venkatesh sure seem to have behaved for him. And while he might have complained about difficulty, I think that'd be more likely due to the SMP issues he also addressed than because of some (historical?) attachment to irq0.
Quoted 2 lines
Not to mention the fact that current code assumes that BIOS assigned IRQs to all timers which is not true on my system.
Getting IRQ routing sorted out is a problem that's been solved numerous times before. And again, the patches referenced above seem to have resolved any such issues.
Quoted 1 line
What is wrong with relying on HPET to provide RTC IRQ ?
For starters, it's not an RTC. Why in the world would you want to make the OS think it's an RTC ... unless you're Microsoft, and are desperate to get another periodic timer (and don't much care about the other RTC functionality?
... that's all off-topic for 2.6.21 regressions though; it's too late to merge x86_64 clockevent support, or fix HPET issues like not using "standard mode".
- Dave
Re: [3/6] 2.6.21-rc4: known regressions
In reply to MaximQuoted 3 lines · Maxim
On Wednesday 28 March 2007 22:59:26 David Brownell wrote:
When HPET is active it eats RTC IRQ,
Only when HPET timers 0 and 1 are set up for "Legacy Replacement Mode". In the more sensible "Standard Mode", they have their own IRQs.
Quoted 2 lines
So the only way out is to emulate RTC using HPET,
It is done this way in old rtc driver, rtc-cmos should do the same.
No. Patches like
http://marc.info/?l=linux-kernel&m=117219531503973&w=2
should be merged (I hope they're in the 2.6.22 queue!), making HPET run in "Standard Mode" so that HPET can stop sticking its fingers in code where they don't belong.
Quoted 2 lines
I am also planning to add support of HPET and suspend/resume for rtc-cmos, but I didn't start this yet.
It's already got suspend/resume support, and in the 2.6.22 queue are RTC framework updates which will let the RTC framework replace a lot more platform-specific RTC support. (Platform changes can come later, where they're needed. ARM for example doesn't need any.)
Once HPET stops using "Legacy Replacement Mode" you won't need to touch anything in the RTC stack (except maybe the legacy char/rtc.c driver, removing HPET stuff).
The open issue with suspend/resume support in rtc-cmos relates to how ACPI wakeup alarms should trigger. I've not made time to test those patches.
- Dave
Re: [linux-pm] [3/6] 2.6.21-rc4: known regressions
In reply to David BrownellQuoted 7 lines · David Brownell
Quoted 3 lines · Linus Torvalds
It's a *device*, dammit. It should save and resume like one (probably as a system device). The "
set_mode()" etc stuff is at a completely different (higher) conceptual level.
Quoted 5 lines
Agreed, except about "probably as a system device".
Last I checked, there was no good reason to use sysdev suspend()/resume() rather than
platform_devicesuspend_late()/early_resume(). Which more or less means no good reason to use sysdev in new code...
I won't disagree - it might well be much nicer to just show it in the "real" device tree. I'm not 100% sure where in the tree it would go, though. It should probably be "inside" the root entry, before any of the PCI buses. It's generally what we've used those "system device" things for, but I agree that it would be better to just make system devices show up early on the regular device list than it is to have them be special cases.
Bit I think that's a separate (and fairly small) issue compared to the "don't use the clocksource infrastructure as a make-believe suspend/resume mechanism" problem that Maxim's patch had.
(Maxim, don't take that the wrong way - I think your analysis and patch were great, I just think another organization would be better)
Quoted 1 line
Also, making HPET use the legacy mode seems like a step backwards.
I don't think that's actually "legacy" in any sense but the interrupt delivery, where the "legacy mode" bit is not so much that the HPET itself is "legacy" but that it *replaces* legacy devices.
But I may have misunderstood the thing. I'm an old fart, so I know the old timers much better than I know the new ones ;). Somebody feel free to hit me with the clue-2x4.
Linus
Re: [linux-pm] [3/6] 2.6.21-rc4: known regressions
Quoted 5 lines · Linus Torvalds
I won't disagree - it might well be much nicer to just show it in the "real" device tree. I'm not 100% sure where in the tree it would go, though. It should probably be "inside" the root entry, before any of the PCI buses.
Mixing "inside" and "before" is a small linguistic clue about one of the issues with driver model PM. Off topic here; and in terms of suspend/resume callback sequencing that answer shouldn't matter much for HPET (as I understand things).
Quoted 4 lines
It's generally what we've used those "system device" things for, but I agree that it would be better to just make system devices show up early on the regular device list than it is to have them be special cases.
Yes -- where "platform_device" is a regular Joe-Sixpack kind of device, but "sysdev" is a special case.
Quoted 3 lines
Bit I think that's a separate (and fairly small) issue compared to the "don't use the clocksource infrastructure as a make-believe suspend/resume mechanism" problem that Maxim's patch had.
Agreed -- although isn't it the "clockevent" change which is at issue?
A "clockevent" thingie wraps various kinds of timer IRQs; the clocksource is conceptually just a free run counter. Clocksources have been around for a while, with no particular problems.
It's clockevent sources have been the problem with dynamic tick solutions all along, since they mask such chaos inside x86 hardware and interact with so many different parts of the kernel. ;)
- Dave
Quoted 2 lines
(Maxim, don't take that the wrong way - I think your analysis and patch were great, I just think another organization would be better)
Re: [linux-pm] [3/6] 2.6.21-rc4: known regressions
In reply to Linus TorvaldsQuoted 23 lines · On Wednesday 28 March 2007 22:42:00 Linus Torvalds wrote:
Quoted 7 lines · David Brownell
Quoted 3 lines · Linus Torvalds
It's a *device*, dammit. It should save and resume like one (probably as a system device). The "
set_mode()" etc stuff is at a completely different (higher) conceptual level.Quoted 5 lines
Agreed, except about "probably as a system device".
Last I checked, there was no good reason to use sysdev suspend()/resume() rather than
platform_devicesuspend_late()/early_resume(). Which more or less means no good reason to use sysdev in new code...I won't disagree - it might well be much nicer to just show it in the "real" device tree. I'm not 100% sure where in the tree it would go, though. It should probably be "inside" the root entry, before any of the PCI buses. It's generally what we've used those "system device" things for, but I agree that it would be better to just make system devices show up early on the regular device list than it is to have them be special cases.
Quoted 6 lines
Bit I think that's a separate (and fairly small) issue compared to the "don't use the clocksource infrastructure as a make-believe suspend/resume mechanism" problem that Maxim's patch had.
(Maxim, don't take that the wrong way - I think your analysis and patch were great, I just think another organization would be better)
Exactly, I agree completely
I said that my patch was a temporary fix, and I agree that the best way is to create a new system device and use its suspend/resume hooks to bring HPET back to life on resume.
Quoted 7 lines
Quoted 2 lines
Also, making HPET use the legacy mode seems like a step backwards.
I don't think that's actually "legacy" in any sense but the interrupt delivery, where the "legacy mode" bit is not so much that the HPET itself is "legacy" but that it *replaces* legacy devices.
Quoted 6 lines
But I may have misunderstood the thing. I'm an old fart, so I know the old timers much better than I know the new ones ;). Somebody feel free to hit me with the clue-2x4.
Linus
Best regards,
Maxim Levitsky
PATCH 1/1 Add suspend/resume for HPET was: Re: [3/6] 2.6.21-rc4: known regressions
In reply to Linus TorvaldsQuoted 14 lines · On Wednesday 28 March 2007 18:38:48 Linus Torvalds wrote:
Quoted 3 lines · Maxim
Now I don't have a clue how to set those bits if only HPET is used as clock source because now clocksources don't have _any_ resume hook.
One thing that drives me wild about that "clocksource resume" thing is that it seems to think that clocksources are somehow different from any other system devices..
Why isn't the HPET considered a "device", and has it's own *device* "suspend" and "resume"? Why do we seem to think that only "
set_mode()" etc should wake up clock sources?
Quoted 9 lines
It's a *device*, dammit. It should save and resume like one (probably as a system device). The "
set_mode()" etc stuff is at a completely different (higher) conceptual level.Thomas? It does seem like Maxim has hit the nail on the head (at least partly) on the HPET timer resume problems..
Linus
Hi,
I am sending here a patch that as was discussed here adds hpet to list of system devices and adds suspend/resume hooks this way.
I tested it and it works fine.
---
Add suspend/resume support for HPET
--- arch/i386/kernel/hpet.c | 64 +++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 64 insertions(+), 0 deletions(-)
arch/i386/kernel/hpet.c +64 -0
@@ -3,6 +3,8 @@#include <linux/errno.h> #include <linux/hpet.h> #include <linux/init.h> +#include <linux/sysdev.h> +#include <linux/pm.h> #include <asm/hpet.h> #include <asm/io.h>
@@ -524,3 +526,65 @@ irqreturn_t hpet_rtc_interrupt(int irq, void *dev_id)return IRQ_HANDLED ; }#endif + + +/* +* Suspend/resume part +*/ + +#ifdef CONFIG_PM + +static int hpet_suspend (struct sys_device *sys_device,pm_message_t state) +{ +unsigned long cfg =hpet_readl (HPET_CFG ); + + cfg &= ~(HPET_CFG_ENABLE |HPET_CFG_LEGACY ); +hpet_writel (cfg,HPET_CFG ); + +return 0 ; +} + +static int hpet_resume (struct sys_device *sys_device) +{ +unsigned int id; + +hpet_start_counter (); + + id =hpet_readl (HPET_ID ); + +if (id &HPET_ID_LEGSUP ) +hpet_enable_int (); + +return 0 ; +} + +static struct sysdev_class hpet_class = { +set_kset_name ("hpet" ), + .suspend = hpet_suspend, + .resume = hpet_resume, +}; + +static struct sys_device hpet_device = { + .id =0 , + .cls = &hpet_class, +}; + + +static __init int hpet_register_sysfs (void ) +{ +int err; + + err =sysdev_class_register (&hpet_class); + +if (!err) { +sysdev_register (&hpet_device); +if (err) +sysdev_class_unregister (&hpet_class); + } + +return err; +} + +device_initcall (hpet_register_sysfs); + +#endif
Signature · 1 line
1.4.4.2
Re: [ PATCH] Add suspend/resume for HPET was: Re: [3/6] 2.6.21-rc4: known regressions
Quoted 4 lines · Maxim
I am sending here a patch that as was discussed here adds hpet to list of system devices and adds suspend/resume hooks this way.
I tested it and it works fine.
Ok, it certainly looks better, but it *also* looks like it just assumes the HPET is there. Which would work in testing _with_ a HPET, but would likely break on hardware without one, no?
Shouldn't there be at least something like a
if (!is_hpet_capable()) return 0;
at the top of that init routine? I'd also expect that you'd need to check that "hpet_virt_address" is valid or something?
(Or, better yet, shouldn't we set "boot_hpet_disable" when we decide not to use the HPET, and set hpet_virt_address to NULL?)
Linus
Re: [ PATCH] Add suspend/resume for HPET was: Re: [3/6] 2.6.21-rc4: known regressions
Quoted 13 lines · On Thursday 29 March 2007 07:08:58 Linus Torvalds wrote:
Quoted 4 lines · Maxim
I am sending here a patch that as was discussed here adds hpet to list of system devices and adds suspend/resume hooks this way.
I tested it and it works fine.Ok, it certainly looks better, but it *also* looks like it just assumes the HPET is there. Which would work in testing _with_ a HPET, but would likely break on hardware without one, no?
Shouldn't there be at least something like a
Quoted 8 lines
if (!is_hpet_capable()) return 0;at the top of that init routine? I'd also expect that you'd need to check that "
hpet_virt_address" is valid or something?(Or, better yet, shouldn't we set "
boot_hpet_disable" when we decide not to use the HPET, and sethpet_virt_addressto NULL?)
This is done here
out_nohpet:
iounmap(hpet_virt_address); hpet_virt_address = NULL;
Quoted 3 lines
Linus
Hi,
Of course, I forgot.
I was planning to put sysdev code in hpet_enable() but it is not possible because this function is called too early.
Thus I put sysdev initialization in separate function but forgot to test for HPET
Thanks a lot.
Best regards
Maxim Levitsky
---
This adds support of suspend/resume on i386 for HPET
--- arch/i386/kernel/hpet.c | 68 +++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 68 insertions(+), 0 deletions(-)
arch/i386/kernel/hpet.c +68 -0
@@ -3,6 +3,8 @@#include <linux/errno.h> #include <linux/hpet.h> #include <linux/init.h> +#include <linux/sysdev.h> +#include <linux/pm.h> #include <asm/hpet.h> #include <asm/io.h>
@@ -310,6 +312,7 @@ int __init hpet_enable(void) out_nohpet:iounmap (hpet_virt_address); hpet_virt_address =NULL ; + boot_hpet_disable =1 ;return 0 ; }
@@ -524,3 +527,68 @@ irqreturn_t hpet_rtc_interrupt(int irq, void *dev_id)return IRQ_HANDLED ; }#endif + + +/* +* Suspend/resume part +*/ + +#ifdef CONFIG_PM + +static int hpet_suspend (struct sys_device *sys_device,pm_message_t state) +{ +unsigned long cfg =hpet_readl (HPET_CFG ); + + cfg &= ~(HPET_CFG_ENABLE |HPET_CFG_LEGACY ); +hpet_writel (cfg,HPET_CFG ); + +return 0 ; +} + +static int hpet_resume (struct sys_device *sys_device) +{ +unsigned int id; + +hpet_start_counter (); + + id =hpet_readl (HPET_ID ); + +if (id &HPET_ID_LEGSUP ) +hpet_enable_int (); + +return 0 ; +} + +static struct sysdev_class hpet_class = { +set_kset_name ("hpet" ), + .suspend = hpet_suspend, + .resume = hpet_resume, +}; + +static struct sys_device hpet_device = { + .id =0 , + .cls = &hpet_class, +}; + + +static __init int hpet_register_sysfs (void ) +{ +int err; + +if (!is_hpet_capable ()) +return 0 ; + + err =sysdev_class_register (&hpet_class); + +if (!err) { +sysdev_register (&hpet_device); +if (err) +sysdev_class_unregister (&hpet_class); + } + +return err; +} + +device_initcall (hpet_register_sysfs); + +#endif
Signature · 1 line
1.4.4.2
Re: [ PATCH] Add suspend/resume for HPET was: Re: [3/6] 2.6.21-rc4: known regressions
Hello.
Quoted 2 lines · Maxim
---
This adds support of suspend/resume on i386 for HPET
The part after usually "---" gets cut off, the patch description and
signoff should actially *precede* it.
Quoted 6 lines
Signed-off-by Maxim Levitsky <[email protected]>arch/i386/kernel/hpet.c +0
-0
[...]
arch/i386/kernel/hpet.c irqreturn_t hpet_rtc_interrupt(int irq, void *dev_id) · line 586
Quoted 13 lines
arch/i386/kernel/hpet.c +13
-0+static __init int hpet_register_sysfs (void ) +{ +int err; + +if (!is_hpet_capable ()) +return 0 ; + + err =sysdev_class_register (&hpet_class); + +if (!err) { +sysdev_register (&hpet_device); +if (err) +sysdev_class_unregister (&hpet_class);
This doesn't make sense, err will always be 0. Perhaps you actually
intended to check the result of sysdev_register()?
arch/i386/kernel/hpet.c irqreturn_t hpet_rtc_interrupt(int irq, void *dev_id) · line 594
Quoted 8 lines
arch/i386/kernel/hpet.c +8
-0+ } + +return err; +} + +device_initcall (hpet_register_sysfs); + +#endif
WBR, Sergei
Re: [ PATCH] Add suspend/resume for HPET was: Re: [3/6] 2.6.21-rc4: known regressions
Quoted 34 lines · On Thursday 29 March 2007 15:20:27 Sergei Shtylyov wrote:
Hello.
Quoted 2 lines · Maxim
---
This adds support of suspend/resume on i386 for HPETThe part after usually "---" gets cut off, the patch description and
signoff should actially *precede* it.Quoted 6 lines
Signed-off-by Maxim Levitsky <[email protected]>arch/i386/kernel/hpet.c +0
-0[...]
arch/i386/kernel/hpet.c irqreturn_t hpet_rtc_interrupt(int irq, void *dev_id) · line 586
Quoted 13 lines
arch/i386/kernel/hpet.c +13
-0+static __init int hpet_register_sysfs (void ) +{ +int err; + +if (!is_hpet_capable ()) +return 0 ; + + err =sysdev_class_register (&hpet_class); + +if (!err) { +sysdev_register (&hpet_device); +if (err) +sysdev_class_unregister (&hpet_class);This doesn't make sense, err will always be 0. Perhaps you actually
intended to check the result ofsysdev_register()?
Quoted 11 lines
arch/i386/kernel/hpet.c irqreturn_t hpet_rtc_interrupt(int irq, void *dev_id) · line 594
Quoted 8 lines
arch/i386/kernel/hpet.c +8
-0+ } + +return err; +} + +device_initcall (hpet_register_sysfs); + +#endif WBR, Sergei
Hi,
Big thanks for pointing this out,
I will resend that updated patch.
Best regards,
Maxim Levitsky
PATCH v2 1/1 Add suspend/resume for HPET
Subject: Add suspend/resume for HPET
This adds support of suspend/resume on i386 for HPET
--- arch/i386/kernel/hpet.c | 68 +++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 68 insertions(+), 0 deletions(-)
arch/i386/kernel/hpet.c +68 -0
@@ -3,6 +3,8 @@#include <linux/errno.h> #include <linux/hpet.h> #include <linux/init.h> +#include <linux/sysdev.h> +#include <linux/pm.h> #include <asm/hpet.h> #include <asm/io.h>
@@ -310,6 +312,7 @@ int __init hpet_enable(void) out_nohpet:iounmap (hpet_virt_address); hpet_virt_address =NULL ; + boot_hpet_disable =1 ;return 0 ; }
@@ -524,3 +527,68 @@ irqreturn_t hpet_rtc_interrupt(int irq, void *dev_id)return IRQ_HANDLED ; }#endif + + +/* +* Suspend/resume part +*/ + +#ifdef CONFIG_PM + +static int hpet_suspend (struct sys_device *sys_device,pm_message_t state) +{ +unsigned long cfg =hpet_readl (HPET_CFG ); + + cfg &= ~(HPET_CFG_ENABLE |HPET_CFG_LEGACY ); +hpet_writel (cfg,HPET_CFG ); + +return 0 ; +} + +static int hpet_resume (struct sys_device *sys_device) +{ +unsigned int id; + +hpet_start_counter (); + + id =hpet_readl (HPET_ID ); + +if (id &HPET_ID_LEGSUP ) +hpet_enable_int (); + +return 0 ; +} + +static struct sysdev_class hpet_class = { +set_kset_name ("hpet" ), + .suspend = hpet_suspend, + .resume = hpet_resume, +}; + +static struct sys_device hpet_device = { + .id =0 , + .cls = &hpet_class, +}; + + +static __init int hpet_register_sysfs (void ) +{ +int err; + +if (!is_hpet_capable ()) +return 0 ; + + err =sysdev_class_register (&hpet_class); + +if (!err) { + err =sysdev_register (&hpet_device); +if (err) +sysdev_class_unregister (&hpet_class); + } + +return err; +} + +device_initcall (hpet_register_sysfs); + +#endif
Signature · 1 line
1.4.4.2
Re: [PATCH v2] Add suspend/resume for HPET
Quoted 9 lines · Maxim Levitsky
Subject: Add suspend/resume for HPET
This adds support of suspend/resume on i386 for HPET
Signed-off-by Maxim Levitsky <[email protected]>--- arch/i386/kernel/hpet.c | 68 +++++++++++++++++++++++++++++++++++++++++++++++
Btw, what about arch/x86_64/kernel/hpet.c?
That thing seems totally broken. Lookie here:
arch/x86_64/kernel/hpet.c:irqreturn_t hpet_rtc_interrupt(int irq, void *dev_id, struct pt_regs *regs) drivers/char/rtc.c:extern irqreturn_t hpet_rtc_interrupt(int irq, void *dev_id);
anybody see a problem? The x86-64 version doesn't seem to be very well maintained. Is there some fundamental reason why this file isn't shared across architectures?
Linus
Re: [PATCH v2] Add suspend/resume for HPET
Quoted 16 lines · On Thursday 29 March 2007 18:53:37 Linus Torvalds wrote:
Quoted 9 lines · Maxim Levitsky
Subject: Add suspend/resume for HPET
This adds support of suspend/resume on i386 for HPET
Signed-off-by Maxim Levitsky <[email protected]>--- arch/i386/kernel/hpet.c | 68 +++++++++++++++++++++++++++++++++++++++++++++++Btw, what about
arch/x86_64/kernel/hpet.c?That thing seems totally broken. Lookie here:
Quoted 9 lines
arch/x86_64/kernel/hpet.c:irqreturn_t hpet_rtc_interrupt(int irq, void *dev_id, struct pt_regs *regs) drivers/char/rtc.c:extern irqreturn_t hpet_rtc_interrupt(int irq, void *dev_id);anybody see a problem? The x86-64 version doesn't seem to be very well maintained. Is there some fundamental reason why this file isn't shared across architectures?
Linus
Hi,
I agree with that, there seems to be lot of code duplication between i386 and x86_64. By the way, x86_64 does take care of suspend/resume for hpet, it is done by
linux-2.6/arch/x86_64/kernel/time.c:timer_resume(struct sys_device *dev):
hpet_reenable()
on i386 PIT driver goes out of way when HPET is detected So it seems that there is lot of work to do to remove redundant code.
Best regards,
Maxim Levitsky
Re: [PATCH v2] Add suspend/resume for HPET
In reply to Linus TorvaldsQuoted 1 line · Linus Torvalds
Btw, what about
arch/x86_64/kernel/hpet.c?
at least wrt. suspend/resume it should be fine, because in arch/x86_64/kernel/time.c it does this upon resume:
static int timer_resume(struct sys_device *dev)
{
if (hpet_address)
hpet_reenable();
else
i8254_timer_resume();[ barring the issue that mixing two pieces of hardware like this in a
single resume function is wrong - all timer hardware should be separated like we did it for i386. I've got 64-bit clockevents code in -rt which does this separation. ]
Quoted 8 lines
That thing seems totally broken. Lookie here:
arch/x86_64/kernel/hpet.c:irqreturn_t hpet_rtc_interrupt(int irq, void *dev_id, struct pt_regs *regs) drivers/char/rtc.c:extern irqreturn_t hpet_rtc_interrupt(int irq, void *dev_id);anybody see a problem? The x86-64 version doesn't seem to be very well maintained. Is there some fundamental reason why this file isn't shared across architectures?
there's no fundamental reason. x86_64 COW-ed hpet_timer.c and time_hpet.c years ago and drifted off into different areas. They should be unified: more power to arch/x86/ ;-)
Ingo
Re: [PATCH v2] Add suspend/resume for HPET
Quoted 3 lines · Ingo Molnar
there's no fundamental reason.
x86_64COW-edhpet_timer.candtime_hpet.cyears ago and drifted off into different areas.
Not quite -- x86-64 did HPET long before i386; the only stuff cowed was the character driver support code. But the core HPET code was always totally different code streams. We never did the complicated pluggable clock code i386 did though -- i never quite saw the point of that because there aren't that many timers there.
Of course it is already obsolete with clocksources now.
-Andi
Re: [PATCH v2] Add suspend/resume for HPET
In reply to Maxim LevitskyQuoted 3 lines · Maxim Levitsky
Subject: Add suspend/resume for HPET
This adds support of suspend/resume on i386 for HPETSigned-off-by Maxim Levitsky <[email protected]>
Confirmed that suspend/resume disk/ram works on X60s with CONFIG_HPET_TIMER=y and CONFIG_NO_HZ unset.
But suspend to disk still hang with CONFIG_NO_HZ unset.
Thanks,
Jeff.
Re: [PATCH v2] Add suspend/resume for HPET
In reply to Maxim LevitskyQuoted 4 lines · Maxim Levitsky
Subject: Add suspend/resume for HPET
This adds support of suspend/resume on i386 for HPETSigned-off-by Maxim Levitsky <[email protected]>
arch/i386/kernel/hpet.c irqreturn_t hpet_rtc_interrupt(int irq, void *dev_id) · line 571
Quoted 10 lines
arch/i386/kernel/hpet.c +10
-0+static struct sysdev_class hpet_class = { +set_kset_name ("hpet" ), + .suspend = hpet_suspend, + .resume = hpet_resume, +}; + +static struct sys_device hpet_device = { + .id =0 , + .cls = &hpet_class, +};
Sorry for being inresponsive. I was travelling and unexpectedly cut off from the internet for some days.
While I agree in principle with the patch, I'm a bit uncomfortable. The sys device suspend / resume ordering is not guaranteed and relies on the registering order.
Jeff still seems to have problems with CONFIG_NO_HZ=n and it might be caused by time keeping / tick management resume happening before the HPET resume.
The required resume order is:
clocksources
timekeeping
clockevents
tick management
I'm not sure how to do this properly with the sys device facilities, but I look into it.
/me goes off to understand the sys device magic.
tglx
Re: [PATCH v2] Add suspend/resume for HPET
Quoted 3 lines · Thomas Gleixner
Jeff still seems to have problems with
CONFIG_NO_HZ=nand it might be caused by time keeping / tick management resume happening before the HPET resume.
me>Confirmed that suspend/resume disk/ram works on X60s with me>CONFIG_HPET_TIMER=y and CONFIG_NO_HZ unset.
me> But suspend to disk still hang with CONFIG_NO_HZ unset.
Oops, sorry. Typo (as a result copy/paste using mouse)
... I actually meant CONFIG_NO_HZ "set".
Just to be clear, suspend to disk still hang with CONFIG_NO_HZ=y. It hang just before you see the percent saving %.
Jeff.
Re: [PATCH v2] Add suspend/resume for HPET
Quoted 12 lines · Jeff Chua
Quoted 3 lines · Thomas Gleixner
Jeff still seems to have problems with
CONFIG_NO_HZ=nand it might be caused by time keeping / tick management resume happening before the HPET resume.me>Confirmed that suspend/resume disk/ram works on X60s with me>CONFIG_HPET_TIMER=y and
CONFIG_NO_HZunset.
me> But suspend to disk still hang withCONFIG_NO_HZunset.
Quoted 5 lines
Oops, sorry. Typo (as a result copy/paste using mouse)
... I actually meantCONFIG_NO_HZ"set".Just to be clear, suspend to disk still hang with
CONFIG_NO_HZ=y. It hang just before you see the percent saving %.
Ah, that's a different one then. In that path the timers should be alive, but who knows.
tglx
Re: [PATCH v2] Add suspend/resume for HPET
In reply to Thomas GleixnerQuoted 4 lines · Thomas Gleixner
While I agree in principle with the patch, I'm a bit uncomfortable. The sys device suspend / resume ordering is not guaranteed and relies on the registering order.
Well, this is why we probably should try to get away from the "system device" issue, exactly because system devices are totally outside the normal ordering and only have a random linear order.
If the clocksources were actually in the device tree, you'd get all the normal guarantees about hierarchical ordering..
Linus
Re: [PATCH v2] Add suspend/resume for HPET
Quoted 7 lines · Linus Torvalds
Quoted 4 lines · Thomas Gleixner
While I agree in principle with the patch, I'm a bit uncomfortable. The sys device suspend / resume ordering is not guaranteed and relies on the registering order.
Quoted 6 lines
Well, this is why we probably should try to get away from the "system device" issue, exactly because system devices are totally outside the normal ordering and only have a random linear order.
If the clocksources were actually in the device tree, you'd get all the normal guarantees about hierarchical ordering..
Right, but clock - sources/events need to be extremly late suspended and early resumed. How can we ensure this ?
tglx
Re: [PATCH v2] Add suspend/resume for HPET
Quoted 12 lines · Thomas Gleixner
Quoted 11 lines · Linus Torvalds
Quoted 4 lines · Thomas Gleixner
While I agree in principle with the patch, I'm a bit uncomfortable. The sys device suspend / resume ordering is not guaranteed and relies on the registering order.
Well, this is why we probably should try to get away from the "system device" issue, exactly because system devices are totally outside the normal ordering and only have a random linear order.
Quoted 5 lines
Quoted 2 lines
If the clocksources were actually in the device tree, you'd get all the normal guarantees about hierarchical ordering..
Right, but clock - sources/events need to be extremly late suspended and early resumed. How can we ensure this ?
Put it at the top of the device tree.
thanks,
greg k-h
Re: [PATCH v2] Add suspend/resume for HPET
In reply to Thomas GleixnerQuoted 3 lines · Thomas Gleixner
Right, but clock - sources/events need to be extremly late suspended and early resumed. How can we ensure this ?
Make them be at the top of the device tree by adding them early. That's the whole point of the device tree after all - we have an ordering that is enforced by its topology, and that we sort by when things were added.
Right now the way things work is (iirc - somebody like Greg should double-check me) is that we add all devices to the power list at device_add() time by traversing the devices fromt he root all the way out, and doing a device_add() which does a device_pm_add(), which in turn adds it to the power-management list - so that the list is always topologically sorted.
So the only thing that needs to be done is to make sure that we add the timer devices early during bootup - something we have to do *anyway*. If a device is added early in bootup, that automatically means that it will be suspended late, and resumed early - because we maintain that order all the way through..
Linus
Re: [PATCH v2] Add suspend/resume for HPET
Quoted 4 lines · Linus Torvalds
Quoted 3 lines · Thomas Gleixner
Right, but clock - sources/events need to be extremly late suspended and early resumed. How can we ensure this ?
[...]
Quoted 5 lines
So the only thing that needs to be done is to make sure that we add the timer devices early during bootup - something we have to do *anyway*. If a device is added early in bootup, that automatically means that it will be suspended late, and resumed early - because we maintain that order all the way through..
IIRC hpet is particularly hard to initialize early on in the bootup sequence. So the way the clockevents code works is that it will always try to make the best out of all available devices, and dynamically adapts things as devices 'arrive' or 'depart' - no matter how late that happens. (That way there's no dependency on how late a device gets registered - it will only delay the switch to high-res mode for example.) A given time device might 'depart' because for example the watchdog mechanism finds that its quality is not good enough, or because someone initiated cpufreq which breaks the TSC clocksource.
i dont think there's any particular problem here because suspend/resume wont be done during bootup - but we might need a way to move a device to earlier spots in the device tree, even if they got registered later on - instead of forcing the time devices to be registered very early?
Ingo
Re: [linux-pm] [PATCH v2] Add suspend/resume for HPET
( please remove obsolute [email protected] from further messages!! )
Quoted 5 lines · Ingo Molnar
i dont think there's any particular problem here because suspend/resume wont be done during bootup - but we might need a way to move a device to earlier spots in the device tree, even if they got registered later on - instead of forcing the time devices to be registered very early?
I'm about ready to test the appended patch... a "move one device" call might be safest at this point in the release cycle though.
- Dave
======================== SNIP!
Change how the PM list is constructed, so that devices are added right after their parents (when they have one) rather than at the end of the list. This preserves sequencing guarantees, but enables sequencing of suspend/resume operations by more important characteristics than "when device happened to enumerate" ... e.g. clocksources and clockevents at a clearly defined point during suspend and resume.
This patch has a potential downside for devices that have multiple power dependencies and which "just happened to work" before.
drivers/base/power/main.c +9 -4
@@ -52,12 +52,17 @@ EXPORT_SYMBOL_GPL(device_pm_set_parent);int device_pm_add (struct device * dev) {int error; +struct device *parent = dev->parent; -pr_debug ("PM: Adding info for %s:%s\n" , - dev->bus ? dev->bus->name :"No Bus" , dev->kobj.name); +pr_debug ("PM: Adding info for %s:%s, after %s\n" , + dev->bus ? dev->bus->name :"No Bus" , dev->kobj.name, + parent ? parent->bus_id :"(no parent)" );down (&dpm_list_sem); -list_add_tail (&dev->power.entry, &dpm_active); -device_pm_set_parent (dev, dev->parent); +if (parent) +list_add (&dev->power.entry, &parent->power.entry); +else +list_add_tail (&dev->power.entry, &dpm_active); +device_pm_set_parent (dev, parent);if ((error =dpm_sysfs_add (dev)))list_del (&dev->power.entry);up (&dpm_list_sem);
Re: [linux-pm] [PATCH v2] Add suspend/resume for HPET
Quoted 11 lines · David Brownell
( please remove obsolute [email protected] from further messages!! )
Quoted 5 lines · Ingo Molnar
i dont think there's any particular problem here because suspend/resume wont be done during bootup - but we might need a way to move a device to earlier spots in the device tree, even if they got registered later on - instead of forcing the time devices to be registered very early?
I'm about ready to test the appended patch... a "move one device" call might be safest at this point in the release cycle though.
As expected, this behaved OK on an x86 laptop. I'll see if it breaks some of the ARM boards I have handy.
To be clear, what this means is that if "clockevent" and "clocksource" devices get registered "very early", and the various clockevent and clock source devices get registered, then the suspend/resume methods for those will all get grouped together ... suspended "very late" and resumed "very early", regardless of when they get registered. Pretty much the driver model parts of what Linus was suggesting; clockevent bits would still be needed.
- Dave
Quoted 40 lines
- Dave
======================== SNIP!
Change how the PM list is constructed, so that devices are added right after their parents (when they have one) rather than at the end of the list. This preserves sequencing guarantees, but enables sequencing of suspend/resume operations by more important characteristics than "when device happened to enumerate" ... e.g. clocksources and clockevents at a clearly defined point during suspend and resume.This patch has a potential downside for devices that have multiple power dependencies and which "just happened to work" before.
Signed-off-by David Brownell <[email protected]>drivers/base/power/main.c +9
-4@@ -52,12 +52,17 @@ EXPORT_SYMBOL_GPL(device_pm_set_parent);int device_pm_add (struct device * dev) {int error; +struct device *parent = dev->parent; -pr_debug ("PM: Adding info for %s:%s\n" , - dev->bus ? dev->bus->name :"No Bus" , dev->kobj.name); +pr_debug ("PM: Adding info for %s:%s, after %s\n" , + dev->bus ? dev->bus->name :"No Bus" , dev->kobj.name, + parent ? parent->bus_id :"(no parent)" );down (&dpm_list_sem); -list_add_tail (&dev->power.entry, &dpm_active); -device_pm_set_parent (dev, dev->parent); +if (parent) +list_add (&dev->power.entry, &parent->power.entry); +else +list_add_tail (&dev->power.entry, &dpm_active); +device_pm_set_parent (dev, parent);if ((error =dpm_sysfs_add (dev)))list_del (&dev->power.entry);up (&dpm_list_sem);
Re: [linux-pm] [PATCH v2] Add suspend/resume for HPET
Quoted 4 lines · David Brownell
for those will all get grouped together ... suspended "very late" and resumed "very early", regardless of when they get registered. Pretty much the driver model parts of what Linus was suggesting; clockevent bits would still be needed.
I tested your patch with CONFIG_NO_HZ=y, but it still hangs while suspending to disk (before the percent saving).
But one discovery. I get tired of all these hangs, so I decided to press some keys and the power button. Accidentally, the suspend proceeded and successfully suspended!
I tried many more times, and discovered that to proceed with the suspend, hit any 4 keys slowly. (e.g. "F1 F2 F3 F4", or "1 2 3 4").
My .config has CONFIG_NO_HZ=y and CONFIG_HIGH_RES_TIMERS=y, but I suppose CONFIG_HIGH_RES_TIMERS=y gots nothing to do with the hang.
I went back with my vanilla 2.6.21-rc5 with Maxim's patch, and with hitting the keys, I could suspend to disk with CONFIG_NO_HZ=y and CONFIG_HIGH_RES_TIMERS=y.
Jeff.
Re: [linux-pm] [PATCH v2] Add suspend/resume for HPET
Quoted 8 lines · Jeff Chua
Quoted 4 lines · David Brownell
for those will all get grouped together ... suspended "very late" and resumed "very early", regardless of when they get registered. Pretty much the driver model parts of what Linus was suggesting; clockevent bits would still be needed.
I tested your patch with
CONFIG_NO_HZ=y, but it still hangs while suspending to disk (before the percent saving).
Of course. No clockevent updates...
Re: [PATCH v2] Add suspend/resume for HPET
In reply to David BrownellQuoted 11 lines · David Brownell
( please remove obsolute [email protected] from further messages!! )
Quoted 5 lines · Ingo Molnar
i dont think there's any particular problem here because suspend/resume wont be done during bootup - but we might need a way to move a device to earlier spots in the device tree, even if they got registered later on - instead of forcing the time devices to be registered very early?
I'm about ready to test the appended patch... a "move one device" call might be safest at this point in the release cycle though.
As expected, this behaved OK on an x86 laptop. I'll see if it breaks some of the ARM boards I have handy.
To be clear, what this means is that if "clockevent" and "clocksource" devices get registered "very early", and the various clockevent and clock source devices get registered, then the suspend/resume methods for those will all get grouped together ... suspended "very late" and resumed "very early", regardless of when they get registered. Pretty much the driver model parts of what Linus was suggesting; clockevent bits would still be needed.
- Dave
Quoted 40 lines
- Dave
======================== SNIP!
Change how the PM list is constructed, so that devices are added right after their parents (when they have one) rather than at the end of the list. This preserves sequencing guarantees, but enables sequencing of suspend/resume operations by more important characteristics than "when device happened to enumerate" ... e.g. clocksources and clockevents at a clearly defined point during suspend and resume.This patch has a potential downside for devices that have multiple power dependencies and which "just happened to work" before.
Signed-off-by David Brownell <[email protected]>drivers/base/power/main.c +9
-4@@ -52,12 +52,17 @@ EXPORT_SYMBOL_GPL(device_pm_set_parent);int device_pm_add (struct device * dev) {int error; +struct device *parent = dev->parent; -pr_debug ("PM: Adding info for %s:%s\n" , - dev->bus ? dev->bus->name :"No Bus" , dev->kobj.name); +pr_debug ("PM: Adding info for %s:%s, after %s\n" , + dev->bus ? dev->bus->name :"No Bus" , dev->kobj.name, + parent ? parent->bus_id :"(no parent)" );down (&dpm_list_sem); -list_add_tail (&dev->power.entry, &dpm_active); -device_pm_set_parent (dev, dev->parent); +if (parent) +list_add (&dev->power.entry, &parent->power.entry); +else +list_add_tail (&dev->power.entry, &dpm_active); +device_pm_set_parent (dev, parent);if ((error =dpm_sysfs_add (dev)))list_del (&dev->power.entry);up (&dpm_list_sem);
Re: [PATCH v2] Add suspend/resume for HPET
In reply to Ingo Molnar( please remove obsolute [email protected] from further messages!! )
Quoted 5 lines · Ingo Molnar
i dont think there's any particular problem here because suspend/resume wont be done during bootup - but we might need a way to move a device to earlier spots in the device tree, even if they got registered later on - instead of forcing the time devices to be registered very early?
I'm about ready to test the appended patch... a "move one device" call might be safest at this point in the release cycle though.
- Dave
======================== SNIP!
Change how the PM list is constructed, so that devices are added right after their parents (when they have one) rather than at the end of the list. This preserves sequencing guarantees, but enables sequencing of suspend/resume operations by more important characteristics than "when device happened to enumerate" ... e.g. clocksources and clockevents at a clearly defined point during suspend and resume.
This patch has a potential downside for devices that have multiple power dependencies and which "just happened to work" before.
drivers/base/power/main.c +9 -4
@@ -52,12 +52,17 @@ EXPORT_SYMBOL_GPL(device_pm_set_parent);int device_pm_add (struct device * dev) {int error; +struct device *parent = dev->parent; -pr_debug ("PM: Adding info for %s:%s\n" , - dev->bus ? dev->bus->name :"No Bus" , dev->kobj.name); +pr_debug ("PM: Adding info for %s:%s, after %s\n" , + dev->bus ? dev->bus->name :"No Bus" , dev->kobj.name, + parent ? parent->bus_id :"(no parent)" );down (&dpm_list_sem); -list_add_tail (&dev->power.entry, &dpm_active); -device_pm_set_parent (dev, dev->parent); +if (parent) +list_add (&dev->power.entry, &parent->power.entry); +else +list_add_tail (&dev->power.entry, &dpm_active); +device_pm_set_parent (dev, parent);if ((error =dpm_sysfs_add (dev)))list_del (&dev->power.entry);up (&dpm_list_sem);
Re: [PATCH v2] Add suspend/resume for HPET
In reply to Linus TorvaldsQuoted 10 lines · Linus Torvalds
Make them be at the top of the device tree by adding them early. That's the whole point of the device tree after all - we have an ordering that is enforced by its topology, and that we sort by when things were added.
Right now the way things work is (iirc - somebody like Greg should double-check me) is that we add all devices to the power list at
device_add()time by traversing the devices fromt he root all the way out, and doing adevice_add()which does adevice_pm_add(), which in turn adds it to the power-management list - so that the list is always topologically sorted.
Yes, this is how it works (or if not, then there's a bug that needs to be fixed, as that is how it _should_ work...)
thanks,
greg k-h
Re: [linux-pm] [PATCH v2] Add suspend/resume for HPET
In reply to Linus TorvaldsQuoted 9 lines · Linus Torvalds
Quoted 3 lines · Thomas Gleixner
Right, but clock - sources/events need to be extremly late suspended and early resumed. How can we ensure this ?
Make them be at the top of the device tree by adding them early. That's the whole point of the device tree after all - we have an ordering that is enforced by its topology, and that we sort by when things were added.
Right, but "when things get added" doesn't correlate well to "when they should get suspended/resumed". It's also in basic conflict with runtime PM models, where devices may be suspended at essentially any time. And sysdevs are even stranger.
One way out: rather than constructing that list as devices get enumerated, it could be constructed by a (linear-time, non-recursive) walk of the device tree(s) before they get suspended.
(Or equivalently: construct lists at enumeration time, but just adding them *right after their parent* rather than at the end of the list.)
Would that solve the problem here? Potentially ... if the tree is structured to meet Thomas' rules:
Quoted 15 lines
Quoted 6 lines
The required resume order is:
clocksources
timekeeping
clockevents
tick managementSo the only thing that needs to be done is to make sure that we add the timer devices early during bootup - something we have to do *anyway*. If a device is added early in bootup, that automatically means that it will be suspended late, and resumed early - because we maintain that order all the way through..
-- "clocksource" -- +-- HPET
|
Quoted 7 lines
+-- TSC | +-- i8259 | +-- lapic timer |.. whatever else
If each of those were a device node, with "clocksource" suspend/resume methods handling Thomas' "timekeeping" item, and simlarly for "clockevent" devices ... I could see that all working neatly.
- Dave
-
To unsubscribe from this list: send the line "unsubscribe linux-acpi" in the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH v2] Add suspend/resume for HPET
In reply to Thomas GleixnerQuoted 34 lines · On Saturday 31 March 2007 18:51:11 Thomas Gleixner wrote:
Quoted 4 lines · Maxim Levitsky
Subject: Add suspend/resume for HPET
This adds support of suspend/resume on i386 for HPETSigned-off-by Maxim Levitsky <[email protected]>arch/i386/kernel/hpet.c irqreturn_t hpet_rtc_interrupt(int irq, void *dev_id) · line 571
Quoted 10 lines
arch/i386/kernel/hpet.c +10
-0+static struct sysdev_class hpet_class = { +set_kset_name ("hpet" ), + .suspend = hpet_suspend, + .resume = hpet_resume, +}; + +static struct sys_device hpet_device = { + .id =0 , + .cls = &hpet_class, +};Sorry for being inresponsive. I was travelling and unexpectedly cut off from the internet for some days.
While I agree in principle with the patch, I'm a bit uncomfortable. The sys device suspend / resume ordering is not guaranteed and relies on the registering order.
Jeff still seems to have problems with
CONFIG_NO_HZ=nand it might be caused by time keeping / tick management resume happening before the HPET resume.The required resume order is:
clocksources
timekeeping
clockevents
tick management
Quoted 9 lines
I'm not sure how to do this properly with the sys device facilities, but I look into it.
/me goes off to understand the sys device magic.
tglx
Hi,
So maybe I was right afrer all,
Maybe it is better to add a suspend/resume hook to each clock source and call it from timekeeping_resume() ?
Or maybe even unite clocksources with clockevents, don't know
By the way I want to report maybe a bug / maybe a feature :-) :
(sorry for long explanation)
Basically I have two clockevent sources : PIT(HPET) and APIC
(Actually I it seems that in next version of kernel HPET will be switched out
of 'legacy replacement mode' , so PIT and HPET and RTC could coexist of same system,
But HPET won't be able to generate IRQ0, and it will be assigned some IRQ, possibly shared with other devices)
APIC timer is chosen by default and works fine,
since I don't have C2/C2 states on my system (ICH8 doesn't support them :-( )
But if I force it off (nolapic_timer) HPET or PIC is chosen and strangely they are
put in _periodic_ mode although they are capable of one-shot mode
Is this a bug ?
Secondary I am getting a very strange behavior if I use CONFIG_NOHZ + !CONFIG_HIGH_RES_TIMERS and try to suspend to ram:
System resumes, but gets crazy:
'top' shows that ksoftirqd consumes 9999 % of cpu time (this is not a typo) And other 'normal' programs that are running show same 9999 too. System slows to crawl.
Also I found that one of APICS is in periodic mode, and second is in one shoot mode. And I tested this with or without my patch (thank goodness it is not my fault)
CONFIG_NOHZ + CONFIG_HIGH_RES_TIMERS work just fine.
Best regards,
Maxim Levitsky
Re: [PATCH v2] Add suspend/resume for HPET
Quoted 4 lines · Maxim Levitsky
So maybe I was right afrer all,
Maybe it is better to add a suspend/resume hook to each clock source and call it fromtimekeeping_resume()?
Umm.. WHy not make the device tree look like this:
-- "clocksource" -- +-- HPET | +-- TSC | +-- i8259 | +-- lapic timer | .. whatever else
and use the "struct device" that we *have* for this? The whole "struct device" is literally designed to do this, and to be embedded into whatever bigger structures you have that describes higher-level behaviour. Ie you'd put a "struct device" inside the "struct clocksource".
That thingalready *has* the suspend/resume hooks, and it will mean that people will see the clocks in the device tree rather than have a new notion.
Linus
Re: [PATCH v2] Add suspend/resume for HPET
Quoted 12 lines · Linus Torvalds
Umm.. WHy not make the device tree look like this:
-- "clocksource" -- +-- HPET | +-- TSC | +-- i8259 | +-- lapic timer | .. whatever else
Quoted 5 lines
and use the "struct device" that we *have* for this? The whole "struct device" is literally designed to do this, and to be embedded into whatever bigger structures you have that describes higher-level behaviour. Ie you'd put a "struct device" inside the "struct clocksource".
yeah. There's some practical problems that need to be sorted out: much of the current GTOD code is irq-driven (and all GTOD locks are irq-safe), while the sysfs code needs to run in process-context level.
Clocksources 'arrive' and 'depart' in hardirq context (which is the primary place where we notice their breakage, determine that they are now verified to be usable, etc.). This came partly from legacy: the gradual conversion of the monolithic time code, and the need to preserve GTOD and non-GTOD architectures without too much duplication. It also came partly because there's also a fundamental need to have accurate time, which is better served from irq context.
i very much agree that this should and must be cleaned up, but it needs quite a bit more logistics than it might appear at first sight. Clockevents basically just followed (and had to follow) the direction of clocksources in this regard.
Ingo
Re: [PATCH v2] Add suspend/resume for HPET
Quoted 4 lines · Ingo Molnar
yeah. There's some practical problems that need to be sorted out: much of the current GTOD code is irq-driven (and all GTOD locks are irq-safe), while the sysfs code needs to run in process-context level.
Quoted 8 lines
Clocksources 'arrive' and 'depart' in hardirq context (which is the primary place where we notice their breakage, determine that they are now verified to be usable, etc.). This came partly from legacy: the gradual conversion of the monolithic time code, and the need to preserve GTOD and non-GTOD architectures without too much duplication. It also came partly because there's also a fundamental need to have accurate time, which is better served from irq context.
Is this in reference to the irq-context clocksource polling stuff? I don't see a dire reason to keep that code, and I agree removing that is a certainly a worth while cleanup .. I added this cleanup to one of my trees when you first suggested it , and there is some infrastructure that really should be added to facilitate it.
Daniel
Re: [ PATCH] Add suspend/resume for HPET was: Re: [3/6] 2.6.21-rc4: known regressions
In reply to MaximQuoted 10 lines · Maxim
Quoted 3 lines · On Thursday 29 March 2007 07:08:58 Linus Torvalds wrote:
(Or, better yet, shouldn't we set "
boot_hpet_disable" when we decide not to use the HPET, and sethpet_virt_addressto NULL?)This is done here
out_nohpet:iounmap(hpet_virt_address); hpet_virt_address = NULL;
No, that only clears hpet_virt_address, and thus makes all subsequent "hpet_readl()" and "hpet_writel()" calls oops.
But it doesn't actually *tell* anybody that the HPET is disabled, so if you later on do
if (is_hpet_capable()) {
time = hpet_readl(..);
..you will just Oops!
So as far as I can see, even with your latest patch, if hpet_enable() fails (and triggers the "goto out_nohpet" cases), you'll just oops immediately when you try to suspend/resume the HPET.
THAT was what I meant - when we clear hpet_virt_address, we should also tell all potential subsequent users that the HPET is not there!
Linus
Re: [ PATCH] Add suspend/resume for HPET was: Re: [3/6] 2.6.21-rc4: known regressions
Quoted 26 lines · On Thursday 29 March 2007 18:35:21 Linus Torvalds wrote:
Quoted 10 lines · Maxim
Quoted 3 lines · On Thursday 29 March 2007 07:08:58 Linus Torvalds wrote:
(Or, better yet, shouldn't we set "
boot_hpet_disable" when we decide not to use the HPET, and sethpet_virt_addressto NULL?)This is done here
out_nohpet:iounmap(hpet_virt_address); hpet_virt_address = NULL;No, that only clears
hpet_virt_address, and thus makes all subsequent "hpet_readl()" and "hpet_writel()" calls oops.But it doesn't actually *tell* anybody that the HPET is disabled, so if you later on do
if (is_hpet_capable()) { time = hpet_readl(..); ..you will just Oops!
Quoted 9 lines
So as far as I can see, even with your latest patch, if
hpet_enable()fails (and triggers the "gotoout_nohpet" cases), you'll just oops immediately when you try to suspend/resume the HPET.THAT was what I meant - when we clear
hpet_virt_address, we should also tell all potential subsequent users that the HPET is not there!Linus
Hi,
I agree, and as you said I did exactly that:
out_nohpet:
iounmap(hpet_virt_address);
hpet_virt_address = NULL;
boot_hpet_disable = 1; <<<--- this ensures that is_hpet_capable() will never return positive value
I also sent an updated version on my patch with subject line "[PATCH v2] Add suspend/resume for HPET"
I forgot (a typo) to check error code in hpet_register_sysfs Thanks to Sergei Shtylyov for pointing me on that.
This patch should be ok.
Best regards,
Maxim Levitsky
Re: [ PATCH] Add suspend/resume for HPET was: Re: [3/6] 2.6.21-rc4: known regressions
Quoted 2 lines · Maxim Levitsky
I agree, and as you said I did exactly that:
Gaah. I'm blind. Sorry. Your patch did indeed do exactly that, I somehow overlooked it.
Linus
Re: [patch, v2] add suspend/resume for HPET
update: i've tested Maxim's v2 patch on both a hpet-capable and a hpet-less system, and it works fine here.
on a dual-core hpet-capable system, running a NO_HZ+!HIGH_RES_TIMERS kernel:
europe:~> grep Clock /proc/timer_list
Clock Event Device: hpet
Clock Event Device: lapic
Clock Event Device: lapic
s2ram works fine now - it hung on resume before.
on a dual-core non-hpet system, with a NO_HZ+!HIGH_RES_TIMERS kernel:
neptune:~> grep Clock /proc/timer_list
Clock Event Device: pit
Clock Event Device: lapic
Clock Event Device: lapic
s2ram worked fine before - and it still works now.
(The combination of NO_HZ+!HIGH_RES_TIMERS was the most fragile wrt. suspend because in the !HIGH_RES_TIMERS there's just a single instance after resume that we touch the timer hardware, and we very much rely on the periodic interrupt being set to the precise value.)
So this is a go on my systems - good work Maxim! (I've reproduced Maxim's patch below with minor patch-metadata updates.)
Ingo
---------------------------->
Subject: [patch] add suspend/resume for HPET
From: Maxim Levitsky <[email protected]>
This adds support for suspend/resume on i386 for HPET.
--- arch/i386/kernel/hpet.c | 68 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+)
arch/i386/kernel/hpet.c +68 -0
@@ -3,6 +3,8 @@#include <linux/errno.h> #include <linux/hpet.h> #include <linux/init.h> +#include <linux/sysdev.h> +#include <linux/pm.h> #include <asm/hpet.h> #include <asm/io.h>
@@ -307,6 +309,7 @@ int __init hpet_enable(void) out_nohpet:iounmap (hpet_virt_address); hpet_virt_address =NULL ; + boot_hpet_disable =1 ;return 0 ; }
@@ -523,3 +526,68 @@ irqreturn_t hpet_rtc_interrupt(int irq,return IRQ_HANDLED ; }#endif + + +/* +* Suspend/resume part +*/ + +#ifdef CONFIG_PM + +static int hpet_suspend (struct sys_device *sys_device,pm_message_t state) +{ +unsigned long cfg =hpet_readl (HPET_CFG ); + + cfg &= ~(HPET_CFG_ENABLE |HPET_CFG_LEGACY ); +hpet_writel (cfg,HPET_CFG ); + +return 0 ; +} + +static int hpet_resume (struct sys_device *sys_device) +{ +unsigned int id; + +hpet_start_counter (); + + id =hpet_readl (HPET_ID ); + +if (id &HPET_ID_LEGSUP ) +hpet_enable_int (); + +return 0 ; +} + +static struct sysdev_class hpet_class = { +set_kset_name ("hpet" ), + .suspend = hpet_suspend, + .resume = hpet_resume, +}; + +static struct sys_device hpet_device = { + .id =0 , + .cls = &hpet_class, +}; + + +static __init int hpet_register_sysfs (void ) +{ +int err; + +if (!is_hpet_capable ()) +return 0 ; + + err =sysdev_class_register (&hpet_class); + +if (!err) { + err =sysdev_register (&hpet_device); +if (err) +sysdev_class_unregister (&hpet_class); + } + +return err; +} + +device_initcall (hpet_register_sysfs); + +#endif
Michael S. Tsirkin
Acked-byRe: [3/6] 2.6.21-rc4: known regressions
In reply to MaximQuoted 5 lines
Subject : first disk access after resume takes several minutes
('date' does not advance after resume from RAM,CONFIG_NO_HZ=n)
References : http://lkml.org/lkml/2007/3/8/117http://lkml.org/lkml/2007/3/25/20Submitter : Michael S. Tsirkin <[email protected]>
...
Quoted 4 lines
Subject : after resume: X hangs after drawing a couple of windows
References : http://lkml.org/lkml/2007/3/8/117
Submitter : Michael S. Tsirkin <[email protected]>
Status : unknown
...
Quoted 18 lines
Quoted 4 lines
Quoted 4 lines
Quoted 4 lines
From: Jeff Chua <[email protected]>
Quoted 3 lines
It's related. I tested without
CONFIG_HPET_TIMER, and now my X60 can suspend and resume from RAM (s2ram). Even better, it works with/withoutCONFIG_NO_HZ.Quoting Maxim <[email protected]>:
Hi,
I almost sure Iknow why this happens,
The problem is that both hpet clock source
and hpet clockevents doesn't have a suspend/resume function On resume we should enable the main counter _and_ enable legacy replacement mode, On my system main counter in enabled, by I think by bios, but legacy replacement mode is not, so if a system doesn't use lapic as a tick source, but use hpet+broadcast, it will hang for sure on resume, and i tested it
Quoted 6 lines
The patch below is a temporally fix, until
clock-events and clocksources will get proper suspend/resume hooks:Regards,
Maxim Levitsky
Bingo!
The patch below fixes the two problems (listed above) with resume from RAM that I have observed on my T60 with 2.6.21-rc5: with this patch applied, and with CONFIG_NO_HZ unset, date advances correctly, X functions properly and there is no delay on first disk access.
Thanks very much.
---
Quoted 2 lines
Add suspend/resume for HPET
Signed-off-by Maxim Levitsky <[email protected]>
Maxim, do you plan to send this upstream?
---
arch/i386/kernel/hpet.c +10 -0
@@ -152,6 +152,16 @@ static void hpet_set_mode(enum clock_event_mode mode,unsigned long cfg, cmp, now;uint64_t delta; + +if ( mode !=CLOCK_EVT_MODE_UNUSED && mode !=CLOCK_EVT_MODE_SHUTDOWN ) + { +unsigned long cfg =hpet_readl (HPET_CFG ); + cfg |=HPET_CFG_ENABLE |HPET_CFG_LEGACY ; +hpet_writel (cfg,HPET_CFG ); + + } + +switch (mode) {case CLOCK_EVT_MODE_PERIODIC : delta = ((uint64_t )(NSEC_PER_SEC /HZ )) * hpet_clockevent.mult;
Signature · 1 line
MST
Re: [3/6] 2.6.21-rc4: known regressions
Quoted 8 lines · Michael S. Tsirkin
Bingo!
The patch below fixes the two problems (listed above) with resume from RAM that I have observed on my T60 with 2.6.21-rc5: with this patch applied, and with
CONFIG_NO_HZunset, date advances correctly, X functions properly and there is no delay on first disk access.Thanks very much.
[...]
Quoted 2 lines
Maxim, do you plan to send this upstream?
we'll fix this the right way tomorrow, by adding a proper suspend/resume sysdev handler - the lapic clockevents driver already has that. Maxim definitely deserves alot of kudos for having found this bug!
Ingo
Re: [3/6] 2.6.21-rc4: known regressions
In reply to Michael S. TsirkinQuoted 48 lines · On Wed, 28 Mar 2007 20:04:57 +0200 Michael S. Tsirkin wrote:
Quoted 5 lines
Subject : first disk access after resume takes several minutes
('date' does not advance after resume from RAM,CONFIG_NO_HZ=n)
References : http://lkml.org/lkml/2007/3/8/117http://lkml.org/lkml/2007/3/25/20Submitter : Michael S. Tsirkin <[email protected]>
...
Quoted 4 lines
Subject : after resume: X hangs after drawing a couple of windows
References : http://lkml.org/lkml/2007/3/8/117
Submitter : Michael S. Tsirkin <[email protected]>
Status : unknown...
Quoted 18 lines
Quoted 4 lines
Quoted 4 lines
Quoted 4 lines
From: Jeff Chua <[email protected]>
Quoted 3 lines
It's related. I tested without
CONFIG_HPET_TIMER, and now my X60 can suspend and resume from RAM (s2ram). Even better, it works with/withoutCONFIG_NO_HZ.Quoting Maxim <[email protected]>:
Hi,
I almost sure Iknow why this happens,
The problem is that both hpet clock source
and hpet clockevents doesn't have a suspend/resume function On resume we should enable the main counter _and_ enable legacy replacement mode, On my system main counter in enabled, by I think by bios, but legacy replacement mode is not, so if a system doesn't use lapic as a tick source, but use hpet+broadcast, it will hang for sure on resume, and i tested itQuoted 6 lines
The patch below is a temporally fix, until
clock-events and clocksources will get proper suspend/resume hooks:Regards,
Maxim LevitskyBingo!
The patch below fixes the two problems (listed above) with resume from RAM that I have observed on my T60 with 2.6.21-rc5: with this patch applied, and with
CONFIG_NO_HZunset, date advances correctly, X functions properly and there is no delay on first disk access.
Quoted 7 lines
Thanks very much.
---
Quoted 2 lines
Add suspend/resume for HPET
Signed-off-by Maxim Levitsky <[email protected]>Maxim, do you plan to send this upstream?
with whitespace fixes, please...
Quoted 9 lines
---
arch/i386/kernel/hpet.c +0
-0
arch/i386/kernel/hpet.c static void hpet_set_mode(enum clock_event_mode mode, · line 157
Quoted 6 lines
arch/i386/kernel/hpet.c +3
-0@@ -152,6 +152,16 @@ static void hpet_set_mode(enum clock_event_mode mode,unsigned long cfg, cmp, now;uint64_t delta; + +if ( mode !=CLOCK_EVT_MODE_UNUSED && mode !=CLOCK_EVT_MODE_SHUTDOWN ) + {
if (mode != CLOCK_EVT_MODE_UNUSED && mode != CLOCK_EVT_MODE_SHUTDOWN) {arch/i386/kernel/hpet.c static void hpet_set_mode(enum clock_event_mode mode, · line 161
Quoted 4 lines
arch/i386/kernel/hpet.c +4
-0+unsigned long cfg =hpet_readl (HPET_CFG ); + cfg |=HPET_CFG_ENABLE |HPET_CFG_LEGACY ; +hpet_writel (cfg,HPET_CFG ); +
delete above line.
arch/i386/kernel/hpet.c static void hpet_set_mode(enum clock_event_mode mode, · line 167
Quoted 6 lines
arch/i386/kernel/hpet.c +3
-0+ } + +switch (mode) {case CLOCK_EVT_MODE_PERIODIC : delta = ((uint64_t )(NSEC_PER_SEC /HZ )) * hpet_clockevent.mult;
---
~Randy
*** Remember to use Documentation/SubmitChecklist when testing your code ***
Re: [3/6] 2.6.21-rc4: known regressions
In reply to Michael S. TsirkinQuoted 5 lines · Michael S. Tsirkin
Quoted 4 lines
Quoting Maxim <[email protected]>:
The patch below is a temporally fix, until
clock-events and clocksources will get proper suspend/resume hooks:Bingo!
I confirmed that it suspend/resume disk/ram all works on my X60s with CONFIG_HPET_TIMER=y and CONFIG_NO_HZ unset.
But suspend to disk still hang with CONFIG_NO_HZ=y no matter what setting CONFIG_HPET_TIMER is set to.
Thanks,
Jeff.
PATCH 4/6 2.6.21-rc4: known regressions
In reply to Linus TorvaldsThis email lists some known regressions in Linus' tree compared to 2.6.20.
If you find your name in the Cc header, you are either submitter of one of the bugs, maintainer of an affectected subsystem or driver, a patch of you caused a breakage or I'm considering you in any other way possibly involved with one or more of these issues.
Due to the huge amount of recipients, please trim the Cc when answering.
Subject : suspend/resume hangs (until keypress) (CONFIG_NO_HZ)
References : http://bugzilla.kernel.org/show_bug.cgi?id=8181
http://lkml.org/lkml/2007/3/11/112
Submitter : Tomas Janousek <[email protected]>
Thomas Meyer <[email protected]>
Milan Broz <[email protected]>
Patch : http://lkml.org/lkml/2007/3/16/406
Status : patch available
Subject : system doesn't come out of suspend (CONFIG_NO_HZ)
References : http://lkml.org/lkml/2007/2/22/391
Submitter : Michael S. Tsirkin <[email protected]>
Soeren Sonnenburg <[email protected]>
Ingo Molnar <[email protected]>
Tejun Heo <[email protected]>
Rafael J. Wysocki <[email protected]>
Status : problem is being debugged
Subject : first disk access after resume takes several minutes
('date' does not advance after resume from RAM, CONFIG_NO_HZ=n)
References : http://lkml.org/lkml/2007/3/8/117
Submitter : Michael S. Tsirkin <[email protected]>
Ingo Molnar <[email protected]>
Status : problem is being debugged
Subject : after resume: X hangs after drawing a couple of windows
References : http://lkml.org/lkml/2007/3/8/117
Submitter : Michael S. Tsirkin <[email protected]>
Status : unknown
PATCH 5/6 2.6.21-rc4: known regressions
In reply to Linus TorvaldsThis email lists some known regressions in Linus' tree compared to 2.6.20.
If you find your name in the Cc header, you are either submitter of one of the bugs, maintainer of an affectected subsystem or driver, a patch of you caused a breakage or I'm considering you in any other way possibly involved with one or more of these issues.
Due to the huge amount of recipients, please trim the Cc when answering.
Subject : Dynticks and High resolution Timer hanging the system
workaround: clocksource=acpi_pm
References : http://lkml.org/lkml/2007/3/7/504
Submitter : Stephane Casset <[email protected]>
Status : unknown
Subject : soft lockup detected on CPU#0
References : http://lkml.org/lkml/2007/3/3/152
Submitter : Michal Piotrowski <[email protected]>
Ingo Molnar <[email protected]>
Status : unknown
Subject : dynticks makes ksoftirqd1 use unreasonable amount of cpu time
References : http://bugzilla.kernel.org/show_bug.cgi?id=8100
Submitter : Emil Karlson <[email protected]>
Status : problem is being debugged
Subject : i386: APIC timer disabled due to verification failure
(once in three boots or so)
References : http://lkml.org/lkml/2007/3/16/126
Submitter : Maxim Levitsky <[email protected]>
Patch : http://lkml.org/lkml/2007/3/16/420
Status : patch available
Re: [5/6] 2.6.21-rc4: known regressions
Quoted 10 lines
Subject : i386: APIC timer disabled due to verification failure
(once in three boots or so)
References : http://lkml.org/lkml/2007/3/16/126
Submitter : Maxim Levitsky <[email protected]>Handled-By Thomas Gleixner <[email protected]>Patch : http://lkml.org/lkml/2007/3/16/420
Status : patch available
Hello,
This one is a small issue, I got bigger ones: as I said change in code order in suspend code broke both suspend to ram and disk
Those are commits.
e3c7db621bed4afb8e231cb005057f2feb5db557 - [PATCH] [PATCH] PM: Change code ordering in main.c (breaks S3) ed746e3b18f4df18afa3763155972c5835f284c5 - [PATCH] [PATCH] swsusp: Change code ordering in disk.c (breaks swsusp, I don't use it, but I tested it) 259130526c267550bc365d3015917d90667732f1 - [PATCH] [PATCH] swsusp: Change code ordering in user.c (breaks uswsusp, that I use)
System freezes before suspend with those commits, even before suspend to disk.
I think that is is not so good idea to tell about all bugs in single letter ;-)
Regards,
Maxim Levitsky
Re: [5/6] 2.6.21-rc4: known regressions
Quoted 10 lines · Maxim
Quoted 7 lines
Subject : i386: APIC timer disabled due to verification failure
(once in three boots or so)
References : http://lkml.org/lkml/2007/3/16/126
Submitter : Maxim Levitsky <[email protected]>Handled-By Thomas Gleixner <[email protected]>Patch : http://lkml.org/lkml/2007/3/16/420
Status : patch availableHello,
Quoted 8 lines
This one is a small issue, I got bigger ones: as I said change in code order in suspend code broke both suspend to ram and disk
Those are commits.
e3c7db621bed4afb8e231cb005057f2feb5db557 - [PATCH] [PATCH] PM: Change code ordering inmain.c(breaks S3)ed746e3b18f4df18afa3763155972c5835f284c5- [PATCH] [PATCH] swsusp: Change code ordering indisk.c(breaks swsusp, I don't use it, but I tested it)259130526c267550bc365d3015917d90667732f1- [PATCH] [PATCH] swsusp: Change code ordering inuser.c(breaks uswsusp, that I use)System freezes before suspend with those commits, even before suspend to disk.
This was in my list as
Subject : suspend to disk hangs
References : http://lkml.org/lkml/2007/3/16/126
Submitter : Maxim Levitsky <[email protected]>
Status : unknown
But I should add your bisecting information there.
Quoted 1 line
I think that is is not so good idea to tell about all bugs in single letter ;-)
These were 6 emails.
And they should give an overview as complete as possible of all currently known regressions.
Quoted 2 lines
Regards,
Maxim Levitsky
cu
Adrian
Signature · 4 lines
"Is there not promise of rain?" Ling Tan asked suddenly out
of the darkness. There had been need of rain for many days.
"Only a promise," Lao Er said.
Pearl S. Buck - Dragon SeedRe: [5/6] 2.6.21-rc4: known regressions
Quoted 20 lines · On Sunday 18 March 2007 21:22:19 Adrian Bunk wrote:
Quoted 10 lines · Maxim
Quoted 7 lines
Subject : i386: APIC timer disabled due to verification failure
(once in three boots or so)
References : http://lkml.org/lkml/2007/3/16/126
Submitter : Maxim Levitsky <[email protected]>Handled-By Thomas Gleixner <[email protected]>Patch : http://lkml.org/lkml/2007/3/16/420
Status : patch availableHello,
Quoted 8 lines
This one is a small issue, I got bigger ones: as I said change in code order in suspend code broke both suspend to ram and disk
Those are commits.
e3c7db621bed4afb8e231cb005057f2feb5db557 - [PATCH] [PATCH] PM: Change code ordering inmain.c(breaks S3)ed746e3b18f4df18afa3763155972c5835f284c5- [PATCH] [PATCH] swsusp: Change code ordering indisk.c(breaks swsusp, I don't use it, but I tested it)259130526c267550bc365d3015917d90667732f1- [PATCH] [PATCH] swsusp: Change code ordering inuser.c(breaks uswsusp, that I use)System freezes before suspend with those commits, even before suspend to disk.
Quoted 10 lines
This was in my list as
Subject : suspend to disk hangs
References : http://lkml.org/lkml/2007/3/16/126
Submitter : Maxim Levitsky <[email protected]>
Status : unknownBut I should add your bisecting information there.
Quoted 1 line
I think that is is not so good idea to tell about all bugs in single letter ;-)
You didn't understand me, I wanted to say that I sent a email with subject line "[BUG] 2.6.21-rc1,2,3 regressions on my system that I found so far"
And I think now that I did wrong that I put all regressions and bugs I found here, but not in separate emails Anyway it is not a problem
And by the way suspend to ram also hangs and hangs before suspend (Disk powers down, screen too, but fans are on, and etc...) Reverting those fixes it.
Quoted 12 lines
These were 6 emails.
And they should give an overview as complete as possible of all currently known regressions.
Quoted 2 lines
Regards,
Maxim Levitskycu
Adrian
Re: [5/6] 2.6.21-rc4: known regressions
Quoted 32 lines · On Sunday 18 March 2007 21:59:42 Maxim wrote:
Quoted 20 lines · On Sunday 18 March 2007 21:22:19 Adrian Bunk wrote:
Quoted 10 lines · Maxim
Quoted 7 lines
Subject : i386: APIC timer disabled due to verification failure
(once in three boots or so)
References : http://lkml.org/lkml/2007/3/16/126
Submitter : Maxim Levitsky <[email protected]>Handled-By Thomas Gleixner <[email protected]>Patch : http://lkml.org/lkml/2007/3/16/420
Status : patch availableHello,
Quoted 8 lines
This one is a small issue, I got bigger ones: as I said change in code order in suspend code broke both suspend to ram and disk
Those are commits.
e3c7db621bed4afb8e231cb005057f2feb5db557 - [PATCH] [PATCH] PM: Change code ordering inmain.c(breaks S3)ed746e3b18f4df18afa3763155972c5835f284c5- [PATCH] [PATCH] swsusp: Change code ordering indisk.c(breaks swsusp, I don't use it, but I tested it)259130526c267550bc365d3015917d90667732f1- [PATCH] [PATCH] swsusp: Change code ordering inuser.c(breaks uswsusp, that I use)System freezes before suspend with those commits, even before suspend to disk.
Quoted 10 lines
This was in my list as
Subject : suspend to disk hangs
References : http://lkml.org/lkml/2007/3/16/126
Submitter : Maxim Levitsky <[email protected]>
Status : unknownBut I should add your bisecting information there.
Quoted 1 line
I think that is is not so good idea to tell about all bugs in single letter ;-)
Quoted 24 lines
You didn't understand me, I wanted to say that I sent a email with subject line "[BUG] 2.6.21-rc1,2,3 regressions on my system that I found so far"
And I think now that I did wrong that I put all regressions and bugs I found here, but not in separate emails Anyway it is not a problem
And by the way suspend to ram also hangs and hangs before suspend (Disk powers down, screen too, but fans are on, and etc...) Reverting those fixes it.
Quoted 12 lines
These were 6 emails.
And they should give an overview as complete as possible of all currently known regressions.
Quoted 2 lines
Regards,
Maxim Levitskycu
Adrian
oops, ;-)
Regards,
Maxim Levitsky
PATCH 6/6 2.6.21-rc4: known regressions
In reply to Linus TorvaldsThis email lists some known regressions in Linus' tree compared to 2.6.20.
If you find your name in the Cc header, you are either submitter of one of the bugs, maintainer of an affectected subsystem or driver, a patch of you caused a breakage or I'm considering you in any other way possibly involved with one or more of these issues.
Due to the huge amount of recipients, please trim the Cc when answering.
Subject : Oops when changing DVB-T adapter
References : http://lkml.org/lkml/2007/3/9/212
Submitter : CIJOML <[email protected]>
Status : unknown
Subject : ipv6 crash
References : http://lkml.org/lkml/2007/3/10/2
Submitter : Len Brown <[email protected]>
Status : unknown
Subject : forcedeth: skb_over_panic
References : http://bugzilla.kernel.org/show_bug.cgi?id=8058
Submitter : Albert Hopkins <[email protected]>
Status : submitter was asked to test a patch
Subject : snd_intel8x0: divide error: 0000
References : http://lkml.org/lkml/2007/3/5/252
Submitter : Michal Piotrowski <[email protected]>
Status : problem is being debugged
Subject : snd-intel8x0: no 3d surround sound
References : http://lkml.org/lkml/2007/3/5/164
Submitter : Michal Piotrowski <[email protected]>
commit 831466f4ad2b5fe23dff77edbe6a7c244435e973
Status : patch available
Subject : Oops in __nodemgr_remove_host_dev
References : http://lkml.org/lkml/2007/3/14/4
http://lkml.org/lkml/2007/3/18/87
Submitter : Ismail Dönmez <[email protected]>
Stefan Richter <[email protected]> Thomas Meyer <[email protected]>
commit 43cb76d91ee85f579a69d42bc8efc08bac560278
commit 40cf67c5fcc513406558c01b91129280208e57bfStatus : problem is being debugged
Subject : USB: Oops when connecting USB 1.1 docks
References : http://lkml.org/lkml/2007/3/4/266
Submitter : Mark Lord <[email protected]>
commit d9a7ecacac5f8274d2afce09aadcf37bdb42b93a
Jim Radford <[email protected]>
Patch : http://lkml.org/lkml/2007/3/13/217
Status : patch available
Subject : Possible "struct pid" leak from tty_io.c
References : http://lkml.org/lkml/2007/3/8/222
Submitter : Catalin Marinas <[email protected]>
commit ab521dc0f8e117fd808d3e425216864d60390500
Status : problem is being debugged
David Miller
maintainerRe: [6/6] 2.6.21-rc4: known regressions
From: Adrian Bunk <[email protected]>
Date: Sun, 18 Mar 2007 19:49:38 +0100
Quoted 4 lines
Subject : ipv6 crash
References : http://lkml.org/lkml/2007/3/10/2
Submitter : Len Brown <[email protected]>
Status : unknown
This is caused by some problem in the router round-robin code in net/ipv6/route.c:rt6_select()
Somehow it NULLs out fn->leaf, and then fib6_add_1() crashes dererencing that NULL pointer as is seen in the report.
Deleting the router round-robin list mangling code in rt6_select() makes the crash go away, but such a change causes regressions in the ipv6 conformance tests.
Thomas Graf discovered this bug some time ago, but we still haven't come up with a fix suitable for upstream :-/
This bug has been there for a very long time and is not a regression of 2.6.21
I'll see if I can come up with something to fix this properly.
David Miller
maintainerRe: [6/6] 2.6.21-rc4: known regressions
From: David Miller <[email protected]>
Date: Mon, 19 Mar 2007 19:38:29 -0700 (PDT)
Quoted 10 lines
From: Adrian Bunk <[email protected]>
Date: Sun, 18 Mar 2007 19:49:38 +0100Quoted 4 lines
Subject : ipv6 crash
References : http://lkml.org/lkml/2007/3/10/2
Submitter : Len Brown <[email protected]>
Status : unknownThis is caused by some problem in the router round-robin code in net/ipv6/route.c:rt6_select()
...
Quoted 1 line
I'll see if I can come up with something to fix this properly.
Here is the fix I came up with and just posted to netdev for a quick review, I'll push this to the appropriate places soon if nobody spots any problems in it.
commit 4c68db63b8314df3cf30b7fe595a1b8935bb2cb0
Author: David S. Miller <[email protected]> Date: Sat Mar 24 12:06:32 2007 -0700
[IPV6]: Fix routing round-robin locking.
As per RFC2461, section 6.3.6, item #2, when no routers on the matching list are known to be reachable or probably reachable we do round robin on those available routes so that we make sure to probe as many of them as possible to detect when one becomes reachable faster.
Each routing table has a rwlock protecting the tree and the linked list of routes at each leaf. The round robin code executes during lookup and thus with the rwlock taken as a reader. A small local spinlock tries to provide protection but this does not work at all for two reasons:
1) The round-robin list manipulation, as coded, goes like this (with read lock held):
walk routes finding head and tail
spin_lock();
rotate list using head and tail
spin_unlock();
While one thread is rotating the list, another thread can end up with stale values of head and tail and then proceed to corrupt the list when it gets the lock. This ends up causing the OOPS in fib6_add() later onthat many people have been hitting.
2) All the other code paths that run with the rwlock held as a reader do not expect the list to change on them, they expect it to remain completely fixed while they hold the lock in that way.
So, simply stated, it is impossible to implement this correctly using a manipulation of the list without violating the rwlock locking semantics.
Reimplement using a per-fib6_node round-robin pointer. This way we don't need to manipulate the list at all, and since the round-robin pointer can only ever point to real existing entries we don't need to perform any locking on the changing of the round-robin pointer itself. We only need to reset the round-robin pointer to NULL when the entry it is pointing to is removed.
The idea is from Thomas Graf and it is very similar to how this was implemented before the advanced router selection code when in.
include/net/ip6_fib.h +1 -0
@@ -58,6 +58,7 @@ struct fib6_node__u16 fn_bit;/* bit key */ __u16 fn_flags;__u32 fn_sernum; +struct rt6_info *rr_ptr; };#ifndef CONFIG_IPV6_SUBTREES
net/ipv6/ip6_fib.c +4 -0
@@ -1109,6 +1109,10 @@ static void fib6_del_route(struct fib6_node *fn, struct rt6_info **rtp, rt6_stats.fib_rt_entries--; rt6_stats.fib_discarded_routes++; +/* Reset round-robin state, if necessary */ +if (fn->rr_ptr == rt) + fn->rr_ptr =NULL ; +/* Adjust walkers */ read_lock (&fib6_walker_lock);FOR_WALKERS (w) {
net/ipv6/route.c +59 -38
128 lines not on this page · raw message
2.6.21-rc4: known regressions with patches available
In reply to Linus TorvaldsLet's not bore people running -rc kernels with regressions that have patches available - let's get this patches into the tree for giving them the pure exciting experience of the many unfixed regressions.
This email lists some known regressions in Linus' tree compared to 2.6.20 with patches available.
If you find your name in the Cc header, you are either submitter of one of the bugs, maintainer of an affectected subsystem or driver, a patch of you caused a breakage or I'm considering you in any other way possibly involved with one or more of these issues.
Due to the huge amount of recipients, please trim the Cc when answering.
Subject : acpi_serialize locks system during boot
References : http://bugzilla.kernel.org/show_bug.cgi?id=8171
Submitter : Colchao <[email protected]>
Patch : http://bugzilla.kernel.org/show_bug.cgi?id=8171
Status : patch available
Subject : laptop immediately resumes after suspend
References : http://lkml.org/lkml/2007/3/8/469
Submitter : Ray Lee <[email protected]>
commit ed41dab90eb40ac4911e60406bc653661f0e4ce1
Patch : http://lkml.org/lkml/2007/3/12/228
Status : patch available
Subject : suspend/resume hangs (until keypress) (CONFIG_NO_HZ)
References : http://bugzilla.kernel.org/show_bug.cgi?id=8181
http://lkml.org/lkml/2007/3/11/112
Submitter : Tomas Janousek <[email protected]>
Thomas Meyer <[email protected]>
Milan Broz <[email protected]>
Patch : http://lkml.org/lkml/2007/3/16/406
Status : patch available
Subject : snd-intel8x0: no 3d surround sound
References : http://lkml.org/lkml/2007/3/5/164
Submitter : Michal Piotrowski <[email protected]>
commit 831466f4ad2b5fe23dff77edbe6a7c244435e973
Status : patch available
Subject : USB: Oops when connecting USB 1.1 docks
References : http://lkml.org/lkml/2007/3/4/266
Submitter : Mark Lord <[email protected]>
commit d9a7ecacac5f8274d2afce09aadcf37bdb42b93a
Jim Radford <[email protected]>
Patch : http://lkml.org/lkml/2007/3/13/217
Status : patch available
-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your opinions on IT & business topics through brief surveys-and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
2.6.21-rc4: known regressions with patches available
In reply to Linus TorvaldsLet's not bore people running -rc kernels with regressions that have patches available - let's get this patches into the tree for giving them the pure exciting experience of the many unfixed regressions.
This email lists some known regressions in Linus' tree compared to 2.6.20 with patches available.
If you find your name in the Cc header, you are either submitter of one of the bugs, maintainer of an affectected subsystem or driver, a patch of you caused a breakage or I'm considering you in any other way possibly involved with one or more of these issues.
Due to the huge amount of recipients, please trim the Cc when answering.
Subject : acpi_serialize locks system during boot
References : http://bugzilla.kernel.org/show_bug.cgi?id=8171
Submitter : Colchao <[email protected]>
Patch : http://bugzilla.kernel.org/show_bug.cgi?id=8171
Status : patch available
Subject : laptop immediately resumes after suspend
References : http://lkml.org/lkml/2007/3/8/469
Submitter : Ray Lee <[email protected]>
commit ed41dab90eb40ac4911e60406bc653661f0e4ce1
Patch : http://lkml.org/lkml/2007/3/12/228
Status : patch available
Subject : suspend/resume hangs (until keypress) (CONFIG_NO_HZ)
References : http://bugzilla.kernel.org/show_bug.cgi?id=8181
http://lkml.org/lkml/2007/3/11/112
Submitter : Tomas Janousek <[email protected]>
Thomas Meyer <[email protected]>
Milan Broz <[email protected]>
Patch : http://lkml.org/lkml/2007/3/16/406
Status : patch available
Subject : snd-intel8x0: no 3d surround sound
References : http://lkml.org/lkml/2007/3/5/164
Submitter : Michal Piotrowski <[email protected]>
commit 831466f4ad2b5fe23dff77edbe6a7c244435e973
Status : patch available
Subject : USB: Oops when connecting USB 1.1 docks
References : http://lkml.org/lkml/2007/3/4/266
Submitter : Mark Lord <[email protected]>
commit d9a7ecacac5f8274d2afce09aadcf37bdb42b93a
Jim Radford <[email protected]>
Patch : http://lkml.org/lkml/2007/3/13/217
Status : patch available
Re: [Alsa-devel] 2.6.21-rc4: known regressions with patches available
At Mon, 19 Mar 2007 21:39:43 +0100,
Quoted 8 lines · Adrian Bunk
Subject : snd-intel8x0: no 3d surround sound
References : http://lkml.org/lkml/2007/3/5/164
Submitter : Michal Piotrowski <[email protected]>Caused-By Randy Cushman <[email protected]>commit 831466f4ad2b5fe23dff77edbe6a7c244435e973Handled-By Takashi Iwai <[email protected]>Status : patch available
The patch was already merged after rc4.
thanks,
Takashi
PATCH 1/5 2.6.21-rc4: known regressions (v2)
In reply to Linus TorvaldsThis email lists some known regressions in Linus' tree compared to 2.6.20.
If you find your name in the Cc header, you are either submitter of one of the bugs, maintainer of an affectected subsystem or driver, a patch of you caused a breakage or I'm considering you in any other way possibly involved with one or more of these issues.
Due to the huge amount of recipients, please trim the Cc when answering.
Subject : problem with sockets
References : http://lkml.org/lkml/2007/3/21/248
Submitter : Jose Alberto Reguero <[email protected]>
Status : unknown
Subject : crashes in KDE
References : http://bugzilla.kernel.org/show_bug.cgi?id=8157
Submitter : Oliver Pinter <[email protected]>
Status : unknown
Subject : kwin dies silently (sysctl related?)
References : http://lkml.org/lkml/2007/2/28/112
Submitter : Sid Boyce <[email protected]>
Status : submitter was asked to bisect further
David Miller
maintainerRe: [1/5] 2.6.21-rc4: known regressions (v2)
From: Adrian Bunk <[email protected]>
Date: Fri, 23 Mar 2007 19:48:17 +0100
Quoted 4 lines
Subject : problem with sockets
References : http://lkml.org/lkml/2007/3/21/248
Submitter : Jose Alberto Reguero <[email protected]>
Status : unknown
Not enough information in his report, for example for the case he says does not work he fails to indicate what kernel or system type the Client runs on.
Furthermore, his scripts don't even execute properly when I try to run them myself, for example server.py gives me this syntax error when python tries to parse the script:
davem@sunset:~/src/GIT/net-2.6$ /usr/bin/python server.py
File "server.py", line 9
struct sockaddr_in ServerAddr;
^
SyntaxError: invalid syntaxCan someone help de-crapify this bug report?
Re: [1/5] 2.6.21-rc4: known regressions (v2)
Quoted 9 lines · David Miller
Furthermore, his scripts don't even execute properly when I try to run them myself, for example
server.pygives me this syntax error when python tries to parse the script:davem@sunset:~/src/GIT/net-2.6$ /usr/bin/python server.py File "server.py", line 9 struct sockaddr_in ServerAddr; ^ SyntaxError: invalid syntax
The reporter's client and server code seem to be C, but if the he thinks they should be Python, I guess they're not the correct ones anyway.
Signature · 4 lines
Paul Collins Wellington, New Zealand Dag vijandelijk luchtschip de huismeester is dood
Re: [1/5] 2.6.21-rc4: known regressions (v2)
In reply to David MillerQuoted 16 lines · David Miller
From: Adrian Bunk <[email protected]>
Date: Fri, 23 Mar 2007 19:48:17 +0100Quoted 4 lines
Subject : problem with sockets
References : http://lkml.org/lkml/2007/3/21/248
Submitter : Jose Alberto Reguero <[email protected]>
Status : unknownNot enough information in his report, for example for the case he says does not work he fails to indicate what kernel or system type the Client runs on.
Furthermore, his scripts don't even execute properly when I try to run them myself, for example
server.pygives me this syntax error when python tries to parse the script:
Quoted 7 lines
davem@sunset:~/src/GIT/net-2.6$ /usr/bin/python server.py File "server.py", line 9 struct sockaddr_in ServerAddr; ^ SyntaxError: invalid syntaxCan someone help de-crapify this bug report?
He described one Python and one C example, and attached 2+2 programs.
The mailing list archive I quoted only contains the C files and doesn't display the Python files with the error message
"unhandled content-type:application/x-python" - but that's not the fault of the submitter, the bug report itself is OK.
I've attached all 4 files to this email.
cu
Adrian
Signature · 4 lines
"Is there not promise of rain?" Ling Tan asked suddenly out
of the darkness. There had been need of rain for many days.
"Only a promise," Lao Er said.
Pearl S. Buck - Dragon Seed# Echo client program
import socket
mcast_adress = "227.234.253.9"
port = 15922
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP) s.sendto('Hello, world', (mcast_adress, port))s.close()
# Echo server program
import socket
import struct
HOST = '' # Symbolic name meaning the local host
PORT = 15922 # Arbitrary non-privileged portmcast_adress = "227.234.253.9"
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP) s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) s.bind((HOST, PORT))
mreq = struct.pack('4si', socket.inet_aton(mcast_adress), socket.INADDR_ANY) s.setsockopt(socket.IPPROTO_IP, socket.IP_ADD_MEMBERSHIP, mreq) data = s.recv(1024)
if (data):
print (data)s.close()
#include <sys/socket.h>
#include <netinet/in.h>
#include <string.h>
main()
{
int sock = socket (AF_INET, SOCK_DGRAM, IPPROTO_UDP);
struct sockaddr_in ClientAddr;
memset(&ClientAddr, 0, sizeof(ClientAddr));
ClientAddr.sin_family = AF_INET;
ClientAddr.sin_addr.s_addr = inet_addr("227.234.253.9");
int port = 15922;
ClientAddr.sin_port = htons((short) port);
char str[] = "Hello, world";
sendto(sock, str, strlen(str), 0, (struct sockaddr *)&ClientAddr, sizeof(ClientAddr));
close(sock);
}#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <string.h>
#include <stdio.h>
main()
{
struct sockaddr_in ServerAddr;
int sock = socket (AF_INET, SOCK_DGRAM, IPPROTO_UDP);
int reuse = 1;
setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, &reuse, sizeof(int));
memset(&ServerAddr, 0, sizeof(ServerAddr));
ServerAddr.sin_family = AF_INET;
ServerAddr.sin_addr.s_addr = htonl(INADDR_ANY);
int port = 15922;
ServerAddr.sin_port = htons((short) port);
bind(sock, (struct sockaddr *)&ServerAddr, sizeof(ServerAddr));
struct ip_mreq mreq;
memset(&mreq, 0, sizeof(mreq));
mreq.imr_multiaddr.s_addr = inet_addr("227.234.253.9");
mreq.imr_interface.s_addr = htonl(INADDR_ANY);
setsockopt(sock, IPPROTO_IP, IP_ADD_MEMBERSHIP, &mreq, sizeof(mreq));
char str[100];
memset(&str, 0, sizeof(str));
recv(sock, str, 100, 0);
printf(":%s:\n", str);
close (sock);
}PATCH 2/5 2.6.21-rc4: known regressions (v2)
In reply to Linus TorvaldsThis email lists some known regressions in Linus' tree compared to 2.6.20.
If you find your name in the Cc header, you are either submitter of one of the bugs, maintainer of an affectected subsystem or driver, a patch of you caused a breakage or I'm considering you in any other way possibly involved with one or more of these issues.
Due to the huge amount of recipients, please trim the Cc when answering.
Subject : kernels fail to boot with drives on ATIIXP controller
(ACPI/IRQ related)
References : https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=229621
http://lkml.org/lkml/2007/3/4/257
Submitter : Michal Jaegermann <[email protected]>
Status : unknown
Subject : x86_64: ACPI regression with noapic (APICTIMER_STOPS_ON_C3?)
References : http://lkml.org/lkml/2007/3/8/468
http://lkml.org/lkml/2007/3/22/156
Submitter : Ray Lee <[email protected]>
Status : problem is being debugged
Subject : NCQ problem with ahci and Hitachi drive (ACPI related)
References : http://lkml.org/lkml/2007/3/4/178
http://lkml.org/lkml/2007/3/9/475
Submitter : Mathieu Bérard <[email protected]>
Status : problem is being debugged
Subject : libata: PATA UDMA/100 configured as UDMA/33
References : http://lkml.org/lkml/2007/2/20/294
http://www.mail-archive.com/[email protected]/msg04115.html http://bugzilla.kernel.org/show_bug.cgi?id=8133 http://bugzilla.kernel.org/show_bug.cgi?id=8164 http://lkml.org/lkml/2007/3/21/330
Submitter : Fabio Comolli <[email protected]>
Plamen Petrov <[email protected]> Laurent Riffard <[email protected]> Lukas Hejtmanek <[email protected]>
Alan Cox <[email protected]>
Status : Alan: Some cases should be fixed now but probably not all
(eg the Nvidia one)
Re: [2/5] 2.6.21-rc4: known regressions (v2)
Quoted 6 lines · Adrian Bunk
Subject :
x86_64: ACPI regression with noapic (APICTIMER_STOPS_ON_C3?)
References : http://lkml.org/lkml/2007/3/8/468http://lkml.org/lkml/2007/3/22/156Submitter : Ray Lee <[email protected]>
Handled-By Thomas Gleixner <[email protected]>Status : problem is being debugged
Ray,
can you please test the patch below ?
Thanks,
tglx
------------------>
Subject: [PATCH] x86_64: avoid sending LOCAL_TIMER_VECTOR IPI to itself
Ray Lee reported, that on an UP kernel with "noapic" commandline option set, the box locks hard during boot.
Adding some debug printks revieled, that the last action on the box before stalling was "Send IPI" - a debug printk which was put into smp_send_timer_broadcast_ipi().
It seems that send_IPI_mask(mask, LOCAL_TIMER_VECTOR) fails when "noapic" is set on the commandline on an UP kernel.
Aside of that it does not make much sense to trigger an interrupt instead of calling the function directly on the CPU which gets the PIT/HPET interrupt in case of broadcasting.
arch/x86_64/kernel/apic.c +8 -0
@@ -930,9 +930,17 @@ EXPORT_SYMBOL(switch_APIC_timer_to_ipi);void smp_send_timer_broadcast_ipi (void ) { +int cpu =smp_processor_id ();cpumask_t mask;cpus_and (mask, cpu_online_map, timer_interrupt_broadcast_ipi_mask); + +if (cpu_isset (cpu, mask)) { +cpu_clear (cpu, mask); +add_pda (apic_timer_irqs,1 ); +smp_local_timer_interrupt (); + } +if (!cpus_empty (mask)) {send_IPI_mask (mask,LOCAL_TIMER_VECTOR ); }
Re: [2/5] 2.6.21-rc4: known regressions (v2)
In reply to Adrian BunkQuoted 8 lines · Thomas Gleixner
Quoted 6 lines · Adrian Bunk
Subject :
x86_64: ACPI regression with noapic (APICTIMER_STOPS_ON_C3?)
References : http://lkml.org/lkml/2007/3/8/468http://lkml.org/lkml/2007/3/22/156Submitter : Ray Lee <[email protected]>
Handled-By Thomas Gleixner <[email protected]>Status : problem is being debugged
Quoted 7 lines
Ray,
can you please test the patch below ?
Thanks,
tglx
(I wondered about the IPI on a UP system, seemed a bit weird :-).)
Works great, booting both with NOAPIC and without. *Much* thanks for debugging this while you're also handling a bunch of other issues at the same time.
Patch reproduced below, with an acked-by (and, uhm, a couple of spelling fixes in the description -- don't hate me, 'kay?). Please apply before 2.6.21 final.
------------------>
Subject: [PATCH] x86_64: avoid sending LOCAL_TIMER_VECTOR IPI to itself
Ray Lee reported, that on an UP kernel with "noapic" command line option set, the box locks hard during boot.
Adding some debug printks revealed, that the last action on the box before stalling was "Send IPI" - a debug printk which was put into smp_send_timer_broadcast_ipi().
It seems that send_IPI_mask(mask, LOCAL_TIMER_VECTOR) fails when "noapic" is set on the command line on an UP kernel.
Aside of that it does not make much sense to trigger an interrupt instead of calling the function directly on the CPU which gets the PIT/HPET interrupt in case of broadcasting.
arch/x86_64/kernel/apic.c +8 -0
@@ -930,9 +930,17 @@ EXPORT_SYMBOL(switch_APIC_timer_to_ipi);void smp_send_timer_broadcast_ipi (void ) { +int cpu =smp_processor_id ();cpumask_t mask;cpus_and (mask, cpu_online_map, timer_interrupt_broadcast_ipi_mask); + +if (cpu_isset (cpu, mask)) { +cpu_clear (cpu, mask); +add_pda (apic_timer_irqs,1 ); +smp_local_timer_interrupt (); + } +if (!cpus_empty (mask)) {send_IPI_mask (mask,LOCAL_TIMER_VECTOR ); }
Re: [2/5] 2.6.21-rc4: known regressions (v2)
Ray,
Quoted 5 lines · Ray Lee
(I wondered about the IPI on a UP system, seemed a bit weird :-).)
Works great, booting both with NOAPIC and without. *Much* thanks for debugging this while you're also handling a bunch of other issues at the same time.
Thank you for debugging and excellent problem descriptions !
Quoted 2 lines
Patch reproduced below, with an acked-by (and, uhm, a couple of spelling fixes in the description -- don't hate me, 'kay?).
I know that my English sucks.
Thanks,
tglx
Re: [2/5] 2.6.21-rc4: known regressions (v2)
Quoted 4 lines · Thomas Gleixner
Quoted 2 lines
Patch reproduced below, with an acked-by (and, uhm, a couple of spelling fixes in the description -- don't hate me, 'kay?).
I know that my English sucks.
Your English is fantastic, and far better than my German ever will be, so no worries :-).
~r.
Re: [PATCH] x86_64: avoid sending LOCAL_TIMER_VECTOR IPI to itself
In reply to Ray LeeQuoted 5 lines · Ray Lee
Subject: [PATCH]
x86_64: avoid sendingLOCAL_TIMER_VECTORIPI to itselfRay Lee reported, that on an UP kernel with "noapic" command line option set, the box locks hard during boot.
i think this bug deserves a bit more attention, because similar problems could be in other codepaths too.
the problem here is that we tried to send an IPI to ourselves - which confused Ray's system which has an IO-APIC, but where due to noapic we keep the IO-APIC in its BIOS default.
this isnt a new problem: the new time code just exposed it more prominently that it was visible before. (the SMP kernel probably would hang in a similar way on Ray's system)
i dont see any clear debugging in the IPI code that excludes self-IPIs. I think the only valid way to do that is to use DEST_SELF. Andi?
Ingo
Re: [PATCH] x86_64: avoid sending LOCAL_TIMER_VECTOR IPI to itself
Quoted 11 lines · Ingo Molnar
Quoted 5 lines · Ray Lee
Subject: [PATCH]
x86_64: avoid sendingLOCAL_TIMER_VECTORIPI to itselfRay Lee reported, that on an UP kernel with "noapic" command line option set, the box locks hard during boot.
i think this bug deserves a bit more attention, because similar problems could be in other codepaths too.
Quoted 7 lines
the problem here is that we tried to send an IPI to ourselves - which confused Ray's system which has an IO-APIC, but where due to noapic we keep the IO-APIC in its BIOS default.
this isnt a new problem: the new time code just exposed it more prominently that it was visible before. (the SMP kernel probably would hang in a similar way on Ray's system)
Taking the hint, yes it does. (I'd never had a reason to test it before.) Booting an SMP kernel without NOAPIC works, with NOAPIC hangs fairly early on, implying a real fix to my problem belongs down at the arch level, I suppose.
Quoted 2 lines
i dont see any clear debugging in the IPI code that excludes self-IPIs. I think the only valid way to do that is to use
DEST_SELF. Andi?
Ray
Re: [2/5] 2.6.21-rc4: known regressions (v2)
In reply to Adrian BunkQuoted 6 lines · Adrian Bunk
Subject : NCQ problem with ahci and Hitachi drive (ACPI related)
References : http://lkml.org/lkml/2007/3/4/178http://lkml.org/lkml/2007/3/9/475Submitter : Mathieu Bérard <[email protected]>
Handled-By Tejun Heo <[email protected]>Status : problem is being debugged
Patch is available and whether to put it into mainline or not is being discussed. libata EH does the right thing after several errors so things should work properly after several errors.
http://thread.gmane.org/gmane.linux.kernel/496524
Quoted 6 lines
Subject : libata: PATA UDMA/100 configured as UDMA/33
References : http://lkml.org/lkml/2007/2/20/294http://www.mail-archive.com/[email protected]/msg04115.html http://bugzilla.kernel.org/show_bug.cgi?id=8133 http://bugzilla.kernel.org/show_bug.cgi?id=8164 http://lkml.org/lkml/2007/3/21/330
Quoted 8 lines
Submitter : Fabio Comolli <[email protected]>
Plamen Petrov <[email protected]> Laurent Riffard <[email protected]> Lukas Hejtmanek <[email protected]>Handled-By Tejun Heo <[email protected]>Alan Cox <[email protected]>
Status : Alan: Some cases should be fixed now but probably not all
(eg the Nvidia one)
Further patch submitted.
http://thread.gmane.org/gmane.linux.ide/17444
This should fix all regression cases. sata_nv has been always broken so isn't a regression. It needs acpi tricks and I don't think it fits 2.6.21 cycle.
Thanks.
Signature · 1 line
tejun
PATCH 3/5 2.6.21-rc4: known regressions (v2)
In reply to Linus TorvaldsThis email lists some known regressions in Linus' tree compared to 2.6.20.
If you find your name in the Cc header, you are either submitter of one of the bugs, maintainer of an affectected subsystem or driver, a patch of you caused a breakage or I'm considering you in any other way possibly involved with one or more of these issues.
Due to the huge amount of recipients, please trim the Cc when answering.
Subject : ThinkPad X60: resume no longer works (PCI related?)
References : http://lkml.org/lkml/2007/3/13/3
Submitter : Dave Jones <[email protected]>
Jeremy Fitzhardinge <[email protected]>
Caused-By : PCI merge
commit 78149df6d565c36675463352d0bfe0000b02b7a7
Rafael J. Wysocki <[email protected]>
Status : problem is being debugged
Subject : MacMini: doesn't come out of suspend to ram
References : http://lkml.org/lkml/2007/3/21/374
Submitter : Frédéric RISS <[email protected]>
Tino Keitel <[email protected]>
commit c5a7156959e89b32260ad6072bbf5077bcdfbeee
Status : unknown
Subject : Suspend to RAM doesn't work anymore (ACPI?)
References : http://lkml.org/lkml/2007/3/19/128
http://bugzilla.kernel.org/show_bug.cgi?id=8247
Submitter : Tobias Doerffel <[email protected]>
Status : problem is being debugged
Subject : s2ram autowake regression (ACPI?)
References : http://lkml.org/lkml/2007/3/20/96
Submitter : Pavel Machek <[email protected]>
Status : submitter was asked to test a patch
Subject : ThinkPad doesn't resume from suspend to RAM
References : http://lkml.org/lkml/2007/2/27/80
http://lkml.org/lkml/2007/2/28/348
Submitter : Jens Axboe <[email protected]>
Jeff Chua <[email protected]>
Status : unknown
Subject : suspend to disk hangs
References : http://lkml.org/lkml/2007/3/6/142
Submitter : Jeff Chua <[email protected]>
Status : unknown
Subject : suspend to disk hangs
References : http://lkml.org/lkml/2007/3/16/126
Submitter : Maxim Levitsky <[email protected]>
commit e3c7db621bed4afb8e231cb005057f2feb5db557
commit ed746e3b18f4df18afa3763155972c5835f284c5
commit 259130526c267550bc365d3015917d90667732f1Status : unknown
Subject : suspend to disk hangs
References : http://bugzilla.kernel.org/show_bug.cgi?id=8224
Submitter : Mike Harris <[email protected]>
Status : unknown
Subject : ThinkPad R60: suspend to disk broken
References : http://lkml.org/lkml/2007/3/23/74
Submitter : Marcus Better <[email protected]>
Status : submitter tries to bisect
Subject : after resume: X hangs after drawing a couple of windows
References : http://lkml.org/lkml/2007/3/8/117
Submitter : Michael S. Tsirkin <[email protected]>
Status : unknown
Subject : second suspend to disk in a row results in an oops (libata?)
References : http://lkml.org/lkml/2007/3/17/43
Submitter : Thomas Meyer <[email protected]>
Status : unknown
Subject : SATA breakage on resume
References : http://lkml.org/lkml/2007/3/7/233
Submitter : Thomas Gleixner <[email protected]>
Soeren Sonnenburg <[email protected]>
Status : unknown
-
To unsubscribe from this list: send the line "unsubscribe linux-acpi" in the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [3/5] 2.6.21-rc4: known regressions (v2)
Quoted 10 lines · On Friday 23 March 2007 20:50:22 Adrian Bunk wrote:
Subject : suspend to disk hangs
References : http://lkml.org/lkml/2007/3/16/126
Submitter : Maxim Levitsky <[email protected]>Caused-By Rafael J. Wysocki <[email protected]>commit e3c7db621bed4afb8e231cb005057f2feb5db557 commit ed746e3b18f4df18afa3763155972c5835f284c5 commit 259130526c267550bc365d3015917d90667732f1Status : unknown
Hello,
It is fixed
The problem is that now cpu_up/cpu_down is called with tasks frozen,
and this can lead to deadlock if some driver that registered cpu up/down notifier, sleeps,
On my system it froze in two places, one in XFS due to freezable workqueues, and in microcode update driver that ask the "frozen" userspace for firmware.
Fix for XFS is already in mainline, and Rafael J. Wysocki. already posted a patch that fixes microcode issue, I will test it.
But I feel that there are more drivers that can deadlock system in same way, on my system S3/S4 works perfect :-) Even the weird hang i had disappeared.
Big thanks to Rafael J. Wysocki.
Best regards,
Maxim Levitsky
Re: [3/5] 2.6.21-rc4: known regressions (v2)
In reply to Adrian BunkQuoted 9 lines · Adrian Bunk
This email lists some known regressions in Linus' tree compared to 2.6.20.
If you find your name in the Cc header, you are either submitter of one of the bugs, maintainer of an affectected subsystem or driver, a patch of you caused a breakage or I'm considering you in any other way possibly involved with one or more of these issues.
Due to the huge amount of recipients, please trim the Cc when answering.
[--snip--]
Quoted 8 lines
Subject : suspend to disk hangs
References : http://lkml.org/lkml/2007/3/16/126
Submitter : Maxim Levitsky <[email protected]>Caused-By Rafael J. Wysocki <[email protected]>commit e3c7db621bed4afb8e231cb005057f2feb5db557 commit ed746e3b18f4df18afa3763155972c5835f284c5 commit 259130526c267550bc365d3015917d90667732f1Status : unknown
The problem has been identified as the known issue related to the XFS freezable workqueues. There is a patch available (http://lkml.org/lkml/2007/3/21/328),
that has been merged.
Still, there is a problem with the microcode update driver that's being worked on.
The reporters of the resume problems who use the microcode driver, please check if the problems go away if you unload the driver before the suspend.
Greetings,
Rafael
Re: [3/5] 2.6.21-rc4: known regressions (v2)
In reply to Adrian BunkQuoted 5 lines · Adrian Bunk
Subject : second suspend to disk in a row results in an oops (libata?)
References : http://lkml.org/lkml/2007/3/17/43
Submitter : Thomas Meyer <[email protected]>
Status : unknown
The problem is identified: http://lkml.org/lkml/2007/3/22/150
Re: [3/5] 2.6.21-rc4: known regressions (v2)
Quoted 8 lines · Thomas Meyer
Quoted 5 lines · Adrian Bunk
Subject : second suspend to disk in a row results in an oops (libata?)
References : http://lkml.org/lkml/2007/3/17/43
Submitter : Thomas Meyer <[email protected]>
Status : unknownThe problem is identified: http://lkml.org/lkml/2007/3/22/150
Given the description above I'm a little confused. Doesn't this happen every time now?
Or was this happening only the second time before I started my msi fixes...
Eric
Re: [3/5] 2.6.21-rc4: known regressions (v2)
Quoted 11 lines · Eric W. Biederman
Quoted 8 lines · Thomas Meyer
Quoted 6 lines · Adrian Bunk
Subject : second suspend to disk in a row results in an oops (libata?)
References : http://lkml.org/lkml/2007/3/17/43
Submitter : Thomas Meyer <[email protected]>
Status : unknown
Quoted 6 lines
Quoted 2 lines
The problem is identified: http://lkml.org/lkml/2007/3/22/150
Given the description above I'm a little confused. Doesn't this happen every time now?
With current git head the oops happens in the second suspend to disk attempt in a row.
Quoted 3 lines
Or was this happening only the second time before I started my msi fixes...
So i think, that the current git head already contains your msi fixes. I don't know if this already happend before your msi changes, but i can test 2.6.20 if you like to?
Re: [3/5] 2.6.21-rc4: known regressions (v2)
Quoted 12 lines · Thomas Meyer
Quoted 11 lines · Eric W. Biederman
Quoted 8 lines · Thomas Meyer
Quoted 6 lines · Adrian Bunk
Subject : second suspend to disk in a row results in an oops (libata?)
References : http://lkml.org/lkml/2007/3/17/43
Submitter : Thomas Meyer <[email protected]>
Status : unknown
Quoted 8 lines
Quoted 6 lines
Quoted 2 lines
The problem is identified: http://lkml.org/lkml/2007/3/22/150
Given the description above I'm a little confused. Doesn't this happen every time now?
With current git head the oops happens in the second suspend to disk attempt in a row.
Odd. I would have thought the oops happened in the first resume, not the second.
Hmm. It may have something to do with the ``managed'' driver aspect of this as well..
Quoted 4 lines
Quoted 3 lines
Or was this happening only the second time before I started my msi fixes...
So i think, that the current git head already contains your msi fixes.
Yes it does.
Quoted 2 lines
I don't know if this already happend before your msi changes, but i can test 2.6.20 if you like to?
Sure. A data point if you boot with nomsi or have a kernel compiled without msi support would be interesting as well.
As the problem case may not show up without msi support in the picture.
Eric
Re: [3/5] 2.6.21-rc4: known regressions (v2)
Quoted 7 lines · Eric W. Biederman
Odd. I would have thought the oops happened in the first resume, not the second.
Hmm. It may have something to do with the ``managed'' driver aspect of this as well..
No. I don't think so. The problem is caused by this sequence: (the info is always before entry of a function and before the exit of a function):
1.) Normal boot
[kernel] ahci 0000:00:1f.2: version 2.1
[kernel] pci_enable_device: dev= c1a59000
[kernel] pci_enable_device: irq= 0
[kernel] pci_enable_device: msi_enabled= 0
[kernel] PCI: Enabling device 0000:00:1f.2 (0005 -> 0007) [kernel] ACPI: PCI Interrupt 0000:00:1f.2[B] -> GSI 19 (level, low) -> IRQ 19
[kernel] pci_enable_device: dev= c1a59000
[kernel] pci_enable_device: irq= 19
[kernel] pci_enable_device: msi_enabled= 0
2.) msi irq 218 gets assigned
3) First suspend to disk. Consists of
3a) Suspend devices
[kernel] ahci 0000:00:1f.2: freeze
[kernel] pci_disable_device: dev= c1a59000
[kernel] pci_disable_device: irq= 218
[kernel] pci_disable_device: msi_enabled= 1 [kernel] ACPI: PCI interrupt for device 0000:00:1f.2 disabled [kernel] pci_disable_device: dev= c1a59000
[kernel] pci_disable_device: irq= 218
[kernel] pci_disable_device: msi_enabled= 1
3b) Disable non-boot cpus
3c) Snapshot memory
3d) Enable non-boot cpus
3e) Resume devices (after snapshot!)
[kernel] ahci 0000:00:1f.2: resuming
[kernel] PM: Writing back config space on device 0000:00:1f.2 at offset 1 (was 2b00403, writing 2b00407)
[kernel] pci_enable_device: dev= c1a59000
[kernel] pci_enable_device: irq= 218
[kernel] pci_enable_device: msi_enabled= 1
[kernel] ACPI: PCI Interrupt 0000:00:1f.2[B] -> GSI 19 (level, low) -> IRQ 19
[kernel] pci_enable_device: dev= c1a59000
[kernel] pci_enable_device: irq= 19
[kernel] pci_enable_device: msi_enabled= 1
3f) Write memory image
3g) Power down + reboot
4a) Normal start and restore memory image
4b) Enable non-boot cpus
4c) Resume devices
[kernel] ahci 0000:00:1f.2: resuming
[kernel] PM: Writing back config space on device 0000:00:1f.2 at offset 1 (was 2b00403, writing 2b00407)
[kernel] pci_enable_device: dev= c1a59000
[kernel] pci_enable_device: irq= 218
[kernel] pci_enable_device: msi_enabled= 1
[kernel] ACPI: PCI Interrupt 0000:00:1f.2[B] -> GSI 19 (level, low) -> IRQ 19
[kernel] pci_enable_device: dev= c1a59000
[kernel] pci_enable_device: irq= 19
[kernel] pci_enable_device: msi_enabled= 1
Now the system is running with irq=19 and msi enabled=1. So let's suspend again:
5) Second suspend to disk consists of
5a) Suspend devices
[kernel] ahci 0000:00:1f.2: freeze
[kernel] pci_disable_device: dev= c1a59000
[kernel] pci_disable_device: irq= 19
[kernel] pci_disable_device: msi_enabled= 1 [kernel] ACPI: PCI interrupt for device 0000:00:1f.2 disabled [kernel] pci_disable_device: dev= c1a59000
[kernel] pci_disable_device: irq= 19
[kernel] pci_disable_device: msi_enabled= 1
5b) Disable non-boot cpus
5c) Snapshot memory
5d) Enable non-boot cpus
5e) Resume devices
[kernel] pci_enable_device: dev= c1a59000
[kernel] pci_enable_device: irq= 19
[kernel] pci_enable_device: msi_enabled= 1
-> OOPS in restore_msi because it tries to access msi structure for irq 19 and not 218.
So i guess this has nothing to do with the managed pci functions?
Re: [3/5] 2.6.21-rc4: known regressions (v2)
Quoted 10 lines · Thomas Meyer
Quoted 7 lines · Eric W. Biederman
Odd. I would have thought the oops happened in the first resume, not the second.
Hmm. It may have something to do with the ``managed'' driver aspect of this as well..
No. I don't think so. The problem is caused by this sequence: (the info is always before entry of a function and before the exit of a function):
Ok. Thanks. It is the ordering of events that keeps it
from showing up. The problem happens the first time but only after we have restored msi state so we don't see the ill effects until the second time.
Ok staring at the code and thinking about the problem. The only thing that pci_enable_device does (except messing with irqs is
flip enable bits). Further pci_enable_device only messes with
on 5 architectures. Only ia64 really cares. i386 and x86_64
it is simply delaying work until we need it. frv doesn't really care it just pokes the irq value back into the hardware for some reason. cris just sets a hard coded value. Does cris only have one pci irq?
So I think the right solution is to simply make pci_enable_device just flip enable bits and move the rest of the work someplace else.
However a thorough cleanup is a little extreme for this point in the release cycle, so I think a quick hack that makes the code not stomp the irq when msi irq's are enabled should be the first fix. Then we can later make the code not change the irqs at all.
Thomas could you verify the patch below makes the problem go away for you.
Tony, Len the way pci_disable_device is being used in a suspend/resume path by a few drivers is completely incompatible with the way irqs are allocated on ia64. In particular people the following sequence occurs in several drivers.
probe:
pci_enable_device(pdev);
request_irq(pdev->irq);
suspend:
pci_disable_device(pdev);
resume:
pci_enable_device(pdev);
remove:
free_irq(pdev->irq);
pci_disable_device(pdev);
What I'm proposing we do is move the irq allocation code out of pci_enable_device and the irq freeing code out of pci_disable_device in the future. If we move ia64 to a model where the irq number equal the gsi like we have for x86_64 and are in the middle of for i386 that should be pretty straight forward. It would even be relatively simple to delay vector allocation in that context until request_irq, if we
needed the delayed allocation benefit. Do you two have any problems
with moving in that direction?
If fixing the arch code is unacceptable for some reason I'm not aware of we need to audit the 10-20 drivers that call pci_disable_device in their suspend/resume processing and ensure that they have freed all of the irqs before that point. Given that I have bug reports on the msi path I know that isn't true.
Tony, Len before we merge any fixes for 2.6.21-rcX I'd like to at least get an ack on the long term direction.
Thanks,
Eric
arch/cris/arch-v32/drivers/pci/bios.c +3 -1
@@ -100,7 +100,9 @@ int pcibios_enable_device(struct pci_dev *dev, int mask)if ((err =pcibios_enable_resources (dev, mask)) <0 )return err; -return pcibios_enable_irq (dev); +if (!dev->msi_enabled) +pcibios_enable_irq (dev); +return 0 ; }int pcibios_assign_resources (void )
arch/frv/mb93090-mb00/pci-vdk.c +2 -1
@@ -466,6 +466,7 @@ int pcibios_enable_device(struct pci_dev *dev, int mask)if ((err =pcibios_enable_resources (dev, mask)) <0 )return err; -pcibios_enable_irq (dev); +if (!dev->msi_enabled) +pcibios_enable_irq (dev);return 0 ; }
arch/i386/pci/common.c +4 -2
@@ -426,11 +426,13 @@ int pcibios_enable_device(struct pci_dev *dev, int mask)if ((err =pcibios_enable_resources (dev, mask)) <0 )return err; -return pcibios_enable_irq (dev); +if (!dev->msi_enabled) +return pcibios_enable_irq (dev); +return 0 ; }void pcibios_disable_device (struct pci_dev *dev) { -if (pcibios_disable_irq) +if (!dev->msi_enabled && pcibios_disable_irq)pcibios_disable_irq (dev); }
arch/ia64/pci/pci.c +6 -2
@@ -557,14 +557,18 @@ pcibios_enable_device (struct pci_dev *dev, int mask)if (ret <0 )return ret; -return acpi_pci_irq_enable (dev); +if (!dev->msi_enabled) +return acpi_pci_irq_enable (dev); +return 0 ; }void pcibios_disable_device (struct pci_dev *dev) {BUG_ON (atomic_read (&dev->enable_cnt)); -acpi_pci_irq_disable (dev); +if (!dev->msi_enabled) +acpi_pci_irq_disable (dev); +return 0 ; }void
Re: [3/5] 2.6.21-rc4: known regressions (v2)
Quoted 4 lines · Eric W. Biederman
Thomas could you verify the patch below makes the problem go away for you.
The patch solves the problem. I'm writing this after the third suspend and resume cycle.
msi irq stays enabled for libata device:
cat /sys/devices/pci0000\:00/0000\:00\:1f.2/irq
218
cat /proc/interrupts
CPU0 CPU1
0: 274190 0 IO-APIC-edge timer 9: 13417 0 IO-APIC-fasteoi acpi 16: 166 0 IO-APIC-fasteoi uhci_hcd:usb4 17: 70908 88643 IO-APIC-fasteoi wifi0 18: 3060 0 IO-APIC-fasteoi libata, uhci_hcd:usb3 19: 8 0 IO-APIC-fasteoi ohci1394, uhci_hcd:usb2 20: 46252 0 IO-APIC-fasteoi HDA Intel 21: 168437 0 IO-APIC-fasteoi uhci_hcd:usb1, ehci_hcd:usb5 218: 15896 0 PCI-MSI-edge libata 219: 1 0 PCI-MSI-edge eth0 NMI: 0 0 LOC: 87574 123338 ERR: 0 MIS: 0
BUT...
The first suspend to disk is ok. The second suspend to disk has a strange behaviour:
1.) write pm image
2.) the system disable the non-boot cpus again (i guess this happens in power_down())
3.) the system doesn't power down.
4.) pressing any key and the system powers down.
The same is true for the third suspend cycle. Maybe an acpi problem?
Re: [3/5] 2.6.21-rc4: known regressions (v2)
Quoted 20 lines · Thomas Meyer
Quoted 4 lines · Eric W. Biederman
Thomas could you verify the patch below makes the problem go away for you.
The patch solves the problem. I'm writing this after the third suspend and resume cycle.
msi irq stays enabled for libata device:
cat /sys/devices/pci0000\:00/0000\:00\:1f.2/irq
218The first suspend to disk is ok. The second suspend to disk has a strange behaviour:
1.) write pm image
2.) the system disable the non-boot cpus again (i guess this happens inpower_down())
3.) the system doesn't power down.
4.) pressing any key and the system powers down.
Quoted 1 line
The same is true for the third suspend cycle. Maybe an acpi problem?
Sounds possible. You could probably verify it isn't my patch but running an unpatched kernel without msi support. As I think the crash you saw should only be reproducible when using devices that support msi.
Unless I hear different I'm going to assume that this second case is a completely different problem. You might check to see if the acpi interrupt is stuck after a suspend/resume cycle.
At this point I'm going to wait a bit for Tony and Len to have a chance to give their opinion but unless I hear something I'm going to plan on sending the patch out shortly...
Eric
Re: [3/5] 2.6.21-rc4: known regressions (v2)
Quoted 14 lines · Eric W. Biederman
Quoted 11 lines · Thomas Meyer
Quoted 4 lines · Eric W. Biederman
Thomas could you verify the patch below makes the problem go away for you.
The patch solves the problem. I'm writing this after the third suspend and resume cycle.
msi irq stays enabled for libata device:
cat /sys/devices/pci0000\:00/0000\:00\:1f.2/irq
218
Quoted 5 lines
Quoted 5 lines
The first suspend to disk is ok. The second suspend to disk has a strange behaviour:
1.) write pm image
2.) the system disable the non-boot cpus again (i guess this happens inpower_down())
Yes, in kernel/power/disk.c:power_down() .
Please comment out the disable_nonboot_cpus() in there and retest (but please test the latest Linus' tree).
Quoted 11 lines
Quoted 4 lines
3.) the system doesn't power down.
4.) pressing any key and the system powers down.The same is true for the third suspend cycle. Maybe an acpi problem?
Sounds possible. You could probably verify it isn't my patch but running an unpatched kernel without msi support. As I think the crash you saw should only be reproducible when using devices that support msi.
Unless I hear different I'm going to assume that this second case is a completely different problem.
I think it is different too.
Greetings,
Rafael
Re: [3/5] 2.6.21-rc4: known regressions (v2)
Quoted 4 lines · Rafael J. Wysocki
Yes, in kernel/power/disk.c:power_down() .
Please comment out the
disable_nonboot_cpus()in there and retest (but please test the latest Linus' tree).
<rant>
Why do we even need a disable_nonboot_cpus in that path? machine_shutdown on i386 and x86_64 should take care of that. Further the code that computes the boot cpu is bogus (not all architectures require cpu == 0 to be the boot cpu), and disabling non boot cpus appears to be a strong x86ism, in the first place.
If the only reason for disable_nonboot_cpus there is to avoid the WARN_ON in init_low_mappings() we should seriously consider killing it. If we can wait for 2.6.22 the relocatable x86_64 patchset that Andi has queued, has changes that kill the init_low_mapping() hack.
I'm not very comfortable with calling cpu_down in a common code path right now either. I'm fairly certain we still don't have that correct. So if we confine the mess that is cpu_down to #if defined(CPU_HOTPLUG) && defined(CONFIG_EXPERIMENTAL) I don't care. If we start using it everywhere I'm very nervous. I know the irq migration when bringing a cpu down is strongly racy, and I don't think we actually put cpus to sleep properly either.
</rant>
Eric
Re: [3/5] 2.6.21-rc4: known regressions (v2)
Quoted 7 lines · Eric W. Biederman
Quoted 4 lines · Rafael J. Wysocki
Yes, in kernel/power/disk.c:power_down() .
Please comment out the
disable_nonboot_cpus()in there and retest (but please test the latest Linus' tree).
Quoted 7 lines
<rant>
Why do we even need a
disable_nonboot_cpusin that path?machine_shutdownon i386 andx86_64should take care of that. Further the code that computes the boot cpu is bogus (not all architectures require cpu == 0 to be the boot cpu), and disabling non boot cpus appears to be a strong x86ism, in the first place.
Yes.
Quoted 3 lines
If the only reason for
disable_nonboot_cpusthere is to avoid theWARN_ONininit_low_mappings()we should seriously consider killing it.
We have considered it, but no one was sure that it was a good idea.
Quoted 2 lines
If we can wait for 2.6.22 the relocatable
x86_64patchset that Andi has queued, has changes that kill theinit_low_mapping()hack.
I think we should kill the WARN_ON() right now, perhaps replacing it with a FIXME comment.
Quoted 7 lines
I'm not very comfortable with calling
cpu_downin a common code path right now either. I'm fairly certain we still don't have that correct. So if we confine the mess that iscpu_downto #ifdefined(CPU_HOTPLUG)&&defined(CONFIG_EXPERIMENTAL)I don't care. If we start using it everywhere I'm very nervous.
migration when bringing a cpu down is strongly racy, and I don't think we actually put cpus to sleep properly either.
I'm interested in all of the details, please. I seriously consider dropping cpu_up()/cpu_down() from the suspend code paths.
Greetings,
Rafael
Re: [3/5] 2.6.21-rc4: known regressions (v2)
Quoted 17 lines · Rafael J. Wysocki
Quoted 5 lines · Eric W. Biederman
Quoted 3 lines · Rafael J. Wysocki
Yes, in kernel/power/disk.c:power_down() .
Please comment out the
disable_nonboot_cpus()in there and retest (butplease
Quoted 9 lines
Quoted 1 line
test the latest Linus' tree).
<rant>
Why do we even need a
disable_nonboot_cpusin that path?machine_shutdownon i386 andx86_64should take care of that. Further the code that computes the boot cpu is bogus (not all architectures require cpu == 0 to be the boot cpu), and disabling non boot cpus appears to be a strong x86ism, in the first place.
Quoted 7 lines
Yes.
Quoted 3 lines
If the only reason for
disable_nonboot_cpusthere is to avoid theWARN_ONininit_low_mappings()we should seriously consider killing it.We have considered it, but no one was sure that it was a good idea.
The problem with the current init_low_mappings is that it hacks the current page table. If we can instead use a different page table the code becomes SMP safe.
I have extracted the patch that addresses this from the relocatable patchset and appended it for sparking ideas. It goes a little farther than we need to solve this issue but the basics are there.
Quoted 5 lines
Quoted 2 lines
If we can wait for 2.6.22 the relocatable
x86_64patchset that Andi has queued, has changes that kill theinit_low_mapping()hack.I think we should kill the
WARN_ON()right now, perhaps replacing it with a FIXME comment.
Reasonable.
Quoted 10 lines
Quoted 7 lines
I'm not very comfortable with calling
cpu_downin a common code path right now either. I'm fairly certain we still don't have that correct. So if we confine the mess that iscpu_downto #ifdefined(CPU_HOTPLUG)&&defined(CONFIG_EXPERIMENTAL)I don't care. If we start using it everywhere I'm very nervous.
migration when bringing a cpu down is strongly racy, and I don't think we actually put cpus to sleep properly either.I'm interested in all of the details, please. I seriously consider dropping cpu_up()/cpu_down() from the suspend code paths.
So I'm not certain if in a multiple cpu context we can avoid all of the issues with cpu hotplug but there is a reasonable chance so I will explain as best I can.
Yanking the appropriate code out of linuxbios the way a processor should stop itself is to send an INIT IPI to itself. This puts a cpu into an optimized wait for startup IPI state where it is otherwise disabled. This is the state any sane BIOS will put the cpus into before control is handed off to the kernel.
Quoted 14 lines
static inline void
stop_this_cpu(void){ unsigned apicid; apicid = lapicid(); /* Send an APIC INIT to myself */ lapic_write(LAPIC_ICR2, SET_LAPIC_DEST_FIELD(apicid)); lapic_write(LAPIC_ICR, LAPIC_INT_LEVELTRIG | LAPIC_INT_ASSERT | LAPIC_DM_INIT); /* Wait for the ipi send to finish */ lapic_wait_icr_idle(); /* Deassert the APIC INIT */ lapic_write(LAPIC_ICR2, SET_LAPIC_DEST_FIELD(apicid)); lapic_write(LAPIC_ICR, LAPIC_INT_LEVELTRIG | LAPIC_DM_INIT);
Quoted 8 lines
/* Wait for the ipi send to finish */
lapic_wait_icr_idle();
/* If I haven't halted spin forever */
for(;;) {
hlt();
}
}I'm not certain what to do with the interrupt races. But I will see if I can explain what I know.
<braindump>
- Most ioapics are buggy.
- Most ioapics do not follow pci-ordering rules with respect to interrupt message deliver so ensuring all in-flight irqs have arrived somewhere is very hard.
- To avoid bugs we always limit ourselves to reprogramming the ioapics in the interrupt handler, and not considering an interrupt successfully reprogrammed until we have received an irq in the new location.
- On x86 we have two basic interrupt handling modes.
o logical addressing with lowest priority delivery.
o physical addressing with delivery to a single cpu.
- With logical addressing as long as the cpu is not available for having an interrupt delivered to it the interrupt will be never be delivered to a particular cpu. Ideally we also update the mask in the ioapic to not target that cpu.
- With physical addressing targeting a single cpu we need to reprogram the ioapics not to target that specific cpu. This needs to happen in the interrupt handler and we need to wait for the next interrupt before we tear down our data structures for handling the interrupt.
The current cpu hotplug code attempts to reprogram the ioapics from process context which is just wrong.
Now as part of suspend/resume I think we should be programming the hardware not to generate interrupts in the first place at the actual hardware devices so we can likely avoid all of the code that reprograms interrupts while they are active. If we can use things like pci ordering rules to ensure the device will never fire the interrupt until resumed we should be able to disable interrupts synchronously. Something that we can not safely do in the current cpu hotplug scenario. Which should make the problem of doing the work race free much easier.
I don't know if other architectures need to disable cpus or not before doing a suspend to ram or a suspend to disk.
I also don't know if we have any code that brings up the other cpus after we have been suspended. In either the cpu hotplug paths or the architecture specific paths.
The bottom line is after the partial review of the irq handling during cpu shutdown a little while ago that I consider the current cpu hotplug code to be something that works when you are lucky. There are to many hardware bugs to support the general case it tries to implement.
I have not reviewed the entire cpu hotplug path nor have I even tried suspend/resume. But I have been all and down the boot and shutdown code paths so I understand the general problem.
The other part I know is that cpu numbers are assigned at the architectures discretion. So unless the architecture code or the early boot code sets a variable remembering which was the boot cpu there is no reason to believe we can deduce it. In addition I don't know if any other architectures have anything resembling the x86 requirement to disable non-boot cpus. I do know machine_shutdown on i386 and x86_64 performs that action (if not perfectly) so at least currently we should be able to do this in architecture specific code.
</braindump>
Eric
From: Vivek Goyal <[email protected]>
Subject: [PATCH 12/20] x86_64: 64bit ACPI wakeup trampoline
o Moved wakeup_level4_pgt into the wakeup routine so we can run the kernel above 4G.
o Now we first go to 64bit mode and continue to run from trampoline and then then start accessing kernel symbols and restore processor context. This enables us to resume even in relocatable kernel context when kernel might not be loaded at physical addr it has been compiled for.
o Removed the need for modifying any existing kernel page table.
o Increased the size of the wakeup routine to 8K. This is required as wake page tables are on trampoline itself and they got to be at 4K boundary, hence one page is not sufficient.
---
arch/x86_64/kernel/acpi/sleep.c | 22 ++------------ arch/x86_64/kernel/acpi/wakeup.S | 59 ++++++++++++++++++++++++--------------- arch/x86_64/kernel/head.S | 9 ----- 3 files changed, 41 insertions(+), 49 deletions(-)
diff -puN arch/x86_64/kernel/acpi/sleep.c~x86_64-64bit-ACPI-wakeup-trampoline arch/x86_64/kernel/acpi/sleep.c
---
linux-2.6.21-rc2-reloc/arch/x86_64/kernel/acpi/sleep.c~x86_64-64bit-ACPI-wakeup-trampoline
2007-03-07 01:28:11.000000000 +0530
+++ linux-2.6.21-rc2-reloc-root/arch/x86_64/kernel/acpi/sleep.c 2007-03-07 01:28:11.000000000 +0530
@@ -60,17 +60,6 @@ extern char wakeup_start, wakeup_end;
extern unsigned long acpi_copy_wakeup_routine(unsigned long);
-static pgd_t low_ptr;
-
-static void init_low_mapping(void)
-{
- pgd_t *slot0 = pgd_offset(current->mm, 0UL);
- low_ptr = *slot0;
- set_pgd(slot0, *pgd_offset(current->mm, PAGE_OFFSET));
- WARN_ON(num_online_cpus() != 1);
- local_flush_tlb();
-}
-
/**
* acpi_save_state_mem - save kernel state
*
@@ -79,8 +68,6 @@ static void init_low_mapping(void)
*/
int acpi_save_state_mem(void)
{
- init_low_mapping();
-
memcpy((void *)acpi_wakeup_address, &wakeup_start,
&wakeup_end - &wakeup_start);
acpi_copy_wakeup_routine(acpi_wakeup_address);
@@ -93,8 +80,6 @@ int acpi_save_state_mem(void)
*/
void acpi_restore_state_mem(void)
{
- set_pgd(pgd_offset(current->mm, 0UL), low_ptr);
- local_flush_tlb();
}
/**
@@ -107,10 +92,11 @@ void acpi_restore_state_mem(void)
*/
void __init acpi_reserve_bootmem(void)
{
- acpi_wakeup_address = (unsigned long)alloc_bootmem_low(PAGE_SIZE);
- if ((&wakeup_end - &wakeup_start) > PAGE_SIZE)
+ acpi_wakeup_address = (unsigned long)alloc_bootmem_low(PAGE_SIZE*2);
+ if ((&wakeup_end - &wakeup_start) > (PAGE_SIZE*2))
printk(KERN_CRIT
- "ACPI: Wakeup code way too big, will crash on attempt to suspend\n");
+ "ACPI: Wakeup code way too big, will crash on attempt"
+ " to suspend\n");
}
static int __init acpi_sleep_setup(char *str)
diff -puN arch/x86_64/kernel/acpi/wakeup.S~x86_64-64bit-ACPI-wakeup-trampoline arch/x86_64/kernel/acpi/wakeup.S
---
linux-2.6.21-rc2-reloc/arch/x86_64/kernel/acpi/wakeup.S~x86_64-64bit-ACPI-wakeup-trampoline
2007-03-07 01:28:11.000000000 +0530
+++ linux-2.6.21-rc2-reloc-root/arch/x86_64/kernel/acpi/wakeup.S 2007-03-07 01:28:11.000000000 +0530
@@ -1,6 +1,7 @@
.text
#include <linux/linkage.h>
#include <asm/segment.h>
+#include <asm/pgtable.h>
#include <asm/page.h>
#include <asm/msr.h>
@@ -62,12 +63,15 @@ wakeup_code:
movb $0xa2, %al ; outb %al, $0x80
- lidt %ds:idt_48a - wakeup_code
- xorl %eax, %eax
- movw %ds, %ax # (Convert %ds:gdt to a linear ptr)
- shll $4, %eax
- addl $(gdta - wakeup_code), %eax
- movl %eax, gdt_48a +2 - wakeup_code
+ mov %ds, %ax # Find 32bit wakeup_code addr
+ movzx %ax, %esi # (Convert %ds:gdt to a liner ptr)
+ shll $4, %esi
+ # Fix up the vectors
+ addl %esi, wakeup_32_vector - wakeup_code + addl %esi, wakeup_long64_vector - wakeup_code + addl %esi, gdt_48a + 2 - wakeup_code # Fixup the gdt pointer + + lidtl %ds:idt_48a - wakeup_code lgdtl %ds:gdt_48a - wakeup_code # load gdt with whatever is # appropriate
@@ -80,7 +84,7 @@ wakeup_code:
.balign 4
wakeup_32_vector:
- .long wakeup_32 - __START_KERNEL_map + .long wakeup_32 - wakeup_code .word __KERNEL32_CS, 0
.code32
@@ -103,10 +107,6 @@ wakeup_32:
movl $__KERNEL_DS, %eax
movl %eax, %ds
- movl saved_magic - __START_KERNEL_map, %eax
- cmpl $0x9abcdef0, %eax
- jne bogus_32_magic
-
movw $0x0e00 + 'i', %ds:(0xb8012)
movb $0xa8, %al ; outb %al, $0x80;
@@ -120,7 +120,7 @@ wakeup_32:
movl %eax, %cr4
/* Setup early boot stage 4 level pagetables */
- movl $(wakeup_level4_pgt - __START_KERNEL_map), %eax
+ leal (wakeup_level4_pgt - wakeup_code)(%esi), %eax
movl %eax, %cr3
/* Enable Long Mode */
@@ -159,11 +159,11 @@ wakeup_32:
*/
/* Finally jump in 64bit mode */
- ljmp *(wakeup_long64_vector - __START_KERNEL_map)
+ ljmp *(wakeup_long64_vector - wakeup_code)(%esi)
.balign 4
wakeup_long64_vector:
- .long wakeup_long64 - __START_KERNEL_map + .long wakeup_long64 - wakeup_code .word __KERNEL_CS, 0
.code64
@@ -178,11 +178,16 @@ wakeup_long64:
* addresses where we're currently running on. We have to do that here
* because in 32bit we couldn't load a 64bit linear address. */
- lgdt cpu_gdt_descr - __START_KERNEL_map
+ lgdt cpu_gdt_descr
movw $0x0e00 + 'n', %ds:(0xb8014)
movb $0xa9, %al ; outb %al, $0x80
+ movq saved_magic, %rax + movq $0x123456789abcdef0, %rdx + cmpq %rdx, %rax + jne bogus_64_magic
+
movw $0x0e00 + 'u', %ds:(0xb8016)
nop
@@ -223,20 +228,21 @@ idt_48a:
gdt_48a:
.word 0x800 # gdt limit=2048,
# 256 GDT entries
- .word 0, 0 # gdt base (filled in later)
-
+ .long gdta - wakeup_code # gdt base (relocated in later)
real_magic: .quad 0
video_mode: .quad 0
video_flags: .quad 0
+.code16
bogus_real_magic:
movb $0xba,%al ; outb %al,$0x80
jmp bogus_real_magic
-bogus_32_magic:
+.code64
+bogus_64_magic:
movb $0xb3,%al ; outb %al,$0x80
- jmp bogus_32_magic
+ jmp bogus_64_magic
bogus_cpu:
movb $0xbc,%al ; outb %al,$0x80
@@ -263,6 +269,7 @@ bogus_cpu:
#define VIDEO_FIRST_V7 0x0900
# Setting of user mode (AX=mode ID) => CF=success
+.code16
mode_seta:
movw %ax, %bx
#if 0
@@ -313,6 +320,13 @@ wakeup_stack_begin: # Stack grows down
.org 0xff0
wakeup_stack: # Just below end of page
+.org 0x1000
+ENTRY(wakeup_level4_pgt)
+ .quad level3_ident_pgt - __START_KERNEL_map + _KERNPG_TABLE
+ .fill 510,8,0
+ /* (2^48-(2*1024*1024*1024))/(2^39) = 511 */
+ .quad level3_kernel_pgt - __START_KERNEL_map + _KERNPG_TABLE
+
ENTRY(wakeup_end)
##
@@ -338,9 +352,10 @@ ENTRY(acpi_copy_wakeup_routine)
movq $0x123456789abcdef0, %rdx
movq %rdx, saved_magic
- movl saved_magic - __START_KERNEL_map, %eax
- cmpl $0x9abcdef0, %eax
- jne bogus_32_magic
+ movq saved_magic, %rax + movq $0x123456789abcdef0, %rdx + cmpq %rdx, %rax + jne bogus_64_magic
# restore the regs we used popq %rdx diff -puN arch/x86_64/kernel/head.S~x86_64-64bit-ACPI-wakeup-trampoline arch/x86_64/kernel/head.S --- linux-2.6.21-rc2-reloc/arch/x86_64/kernel/head.S~x86_64-64bit-ACPI-wakeup-trampoline 2007-03-07 01:28:11.000000000 +0530 +++ linux-2.6.21-rc2-reloc-root/arch/x86_64/kernel/head.S 2007-03-07 01:28:11.000000000 +0530 @@ -308,15 +308,6 @@ NEXT_PAGE(level2_kernel_pgt)
.data
-#ifdef CONFIG_ACPI_SLEEP
- .align PAGE_SIZE
-ENTRY(wakeup_level4_pgt)
- .quad level3_ident_pgt - __START_KERNEL_map + _KERNPG_TABLE
- .fill 510,8,0
- /* (2^48-(2*1024*1024*1024))/(2^39) = 511 */
- .quad level3_kernel_pgt - __START_KERNEL_map + _KERNPG_TABLE
-#endif
-
#ifndef CONFIG_HOTPLUG_CPU
__INITDATA
#endif
_
Re: [3/5] 2.6.21-rc4: known regressions (v2)
Quoted 25 lines · Eric W. Biederman
Quoted 23 lines · Rafael J. Wysocki
Quoted 5 lines · Eric W. Biederman
Quoted 3 lines · Rafael J. Wysocki
Yes, in kernel/power/disk.c:power_down() .
Please comment out the
disable_nonboot_cpus()in there and retest (butplease
Quoted 9 lines
Quoted 1 line
test the latest Linus' tree).
<rant>
Why do we even need a
disable_nonboot_cpusin that path?machine_shutdownon i386 andx86_64should take care of that. Further the code that computes the boot cpu is bogus (not all architectures require cpu == 0 to be the boot cpu), and disabling non boot cpus appears to be a strong x86ism, in the first place.Yes.
Quoted 3 lines
If the only reason for
disable_nonboot_cpusthere is to avoid theWARN_ONininit_low_mappings()we should seriously consider killing it.
Quoted 5 lines
Quoted 1 line
We have considered it, but no one was sure that it was a good idea.
The problem with the current
init_low_mappingsis that it hacks the current page table. If we can instead use a different page table the code becomes SMP safe.
What exactly is the danger here?
Quoted 80 lines
I have extracted the patch that addresses this from the relocatable patchset and appended it for sparking ideas. It goes a little farther than we need to solve this issue but the basics are there.
Quoted 5 lines
Quoted 2 lines
If we can wait for 2.6.22 the relocatable
x86_64patchset that Andi has queued, has changes that kill theinit_low_mapping()hack.I think we should kill the
WARN_ON()right now, perhaps replacing it with a FIXME comment.Reasonable.
Quoted 10 lines
Quoted 7 lines
I'm not very comfortable with calling
cpu_downin a common code path right now either. I'm fairly certain we still don't have that correct. So if we confine the mess that iscpu_downto #ifdefined(CPU_HOTPLUG)&&defined(CONFIG_EXPERIMENTAL)I don't care. If we start using it everywhere I'm very nervous.
migration when bringing a cpu down is strongly racy, and I don't think we actually put cpus to sleep properly either.I'm interested in all of the details, please. I seriously consider dropping cpu_up()/cpu_down() from the suspend code paths.
So I'm not certain if in a multiple cpu context we can avoid all of the issues with cpu hotplug but there is a reasonable chance so I will explain as best I can.
Yanking the appropriate code out of linuxbios the way a processor should stop itself is to send an INIT IPI to itself. This puts a cpu into an optimized wait for startup IPI state where it is otherwise disabled. This is the state any sane BIOS will put the cpus into before control is handed off to the kernel.
Quoted 14 lines
static inline void
stop_this_cpu(void){ unsigned apicid; apicid = lapicid(); /* Send an APIC INIT to myself */ lapic_write(LAPIC_ICR2, SET_LAPIC_DEST_FIELD(apicid)); lapic_write(LAPIC_ICR, LAPIC_INT_LEVELTRIG | LAPIC_INT_ASSERT | LAPIC_DM_INIT); /* Wait for the ipi send to finish */ lapic_wait_icr_idle(); /* Deassert the APIC INIT */ lapic_write(LAPIC_ICR2, SET_LAPIC_DEST_FIELD(apicid)); lapic_write(LAPIC_ICR, LAPIC_INT_LEVELTRIG | LAPIC_DM_INIT);Quoted 8 lines
/* Wait for the ipi send to finish */ lapic_wait_icr_idle(); /* If I haven't halted spin forever */ for(;;) { hlt(); } }I'm not certain what to do with the interrupt races. But I will see if I can explain what I know.
<braindump>
- Most ioapics are buggy.
- Most ioapics do not follow pci-ordering rules with respect to interrupt message deliver so ensuring all in-flight irqs have arrived somewhere is very hard.
- To avoid bugs we always limit ourselves to reprogramming the ioapics in the interrupt handler, and not considering an interrupt successfully reprogrammed until we have received an irq in the new location.
- On x86 we have two basic interrupt handling modes.
o logical addressing with lowest priority delivery.
o physical addressing with delivery to a single cpu.
- With logical addressing as long as the cpu is not available for having an interrupt delivered to it the interrupt will be never be delivered to a particular cpu. Ideally we also update the mask in the ioapic to not target that cpu.
- With physical addressing targeting a single cpu we need to reprogram the ioapics not to target that specific cpu. This needs to happen in the interrupt handler and we need to wait for the next interrupt before we tear down our data structures for handling the interrupt.
Quoted 2 lines
The current cpu hotplug code attempts to reprogram the ioapics from process context which is just wrong.
I wasn't aware of that.
Quoted 4 lines
Now as part of suspend/resume I think we should be programming the hardware not to generate interrupts in the first place at the actual hardware devices so we can likely avoid all of the code that reprograms interrupts while they are active.
The devices are expected (and in fact required) not to generate interrupts and not to do any DMA transfers after they have been frozen.
Quoted 5 lines
If we can use things like pci ordering rules to ensure the device will never fire the interrupt until resumed we should be able to disable interrupts synchronously. Something that we can not safely do in the current cpu hotplug scenario. Which should make the problem of doing the work race free much easier.
I think this is doable.
Quoted 2 lines
I don't know if other architectures need to disable cpus or not before doing a suspend to ram or a suspend to disk.
In the suspend to disk context we must ensure that the other CPUs won't modify memory in any way while the image is being created, so I think we should at least make them loop in a safe place and refuse to take any interrupts.
Quoted 3 lines
I also don't know if we have any code that brings up the other cpus after we have been suspended. In either the cpu hotplug paths or the architecture specific paths.
I'm not sure what you mean.
Anyway, currently cpu_up() is used to enable the other CPUs when we have finished with the image (as well as during the resume).
Quoted 5 lines
The bottom line is after the partial review of the irq handling during cpu shutdown a little while ago that I consider the current cpu hotplug code to be something that works when you are lucky. There are to many hardware bugs to support the general case it tries to implement.
Well, we've been using it for suspending SMP boxes for quite some time now and there haven't been any major low-level problems. The current problems are related to the fact that the CPU hotplug calls lots of notifiers that need not run during the suspend or resume (or in power_down() for that matter).
Quoted 8 lines
I have not reviewed the entire cpu hotplug path nor have I even tried suspend/resume. But I have been all and down the boot and shutdown code paths so I understand the general problem.
The other part I know is that cpu numbers are assigned at the architectures discretion. So unless the architecture code or the early boot code sets a variable remembering which was the boot cpu there is no reason to believe we can deduce it.
I'm not sure if we have to. On x86_* we cannot turn the 1st CPU off anyway.
Quoted 7 lines
In addition I don't know if any other architectures have anything resembling the x86 requirement to disable non-boot cpus. I do know
machine_shutdownon i386 andx86_64performs that action (if not perfectly) so at least currently we should be able to do this in architecture specific code.</braindump>
Thanks a lot for the info.
The patch looks a bit too complicated for a quick fix. I think we'll need to remove that WARN_ON() in 2.6.21 after all.
Greetings,
Rafael
Re: [3/5] 2.6.21-rc4: known regressions (v2)
In reply to Rafael J. WysockiQuoted 24 lines · Rafael J. Wysocki
Quoted 15 lines · Eric W. Biederman
Quoted 12 lines · Thomas Meyer
Quoted 4 lines · Eric W. Biederman
Thomas could you verify the patch below makes the problem go away for you.
The patch solves the problem. I'm writing this after the third suspend and resume cycle.
msi irq stays enabled for libata device:
cat /sys/devices/pci0000\:00/0000\:00\:1f.2/irq
218Quoted 6 lines
Quoted 6 lines
The first suspend to disk is ok. The second suspend to disk has a strange behaviour:
1.) write pm image
2.) the system disable the non-boot cpus again (i guess this happens inpower_down())
Quoted 6 lines
Yes, in kernel/power/disk.c:power_down() .
Please comment out the
disable_nonboot_cpus()in there and retest (but please test the latest Linus' tree).
Without disable_nonboot_cpus in power_down the computer powers down without the mysterious "wait for the next interrupt" hang.
Quoted 9 lines
Quoted 9 lines
Quoted 5 lines
3.) the system doesn't power down.
4.) pressing any key and the system powers down.The same is true for the third suspend cycle. Maybe an acpi problem?
Sounds possible. You could probably verify it isn't my patch but running an unpatched kernel without msi support. As I think the crash you saw should only be reproducible when using devices that support msi.
Quoted 6 lines
Quoted 3 lines
Unless I hear different I'm going to assume that this second case is a completely different problem.
I think it is different too.
Yes, it's a different problem
Re: [3/5] 2.6.21-rc4: known regressions (v2)
Quoted 25 lines · Thomas Meyer
Quoted 24 lines · Rafael J. Wysocki
Quoted 21 lines · Eric W. Biederman
Quoted 18 lines · Thomas Meyer
Quoted 4 lines · Eric W. Biederman
Thomas could you verify the patch below makes the problem go away for you.
The patch solves the problem. I'm writing this after the third suspend and resume cycle.
msi irq stays enabled for libata device:
cat /sys/devices/pci0000\:00/0000\:00\:1f.2/irq
218The first suspend to disk is ok. The second suspend to disk has a strange behaviour:
1.) write pm image
2.) the system disable the non-boot cpus again (i guess this happens inpower_down())
Quoted 8 lines
Quoted 6 lines
Yes, in kernel/power/disk.c:power_down() .
Please comment out the
disable_nonboot_cpus()in there and retest (but please test the latest Linus' tree).Without
disable_nonboot_cpusinpower_downthe computer powers down without the mysterious "wait for the next interrupt" hang.
Do you have CONFIG_NO_HZ set?
Rafael
Re: [3/5] 2.6.21-rc4: known regressions (v2)
In reply to Eric W. BiedermanQuoted 4 lines · Eric W. Biederman
Sounds possible. You could probably verify it isn't my patch but running an unpatched kernel without msi support. As I think the crash you saw should only be reproducible when using devices that support msi.
Without your patch and with pci=nomsi option the same error occur. But i think this is not an acpi error, because every interrupt seems to trigger the shutdown, like moving the mouse, or pressing a key.
Quoted 4 lines
Unless I hear different I'm going to assume that this second case is a completely different problem. You might check to see if the acpi interrupt is stuck after a suspend/resume cycle.
D'accord.
Re: [3/5] 2.6.21-rc4: known regressions (v2)
In reply to Thomas MeyerQuoted 9 lines · Thomas Meyer
...
The first suspend to disk is ok. The second suspend to disk has a strange behaviour:
1.) write pm image
2.) the system disable the non-boot cpus again (i guess this happens inpower_down())
3.) the system doesn't power down.
4.) pressing any key and the system powers down.
...
Is this also present with 2.6.20, or is it a regression?
cu
Adrian
Signature · 4 lines
"Is there not promise of rain?" Ling Tan asked suddenly out
of the darkness. There had been need of rain for many days.
"Only a promise," Lao Er said.
Pearl S. Buck - Dragon SeedRe: [3/5] 2.6.21-rc4: known regressions (v2)
Quoted 13 lines · Adrian Bunk
Quoted 10 lines · Thomas Meyer
...
The first suspend to disk is ok. The second suspend to disk has a strange behaviour:
1.) write pm image
2.) the system disable the non-boot cpus again (i guess this happens inpower_down())
3.) the system doesn't power down.
4.) pressing any key and the system powers down.
...
Quoted 2 lines
Is this also present with 2.6.20, or is it a regression?
No, this one is not present in 2.6.20 and this error doesn't (head= 317ec6cd00f25d05d153a780bc178c5335f320ee) occur with NO_HZ=n and HIGH_RES_TIMERS=n
This error is maybe related with this commit:
commit cd05a1f818073a623455a58e756c5b419fc98db9
Author: Thomas Gleixner <[email protected]> Date: Sat Mar 17 00:25:52 2007 +0100
[PATCH] clockevents: Fix suspend/resume to disk hangs
I finally found a dual core box, which survives suspend/resume without crashing in the middle of nowhere. Sigh, I never figured out from the code and the bug reports what's going on.
The observed hangs are caused by a stale state transition of the clock event devices, which keeps the RCU synchronization away from completion, when the non boot CPU is brought back up.
The suspend/resume in oneshot mode needs the similar care as the periodic mode during suspend to RAM. My assumption that the state transitions during the different shutdown/bringups of s2disk would go through the periodic boot phase and then switch over to highres resp. nohz mode were simply wrong.
Add the appropriate suspend / resume handling for the non periodic modes.
Re: [3/5] 2.6.21-rc4: known regressions (v2)
Quoted 14 lines · Thomas Meyer
Quoted 13 lines · Adrian Bunk
Quoted 10 lines · Thomas Meyer
...
The first suspend to disk is ok. The second suspend to disk has a strange behaviour:
1.) write pm image
2.) the system disable the non-boot cpus again (i guess this happens inpower_down())
3.) the system doesn't power down.
4.) pressing any key and the system powers down.
...
Quoted 7 lines
Quoted 2 lines
Is this also present with 2.6.20, or is it a regression?
No, this one is not present in 2.6.20 and this error doesn't (head=
317ec6cd00f25d05d153a780bc178c5335f320ee) occur with NO_HZ=n and HIGH_RES_TIMERS=nThis error is maybe related with this commit:
Yes, it is, but I'd rather remove the disable_nonboot_cpus() from power_down() (as Eric suggested) instead of trying to handle the RCU sync problem here.
This has been caused by my commit 94985134b7b46848267ed6b734320db01c974e72 (swsusp: disable nonboot CPUs before entering platform suspend) that in such a case should be reverted.
Greetings,
Rafael
Re: [3/5] 2.6.21-rc4: known regressions (v2)
Quoted 23 lines · Rafael J. Wysocki
Quoted 14 lines · Thomas Meyer
Quoted 13 lines · Adrian Bunk
Quoted 10 lines · Thomas Meyer
...
The first suspend to disk is ok. The second suspend to disk has a strange behaviour:
1.) write pm image
2.) the system disable the non-boot cpus again (i guess this happens inpower_down())
3.) the system doesn't power down.
4.) pressing any key and the system powers down.
...Quoted 7 lines
Quoted 2 lines
Is this also present with 2.6.20, or is it a regression?
No, this one is not present in 2.6.20 and this error doesn't (head=
317ec6cd00f25d05d153a780bc178c5335f320ee) occur with NO_HZ=n and HIGH_RES_TIMERS=nThis error is maybe related with this commit:
Quoted 7 lines
Yes, it is, but I'd rather remove the
disable_nonboot_cpus()frompower_down()(as Eric suggested) instead of trying to handle the RCU sync problem here.This has been caused by my commit
94985134b7b46848267ed6b734320db01c974e72(swsusp: disable nonboot CPUs before entering platform suspend) that in such a case should be reverted.
s/such a case/the present situation/
Rafael
RE: [3/5] 2.6.21-rc4: known regressions (v2)
In reply to Eric W. BiedermanQuoted 3 lines
What I'm proposing we do is move the irq allocation code out of
pci_enable_deviceand the irq freeing code out ofpci_disable_devicein the future.
Sounds rational ... in a world that wasn't dominated by PCI it would seem to be the logical approach (since the irq code would have much more utility independent of the PCI code).
Quoted 2 lines
Tony, Len before we merge any fixes for 2.6.21-rcX I'd like to at least get an ack on the long term direction.
-Tony
Re: [3/5] 2.6.21-rc4: known regressions (v2)
Quoted 7 lines · Tony
Quoted 3 lines
What I'm proposing we do is move the irq allocation code out of
pci_enable_deviceand the irq freeing code out ofpci_disable_devicein the future.Sounds rational ... in a world that wasn't dominated by PCI it would seem to be the logical approach (since the irq code would have much more utility independent of the PCI code).
Right. We can even do this earlier in the pci code. Just doing this on demand when the device driver needs it is problematic. As devices drivers like to keep the requested over a pci_disable_device pci_enable_device pair.
The big practical issue is that we will like wind up allocating an irq number to all usable irqs on ia64. Which means we will like need many more irq numbers... Although I guess if we keep it at the pci layer we should be fairly safe.
I was afraid there was some hotplug reason for waiting until pci_enable_device to allocate the irq numbers.
Quoted 4 lines
Quoted 2 lines
Tony, Len before we merge any fixes for 2.6.21-rcX I'd like to at least get an ack on the long term direction.
Long-term-direction-acked-by Tony Luck <[email protected]>
Thanks. Then small surgery will happen now, and I will start queuing up the major surgery patches. Although I won't be able to do more than compile test and code review the ia64 changes.
Eric
Re: [3/5] 2.6.21-rc4: known regressions (v2)
Quoted 15 lines · Eric W. Biederman
Quoted 7 lines · Tony
Quoted 3 lines
What I'm proposing we do is move the irq allocation code out of
pci_enable_deviceand the irq freeing code out ofpci_disable_devicein the future.Sounds rational ... in a world that wasn't dominated by PCI it would seem to be the logical approach (since the irq code would have much more utility independent of the PCI code).
Right. We can even do this earlier in the pci code. Just doing this on demand when the device driver needs it is problematic. As devices drivers like to keep the requested over a
pci_disable_devicepci_enable_devicepair.
Quoted 4 lines
The big practical issue is that we will like wind up allocating an irq number to all usable irqs on ia64. Which means we will like need many more irq numbers... Although I guess if we keep it at the pci layer we should be fairly safe.
The main reason we wait until pci_enable_device() to allocate an IRQ number is that ia64 currently only has about 180 device vectors, and there are machines with more PCI slots than that.
I also think it's nice that we don't do anything with a device until we have a driver to claim it. But there certainly have been cases where delaying IRQ allocation has caused troubles.
I really like the idea of moving to the IRQ == GSI model for ia64. But of course, we'll have to get rid of the 180-vector limit to make that work, too.
Bjorn
Re: [3/5] 2.6.21-rc4: known regressions (v2)
Quoted 3 lines · Bjorn Helgaas
The main reason we wait until
pci_enable_device()to allocate an IRQ number is that ia64 currently only has about 180 device vectors, and there are machines with more PCI slots than that.
Sigh, that didn't make much sense, did it? At the time, ia64 didn't support sharing IRQ vectors, and we preallocated four vectors for every slot, including empty ones. Allocate-on-demand dramatically increased the number of devices we could support because most cards use only one IRQ.
Re: [3/5] 2.6.21-rc4: known regressions (v2)
In reply to Bjorn HelgaasQuoted 4 lines · Bjorn Helgaas
The main reason we wait until
pci_enable_device()to allocate an IRQ number is that ia64 currently only has about 180 device vectors, and there are machines with more PCI slots than that.
If we don't reserve irqs that the hardware doesn't support we should be able to simply move the allocation and have about the same cost as we do today.
Quoted 3 lines
I also think it's nice that we don't do anything with a device until we have a driver to claim it. But there certainly have been cases where delaying IRQ allocation has caused troubles.
Agreed. It is the second call to pci_enable_device() by a driver where things really start to unravel in the wait until we need it plan.
Quoted 3 lines
I really like the idea of moving to the IRQ == GSI model for ia64. But of course, we'll have to get rid of the 180-vector limit to make that work, too.
Mostly that is a matter of porting the code from x86_64 where that is already the case. I'm pretty certain I have worked through all of the bit issues, but there might be a few small problems that crop up.
If need by I will do the patches as I find time. But if someone else gets there before I do that would be great :)
Eric
Re: [3/5] 2.6.21-rc4: known regressions (v2)
In reply to Adrian BunkQuoted 7 lines · Adrian Bunk
Subject : MacMini: doesn't come out of suspend to ram
References : http://lkml.org/lkml/2007/3/21/374
Submitter : Frédéric RISS <[email protected]>
Tino Keitel <[email protected]>Caused-By Bob Moore <[email protected]>commit c5a7156959e89b32260ad6072bbf5077bcdfbeeeStatus : unknown
I spent some time this weekend investigating this issue more thoroughly. In fact the regression caused by this commit has been corrected by f3ccb06f3b8e0cf42b579db21f3ca7f17fcc3f38 (ACPI: Disable wake GPEs only once.)
However, as I pointed out in the initial report, the MacMini doesn't come out of suspend to ram because a commit in another merged patchset broke it. I tracked it down to:
commit e9e2cdb412412326c4827fc78ba27f410d837e6e
parent 79bf2bb335b85db25d27421c798595a2fa2a0e82
Author: Thomas Gleixner <[email protected]> Date: Fri Feb 16 01:28:04 2007 -0800
[PATCH] clockevents: i386 drivers
This patch has already been mentioned in regression reports, but AFAICS not related to suspend issues.
To be totally clear about what works and what doesn't:
79bf2bb335b85db25d27421c798595a2fa2a0e82
+ cherry-pick f3ccb06f3b8e0cf42b579db21f3ca7f17fcc3f38 ==> works
e9e2cdb412412326c4827fc78ba27f410d837e6e
+ cherry-pick f3ccb06f3b8e0cf42b579db21f3ca7f17fcc3f38 ==> broken
To try to get more information, I commented the call to do_suspend_lowlevel in drivers/acpi/sleep/main.c and used CONFIG_DISABLE_CONSOLE_SUSPEND. Interestingly, the suspend/resume cycle completes correctly in this mode.
Fred.
Re: [3/5] 2.6.21-rc4: known regressions (v2)
Quoted 19 lines · Frédéric Riss
However, as I pointed out in the initial report, the MacMini doesn't come out of suspend to ram because a commit in another merged patchset broke it. I tracked it down to:
commit
e9e2cdb412412326c4827fc78ba27f410d837e6e
parent79bf2bb335b85db25d27421c798595a2fa2a0e82Author: Thomas Gleixner <[email protected]> Date: Fri Feb 16 01:28:04 2007 -0800[PATCH] clockevents: i386 drivers
This patch has already been mentioned in regression reports, but AFAICS not related to suspend issues.
To be totally clear about what works and what doesn't:
79bf2bb335b85db25d27421c798595a2fa2a0e82
+ cherry-pickf3ccb06f3b8e0cf42b579db21f3ca7f17fcc3f38==> works
Quoted 7 lines
e9e2cdb412412326c4827fc78ba27f410d837e6e
+ cherry-pickf3ccb06f3b8e0cf42b579db21f3ca7f17fcc3f38==> brokenTo try to get more information, I commented the call to
do_suspend_lowlevelindrivers/acpi/sleep/main.cand usedCONFIG_DISABLE_CONSOLE_SUSPEND. Interestingly, the suspend/resume cycle completes correctly in this mode.
Additional data point: I just tried with -rc5 and the issue is still present. The config I used for this test defines neither NO_HZ nor HIGH_RES_TIMERS.
Fred.
Re: [3/5] 2.6.21-rc4: known regressions (v2)
Quoted 3 lines · Frédéric RISS
Additional data point: I just tried with -rc5 and the issue is still present. The config I used for this test defines neither
NO_HZnorHIGH_RES_TIMERS.
Do you have CONFIG_HPET_TIMER enabled and does the box have one ? If yes, can you please turn it off and retry ?
Thanks,
tglx
Re: [3/5] 2.6.21-rc4: known regressions (v2)
2007/3/26, Thomas Gleixner <[email protected]>:
Quoted 7 lines · Frédéric RISS
Quoted 3 lines
Additional data point: I just tried with -rc5 and the issue is still present. The config I used for this test defines neither
NO_HZnorHIGH_RES_TIMERS.Do you have
CONFIG_HPET_TIMERenabled and does the box have one ? If yes, can you please turn it off and retry ?
IIRC the box has a HPET and it gets used. I'll test and confirm when I get home tonight.
Thanks,
Fred
Re: [3/5] 2.6.21-rc4: known regressions (v2)
In reply to Thomas GleixnerQuoted 7 lines · Thomas Gleixner
Quoted 3 lines · Frédéric RISS
Additional data point: I just tried with -rc5 and the issue is still present. The config I used for this test defines neither
NO_HZnorHIGH_RES_TIMERS.Do you have
CONFIG_HPET_TIMERenabled and does the box have one ? If yes, can you please turn it off and retry ?
Indeed, turning off CONFIG_HPET_TIMER does fix the coming-out-of-suspend issue. (In fact it hangs at the second suspend, but that's another ATA problem that I think has already been reported).
Fred.
Re: [3/5] 2.6.21-rc4: known regressions (v2)
Quoted 2 lines · Frédéric Riss
... (In fact it hangs at the second suspend, but that's another ATA problem that I think has already been reported).
This sounds like the MSI problem.
Do you have CONFIG_PCI_MSI enabled?
If yes, does disabling it fix it?
If yes, does CONFIG_PCI_MSI=y with the patch from [1] work?
Quoted 1 line
Fred.
cu
Adrian
[1] http://lkml.org/lkml/2007/3/24/136
Signature · 4 lines
"Is there not promise of rain?" Ling Tan asked suddenly out
of the darkness. There had been need of rain for many days.
"Only a promise," Lao Er said.
Pearl S. Buck - Dragon SeedRe: [3/5] 2.6.21-rc4: known regressions (v2)
2007/3/26, Adrian Bunk <[email protected]>:
Quoted 9 lines · Frédéric Riss
Quoted 3 lines
... (In fact it hangs at the second suspend, but that's another ATA problem that I think has already been reported).
This sounds like the MSI problem.
Do you have
CONFIG_PCI_MSIenabled?
If yes, does disabling it fix it?
Yes
Quoted 1 line
If yes, does
CONFIG_PCI_MSI=ywith the patch from [1] work?
Yes !
Just to be 100% clear, the hang I was seeing at the second suspend is this one:
Subject : second suspend to disk in a row results in an oops (libata?)
References : http://lkml.org/lkml/2007/3/17/43
Submitter : Thomas Meyer <[email protected]>
Status : unknown
I'm not sure it was associated with the MSI issue yet.
Thanks a lot,
Fred
Quoted 1 line
Re: [3/5] 2.6.21-rc4: known regressions (v2)
Quoted 8 lines · Frederic Riss
2007/3/26, Adrian Bunk <[email protected]>:
Quoted 7 lines · Frédéric Riss
Quoted 3 lines
... (In fact it hangs at the second suspend, but that's another ATA problem that I think has already been reported).
This sounds like the MSI problem.
Quoted 8 lines
Quoted 2 lines
Do you have
CONFIG_PCI_MSIenabled?
If yes, does disabling it fix it?Yes
Quoted 1 line
If yes, does
CONFIG_PCI_MSI=ywith the patch from [1] work?Yes !
Thanks for your testing.
Quoted 9 lines
Just to be 100% clear, the hang I was seeing at the second suspend is this one:
Subject : second suspend to disk in a row results in an oops (libata?)
References : http://lkml.org/lkml/2007/3/17/43
Submitter : Thomas Meyer <[email protected]>
Status : unknownI'm not sure it was associated with the MSI issue yet.
That's what I was calling "the MSI problem".
Since my latest regression list actual cause and patch have been found.
Quoted 4 lines
Thanks a lot,
FredQuoted 1 line
cu
Adrian
Signature · 4 lines
"Is there not promise of rain?" Ling Tan asked suddenly out
of the darkness. There had been need of rain for many days.
"Only a promise," Lao Er said.
Pearl S. Buck - Dragon SeedRe: [3/5] 2.6.21-rc4: known regressions (v2)
In reply to Adrian BunkQuoted 4 lines · Adrian Bunk
Subject : ThinkPad R60: suspend to disk broken
References : http://lkml.org/lkml/2007/3/23/74
Submitter : Marcus Better <[email protected]>
Status : submitter tries to bisect
I just tried -rc5. Now suspend to disk seems to work. I think the XFS workqueue patch fixed this.
It can also suspend to RAM, but resume is worse. The first time around it resumed but corrupted the vesafb console (greenish blinking character cells), something that used to work before. But the system responded to input, so I suspended to RAM again. This time the resume failed, it hung after printing "Linux!" in yellow at the top of the screen. (Seems to be some artifact, I have seen it before even with working suspend.)
I'm attaching my config.
Not sure how to bisect this. I guess it would be necessary to keep the XFS workqueue patch throughout, otherwise it is guaranteed to break.
Marcus
#
# Automatically generated make config: don't edit # Linux kernel version: 2.6.21-rc5-melech
# Mon Mar 26 10:56:13 2007
#CONFIG_X86_64=yCONFIG_64BIT=yCONFIG_X86=yCONFIG_GENERIC_TIME=y CONFIG_GENERIC_TIME_VSYSCALL=yCONFIG_ZONE_DMA32=yCONFIG_LOCKDEP_SUPPORT=y CONFIG_STACKTRACE_SUPPORT=y CONFIG_SEMAPHORE_SLEEPERS=yCONFIG_MMU=yCONFIG_ZONE_DMA=yCONFIG_RWSEM_GENERIC_SPINLOCK=y CONFIG_GENERIC_HWEIGHT=y CONFIG_GENERIC_CALIBRATE_DELAY=y CONFIG_X86_CMPXCHG=yCONFIG_EARLY_PRINTK=yCONFIG_GENERIC_ISA_DMA=yCONFIG_GENERIC_IOMAP=y CONFIG_ARCH_MAY_HAVE_PC_FDC=y CONFIG_ARCH_POPULATES_NODE_MAP=yCONFIG_DMI=yCONFIG_AUDIT_ARCH=yCONFIG_GENERIC_BUG=y
# CONFIG_ARCH_HAS_ILOG2_U32 is not set
# CONFIG_ARCH_HAS_ILOG2_U64 is not set CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
#
# Code maturity level options
#CONFIG_EXPERIMENTAL=yCONFIG_LOCK_KERNEL=yCONFIG_INIT_ENV_ARG_LIMIT=32
#
# General setup
#CONFIG_LOCALVERSION=""
# CONFIG_LOCALVERSION_AUTO is not setCONFIG_SWAP=yCONFIG_SYSVIPC=y
# CONFIG_IPC_NS is not setCONFIG_SYSVIPC_SYSCTL=yCONFIG_POSIX_MQUEUE=yCONFIG_BSD_PROCESS_ACCT=yCONFIG_BSD_PROCESS_ACCT_V3=y
# CONFIG_TASKSTATS is not set
# CONFIG_UTS_NS is not setCONFIG_AUDIT=yCONFIG_AUDITSYSCALL=yCONFIG_IKCONFIG=yCONFIG_IKCONFIG_PROC=y
# CONFIG_CPUSETS is not setCONFIG_SYSFS_DEPRECATED=yCONFIG_RELAY=yCONFIG_BLK_DEV_INITRD=yCONFIG_INITRAMFS_SOURCE=""
# CONFIG_CC_OPTIMIZE_FOR_SIZE is not setCONFIG_SYSCTL=yCONFIG_EMBEDDED=yCONFIG_UID16=y
# CONFIG_SYSCTL_SYSCALL is not setCONFIG_KALLSYMS=y
# CONFIG_KALLSYMS_EXTRA_PASS is not setCONFIG_HOTPLUG=yCONFIG_PRINTK=yCONFIG_BUG=yCONFIG_ELF_CORE=yCONFIG_BASE_FULL=yCONFIG_FUTEX=yCONFIG_EPOLL=yCONFIG_SHMEM=yCONFIG_SLAB=yCONFIG_VM_EVENT_COUNTERS=yCONFIG_RT_MUTEXES=y
# CONFIG_TINY_SHMEM is not setCONFIG_BASE_SMALL=0
# CONFIG_SLOB is not set
#
# Loadable module support
#CONFIG_MODULES=yCONFIG_MODULE_UNLOAD=y
# CONFIG_MODULE_FORCE_UNLOAD is not setCONFIG_MODVERSIONS=y
# CONFIG_MODULE_SRCVERSION_ALL is not setCONFIG_KMOD=yCONFIG_STOP_MACHINE=y
#
# Block layer
#CONFIG_BLOCK=y
# CONFIG_BLK_DEV_IO_TRACE is not set
#
# IO Schedulers
#CONFIG_IOSCHED_NOOP=yCONFIG_IOSCHED_AS=yCONFIG_IOSCHED_DEADLINE=yCONFIG_IOSCHED_CFQ=y
# CONFIG_DEFAULT_AS is not set
# CONFIG_DEFAULT_DEADLINE is not setCONFIG_DEFAULT_CFQ=y
# CONFIG_DEFAULT_NOOP is not setCONFIG_DEFAULT_IOSCHED="cfq"
#
# Processor type and features
#CONFIG_X86_PC=y
# CONFIG_X86_VSMP is not set
# CONFIG_MK8 is not set
# CONFIG_MPSC is not setCONFIG_MCORE2=y
# CONFIG_GENERIC_CPU is not setCONFIG_X86_L1_CACHE_BYTES=64CONFIG_X86_L1_CACHE_SHIFT=6CONFIG_X86_INTERNODE_CACHE_BYTES=64CONFIG_X86_TSC=yCONFIG_X86_GOOD_APIC=yCONFIG_MICROCODE=mCONFIG_MICROCODE_OLD_INTERFACE=yCONFIG_X86_MSR=mCONFIG_X86_CPUID=mCONFIG_X86_HT=yCONFIG_X86_IO_APIC=yCONFIG_X86_LOCAL_APIC=yCONFIG_MTRR=yCONFIG_SMP=y
# CONFIG_SCHED_SMT is not setCONFIG_SCHED_MC=y
# CONFIG_PREEMPT_NONE is not setCONFIG_PREEMPT_VOLUNTARY=y
# CONFIG_PREEMPT is not setCONFIG_PREEMPT_BKL=y
# CONFIG_NUMA is not setCONFIG_ARCH_SPARSEMEM_ENABLE=yCONFIG_ARCH_FLATMEM_ENABLE=yCONFIG_SELECT_MEMORY_MODEL=yCONFIG_FLATMEM_MANUAL=y
# CONFIG_DISCONTIGMEM_MANUAL is not set
# CONFIG_SPARSEMEM_MANUAL is not setCONFIG_FLATMEM=yCONFIG_FLAT_NODE_MEM_MAP=y
# CONFIG_SPARSEMEM_STATIC is not setCONFIG_SPLIT_PTLOCK_CPUS=4CONFIG_RESOURCES_64BIT=yCONFIG_ZONE_DMA_FLAG=1CONFIG_NR_CPUS=2CONFIG_HOTPLUG_CPU=yCONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=yCONFIG_HPET_TIMER=yCONFIG_IOMMU=y
# CONFIG_CALGARY_IOMMU is not setCONFIG_SWIOTLB=yCONFIG_X86_MCE=yCONFIG_X86_MCE_INTEL=y
# CONFIG_X86_MCE_AMD is not setCONFIG_KEXEC=yCONFIG_CRASH_DUMP=yCONFIG_PHYSICAL_START=0x100000CONFIG_SECCOMP=yCONFIG_CC_STACKPROTECTOR=y
# CONFIG_CC_STACKPROTECTOR_ALL is not set
# CONFIG_HZ_100 is not set
# CONFIG_HZ_250 is not setCONFIG_HZ_300=y
# CONFIG_HZ_1000 is not setCONFIG_HZ=300CONFIG_REORDER=yCONFIG_K8_NB=yCONFIG_GENERIC_HARDIRQS=yCONFIG_GENERIC_IRQ_PROBE=yCONFIG_ISA_DMA_API=yCONFIG_GENERIC_PENDING_IRQ=y
#
# Power management options
#CONFIG_PM=y
# CONFIG_PM_LEGACY is not set
# CONFIG_PM_DEBUG is not setCONFIG_PM_SYSFS_DEPRECATED=yCONFIG_SOFTWARE_SUSPEND=yCONFIG_PM_STD_PARTITION="/dev/mapper/swap"CONFIG_SUSPEND_SMP=y
#
# ACPI (Advanced Configuration and Power Interface) Support #CONFIG_ACPI=yCONFIG_ACPI_SLEEP=yCONFIG_ACPI_SLEEP_PROC_FS=y
# CONFIG_ACPI_SLEEP_PROC_SLEEP is not set CONFIG_ACPI_PROCFS=yCONFIG_ACPI_AC=mCONFIG_ACPI_BATTERY=mCONFIG_ACPI_BUTTON=mCONFIG_ACPI_VIDEO=mCONFIG_ACPI_FAN=mCONFIG_ACPI_DOCK=m
# CONFIG_ACPI_BAY is not set CONFIG_ACPI_PROCESSOR=mCONFIG_ACPI_HOTPLUG_CPU=yCONFIG_ACPI_THERMAL=m
# CONFIG_ACPI_ASUS is not setCONFIG_ACPI_IBM=mCONFIG_ACPI_IBM_BAY=y
# CONFIG_ACPI_TOSHIBA is not set CONFIG_ACPI_BLACKLIST_YEAR=0
# CONFIG_ACPI_DEBUG is not setCONFIG_ACPI_EC=yCONFIG_ACPI_POWER=yCONFIG_ACPI_SYSTEM=yCONFIG_X86_PM_TIMER=yCONFIG_ACPI_CONTAINER=m
# CONFIG_ACPI_SBS is not set
#
# CPU Frequency scaling
#CONFIG_CPU_FREQ=yCONFIG_CPU_FREQ_TABLE=m
# CONFIG_CPU_FREQ_DEBUG is not set CONFIG_CPU_FREQ_STAT=m
# CONFIG_CPU_FREQ_STAT_DETAILS is not set CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y # CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set CONFIG_CPU_FREQ_GOV_PERFORMANCE=y CONFIG_CPU_FREQ_GOV_POWERSAVE=m CONFIG_CPU_FREQ_GOV_USERSPACE=m CONFIG_CPU_FREQ_GOV_ONDEMAND=m CONFIG_CPU_FREQ_GOV_CONSERVATIVE=m
#
# CPUFreq processor drivers
#
# CONFIG_X86_POWERNOW_K8 is not set
# CONFIG_X86_SPEEDSTEP_CENTRINO is not setCONFIG_X86_ACPI_CPUFREQ=m
#
# shared options # # CONFIG_X86_ACPI_CPUFREQ_PROC_INTF is not set # CONFIG_X86_P4_CLOCKMOD is not set # CONFIG_X86_SPEEDSTEP_LIB is not set
#
# Bus options (PCI etc.)
#CONFIG_PCI=yCONFIG_PCI_DIRECT=yCONFIG_PCI_MMCONFIG=yCONFIG_PCIEPORTBUS=yCONFIG_PCIEAER=yCONFIG_PCI_MSI=yCONFIG_HT_IRQ=y
#
# PCCARD (PCMCIA/CardBus) support
#CONFIG_PCCARD=m
# CONFIG_PCMCIA_DEBUG is not setCONFIG_PCMCIA=mCONFIG_PCMCIA_LOAD_CIS=yCONFIG_PCMCIA_IOCTL=yCONFIG_CARDBUS=y
#
# PC-card bridges
#CONFIG_YENTA=m
# CONFIG_YENTA_O2 is not set
# CONFIG_YENTA_RICOH is not setCONFIG_YENTA_TI=yCONFIG_YENTA_ENE_TUNE=y
# CONFIG_YENTA_TOSHIBA is not set
# CONFIG_PD6729 is not set
# CONFIG_I82092 is not setCONFIG_PCCARD_NONSTATIC=m
#
# PCI Hotplug Support
#
# CONFIG_HOTPLUG_PCI is not set
#
# Executable file formats / Emulations
#CONFIG_BINFMT_ELF=yCONFIG_BINFMT_MISC=mCONFIG_IA32_EMULATION=y
# CONFIG_IA32_AOUT is not setCONFIG_COMPAT=yCONFIG_SYSVIPC_COMPAT=y
#
# Networking
#CONFIG_NET=y
#
# Networking options
#
# CONFIG_NETDEBUG is not setCONFIG_PACKET=yCONFIG_PACKET_MMAP=yCONFIG_UNIX=yCONFIG_XFRM=yCONFIG_XFRM_USER=m
# CONFIG_XFRM_SUB_POLICY is not set
# CONFIG_XFRM_MIGRATE is not setCONFIG_NET_KEY=m
# CONFIG_NET_KEY_MIGRATE is not setCONFIG_INET=yCONFIG_IP_MULTICAST=y
# CONFIG_IP_ADVANCED_ROUTER is not setCONFIG_IP_FIB_HASH=y
# CONFIG_IP_PNP is not setCONFIG_NET_IPIP=mCONFIG_NET_IPGRE=mCONFIG_NET_IPGRE_BROADCAST=yCONFIG_IP_MROUTE=yCONFIG_IP_PIMSM_V1=yCONFIG_IP_PIMSM_V2=y
# CONFIG_ARPD is not setCONFIG_SYN_COOKIES=yCONFIG_INET_AH=mCONFIG_INET_ESP=mCONFIG_INET_IPCOMP=mCONFIG_INET_XFRM_TUNNEL=mCONFIG_INET_TUNNEL=mCONFIG_INET_XFRM_MODE_TRANSPORT=mCONFIG_INET_XFRM_MODE_TUNNEL=mCONFIG_INET_XFRM_MODE_BEET=mCONFIG_INET_DIAG=mCONFIG_INET_TCP_DIAG=m
# CONFIG_TCP_CONG_ADVANCED is not setCONFIG_TCP_CONG_CUBIC=yCONFIG_DEFAULT_TCP_CONG="cubic"
# CONFIG_TCP_MD5SIG is not set
#
# IP: Virtual Server Configuration
#
# CONFIG_IP_VS is not setCONFIG_IPV6=mCONFIG_IPV6_PRIVACY=yCONFIG_IPV6_ROUTER_PREF=yCONFIG_IPV6_ROUTE_INFO=yCONFIG_INET6_AH=mCONFIG_INET6_ESP=mCONFIG_INET6_IPCOMP=mCONFIG_IPV6_MIP6=yCONFIG_INET6_XFRM_TUNNEL=mCONFIG_INET6_TUNNEL=mCONFIG_INET6_XFRM_MODE_TRANSPORT=mCONFIG_INET6_XFRM_MODE_TUNNEL=mCONFIG_INET6_XFRM_MODE_BEET=mCONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION=mCONFIG_IPV6_SIT=mCONFIG_IPV6_TUNNEL=mCONFIG_IPV6_MULTIPLE_TABLES=yCONFIG_IPV6_SUBTREES=y
# CONFIG_NETLABEL is not setCONFIG_NETWORK_SECMARK=yCONFIG_NETFILTER=y
# CONFIG_NETFILTER_DEBUG is not set
#
# Core Netfilter Configuration
#CONFIG_NETFILTER_NETLINK=mCONFIG_NETFILTER_NETLINK_QUEUE=mCONFIG_NETFILTER_NETLINK_LOG=mCONFIG_NF_CONNTRACK_ENABLED=mCONFIG_NF_CONNTRACK_SUPPORT=y
# CONFIG_IP_NF_CONNTRACK_SUPPORT is not setCONFIG_NF_CONNTRACK=mCONFIG_NF_CT_ACCT=yCONFIG_NF_CONNTRACK_MARK=yCONFIG_NF_CONNTRACK_SECMARK=y
# CONFIG_NF_CONNTRACK_EVENTS is not set
# CONFIG_NF_CT_PROTO_SCTP is not set
# CONFIG_NF_CONNTRACK_AMANDA is not set
# CONFIG_NF_CONNTRACK_FTP is not set
# CONFIG_NF_CONNTRACK_H323 is not set
# CONFIG_NF_CONNTRACK_IRC is not set
# CONFIG_NF_CONNTRACK_NETBIOS_NS is not set
# CONFIG_NF_CONNTRACK_PPTP is not set
# CONFIG_NF_CONNTRACK_SANE is not set
# CONFIG_NF_CONNTRACK_SIP is not set
# CONFIG_NF_CONNTRACK_TFTP is not setCONFIG_NF_CT_NETLINK=mCONFIG_NETFILTER_XTABLES=mCONFIG_NETFILTER_XT_TARGET_CLASSIFY=mCONFIG_NETFILTER_XT_TARGET_CONNMARK=m
# CONFIG_NETFILTER_XT_TARGET_DSCP is not setCONFIG_NETFILTER_XT_TARGET_MARK=mCONFIG_NETFILTER_XT_TARGET_NFQUEUE=mCONFIG_NETFILTER_XT_TARGET_NFLOG=mCONFIG_NETFILTER_XT_TARGET_NOTRACK=mCONFIG_NETFILTER_XT_TARGET_SECMARK=mCONFIG_NETFILTER_XT_TARGET_CONNSECMARK=m
# CONFIG_NETFILTER_XT_TARGET_TCPMSS is not setCONFIG_NETFILTER_XT_MATCH_COMMENT=m
# CONFIG_NETFILTER_XT_MATCH_CONNBYTES is not setCONFIG_NETFILTER_XT_MATCH_CONNMARK=mCONFIG_NETFILTER_XT_MATCH_CONNTRACK=mCONFIG_NETFILTER_XT_MATCH_DCCP=m
# CONFIG_NETFILTER_XT_MATCH_DSCP is not setCONFIG_NETFILTER_XT_MATCH_ESP=mCONFIG_NETFILTER_XT_MATCH_HELPER=mCONFIG_NETFILTER_XT_MATCH_LENGTH=mCONFIG_NETFILTER_XT_MATCH_LIMIT=mCONFIG_NETFILTER_XT_MATCH_MAC=mCONFIG_NETFILTER_XT_MATCH_MARK=mCONFIG_NETFILTER_XT_MATCH_POLICY=mCONFIG_NETFILTER_XT_MATCH_MULTIPORT=mCONFIG_NETFILTER_XT_MATCH_PKTTYPE=m
# CONFIG_NETFILTER_XT_MATCH_QUOTA is not setCONFIG_NETFILTER_XT_MATCH_REALM=mCONFIG_NETFILTER_XT_MATCH_SCTP=mCONFIG_NETFILTER_XT_MATCH_STATE=m
# CONFIG_NETFILTER_XT_MATCH_STATISTIC is not setCONFIG_NETFILTER_XT_MATCH_STRING=mCONFIG_NETFILTER_XT_MATCH_TCPMSS=m
# CONFIG_NETFILTER_XT_MATCH_HASHLIMIT is not set
#
# IP: Netfilter Configuration
#CONFIG_NF_CONNTRACK_IPV4=m
# CONFIG_NF_CONNTRACK_PROC_COMPAT is not set
# CONFIG_IP_NF_QUEUE is not setCONFIG_IP_NF_IPTABLES=mCONFIG_IP_NF_MATCH_IPRANGE=mCONFIG_IP_NF_MATCH_TOS=mCONFIG_IP_NF_MATCH_RECENT=mCONFIG_IP_NF_MATCH_ECN=mCONFIG_IP_NF_MATCH_AH=mCONFIG_IP_NF_MATCH_TTL=mCONFIG_IP_NF_MATCH_OWNER=mCONFIG_IP_NF_MATCH_ADDRTYPE=mCONFIG_IP_NF_FILTER=mCONFIG_IP_NF_TARGET_REJECT=m
# CONFIG_IP_NF_TARGET_LOG is not set
# CONFIG_IP_NF_TARGET_ULOG is not setCONFIG_NF_NAT=mCONFIG_NF_NAT_NEEDED=yCONFIG_IP_NF_TARGET_MASQUERADE=mCONFIG_IP_NF_TARGET_REDIRECT=m
# CONFIG_IP_NF_TARGET_NETMAP is not set
# CONFIG_IP_NF_TARGET_SAME is not set
# CONFIG_NF_NAT_SNMP_BASIC is not set
# CONFIG_NF_NAT_FTP is not set
# CONFIG_NF_NAT_IRC is not set
# CONFIG_NF_NAT_TFTP is not set
# CONFIG_NF_NAT_AMANDA is not set
# CONFIG_NF_NAT_PPTP is not set
# CONFIG_NF_NAT_H323 is not set
# CONFIG_NF_NAT_SIP is not setCONFIG_IP_NF_MANGLE=mCONFIG_IP_NF_TARGET_TOS=mCONFIG_IP_NF_TARGET_ECN=mCONFIG_IP_NF_TARGET_TTL=m
# CONFIG_IP_NF_TARGET_CLUSTERIP is not setCONFIG_IP_NF_RAW=mCONFIG_IP_NF_ARPTABLES=mCONFIG_IP_NF_ARPFILTER=mCONFIG_IP_NF_ARP_MANGLE=m
#
# IPv6: Netfilter Configuration (EXPERIMENTAL)
#CONFIG_NF_CONNTRACK_IPV6=m
# CONFIG_IP6_NF_QUEUE is not setCONFIG_IP6_NF_IPTABLES=mCONFIG_IP6_NF_MATCH_RT=mCONFIG_IP6_NF_MATCH_OPTS=mCONFIG_IP6_NF_MATCH_FRAG=mCONFIG_IP6_NF_MATCH_HL=mCONFIG_IP6_NF_MATCH_OWNER=mCONFIG_IP6_NF_MATCH_IPV6HEADER=mCONFIG_IP6_NF_MATCH_AH=m
# CONFIG_IP6_NF_MATCH_MH is not setCONFIG_IP6_NF_MATCH_EUI64=mCONFIG_IP6_NF_FILTER=m
# CONFIG_IP6_NF_TARGET_LOG is not setCONFIG_IP6_NF_TARGET_REJECT=mCONFIG_IP6_NF_MANGLE=mCONFIG_IP6_NF_TARGET_HL=mCONFIG_IP6_NF_RAW=m
#
# DCCP Configuration (EXPERIMENTAL)
#
# CONFIG_IP_DCCP is not set
#
# SCTP Configuration (EXPERIMENTAL)
#
# CONFIG_IP_SCTP is not set
#
# TIPC Configuration (EXPERIMENTAL)
#
# CONFIG_TIPC is not set
# CONFIG_ATM is not set
# CONFIG_BRIDGE is not set
# CONFIG_VLAN_8021Q is not set
# CONFIG_DECNET is not set
# CONFIG_LLC2 is not set
# CONFIG_IPX is not set
# CONFIG_ATALK is not set
# CONFIG_X25 is not set
# CONFIG_LAPB is not set
# CONFIG_ECONET is not set
# CONFIG_WAN_ROUTER is not set
#
# QoS and/or fair queueing
#
# CONFIG_NET_SCHED is not setCONFIG_NET_CLS_ROUTE=y
#
# Network testing
#
# CONFIG_NET_PKTGEN is not set
# CONFIG_HAMRADIO is not set
# CONFIG_IRDA is not setCONFIG_BT=mCONFIG_BT_L2CAP=mCONFIG_BT_SCO=mCONFIG_BT_RFCOMM=mCONFIG_BT_RFCOMM_TTY=yCONFIG_BT_BNEP=mCONFIG_BT_BNEP_MC_FILTER=yCONFIG_BT_BNEP_PROTO_FILTER=yCONFIG_BT_HIDP=m
#
# Bluetooth device drivers
#CONFIG_BT_HCIUSB=mCONFIG_BT_HCIUSB_SCO=y
# CONFIG_BT_HCIUART is not set
# CONFIG_BT_HCIBCM203X is not set
# CONFIG_BT_HCIBPA10X is not set
# CONFIG_BT_HCIBFUSB is not set
# CONFIG_BT_HCIDTL1 is not set
# CONFIG_BT_HCIBT3C is not set
# CONFIG_BT_HCIBLUECARD is not set
# CONFIG_BT_HCIBTUART is not setCONFIG_BT_HCIVHCI=mCONFIG_IEEE80211=mCONFIG_IEEE80211_DEBUG=yCONFIG_IEEE80211_CRYPT_WEP=mCONFIG_IEEE80211_CRYPT_CCMP=mCONFIG_IEEE80211_SOFTMAC=mCONFIG_IEEE80211_SOFTMAC_DEBUG=yCONFIG_WIRELESS_EXT=yCONFIG_FIB_RULES=y
#
# Device Drivers
#
#
# Generic Driver Options
#CONFIG_STANDALONE=yCONFIG_PREVENT_FIRMWARE_BUILD=yCONFIG_FW_LOADER=m
# CONFIG_SYS_HYPERVISOR is not set
#
# Connector - unified userspace <-> kernelspace linker #CONFIG_CONNECTOR=yCONFIG_PROC_EVENTS=y
#
# Memory Technology Devices (MTD)
#
# CONFIG_MTD is not set
#
# Parallel port support
#CONFIG_PARPORT=mCONFIG_PARPORT_PC=mCONFIG_PARPORT_PC_FIFO=y
# CONFIG_PARPORT_PC_SUPERIO is not set
# CONFIG_PARPORT_PC_PCMCIA is not set
# CONFIG_PARPORT_GSC is not set
# CONFIG_PARPORT_AX88796 is not setCONFIG_PARPORT_1284=y
#
# Plug and Play support
#CONFIG_PNP=y
# CONFIG_PNP_DEBUG is not set
#
# Protocols
#CONFIG_PNPACPI=y
#
# Block devices
#
# CONFIG_BLK_DEV_FD is not set
# CONFIG_PARIDE is not set
# CONFIG_BLK_CPQ_DA is not set
# CONFIG_BLK_CPQ_CISS_DA is not set
# CONFIG_BLK_DEV_DAC960 is not set
# CONFIG_BLK_DEV_UMEM is not set
# CONFIG_BLK_DEV_COW_COMMON is not setCONFIG_BLK_DEV_LOOP=mCONFIG_BLK_DEV_CRYPTOLOOP=mCONFIG_BLK_DEV_NBD=m
# CONFIG_BLK_DEV_SX8 is not set
# CONFIG_BLK_DEV_UB is not setCONFIG_BLK_DEV_RAM=yCONFIG_BLK_DEV_RAM_COUNT=16CONFIG_BLK_DEV_RAM_SIZE=8192CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024CONFIG_CDROM_PKTCDVD=mCONFIG_CDROM_PKTCDVD_BUFFERS=8
# CONFIG_CDROM_PKTCDVD_WCACHE is not set
# CONFIG_ATA_OVER_ETH is not set
#
# Misc devices
#
# CONFIG_IBM_ASM is not set
# CONFIG_SGI_IOC4 is not set
# CONFIG_TIFM_CORE is not set
# CONFIG_MSI_LAPTOP is not set
# CONFIG_SONY_LAPTOP is not set
#
# ATA/ATAPI/MFM/RLL support
#
# CONFIG_IDE is not set
#
# SCSI device support
#
# CONFIG_RAID_ATTRS is not setCONFIG_SCSI=y
# CONFIG_SCSI_TGT is not set
# CONFIG_SCSI_NETLINK is not set
# CONFIG_SCSI_PROC_FS is not set
#
# SCSI support type (disk, tape, CD-ROM)
#CONFIG_BLK_DEV_SD=m
# CONFIG_CHR_DEV_ST is not set
# CONFIG_CHR_DEV_OSST is not setCONFIG_BLK_DEV_SR=m
# CONFIG_BLK_DEV_SR_VENDOR is not set
# CONFIG_CHR_DEV_SG is not set
# CONFIG_CHR_DEV_SCH is not set
#
# Some SCSI devices (e.g. CD jukebox) support multiple LUNs #
# CONFIG_SCSI_MULTI_LUN is not set
# CONFIG_SCSI_CONSTANTS is not set
# CONFIG_SCSI_LOGGING is not set
# CONFIG_SCSI_SCAN_ASYNC is not set
#
# SCSI Transports
#CONFIG_SCSI_SPI_ATTRS=m
# CONFIG_SCSI_FC_ATTRS is not set
# CONFIG_SCSI_ISCSI_ATTRS is not set
# CONFIG_SCSI_SAS_ATTRS is not set
# CONFIG_SCSI_SAS_LIBSAS is not set
#
# SCSI low-level drivers
#
# CONFIG_ISCSI_TCP is not set
# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
# CONFIG_SCSI_3W_9XXX is not set
# CONFIG_SCSI_ACARD is not set
# CONFIG_SCSI_AACRAID is not set
# CONFIG_SCSI_AIC7XXX is not set
# CONFIG_SCSI_AIC7XXX_OLD is not set
# CONFIG_SCSI_AIC79XX is not set
# CONFIG_SCSI_AIC94XX is not set
# CONFIG_SCSI_ARCMSR is not set
# CONFIG_MEGARAID_NEWGEN is not set
# CONFIG_MEGARAID_LEGACY is not set
# CONFIG_MEGARAID_SAS is not set
# CONFIG_SCSI_HPTIOP is not set
# CONFIG_SCSI_BUSLOGIC is not set
# CONFIG_SCSI_DMX3191D is not set
# CONFIG_SCSI_EATA is not set
# CONFIG_SCSI_FUTURE_DOMAIN is not set
# CONFIG_SCSI_GDTH is not set
# CONFIG_SCSI_IPS is not set
# CONFIG_SCSI_INITIO is not set
# CONFIG_SCSI_INIA100 is not set
# CONFIG_SCSI_PPA is not set
# CONFIG_SCSI_IMM is not set
# CONFIG_SCSI_STEX is not set
# CONFIG_SCSI_SYM53C8XX_2 is not set
# CONFIG_SCSI_IPR is not set
# CONFIG_SCSI_QLOGIC_1280 is not set
# CONFIG_SCSI_QLA_FC is not set
# CONFIG_SCSI_QLA_ISCSI is not set
# CONFIG_SCSI_LPFC is not set
# CONFIG_SCSI_DC395x is not set
# CONFIG_SCSI_DC390T is not set
# CONFIG_SCSI_DEBUG is not set
# CONFIG_SCSI_SRP is not set
#
# PCMCIA SCSI adapter support
#
# CONFIG_PCMCIA_FDOMAIN is not set
# CONFIG_PCMCIA_QLOGIC is not set
# CONFIG_PCMCIA_SYM53C500 is not set
#
# Serial ATA (prod) and Parallel ATA (experimental) drivers #CONFIG_ATA=y
# CONFIG_ATA_NONSTANDARD is not set CONFIG_SATA_AHCI=y
# CONFIG_SATA_SVW is not setCONFIG_ATA_PIIX=y
# CONFIG_SATA_MV is not set
# CONFIG_SATA_NV is not set
# CONFIG_PDC_ADMA is not set
# CONFIG_SATA_QSTOR is not set
# CONFIG_SATA_PROMISE is not set
# CONFIG_SATA_SX4 is not set
# CONFIG_SATA_SIL is not set
# CONFIG_SATA_SIL24 is not set
# CONFIG_SATA_SIS is not set
# CONFIG_SATA_ULI is not set
# CONFIG_SATA_VIA is not set
# CONFIG_SATA_VITESSE is not set
# CONFIG_SATA_INIC162X is not set CONFIG_SATA_ACPI=y
# CONFIG_PATA_ALI is not set
# CONFIG_PATA_AMD is not set
# CONFIG_PATA_ARTOP is not set
# CONFIG_PATA_ATIIXP is not set
# CONFIG_PATA_CMD64X is not set
# CONFIG_PATA_CS5520 is not set
# CONFIG_PATA_CS5530 is not set
# CONFIG_PATA_CYPRESS is not set
# CONFIG_PATA_EFAR is not setCONFIG_ATA_GENERIC=y
# CONFIG_PATA_HPT366 is not set
# CONFIG_PATA_HPT37X is not set
# CONFIG_PATA_HPT3X2N is not set
# CONFIG_PATA_HPT3X3 is not set
# CONFIG_PATA_IT821X is not set
# CONFIG_PATA_IT8213 is not set
# CONFIG_PATA_JMICRON is not set
# CONFIG_PATA_TRIFLEX is not set
# CONFIG_PATA_MARVELL is not set
# CONFIG_PATA_MPIIX is not set
# CONFIG_PATA_OLDPIIX is not set
# CONFIG_PATA_NETCELL is not set
# CONFIG_PATA_NS87410 is not set
# CONFIG_PATA_OPTI is not set
# CONFIG_PATA_OPTIDMA is not set
# CONFIG_PATA_PCMCIA is not set
# CONFIG_PATA_PDC_OLD is not set
# CONFIG_PATA_RADISYS is not set
# CONFIG_PATA_RZ1000 is not set
# CONFIG_PATA_SC1200 is not set
# CONFIG_PATA_SERVERWORKS is not set
# CONFIG_PATA_PDC2027X is not set
# CONFIG_PATA_SIL680 is not set
# CONFIG_PATA_SIS is not set
# CONFIG_PATA_VIA is not set
# CONFIG_PATA_WINBOND is not set
# CONFIG_PATA_PLATFORM is not set
#
# Multi-device support (RAID and LVM)
#CONFIG_MD=y
# CONFIG_BLK_DEV_MD is not setCONFIG_BLK_DEV_DM=m
# CONFIG_DM_DEBUG is not setCONFIG_DM_CRYPT=mCONFIG_DM_SNAPSHOT=mCONFIG_DM_MIRROR=mCONFIG_DM_ZERO=m
# CONFIG_DM_MULTIPATH is not set
#
# Fusion MPT device support
#
# CONFIG_FUSION is not set
# CONFIG_FUSION_SPI is not set
# CONFIG_FUSION_FC is not set
# CONFIG_FUSION_SAS is not set
#
# IEEE 1394 (FireWire) support
#CONFIG_IEEE1394=m
#
# Subsystem Options
#
# CONFIG_IEEE1394_VERBOSEDEBUG is not setCONFIG_IEEE1394_EXTRA_CONFIG_ROMS=yCONFIG_IEEE1394_CONFIG_ROM_IP1394=y
#
# Device Drivers
#
# CONFIG_IEEE1394_PCILYNX is not setCONFIG_IEEE1394_OHCI1394=m
#
# Protocol Drivers
#CONFIG_IEEE1394_VIDEO1394=mCONFIG_IEEE1394_SBP2=mCONFIG_IEEE1394_ETH1394=m
# CONFIG_IEEE1394_DV1394 is not setCONFIG_IEEE1394_RAWIO=m
#
# I2O device support
#
# CONFIG_I2O is not set
#
# Macintosh device drivers
#
# CONFIG_MAC_EMUMOUSEBTN is not set
#
# Network device support
#CONFIG_NETDEVICES=y
# CONFIG_DUMMY is not setCONFIG_BONDING=m
# CONFIG_EQUALIZER is not setCONFIG_TUN=m
# CONFIG_NET_SB1000 is not set
#
# ARCnet devices
#
# CONFIG_ARCNET is not set
#
# PHY device support
#
#
# Ethernet (10 or 100Mbit)
#
# CONFIG_NET_ETHERNET is not set
#
# Ethernet (1000 Mbit)
#
# CONFIG_ACENIC is not set
# CONFIG_DL2K is not set
# CONFIG_E1000 is not set
# CONFIG_NS83820 is not set
# CONFIG_HAMACHI is not set
# CONFIG_YELLOWFIN is not set
# CONFIG_R8169 is not set
# CONFIG_SIS190 is not set
# CONFIG_SKGE is not set
# CONFIG_SKY2 is not set
# CONFIG_SK98LIN is not setCONFIG_TIGON3=m
# CONFIG_BNX2 is not set
# CONFIG_QLA3XXX is not set
# CONFIG_ATL1 is not set
#
# Ethernet (10000 Mbit)
#
# CONFIG_CHELSIO_T1 is not set
# CONFIG_CHELSIO_T3 is not set
# CONFIG_IXGB is not set
# CONFIG_S2IO is not set
# CONFIG_MYRI10GE is not set
# CONFIG_NETXEN_NIC is not set
#
# Token Ring devices
#
# CONFIG_TR is not set
#
# Wireless LAN (non-hamradio)
#
# CONFIG_NET_RADIO is not set
#
# PCMCIA network device support
#
# CONFIG_NET_PCMCIA is not set
#
# Wan interfaces
#
# CONFIG_WAN is not set
# CONFIG_FDDI is not set
# CONFIG_HIPPI is not set
# CONFIG_PLIP is not setCONFIG_PPP=m
# CONFIG_PPP_MULTILINK is not setCONFIG_PPP_FILTER=yCONFIG_PPP_ASYNC=m
# CONFIG_PPP_SYNC_TTY is not setCONFIG_PPP_DEFLATE=mCONFIG_PPP_BSDCOMP=m
# CONFIG_PPP_MPPE is not set
# CONFIG_PPPOE is not set
# CONFIG_SLIP is not setCONFIG_SLHC=m
# CONFIG_NET_FC is not set
# CONFIG_SHAPER is not setCONFIG_NETCONSOLE=mCONFIG_NETPOLL=y
# CONFIG_NETPOLL_RX is not set
# CONFIG_NETPOLL_TRAP is not setCONFIG_NET_POLL_CONTROLLER=y
#
# ISDN subsystem
#
# CONFIG_ISDN is not set
#
# Telephony Support
#
# CONFIG_PHONE is not set
#
# Input device support
#CONFIG_INPUT=y
# CONFIG_INPUT_FF_MEMLESS is not set
#
# Userland interfaces
#CONFIG_INPUT_MOUSEDEV=m
# CONFIG_INPUT_MOUSEDEV_PSAUX is not setCONFIG_INPUT_MOUSEDEV_SCREEN_X=1024CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
# CONFIG_INPUT_JOYDEV is not set
# CONFIG_INPUT_TSDEV is not setCONFIG_INPUT_EVDEV=m
# CONFIG_INPUT_EVBUG is not set
#
# Input Device Drivers
#CONFIG_INPUT_KEYBOARD=yCONFIG_KEYBOARD_ATKBD=y
# CONFIG_KEYBOARD_SUNKBD is not set
# CONFIG_KEYBOARD_LKKBD is not set
# CONFIG_KEYBOARD_XTKBD is not set
# CONFIG_KEYBOARD_NEWTON is not set
# CONFIG_KEYBOARD_STOWAWAY is not setCONFIG_INPUT_MOUSE=yCONFIG_MOUSE_PS2=m
# CONFIG_MOUSE_SERIAL is not set
# CONFIG_MOUSE_VSXXXAA is not set
# CONFIG_INPUT_JOYSTICK is not set
# CONFIG_INPUT_TOUCHSCREEN is not setCONFIG_INPUT_MISC=yCONFIG_INPUT_PCSPKR=m
# CONFIG_INPUT_ATLAS_BTNS is not setCONFIG_INPUT_UINPUT=m
#
# Hardware I/O ports
#CONFIG_SERIO=yCONFIG_SERIO_I8042=yCONFIG_SERIO_SERPORT=m
# CONFIG_SERIO_CT82C710 is not set
# CONFIG_SERIO_PARKBD is not set
# CONFIG_SERIO_PCIPS2 is not setCONFIG_SERIO_LIBPS2=yCONFIG_SERIO_RAW=m
# CONFIG_GAMEPORT is not set
#
# Character devices
#CONFIG_VT=yCONFIG_VT_CONSOLE=yCONFIG_HW_CONSOLE=yCONFIG_VT_HW_CONSOLE_BINDING=y
# CONFIG_SERIAL_NONSTANDARD is not set
#
# Serial drivers
#CONFIG_SERIAL_8250=y
# CONFIG_SERIAL_8250_CONSOLE is not set
# CONFIG_SERIAL_8250_PCI is not setCONFIG_SERIAL_8250_PNP=y
# CONFIG_SERIAL_8250_CS is not setCONFIG_SERIAL_8250_NR_UARTS=4CONFIG_SERIAL_8250_RUNTIME_UARTS=1
# CONFIG_SERIAL_8250_EXTENDED is not set
#
# Non-8250 serial port support
#CONFIG_SERIAL_CORE=y
# CONFIG_SERIAL_JSM is not setCONFIG_UNIX98_PTYS=y
# CONFIG_LEGACY_PTYS is not setCONFIG_PRINTER=m
# CONFIG_LP_CONSOLE is not setCONFIG_PPDEV=m
# CONFIG_TIPAR is not set
#
# IPMI
#
# CONFIG_IPMI_HANDLER is not set
#
# Watchdog Cards
#CONFIG_WATCHDOG=y
# CONFIG_WATCHDOG_NOWAYOUT is not set
#
# Watchdog Device Drivers
#
# CONFIG_SOFT_WATCHDOG is not set
# CONFIG_ACQUIRE_WDT is not set
# CONFIG_ADVANTECH_WDT is not set
# CONFIG_ALIM1535_WDT is not set
# CONFIG_ALIM7101_WDT is not set
# CONFIG_SC520_WDT is not set
# CONFIG_EUROTECH_WDT is not set
# CONFIG_IB700_WDT is not set
# CONFIG_IBMASR is not set
# CONFIG_WAFER_WDT is not set
# CONFIG_I6300ESB_WDT is not set
# CONFIG_I8XX_TCO is not setCONFIG_ITCO_WDT=m
# CONFIG_ITCO_VENDOR_SUPPORT is not set
# CONFIG_SC1200_WDT is not set
# CONFIG_PC87413_WDT is not set
# CONFIG_60XX_WDT is not set
# CONFIG_SBC8360_WDT is not set
# CONFIG_CPU5_WDT is not set
# CONFIG_SMSC37B787_WDT is not set
# CONFIG_W83627HF_WDT is not set
# CONFIG_W83697HF_WDT is not set
# CONFIG_W83877F_WDT is not set
# CONFIG_W83977F_WDT is not set
# CONFIG_MACHZ_WDT is not set
# CONFIG_SBC_EPX_C3_WATCHDOG is not set
#
# PCI-based Watchdog Cards
#
# CONFIG_PCIPCWATCHDOG is not set
# CONFIG_WDTPCI is not set
#
# USB-based Watchdog Cards
#
# CONFIG_USBPCWATCHDOG is not setCONFIG_HW_RANDOM=mCONFIG_HW_RANDOM_INTEL=m
# CONFIG_HW_RANDOM_AMD is not set
# CONFIG_HW_RANDOM_GEODE is not setCONFIG_NVRAM=mCONFIG_RTC=mCONFIG_GEN_RTC=mCONFIG_GEN_RTC_X=y
# CONFIG_DTLK is not set
# CONFIG_R3964 is not set
# CONFIG_APPLICOM is not setCONFIG_AGP=yCONFIG_AGP_AMD64=yCONFIG_AGP_INTEL=y
# CONFIG_AGP_SIS is not set
# CONFIG_AGP_VIA is not setCONFIG_DRM=m
# CONFIG_DRM_TDFX is not set
# CONFIG_DRM_R128 is not set
# CONFIG_DRM_RADEON is not set
# CONFIG_DRM_I810 is not set
# CONFIG_DRM_I830 is not setCONFIG_DRM_I915=m
# CONFIG_DRM_MGA is not set
# CONFIG_DRM_SIS is not set
# CONFIG_DRM_VIA is not set
# CONFIG_DRM_SAVAGE is not set
#
# PCMCIA character devices
#
# CONFIG_SYNCLINK_CS is not set
# CONFIG_CARDMAN_4000 is not set
# CONFIG_CARDMAN_4040 is not set
# CONFIG_MWAVE is not set
# CONFIG_PC8736x_GPIO is not set
# CONFIG_RAW_DRIVER is not setCONFIG_HPET=y
# CONFIG_HPET_RTC_IRQ is not setCONFIG_HPET_MMAP=yCONFIG_HANGCHECK_TIMER=m
#
# TPM devices
#CONFIG_TCG_TPM=mCONFIG_TCG_TIS=m
# CONFIG_TCG_NSC is not set
# CONFIG_TCG_ATMEL is not set
# CONFIG_TCG_INFINEON is not set
# CONFIG_TELCLOCK is not set
#
# I2C support
#CONFIG_I2C=yCONFIG_I2C_CHARDEV=m
#
# I2C Algorithms
#CONFIG_I2C_ALGOBIT=yCONFIG_I2C_ALGOPCF=mCONFIG_I2C_ALGOPCA=m
#
# I2C Hardware Bus support
#
# CONFIG_I2C_ALI1535 is not set
# CONFIG_I2C_ALI1563 is not set
# CONFIG_I2C_ALI15X3 is not set
# CONFIG_I2C_AMD756 is not set
# CONFIG_I2C_AMD8111 is not setCONFIG_I2C_I801=m
# CONFIG_I2C_I810 is not set
# CONFIG_I2C_PIIX4 is not set
# CONFIG_I2C_NFORCE2 is not set
# CONFIG_I2C_OCORES is not set
# CONFIG_I2C_PARPORT is not set
# CONFIG_I2C_PARPORT_LIGHT is not set
# CONFIG_I2C_PASEMI is not set
# CONFIG_I2C_PROSAVAGE is not set
# CONFIG_I2C_SAVAGE4 is not set
# CONFIG_I2C_SIS5595 is not set
# CONFIG_I2C_SIS630 is not set
# CONFIG_I2C_SIS96X is not set
# CONFIG_I2C_STUB is not set
# CONFIG_I2C_VIA is not set
# CONFIG_I2C_VIAPRO is not set
# CONFIG_I2C_VOODOO3 is not set
# CONFIG_I2C_PCA_ISA is not set
#
# Miscellaneous I2C Chip support
#
# CONFIG_SENSORS_DS1337 is not set
# CONFIG_SENSORS_DS1374 is not setCONFIG_SENSORS_EEPROM=m
# CONFIG_SENSORS_PCF8574 is not set
# CONFIG_SENSORS_PCA9539 is not set
# CONFIG_SENSORS_PCF8591 is not set
# CONFIG_SENSORS_MAX6875 is not set
# CONFIG_I2C_DEBUG_CORE is not set
# CONFIG_I2C_DEBUG_ALGO is not set
# CONFIG_I2C_DEBUG_BUS is not set
# CONFIG_I2C_DEBUG_CHIP is not set
#
# SPI support
#
# CONFIG_SPI is not set
# CONFIG_SPI_MASTER is not set
#
# Dallas's 1-wire bus
#
# CONFIG_W1 is not set
#
# Hardware Monitoring support
#CONFIG_HWMON=m
# CONFIG_HWMON_VID is not set
# CONFIG_SENSORS_ABITUGURU is not set
# CONFIG_SENSORS_ADM1021 is not set
# CONFIG_SENSORS_ADM1025 is not set
# CONFIG_SENSORS_ADM1026 is not set
# CONFIG_SENSORS_ADM1029 is not set
# CONFIG_SENSORS_ADM1031 is not set
# CONFIG_SENSORS_ADM9240 is not set
# CONFIG_SENSORS_K8TEMP is not set
# CONFIG_SENSORS_ASB100 is not set
# CONFIG_SENSORS_ATXP1 is not set
# CONFIG_SENSORS_DS1621 is not set
# CONFIG_SENSORS_F71805F is not set
# CONFIG_SENSORS_FSCHER is not set
# CONFIG_SENSORS_FSCPOS is not set
# CONFIG_SENSORS_GL518SM is not set
# CONFIG_SENSORS_GL520SM is not set
# CONFIG_SENSORS_IT87 is not set
# CONFIG_SENSORS_LM63 is not set
# CONFIG_SENSORS_LM75 is not set
# CONFIG_SENSORS_LM77 is not set
# CONFIG_SENSORS_LM78 is not set
# CONFIG_SENSORS_LM80 is not set
# CONFIG_SENSORS_LM83 is not set
# CONFIG_SENSORS_LM85 is not set
# CONFIG_SENSORS_LM87 is not set
# CONFIG_SENSORS_LM90 is not set
# CONFIG_SENSORS_LM92 is not set
# CONFIG_SENSORS_MAX1619 is not set
# CONFIG_SENSORS_PC87360 is not set
# CONFIG_SENSORS_PC87427 is not set
# CONFIG_SENSORS_SIS5595 is not set
# CONFIG_SENSORS_SMSC47M1 is not set
# CONFIG_SENSORS_SMSC47M192 is not set
# CONFIG_SENSORS_SMSC47B397 is not set
# CONFIG_SENSORS_VIA686A is not set
# CONFIG_SENSORS_VT1211 is not set
# CONFIG_SENSORS_VT8231 is not set
# CONFIG_SENSORS_W83781D is not set
# CONFIG_SENSORS_W83791D is not set
# CONFIG_SENSORS_W83792D is not set
# CONFIG_SENSORS_W83793 is not set
# CONFIG_SENSORS_W83L785TS is not set
# CONFIG_SENSORS_W83627HF is not set
# CONFIG_SENSORS_W83627EHF is not setCONFIG_SENSORS_HDAPS=m
# CONFIG_HWMON_DEBUG_CHIP is not set
#
# Multifunction device drivers
#
# CONFIG_MFD_SM501 is not set
#
# Multimedia devices
#CONFIG_VIDEO_DEV=m
# CONFIG_VIDEO_V4L1 is not set
# CONFIG_VIDEO_V4L1_COMPAT is not setCONFIG_VIDEO_V4L2=y
#
# Video Capture Adapters
#
#
# Video Capture Adapters
#
# CONFIG_VIDEO_ADV_DEBUG is not setCONFIG_VIDEO_HELPER_CHIPS_AUTO=y
# CONFIG_VIDEO_VIVI is not set
# CONFIG_VIDEO_SAA5246A is not set
# CONFIG_VIDEO_SAA5249 is not set
# CONFIG_VIDEO_SAA7134 is not set
# CONFIG_VIDEO_HEXIUM_ORION is not set
# CONFIG_VIDEO_HEXIUM_GEMINI is not set
# CONFIG_VIDEO_CX88 is not set
# CONFIG_VIDEO_CAFE_CCIC is not set
#
# V4L USB devices
#
# CONFIG_VIDEO_PVRUSB2 is not set
# CONFIG_VIDEO_USBVISION is not set
#
# Radio Adapters
#
# CONFIG_RADIO_GEMTEK_PCI is not set
# CONFIG_RADIO_MAXIRADIO is not set
# CONFIG_RADIO_MAESTRO is not set
# CONFIG_USB_DSBR is not set
#
# Digital Video Broadcasting Devices
#
# CONFIG_DVB is not set
# CONFIG_USB_DABUSB is not set
#
# Graphics support
#CONFIG_BACKLIGHT_LCD_SUPPORT=yCONFIG_BACKLIGHT_CLASS_DEVICE=mCONFIG_LCD_CLASS_DEVICE=m
# CONFIG_BACKLIGHT_PROGEAR is not setCONFIG_FB=yCONFIG_FIRMWARE_EDID=yCONFIG_FB_DDC=yCONFIG_FB_CFB_FILLRECT=yCONFIG_FB_CFB_COPYAREA=yCONFIG_FB_CFB_IMAGEBLIT=y
# CONFIG_FB_SVGALIB is not set
# CONFIG_FB_MACMODES is not set
# CONFIG_FB_BACKLIGHT is not setCONFIG_FB_MODE_HELPERS=y
# CONFIG_FB_TILEBLITTING is not set
#
# Frambuffer hardware drivers
#
# CONFIG_FB_CIRRUS is not set
# CONFIG_FB_PM2 is not set
# CONFIG_FB_CYBER2000 is not set
# CONFIG_FB_ARC is not set
# CONFIG_FB_ASILIANT is not set
# CONFIG_FB_IMSTT is not set
# CONFIG_FB_VGA16 is not setCONFIG_FB_VESA=y
# CONFIG_FB_HGA is not set
# CONFIG_FB_S1D13XXX is not set
# CONFIG_FB_NVIDIA is not set
# CONFIG_FB_RIVA is not setCONFIG_FB_INTEL=yCONFIG_FB_INTEL_DEBUG=yCONFIG_FB_INTEL_I2C=y
# CONFIG_FB_MATROX is not set
# CONFIG_FB_RADEON is not set
# CONFIG_FB_ATY128 is not set
# CONFIG_FB_ATY is not set
# CONFIG_FB_S3 is not set
# CONFIG_FB_SAVAGE is not set
# CONFIG_FB_SIS is not set
# CONFIG_FB_NEOMAGIC is not set
# CONFIG_FB_KYRO is not set
# CONFIG_FB_3DFX is not set
# CONFIG_FB_VOODOO1 is not set
# CONFIG_FB_TRIDENT is not set
# CONFIG_FB_GEODE is not set
# CONFIG_FB_VIRTUAL is not set
#
# Console display driver support
#CONFIG_VGA_CONSOLE=y
# CONFIG_VGACON_SOFT_SCROLLBACK is not setCONFIG_VIDEO_SELECT=yCONFIG_DUMMY_CONSOLE=yCONFIG_FRAMEBUFFER_CONSOLE=yCONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
# CONFIG_FONTS is not set
CONFIG_FONT_8x8=y
CONFIG_FONT_8x16=y
#
# Logo configuration
#CONFIG_LOGO=yCONFIG_LOGO_LINUX_MONO=yCONFIG_LOGO_LINUX_VGA16=yCONFIG_LOGO_LINUX_CLUT224=y
#
# Sound
#CONFIG_SOUND=m
#
# Advanced Linux Sound Architecture
#CONFIG_SND=mCONFIG_SND_TIMER=mCONFIG_SND_PCM=mCONFIG_SND_HWDEP=mCONFIG_SND_RAWMIDI=mCONFIG_SND_SEQUENCER=mCONFIG_SND_SEQ_DUMMY=mCONFIG_SND_OSSEMUL=yCONFIG_SND_MIXER_OSS=mCONFIG_SND_PCM_OSS=mCONFIG_SND_PCM_OSS_PLUGINS=yCONFIG_SND_SEQUENCER_OSS=yCONFIG_SND_RTCTIMER=mCONFIG_SND_SEQ_RTCTIMER_DEFAULT=y
# CONFIG_SND_DYNAMIC_MINORS is not set
# CONFIG_SND_SUPPORT_OLD_API is not setCONFIG_SND_VERBOSE_PROCFS=y
# CONFIG_SND_VERBOSE_PRINTK is not set
# CONFIG_SND_DEBUG is not set
#
# Generic devices
#CONFIG_SND_DUMMY=mCONFIG_SND_VIRMIDI=m
# CONFIG_SND_MTPAV is not set
# CONFIG_SND_MTS64 is not setCONFIG_SND_SERIAL_U16550=m
# CONFIG_SND_MPU401 is not set
# CONFIG_SND_PORTMAN2X4 is not set
#
# PCI devices
#
# CONFIG_SND_AD1889 is not set
# CONFIG_SND_ALS300 is not set
# CONFIG_SND_ALS4000 is not set
# CONFIG_SND_ALI5451 is not set
# CONFIG_SND_ATIIXP is not set
# CONFIG_SND_ATIIXP_MODEM is not set
# CONFIG_SND_AU8810 is not set
# CONFIG_SND_AU8820 is not set
# CONFIG_SND_AU8830 is not set
# CONFIG_SND_AZT3328 is not set
# CONFIG_SND_BT87X is not set
# CONFIG_SND_CA0106 is not set
# CONFIG_SND_CMIPCI is not set
# CONFIG_SND_CS4281 is not set
# CONFIG_SND_CS46XX is not set
# CONFIG_SND_DARLA20 is not set
# CONFIG_SND_GINA20 is not set
# CONFIG_SND_LAYLA20 is not set
# CONFIG_SND_DARLA24 is not set
# CONFIG_SND_GINA24 is not set
# CONFIG_SND_LAYLA24 is not set
# CONFIG_SND_MONA is not set
# CONFIG_SND_MIA is not set
# CONFIG_SND_ECHO3G is not set
# CONFIG_SND_INDIGO is not set
# CONFIG_SND_INDIGOIO is not set
# CONFIG_SND_INDIGODJ is not set
# CONFIG_SND_EMU10K1 is not set
# CONFIG_SND_EMU10K1X is not set
# CONFIG_SND_ENS1370 is not set
# CONFIG_SND_ENS1371 is not set
# CONFIG_SND_ES1938 is not set
# CONFIG_SND_ES1968 is not set
# CONFIG_SND_FM801 is not setCONFIG_SND_HDA_INTEL=m
# CONFIG_SND_HDSP is not set
# CONFIG_SND_HDSPM is not set
# CONFIG_SND_ICE1712 is not set
# CONFIG_SND_ICE1724 is not set
# CONFIG_SND_INTEL8X0 is not set
# CONFIG_SND_INTEL8X0M is not set
# CONFIG_SND_KORG1212 is not set
# CONFIG_SND_MAESTRO3 is not set
# CONFIG_SND_MIXART is not set
# CONFIG_SND_NM256 is not set
# CONFIG_SND_PCXHR is not set
# CONFIG_SND_RIPTIDE is not set
# CONFIG_SND_RME32 is not set
# CONFIG_SND_RME96 is not set
# CONFIG_SND_RME9652 is not set
# CONFIG_SND_SONICVIBES is not set
# CONFIG_SND_TRIDENT is not set
# CONFIG_SND_VIA82XX is not set
# CONFIG_SND_VIA82XX_MODEM is not set
# CONFIG_SND_VX222 is not set
# CONFIG_SND_YMFPCI is not set
#
# USB devices
#CONFIG_SND_USB_AUDIO=m
# CONFIG_SND_USB_USX2Y is not set
#
# PCMCIA devices
#
# CONFIG_SND_VXPOCKET is not set
# CONFIG_SND_PDAUDIOCF is not set
#
# SoC audio support
#
# CONFIG_SND_SOC is not set
#
# Open Sound System
#
# CONFIG_SOUND_PRIME is not set
#
# HID Devices
#CONFIG_HID=m
# CONFIG_HID_DEBUG is not set
#
# USB support
#CONFIG_USB_ARCH_HAS_HCD=yCONFIG_USB_ARCH_HAS_OHCI=yCONFIG_USB_ARCH_HAS_EHCI=yCONFIG_USB=m
# CONFIG_USB_DEBUG is not set
#
# Miscellaneous USB options
#CONFIG_USB_DEVICEFS=y
# CONFIG_USB_DYNAMIC_MINORS is not setCONFIG_USB_SUSPEND=y
# CONFIG_USB_OTG is not set
#
# USB Host Controller Drivers
#CONFIG_USB_EHCI_HCD=mCONFIG_USB_EHCI_SPLIT_ISO=yCONFIG_USB_EHCI_ROOT_HUB_TT=y
# CONFIG_USB_EHCI_TT_NEWSCHED is not set
# CONFIG_USB_EHCI_BIG_ENDIAN_MMIO is not set
# CONFIG_USB_ISP116X_HCD is not set
# CONFIG_USB_OHCI_HCD is not setCONFIG_USB_UHCI_HCD=m
# CONFIG_USB_SL811_HCD is not set
#
# USB Device Class drivers
#CONFIG_USB_ACM=mCONFIG_USB_PRINTER=m
#
# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' #
#
# may also be needed; see USB_STORAGE Help for more information # CONFIG_USB_STORAGE=m # CONFIG_USB_STORAGE_DEBUG is not set # CONFIG_USB_STORAGE_DATAFAB is not set # CONFIG_USB_STORAGE_FREECOM is not set # CONFIG_USB_STORAGE_DPCM is not set # CONFIG_USB_STORAGE_USBAT is not set # CONFIG_USB_STORAGE_SDDR09 is not set # CONFIG_USB_STORAGE_SDDR55 is not set # CONFIG_USB_STORAGE_JUMPSHOT is not set # CONFIG_USB_STORAGE_ALAUDA is not set # CONFIG_USB_STORAGE_KARMA is not set # CONFIG_USB_LIBUSUAL is not set
#
# USB Input Devices
#
# CONFIG_USB_HID is not set
#
# USB HID Boot Protocol drivers
#
# CONFIG_USB_KBD is not set
# CONFIG_USB_MOUSE is not set
# CONFIG_USB_AIPTEK is not set
# CONFIG_USB_WACOM is not set
# CONFIG_USB_ACECAD is not set
# CONFIG_USB_KBTAB is not set
# CONFIG_USB_POWERMATE is not set
# CONFIG_USB_TOUCHSCREEN is not set
# CONFIG_USB_YEALINK is not set
# CONFIG_USB_XPAD is not set
# CONFIG_USB_ATI_REMOTE is not set
# CONFIG_USB_ATI_REMOTE2 is not set
# CONFIG_USB_KEYSPAN_REMOTE is not set
# CONFIG_USB_APPLETOUCH is not set
# CONFIG_USB_GTCO is not set
#
# USB Imaging devices
#
# CONFIG_USB_MDC800 is not set
# CONFIG_USB_MICROTEK is not set
#
# USB Network Adapters
#
# CONFIG_USB_CATC is not set
# CONFIG_USB_KAWETH is not set
# CONFIG_USB_PEGASUS is not set
# CONFIG_USB_RTL8150 is not set
# CONFIG_USB_USBNET_MII is not set
# CONFIG_USB_USBNET is not set
# CONFIG_USB_MON is not set
#
# USB port drivers
#
# CONFIG_USB_USS720 is not set
#
# USB Serial Converter support
#CONFIG_USB_SERIAL=mCONFIG_USB_SERIAL_GENERIC=y
# CONFIG_USB_SERIAL_AIRCABLE is not set
# CONFIG_USB_SERIAL_AIRPRIME is not set
# CONFIG_USB_SERIAL_ARK3116 is not set
# CONFIG_USB_SERIAL_BELKIN is not set
# CONFIG_USB_SERIAL_WHITEHEAT is not set
# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set
# CONFIG_USB_SERIAL_CP2101 is not set
# CONFIG_USB_SERIAL_CYPRESS_M8 is not set
# CONFIG_USB_SERIAL_EMPEG is not set
# CONFIG_USB_SERIAL_FTDI_SIO is not set
# CONFIG_USB_SERIAL_FUNSOFT is not set
# CONFIG_USB_SERIAL_VISOR is not set
# CONFIG_USB_SERIAL_IPAQ is not set
# CONFIG_USB_SERIAL_IR is not set
# CONFIG_USB_SERIAL_EDGEPORT is not set
# CONFIG_USB_SERIAL_EDGEPORT_TI is not set
# CONFIG_USB_SERIAL_GARMIN is not set
# CONFIG_USB_SERIAL_IPW is not set
# CONFIG_USB_SERIAL_KEYSPAN_PDA is not set
# CONFIG_USB_SERIAL_KEYSPAN is not set
# CONFIG_USB_SERIAL_KLSI is not set
# CONFIG_USB_SERIAL_KOBIL_SCT is not set
# CONFIG_USB_SERIAL_MCT_U232 is not set
# CONFIG_USB_SERIAL_MOS7720 is not set
# CONFIG_USB_SERIAL_MOS7840 is not set
# CONFIG_USB_SERIAL_NAVMAN is not set
# CONFIG_USB_SERIAL_PL2303 is not set
# CONFIG_USB_SERIAL_HP4X is not set
# CONFIG_USB_SERIAL_SAFE is not set
# CONFIG_USB_SERIAL_SIERRAWIRELESS is not set
# CONFIG_USB_SERIAL_TI is not set
# CONFIG_USB_SERIAL_CYBERJACK is not set
# CONFIG_USB_SERIAL_XIRCOM is not setCONFIG_USB_SERIAL_OPTION=m
# CONFIG_USB_SERIAL_OMNINET is not set
# CONFIG_USB_SERIAL_DEBUG is not set
#
# USB Miscellaneous drivers
#
# CONFIG_USB_EMI62 is not set
# CONFIG_USB_EMI26 is not set
# CONFIG_USB_ADUTUX is not set
# CONFIG_USB_AUERSWALD is not set
# CONFIG_USB_RIO500 is not set
# CONFIG_USB_LEGOTOWER is not set
# CONFIG_USB_LCD is not set
# CONFIG_USB_BERRY_CHARGE is not set
# CONFIG_USB_LED is not set
# CONFIG_USB_CYPRESS_CY7C63 is not set
# CONFIG_USB_CYTHERM is not set
# CONFIG_USB_PHIDGET is not set
# CONFIG_USB_IDMOUSE is not set
# CONFIG_USB_FTDI_ELAN is not set
# CONFIG_USB_APPLEDISPLAY is not set
# CONFIG_USB_SISUSBVGA is not set
# CONFIG_USB_LD is not set
# CONFIG_USB_TRANCEVIBRATOR is not set
# CONFIG_USB_IOWARRIOR is not set
# CONFIG_USB_TEST is not set
#
# USB DSL modem support
#
#
# USB Gadget Support
#
# CONFIG_USB_GADGET is not set
#
# MMC/SD Card support
#
# CONFIG_MMC is not set
#
# LED devices
#CONFIG_NEW_LEDS=y
# CONFIG_LEDS_CLASS is not set
#
# LED drivers
#
#
# LED Triggers
#CONFIG_LEDS_TRIGGERS=y
# CONFIG_LEDS_TRIGGER_TIMER is not set
# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set
#
# InfiniBand support
#
# CONFIG_INFINIBAND is not set
#
# EDAC - error detection and reporting (RAS) (EXPERIMENTAL) #
# CONFIG_EDAC is not set
#
# Real Time Clock
#CONFIG_RTC_LIB=mCONFIG_RTC_CLASS=m
#
# RTC interfaces
#CONFIG_RTC_INTF_SYSFS=mCONFIG_RTC_INTF_PROC=mCONFIG_RTC_INTF_DEV=m
# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
#
# RTC drivers
#
# CONFIG_RTC_DRV_CMOS is not set
# CONFIG_RTC_DRV_X1205 is not set
# CONFIG_RTC_DRV_DS1307 is not set
# CONFIG_RTC_DRV_DS1553 is not set
# CONFIG_RTC_DRV_ISL1208 is not set
# CONFIG_RTC_DRV_DS1672 is not set
# CONFIG_RTC_DRV_DS1742 is not set
# CONFIG_RTC_DRV_PCF8563 is not set
# CONFIG_RTC_DRV_RS5C372 is not set
# CONFIG_RTC_DRV_M48T86 is not set
# CONFIG_RTC_DRV_TEST is not set
# CONFIG_RTC_DRV_V3020 is not set
#
# DMA Engine support
#
# CONFIG_DMA_ENGINE is not set
#
# DMA Clients
#
#
# DMA Devices
#
#
# Auxiliary Display support
#
# CONFIG_KS0108 is not set
#
# Virtualization
#CONFIG_KVM=mCONFIG_KVM_INTEL=m
# CONFIG_KVM_AMD is not set
#
# Firmware Drivers
#CONFIG_EDD=m
# CONFIG_DELL_RBU is not set
# CONFIG_DCDBAS is not set
#
# File systems
#CONFIG_EXT2_FS=mCONFIG_EXT2_FS_XATTR=yCONFIG_EXT2_FS_POSIX_ACL=yCONFIG_EXT2_FS_SECURITY=y
# CONFIG_EXT2_FS_XIP is not setCONFIG_EXT3_FS=mCONFIG_EXT3_FS_XATTR=yCONFIG_EXT3_FS_POSIX_ACL=yCONFIG_EXT3_FS_SECURITY=y
# CONFIG_EXT4DEV_FS is not setCONFIG_JBD=m
# CONFIG_JBD_DEBUG is not setCONFIG_FS_MBCACHE=mCONFIG_REISERFS_FS=m
# CONFIG_REISERFS_CHECK is not set
# CONFIG_REISERFS_PROC_INFO is not setCONFIG_REISERFS_FS_XATTR=yCONFIG_REISERFS_FS_POSIX_ACL=yCONFIG_REISERFS_FS_SECURITY=y
# CONFIG_JFS_FS is not setCONFIG_FS_POSIX_ACL=yCONFIG_XFS_FS=mCONFIG_XFS_QUOTA=yCONFIG_XFS_SECURITY=yCONFIG_XFS_POSIX_ACL=yCONFIG_XFS_RT=y
# CONFIG_GFS2_FS is not set
# CONFIG_OCFS2_FS is not set
# CONFIG_MINIX_FS is not set
# CONFIG_ROMFS_FS is not setCONFIG_INOTIFY=yCONFIG_INOTIFY_USER=yCONFIG_QUOTA=y
# CONFIG_QFMT_V1 is not setCONFIG_QFMT_V2=mCONFIG_QUOTACTL=yCONFIG_DNOTIFY=y
# CONFIG_AUTOFS_FS is not setCONFIG_AUTOFS4_FS=mCONFIG_FUSE_FS=m
#
# CD-ROM/DVD Filesystems
#CONFIG_ISO9660_FS=mCONFIG_JOLIET=yCONFIG_ZISOFS=yCONFIG_UDF_FS=mCONFIG_UDF_NLS=y
#
# DOS/FAT/NT Filesystems
#CONFIG_FAT_FS=m
# CONFIG_MSDOS_FS is not setCONFIG_VFAT_FS=mCONFIG_FAT_DEFAULT_CODEPAGE=437CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"CONFIG_NTFS_FS=m
# CONFIG_NTFS_DEBUG is not setCONFIG_NTFS_RW=y
#
# Pseudo filesystems
#CONFIG_PROC_FS=yCONFIG_PROC_KCORE=yCONFIG_PROC_VMCORE=yCONFIG_PROC_SYSCTL=yCONFIG_SYSFS=yCONFIG_TMPFS=y
# CONFIG_TMPFS_POSIX_ACL is not set
# CONFIG_HUGETLBFS is not set
# CONFIG_HUGETLB_PAGE is not setCONFIG_RAMFS=yCONFIG_CONFIGFS_FS=m
#
# Miscellaneous filesystems
#
# CONFIG_ADFS_FS is not set
# CONFIG_AFFS_FS is not set
# CONFIG_ECRYPT_FS is not setCONFIG_HFS_FS=m
# CONFIG_HFSPLUS_FS is not set
# CONFIG_BEFS_FS is not set
# CONFIG_BFS_FS is not set
# CONFIG_EFS_FS is not setCONFIG_CRAMFS=y
# CONFIG_VXFS_FS is not set
# CONFIG_HPFS_FS is not set
# CONFIG_QNX4FS_FS is not set
# CONFIG_SYSV_FS is not set
# CONFIG_UFS_FS is not set
#
# Network File Systems
#CONFIG_NFS_FS=mCONFIG_NFS_V3=yCONFIG_NFS_V3_ACL=yCONFIG_NFS_V4=yCONFIG_NFS_DIRECTIO=yCONFIG_NFSD=mCONFIG_NFSD_V2_ACL=yCONFIG_NFSD_V3=yCONFIG_NFSD_V3_ACL=yCONFIG_NFSD_V4=yCONFIG_NFSD_TCP=yCONFIG_LOCKD=mCONFIG_LOCKD_V4=yCONFIG_EXPORTFS=mCONFIG_NFS_ACL_SUPPORT=mCONFIG_NFS_COMMON=yCONFIG_SUNRPC=mCONFIG_SUNRPC_GSS=mCONFIG_RPCSEC_GSS_KRB5=m
# CONFIG_RPCSEC_GSS_SPKM3 is not setCONFIG_SMB_FS=m
# CONFIG_SMB_NLS_DEFAULT is not setCONFIG_CIFS=m
# CONFIG_CIFS_STATS is not set
# CONFIG_CIFS_WEAK_PW_HASH is not setCONFIG_CIFS_XATTR=yCONFIG_CIFS_POSIX=y
# CONFIG_CIFS_DEBUG2 is not setCONFIG_CIFS_EXPERIMENTAL=yCONFIG_CIFS_UPCALL=y
# CONFIG_NCP_FS is not set
# CONFIG_CODA_FS is not set
# CONFIG_AFS_FS is not set
# CONFIG_9P_FS is not set
#
# Partition Types
#CONFIG_PARTITION_ADVANCED=y
# CONFIG_ACORN_PARTITION is not set
# CONFIG_OSF_PARTITION is not set
# CONFIG_AMIGA_PARTITION is not set
# CONFIG_ATARI_PARTITION is not set
# CONFIG_MAC_PARTITION is not setCONFIG_MSDOS_PARTITION=y
# CONFIG_BSD_DISKLABEL is not set
# CONFIG_MINIX_SUBPARTITION is not set
# CONFIG_SOLARIS_X86_PARTITION is not set
# CONFIG_UNIXWARE_DISKLABEL is not setCONFIG_LDM_PARTITION=y
# CONFIG_LDM_DEBUG is not set
# CONFIG_SGI_PARTITION is not set
# CONFIG_ULTRIX_PARTITION is not set
# CONFIG_SUN_PARTITION is not set
# CONFIG_KARMA_PARTITION is not set
# CONFIG_EFI_PARTITION is not set
#
# Native Language Support
#CONFIG_NLS=yCONFIG_NLS_DEFAULT="iso8859-1"CONFIG_NLS_CODEPAGE_437=m
# CONFIG_NLS_CODEPAGE_737 is not set
# CONFIG_NLS_CODEPAGE_775 is not setCONFIG_NLS_CODEPAGE_850=m
# CONFIG_NLS_CODEPAGE_852 is not set
# CONFIG_NLS_CODEPAGE_855 is not set
# CONFIG_NLS_CODEPAGE_857 is not set
# CONFIG_NLS_CODEPAGE_860 is not set
# CONFIG_NLS_CODEPAGE_861 is not set
# CONFIG_NLS_CODEPAGE_862 is not set
# CONFIG_NLS_CODEPAGE_863 is not set
# CONFIG_NLS_CODEPAGE_864 is not set
# CONFIG_NLS_CODEPAGE_865 is not set
# CONFIG_NLS_CODEPAGE_866 is not set
# CONFIG_NLS_CODEPAGE_869 is not set
# CONFIG_NLS_CODEPAGE_936 is not set
# CONFIG_NLS_CODEPAGE_950 is not set
# CONFIG_NLS_CODEPAGE_932 is not set
# CONFIG_NLS_CODEPAGE_949 is not set
# CONFIG_NLS_CODEPAGE_874 is not set
# CONFIG_NLS_ISO8859_8 is not set
# CONFIG_NLS_CODEPAGE_1250 is not set
# CONFIG_NLS_CODEPAGE_1251 is not setCONFIG_NLS_ASCII=mCONFIG_NLS_ISO8859_1=m
# CONFIG_NLS_ISO8859_2 is not set
# CONFIG_NLS_ISO8859_3 is not set
# CONFIG_NLS_ISO8859_4 is not set
# CONFIG_NLS_ISO8859_5 is not set
# CONFIG_NLS_ISO8859_6 is not set
# CONFIG_NLS_ISO8859_7 is not set
# CONFIG_NLS_ISO8859_9 is not set
# CONFIG_NLS_ISO8859_13 is not set
# CONFIG_NLS_ISO8859_14 is not setCONFIG_NLS_ISO8859_15=m
# CONFIG_NLS_KOI8_R is not set
# CONFIG_NLS_KOI8_U is not setCONFIG_NLS_UTF8=m
#
# Distributed Lock Manager
#
# CONFIG_DLM is not set
#
# Instrumentation Support
#
# CONFIG_PROFILING is not set
# CONFIG_KPROBES is not set
#
# Kernel hacking
#CONFIG_TRACE_IRQFLAGS_SUPPORT=y
# CONFIG_PRINTK_TIME is not setCONFIG_ENABLE_MUST_CHECK=yCONFIG_MAGIC_SYSRQ=yCONFIG_UNUSED_SYMBOLS=y
# CONFIG_DEBUG_FS is not set
# CONFIG_HEADERS_CHECK is not set
# CONFIG_DEBUG_KERNEL is not setCONFIG_LOG_BUF_SHIFT=15
# CONFIG_DEBUG_BUGVERBOSE is not set
#
# Security options
#CONFIG_KEYS=y
# CONFIG_KEYS_DEBUG_PROC_KEYS is not set CONFIG_SECURITY=yCONFIG_SECURITY_NETWORK=y CONFIG_SECURITY_NETWORK_XFRM=y CONFIG_SECURITY_CAPABILITIES=y
# CONFIG_SECURITY_ROOTPLUG is not set CONFIG_SECURITY_SELINUX=y CONFIG_SECURITY_SELINUX_BOOTPARAM=y CONFIG_SECURITY_SELINUX_BOOTPARAM_VALUE=0 CONFIG_SECURITY_SELINUX_DISABLE=y CONFIG_SECURITY_SELINUX_DEVELOP=y CONFIG_SECURITY_SELINUX_AVC_STATS=y CONFIG_SECURITY_SELINUX_CHECKREQPROT_VALUE=1 CONFIG_SECURITY_SELINUX_ENABLE_SECMARK_DEFAULT=y # CONFIG_SECURITY_SELINUX_POLICYDB_VERSION_MAX is not set
#
# Cryptographic options
#CONFIG_CRYPTO=yCONFIG_CRYPTO_ALGAPI=yCONFIG_CRYPTO_BLKCIPHER=mCONFIG_CRYPTO_HASH=mCONFIG_CRYPTO_MANAGER=yCONFIG_CRYPTO_HMAC=mCONFIG_CRYPTO_XCBC=mCONFIG_CRYPTO_NULL=mCONFIG_CRYPTO_MD4=mCONFIG_CRYPTO_MD5=mCONFIG_CRYPTO_SHA1=mCONFIG_CRYPTO_SHA256=mCONFIG_CRYPTO_SHA512=mCONFIG_CRYPTO_WP512=mCONFIG_CRYPTO_TGR192=mCONFIG_CRYPTO_GF128MUL=mCONFIG_CRYPTO_ECB=mCONFIG_CRYPTO_CBC=mCONFIG_CRYPTO_PCBC=mCONFIG_CRYPTO_LRW=mCONFIG_CRYPTO_DES=mCONFIG_CRYPTO_FCRYPT=mCONFIG_CRYPTO_BLOWFISH=mCONFIG_CRYPTO_TWOFISH=mCONFIG_CRYPTO_TWOFISH_COMMON=mCONFIG_CRYPTO_TWOFISH_X86_64=mCONFIG_CRYPTO_SERPENT=mCONFIG_CRYPTO_AES=mCONFIG_CRYPTO_AES_X86_64=mCONFIG_CRYPTO_CAST5=mCONFIG_CRYPTO_CAST6=mCONFIG_CRYPTO_TEA=mCONFIG_CRYPTO_ARC4=mCONFIG_CRYPTO_KHAZAD=mCONFIG_CRYPTO_ANUBIS=mCONFIG_CRYPTO_DEFLATE=mCONFIG_CRYPTO_MICHAEL_MIC=mCONFIG_CRYPTO_CRC32C=mCONFIG_CRYPTO_CAMELLIA=m
# CONFIG_CRYPTO_TEST is not set
#
# Hardware crypto devices
#
#
# Library routines
#CONFIG_BITREVERSE=yCONFIG_CRC_CCITT=mCONFIG_CRC16=mCONFIG_CRC32=yCONFIG_LIBCRC32C=mCONFIG_ZLIB_INFLATE=yCONFIG_ZLIB_DEFLATE=mCONFIG_TEXTSEARCH=yCONFIG_TEXTSEARCH_KMP=mCONFIG_TEXTSEARCH_BM=mCONFIG_TEXTSEARCH_FSM=mCONFIG_PLIST=yCONFIG_HAS_IOMEM=yCONFIG_HAS_IOPORT=y
Re: [3/5] 2.6.21-rc4: known regressions (v2)
Hi!
Quoted 8 lines
Quoted 4 lines
Subject : ThinkPad R60: suspend to disk broken
References : http://lkml.org/lkml/2007/3/23/74
Submitter : Marcus Better <[email protected]>
Status : submitter tries to bisectI just tried -rc5. Now suspend to disk seems to work. I think the XFS workqueue patch fixed this.
Quoted 6 lines
It can also suspend to RAM, but resume is worse. The first time around it resumed but corrupted the vesafb console (greenish blinking character cells), something that used to work before. But the system responded to input, so I suspended to RAM again. This time the resume failed, it hung after printing "Linux!" in yellow at the top of the screen. (Seems to be some artifact, I have seen it before even with working suspend.)
Yellow Linux! is my debugging trick. It should be there, but it should also disapear quickly.
Try vga=0 ... text console seems to work for you.
Pavel
Signature · 2 lines
(english) http://www.livejournal.com/~pavelmachek (cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html
Re: [3/5] 2.6.21-rc4: known regressions (v2)
Quoted 7 lines · Pavel Machek
Quoted 5 lines
Quoted 2 lines
Subject : ThinkPad R60: suspend to disk broken
References : http://lkml.org/lkml/2007/3/23/74input, so I suspended to RAM again. This time the resume failed, it hung after printing "Linux!" in yellow at the top of the screen.
Yellow Linux! is my debugging trick.
Cute :-)
Here is my bisect log so far, with 98 revisions left. Note that all kernels have the XFS workqueue patch applied.
~$ git bisect log
git-bisect start
# bad: [6fb04ccf5c5e054c4107090bed6e866489f1089f] Linux 2.6.21-rc5
git-bisect bad 6fb04ccf5c5e054c4107090bed6e866489f1089f
# good: [c8f71b01a50597e298dc3214a2f2be7b8d31170c] Linux 2.6.21-rc1
git-bisect good c8f71b01a50597e298dc3214a2f2be7b8d31170c
# good: [ad5f1196792653dadf09c07a5fa917092b469c1c] ecryptfs: check xattr operation support fix git-bisect good ad5f1196792653dadf09c07a5fa917092b469c1c
# good: [271368b69b9e8042063d6c713423e84503bbdaa0] Merge master.kernel.org:/pub/scm/linux/kernel/git/gregkh/driver-2.6 git-bisect good 271368b69b9e8042063d6c713423e84503bbdaa0
# bad: [f5b42c3324494ea3f9bf795e2a7e4d3cbb06c607] KVM: Fix guest sysenter on vmx
git-bisect bad f5b42c3324494ea3f9bf795e2a7e4d3cbb06c607
The bad kernels exhibit the hang on second resume from RAM.
The "good" ones all have the artifact with corrupted display. Moreover, they resume immediately from every suspend to RAM _after_ a suspend-to-disk, but not before it. This is when suspending with "echo mem > /sys/power/state".
Quoted 1 line
Try vga=0 ... text console seems to work for you.
Ok, will try.
Marcus
Re: [3/5] 2.6.21-rc4: known regressions (v2)
In reply to Marcus BetterQuoted 9 lines · Marcus Better
Quoted 4 lines · Adrian Bunk
Subject : ThinkPad R60: suspend to disk broken
References : http://lkml.org/lkml/2007/3/23/74
Submitter : Marcus Better <[email protected]>
Status : submitter tries to bisectI just tried -rc5. Now suspend to disk seems to work. I think the XFS workqueue patch fixed this.
Quoted 7 lines
It can also suspend to RAM, but resume is worse. The first time around it resumed but corrupted the vesafb console (greenish blinking character cells), something that used to work before. But the system responded to input, so I suspended to RAM again. This time the resume failed, it hung after printing "Linux!" in yellow at the top of the screen. (Seems to be some artifact, I have seen it before even with working suspend.)
...
Does setting CONFIG_PCI_MSI=n make any difference?
Quoted 1 line
Marcus
cu
Adrian
Signature · 4 lines
"Is there not promise of rain?" Ling Tan asked suddenly out
of the darkness. There had been need of rain for many days.
"Only a promise," Lao Er said.
Pearl S. Buck - Dragon SeedRe: [3/5] 2.6.21-rc4: known regressions (v2)
Quoted 3 lines · Adrian Bunk
Quoted 1 line
Quoted 1 line
Subject : ThinkPad R60: suspend to disk broken
Does setting
CONFIG_PCI_MSI=nmake any difference?
Yes, it does. The hanging resume problem went away.
(The display corruption and the instant resume were not affected.)
Marcus
Re: [3/5] 2.6.21-rc4: known regressions (v2)
Quoted 6 lines · Marcus Better
Quoted 3 lines · Adrian Bunk
Quoted 1 line
Quoted 1 line
Subject : ThinkPad R60: suspend to disk broken
Does setting
CONFIG_PCI_MSI=nmake any difference?Yes, it does. The hanging resume problem went away.
Thanks for testing.
If you enable it again, does the patch from [1] also fix it?
Quoted 1 line
(The display corruption and the instant resume were not affected.)
Not a surprise - it's currently quite common that people run into several distinct suspend regressions...
Quoted 1 line
Marcus
cu
Adrian
[1] http://lkml.org/lkml/2007/3/24/136 [2]
[2] x86_64 uses arch/i386/pci/common.c
Signature · 4 lines
"Is there not promise of rain?" Ling Tan asked suddenly out
of the darkness. There had been need of rain for many days.
"Only a promise," Lao Er said.
Pearl S. Buck - Dragon SeedRe: [3/5] 2.6.21-rc4: known regressions (v2)
Quoted 7 lines · Adrian Bunk
Quoted 3 lines
Quoted 1 line
Does setting
CONFIG_PCI_MSI=nmake any difference?Yes, it does. The hanging resume problem went away.
Thanks for testing.
If you enable it again, does the patch from [1] also fix it?
Yes, it appears to fix it.
Marcus
PATCH 4/5 2.6.21-rc4: known regressions (v2)
In reply to Linus TorvaldsThis email lists some known regressions in Linus' tree compared to 2.6.20.
If you find your name in the Cc header, you are either submitter of one of the bugs, maintainer of an affectected subsystem or driver, a patch of you caused a breakage or I'm considering you in any other way possibly involved with one or more of these issues.
Due to the huge amount of recipients, please trim the Cc when answering.
Subject : system doesn't come out of suspend (CONFIG_NO_HZ)
References : http://lkml.org/lkml/2007/2/22/391
Submitter : Michael S. Tsirkin <[email protected]>
Soeren Sonnenburg <[email protected]>
Ingo Molnar <[email protected]>
Tejun Heo <[email protected]>
Rafael J. Wysocki <[email protected]>
Status : problem is being debugged
Subject : first disk access after resume takes several minutes
('date' does not advance after resume from RAM, CONFIG_NO_HZ=n)
References : http://lkml.org/lkml/2007/3/8/117
Submitter : Michael S. Tsirkin <[email protected]>
Ingo Molnar <[email protected]>
Status : problem is being debugged
Subject : Dynticks and High resolution Timer hanging the system
workaround: clocksource=acpi_pm
References : http://lkml.org/lkml/2007/3/7/504
Submitter : Stephane Casset <[email protected]>
Status : unknown
Subject : soft lockup detected on CPU#0
References : http://lkml.org/lkml/2007/3/3/152
Submitter : Michal Piotrowski <[email protected]>
Ingo Molnar <[email protected]>
Status : unknown
Subject : gettimeofday increments too slowly
References : http://bugzilla.kernel.org/show_bug.cgi?id=8027
Submitter : David L <[email protected]>
commit 92c7e00254b2d0efc1e36ac3e45474ce1871b6b2
Status : problem is being debugged
Subject : boot hangs during IDE detection (clocksource)
References : http://lkml.org/lkml/2007/3/19/465
Submitter : Bob Tracy <[email protected]>
commit 6bb74df481223731af6c7e0ff3adb31f6442cfcd
Status : problem is being debugged
Subject : dynticks makes ksoftirqd1 use unreasonable amount of cpu time
References : http://bugzilla.kernel.org/show_bug.cgi?id=8100
Submitter : Emil Karlson <[email protected]>
Status : problem is being debugged
Re: [4/5] 2.6.21-rc4: known regressions (v2)
Quoted 7 lines · Adrian Bunk
Subject : gettimeofday increments too slowly
References : http://bugzilla.kernel.org/show_bug.cgi?id=8027
Submitter : David L <[email protected]>Caused-By Thomas Gleixner <[email protected]>commit 92c7e00254b2d0efc1e36ac3e45474ce1871b6b2Handled-By Thomas Gleixner <[email protected]>Status : problem is being debugged
Patch available: http://lkml.org/lkml/2007/3/22/301
commit 6b3964cde70cfe6db79d35b42137431ef7d2f7e4
tglx
Re: [4/5] 2.6.21-rc4: known regressions (v2)
Quoted 9 lines · Thomas Gleixner
Quoted 7 lines · Adrian Bunk
Subject : gettimeofday increments too slowly
References : http://bugzilla.kernel.org/show_bug.cgi?id=8027
Submitter : David L <[email protected]>Caused-By Thomas Gleixner <[email protected]>commit 92c7e00254b2d0efc1e36ac3e45474ce1871b6b2Handled-By Thomas Gleixner <[email protected]>Status : problem is being debugged
Quoted 3 lines
Patch available: http://lkml.org/lkml/2007/3/22/301
commit
6b3964cde70cfe6db79d35b42137431ef7d2f7e4
Oops. That fixed only the one half of the problem. The timeofday one persists.
John, any idea ?
tglx
Re: [4/5] 2.6.21-rc4: known regressions (v2)
In reply to Thomas GleixnerQuoted 9 lines · Thomas Gleixner
Quoted 7 lines · Adrian Bunk
Subject : gettimeofday increments too slowly
References : http://bugzilla.kernel.org/show_bug.cgi?id=8027
Submitter : David L <[email protected]>Caused-By Thomas Gleixner <[email protected]>commit 92c7e00254b2d0efc1e36ac3e45474ce1871b6b2Handled-By Thomas Gleixner <[email protected]>Status : problem is being debugged
Quoted 3 lines
Patch available: http://lkml.org/lkml/2007/3/22/301
commit
6b3964cde70cfe6db79d35b42137431ef7d2f7e4
As far as I understood it, this patch only fixed the bogomips issue caused by commit e9e2cdb412412326c4827fc78ba27f410d837e6e, but not the gettimeofday issue caused by commit 92c7e00254b2d0efc1e36ac3e45474ce1871b6b2 ?
Quoted 1 line
tglx
cu
Adrian
Signature · 4 lines
"Is there not promise of rain?" Ling Tan asked suddenly out
of the darkness. There had been need of rain for many days.
"Only a promise," Lao Er said.
Pearl S. Buck - Dragon SeedRe: [4/5] 2.6.21-rc4: known regressions (v2)
In reply to Thomas GleixnerQuoted 9 lines · Thomas Gleixner
Quoted 7 lines · Adrian Bunk
Subject : gettimeofday increments too slowly
References : http://bugzilla.kernel.org/show_bug.cgi?id=8027
Submitter : David L <[email protected]>Caused-By Thomas Gleixner <[email protected]>commit 92c7e00254b2d0efc1e36ac3e45474ce1871b6b2Handled-By Thomas Gleixner <[email protected]>Status : problem is being debugged
Quoted 4 lines
Patch available: http://lkml.org/lkml/2007/3/22/301
commit
6b3964cde70cfe6db79d35b42137431ef7d2f7e4
For the other issue raised there, clock running too slow, I now realize there is a similar report:
Re: [4/5] 2.6.21-rc4: known regressions (v2)
Quoted 12 lines · Chuck Ebbert
Quoted 11 lines · Thomas Gleixner
Quoted 7 lines · Adrian Bunk
Subject : gettimeofday increments too slowly
References : http://bugzilla.kernel.org/show_bug.cgi?id=8027
Submitter : David L <[email protected]>Caused-By Thomas Gleixner <[email protected]>commit 92c7e00254b2d0efc1e36ac3e45474ce1871b6b2Handled-By Thomas Gleixner <[email protected]>Status : problem is being debugged
Patch available: http://lkml.org/lkml/2007/3/22/301
Quoted 7 lines
Quoted 2 lines
commit
6b3964cde70cfe6db79d35b42137431ef7d2f7e4For the other issue raised there, clock running too slow, I now realize there is a similar report:
That's a different one, AFAICT. Davids problem is probably caused by me breaking the TSC watchdog.
/me orders paperbags prophylactically and goes back to look at the code
tglx
Re: [4/5] 2.6.21-rc4: known regressions (v2)
Quoted 19 lines · Thomas Gleixner
Quoted 18 lines · Chuck Ebbert
Quoted 9 lines · Thomas Gleixner
Quoted 7 lines · Adrian Bunk
Subject : gettimeofday increments too slowly
References : http://bugzilla.kernel.org/show_bug.cgi?id=8027
Submitter : David L <[email protected]>Caused-By Thomas Gleixner <[email protected]>commit 92c7e00254b2d0efc1e36ac3e45474ce1871b6b2Handled-By Thomas Gleixner <[email protected]>Status : problem is being debugged
Quoted 4 lines
Patch available: http://lkml.org/lkml/2007/3/22/301
commit
6b3964cde70cfe6db79d35b42137431ef7d2f7e4For the other issue raised there, clock running too slow, I now realize there is a similar report:
Quoted 6 lines
That's a different one, AFAICT. Davids problem is probably caused by me breaking the TSC watchdog.
/me orders paperbags prophylactically and goes back to look at the code
David,
can you please test the patch below ?
tglx
--------------------->
Subject: [PATCH] clocksource: Fix thinko in watchdog selection
The watchdog implementation excludes low res / non continuous clocksources from being selected as a watchdog reference unintentionally.
Allow using jiffies/PIT as a watchdog reference as long as no better clocksource is available. This is necessary to detect TSC breakage on systems, which have no pmtimer/hpet.
The main goal of the initial patch (preventing to switch to highres/nohz when no reliable fallback clocksource is available) is still guaranteed by the checks in clocksource_watchdog().
kernel/time/clocksource.c +2 -1
@@ -151,7 +151,8 @@ static void clocksource_check_watchdog(struct clocksource *cs) watchdog_timer.expires = jiffies +WATCHDOG_INTERVAL ;add_timer (&watchdog_timer); } - }else if (cs->flags &CLOCK_SOURCE_IS_CONTINUOUS ) { + }else { +if (cs->flags &CLOCK_SOURCE_IS_CONTINUOUS ) cs->flags |=CLOCK_SOURCE_VALID_FOR_HRES ;if (!watchdog || cs->rating > watchdog->rating) {
PATCH 1/1 clocksource: Fix thinko in watchdog selection
The watchdog implementation excludes low res / non continuous clocksources from being selected as a watchdog reference unintentionally.
Allow using jiffies/PIT as a watchdog reference as long as no better clocksource is available. This is necessary to detect TSC breakage on systems, which have no pmtimer/hpet.
The main goal of the initial patch (preventing to switch to highres/nohz when no reliable fallback clocksource is available) is still guaranteed by the checks in clocksource_watchdog().
kernel/time/clocksource.c +2 -1
@@ -151,7 +151,8 @@ static void clocksource_check_watchdog(struct clocksource *cs) watchdog_timer.expires = jiffies +WATCHDOG_INTERVAL ;add_timer (&watchdog_timer); } - }else if (cs->flags &CLOCK_SOURCE_IS_CONTINUOUS ) { + }else { +if (cs->flags &CLOCK_SOURCE_IS_CONTINUOUS ) cs->flags |=CLOCK_SOURCE_VALID_FOR_HRES ;if (!watchdog || cs->rating > watchdog->rating) {
Re: [4/5] 2.6.21-rc4: known regressions (v2)
In reply to Chuck EbbertQuoted 12 lines · Chuck Ebbert
Quoted 11 lines · Thomas Gleixner
Quoted 7 lines · Adrian Bunk
Subject : gettimeofday increments too slowly
References : http://bugzilla.kernel.org/show_bug.cgi?id=8027
Submitter : David L <[email protected]>Caused-By Thomas Gleixner <[email protected]>commit 92c7e00254b2d0efc1e36ac3e45474ce1871b6b2Handled-By Thomas Gleixner <[email protected]>Status : problem is being debugged
Patch available: http://lkml.org/lkml/2007/3/22/301
Quoted 7 lines
Quoted 2 lines
commit
6b3964cde70cfe6db79d35b42137431ef7d2f7e4For the other issue raised there, clock running too slow, I now realize there is a similar report:
It shouldn't be the same issue:
2.6.20-1.2925.fc6 is based in 2.6.20.3-rc1 while this issue is a 2.6.21-rc regression.
Or do the -rc kernels include parts of the -rt patchsets?
cu
Adrian
Signature · 4 lines
"Is there not promise of rain?" Ling Tan asked suddenly out
of the darkness. There had been need of rain for many days.
"Only a promise," Lao Er said.
Pearl S. Buck - Dragon SeedRe: [4/5] 2.6.21-rc4: known regressions (v2)
Quoted 11 lines · Adrian Bunk
Quoted 5 lines
Quoted 1 line
For the other issue raised there, clock running too slow, I now realize there is a similar report:
It shouldn't be the same issue:
2.6.20-1.2925.fc6 is based in 2.6.20.3-rc1 while this issue is a 2.6.21-rc regression.
Or do the -rc kernels include parts of the -rt patchsets?
Sometimes problems leak from the next kernel version into -stable via the stable kernel patches.
Other times the bug may have been there all along but nobody had found it yet...
Re: [4/5] 2.6.21-rc4: known regressions (v2)
In reply to Adrian BunkQuoted 5 lines · Adrian Bunk
Subject : dynticks makes ksoftirqd1 use unreasonable amount of cpu time
References : http://bugzilla.kernel.org/show_bug.cgi?id=8100
Submitter : Emil Karlson <[email protected]>Handled-By Thomas Gleixner <[email protected]>Status : problem is being debugged
The problem is not reproducible on any of my machines.
Emil, is it still there with Linus latest ?
tglx
Re: [4/5] 2.6.21-rc4: known regressions (v2)
Emil,
Quoted 9 lines · Thomas Gleixner
Quoted 5 lines · Adrian Bunk
Subject : dynticks makes ksoftirqd1 use unreasonable amount of cpu time
References : http://bugzilla.kernel.org/show_bug.cgi?id=8100
Submitter : Emil Karlson <[email protected]>Handled-By Thomas Gleixner <[email protected]>Status : problem is being debugged
The problem is not reproducible on any of my machines.
I've uploaded a patch against 2.6.21-rc4 to
http://tglx.de/private/tglx/2.6.21-rc4-trace/2.6.21-rc4-trace.patch.bz2
It contains all changes in Linus tree since -rc4 plus the two pending fixes (http://tglx.de/private/tglx/2.6.21-rc4-pending/) along with a backport of the latency tracer from the realtime preemption patch.
Can you please apply the patch on top of -rc4 and build it with the configuration, which exposes this strange behaviour. Please enable also CONFIG_LATENCY_TRACE in the Kernel hacking menu.
When the problem is visible, then run trace-it
(http://tglx.de/private/tglx/2.6.21-rc4-trace/trace-it.c) as root:
# trace-it >trace.txt
This captures roughly one second of kernel code pathes. Please stick trace.txt into Bugzilla.
Thanks,
tglx
PATCH 1/1 dynticks: fix hrtimer rounding error in next_timer_interrupt
The rework of next_timer_interrupt() fixed the timer wheel bugs, but invented a rounding error versus the next hrtimer event. This is caused by the conversion of the hrtimer internal representation to relative jiffies.
This causes bug #8100:
http://bugzilla.kernel.org/show_bug.cgi?id=8100
next_timer_interrupt() returns "now" in such a case and causes the code in tick_nohz_stop_sched_tick() to trigger the timer softirq, which is bogus as no timer is due for expiry. This results in an endless context switching between idle and ksoftirqd until a timer is due for expiry.
Modify the hrtimer evaluation so that, it returns now + 1, when the conversion results in a delta < 1 jiffie.
It's confirmed to resolve bug #8100
kernel/timer.c +16 -3
@@ -695,15 +695,28 @@ static unsigned long cmp_next_hrtimer_event(unsigned long now, {ktime_t hr_delta =hrtimer_get_next_event ();struct timespec tsdelta; +unsigned long delta;if (hr_delta.tv64 ==KTIME_MAX )return expires; -if (hr_delta.tv64 <=TICK_NSEC ) -return now; +/* +* Expired timer available, let it expire in the next tick +*/ +if (hr_delta.tv64 <=0 ) +return now +1 ; tsdelta =ktime_to_timespec (hr_delta); - now +=timespec_to_jiffies (&tsdelta); + delta =timespec_to_jiffies (&tsdelta); +/* +* Take rounding errors in to account and make sure, that it +* expires in the next tick. Otherwise we go into an endless +* ping pong due to tick_nohz_stop_sched_tick() retriggering +* the timer softirq +*/ +if (delta <1 ) + delta =1 ; + now += delta;if (time_before (now, expires))return now;return expires;
Re: [4/5] 2.6.21-rc4: known regressions (v2)
In reply to Adrian BunkQuoted 21 lines · Adrian Bunk
This email lists some known regressions in Linus' tree compared to 2.6.20.
If you find your name in the Cc header, you are either submitter of one of the bugs, maintainer of an affectected subsystem or driver, a patch of you caused a breakage or I'm considering you in any other way possibly involved with one or more of these issues.
Due to the huge amount of recipients, please trim the Cc when answering.
Subject : system doesn't come out of suspend (
CONFIG_NO_HZ)
References : http://lkml.org/lkml/2007/2/22/391
Submitter : Michael S. Tsirkin <[email protected]>
Soeren Sonnenburg <[email protected]>Handled-By Thomas Gleixner <[email protected]>Ingo Molnar <[email protected]>
Tejun Heo <[email protected]>
Rafael J. Wysocki <[email protected]>
Status : problem is being debugged
Quoted 7 lines
Subject : first disk access after resume takes several minutes
('date' does not advance after resume from RAM,CONFIG_NO_HZ=n)
References : http://lkml.org/lkml/2007/3/8/117
Submitter : Michael S. Tsirkin <[email protected]>Handled-By Thomas Gleixner <[email protected]>Ingo Molnar <[email protected]>
Status : problem is being debugged
I lost track of Michaels various nested problems.
Michael can you please give a summary on _all_ entries in the regressions list against Linus latest ?
Thanks,
tglx
A message that is not in the archive (sent off-list or not yet received): [email protected]
Re: [4/5] 2.6.21-rc4: known regressions (v2)
Quoted 5 lines · Michael S. Tsirkin
Quoted 4 lines
I lost track of Michaels various nested problems.
Michael can you please give a summary on _all_ entries in the regressions list against Linus latest ?
Quoted 8 lines
I tested 2 different configurations on my T60:
- WithCONFIG_NO_HZenabled.
I tested this on -rc1, and have not retested withCONFIG_NO_HZsince. Observed behaviour: the system would not come out of suspend to RAM. After I press Fn/F4 the crescent LED starts blinking so it seems Linux started doing something.
This is a problem but not a regression as such, sinceCONFIG_NO_HZis new in 2.6.21.
It needs to be fixed before 2.6.21 final nevertheless.
Quoted 10 lines
- Without
CONFIG_NO_HZ
I last tested this withcd05a1f818073a623455a58e756c5b419fc98db9. After systems comes out of suspend to ram, I observed the following behaviour (I used s2ram from console):
1. The first disk access takes much longer than with 2.6.20
2. System clock does not advance (date always reports the same time)
3. After an attempt to switch to X, X starts drawing some windows and then hangsAll 3 issues are new and did not occur under 2.6.20, so this is a regression. Attached is a full dmesg from boot to resume.
There is not much interesting to see in the log.
Can you please test the following:
Add "clocksource=acpi_pm" to the kernel commandline.
If this does not change anything, then disable CONFIG_HPET and retry.
One thing in the log is indeed scary:
[ 2.959150] Calibrating delay using timer specific routine.. 20089.12
BogoMIPS (lpj=100445639)
This is after the reboot, but it is not related to your problem. This is a different problem, which needs urgent attention.
Adrian, can you open a seperate entry for this please ? It is not a new thing, this can be observed with older kernels as well, but it needs to be addressed. It probably needs a similar solution as I did for the local apic timer calibration.
tglx