2003-08-30 21:27:33

by Patrick Mochel

[permalink] [raw]
Subject: Power Management Update


I'm pleased to announce the release of the first patchset of power
management changes for 2.6.0. The purpose of this release is to give
people a chance to review and test the PM code before it's sent on to
Linus.

These patches include a number of cleanups and fixes to the PM core code,
the driver core PM code, and swsusp. I have verified that all suspend
states (standby, suspend-to-ram, and suspend-to-disk) work on a number of
personal systems using ACPI as the low-level power interface. However,
this is with limited functionality (from a VGA console with minimal
processes running).

These patches should restore suspend functionality for those that were
able to successfully do it before -test3 and -test4. My apologies for the
inconvenience my previous changes caused. These patches will probably not
allow any more people to suspend/resume than before.

The net benefit of these, and the already committed ones, are a cleaner
power management subsystem and the development of the proper framework for
successfully suspending and resuming the entire system. There are still
several rough edges, though we seem to be making headway on those
relatively rapidly, and are my sole focus at the moment.

My main concerns right now are:

- Platform devices, and more generally, devices that may belong to more
than one class. It's mainly a driver model problem, though it has PM
implications that appear to be holding a few people up.

- Drivers
Drivers have always been the main impedence to having a working PM core,
though it's been difficult to make a lot of progress. I have a number of
devices that I will verify work properly, and be in contact with the
maintainers if necessary. (Though, I seem to be having more problems
with IRQ routing at the moment.)

- Getting it work on more systems.
Hopefully we will not run into any serious issues, though the PM code
has traditionally been finicky. I have a wide array of test machines and
willing testers, so this should move quickly.

- APM
I unfortunately have not had a chance to look into the reported APM
problems. But, I'm happy to say that I finally dug out an old laptop
that has APM on it. I should make traction soon.


I encourage willing people to download the patch, test, and report any
problems back to me and/or the list. I cannot guarantee definite or timely
results for systems where PM simply doesn't work. However, the more
systems we characterize, the easier this will become in the future. Please
be patient.

If you're using BitKeeper, you can pull the tree from:

bk://kernel.bkbits.net:/home/mochel/linux-2.5-power

Or, a GNU patch is available at:

http://developer.osdl.org/~mochel/patches/test4-pm1/test4-pm1.diff.bz2

There are split patches for each BK revision in that directory. The
changelogs are appended.


Pat


This will update the following files:

arch/i386/kernel/suspend.c | 141 ------------
arch/i386/kernel/suspend_asm.S | 94 --------
arch/i386/Makefile | 1
arch/i386/kernel/Makefile | 2
arch/i386/power/Makefile | 2
arch/i386/power/cpu.c | 141 ++++++++++++
arch/i386/power/swsusp.S | 104 ++++++++-
drivers/acpi/sleep/main.c | 53 ++--
drivers/acpi/sleep/proc.c | 73 ++++++
drivers/acpi/sleep/sleep.h | 3
drivers/base/core.c | 33 +--
drivers/base/power/main.c | 13 -
drivers/base/power/power.h | 3
drivers/base/power/resume.c | 21 +
drivers/base/power/suspend.c | 10
include/asm-i386/suspend.h | 7
include/linux/suspend.h | 1
kernel/power/Makefile | 2
kernel/power/console.c | 2
kernel/power/disk.c | 337 ++++++++++++++++++++++++++++++
kernel/power/main.c | 450 ++++++++---------------------------------
kernel/power/power.h | 39 +--
kernel/power/swsusp.c | 357 +++++++++++++++++++-------------
kernel/sys.c | 2
24 files changed, 1053 insertions(+), 838 deletions(-)

through these ChangeSets:

<[email protected]> (03/08/30 1.1301)
[acpi] Replace /proc/acpi/sleep

- Bad to remove proc file now, even though it's nearly useless. Reinstated
in the name of compatibility.

- Restored original semantics - if software_suspend() is enabled, then just
call that (and never go into low-power state). Otherwise, call acpi_suspend().

- acpi_suspend() is simply a wrapper for pm_suspend(), passing down the right
argument. This is so we don't have to do everything manually anymore.

- Fixed long-standing bug by checking for "4b" in string written in to
determine if we want to enter S4bios.

<[email protected]> (03/08/30 1.1300)
[swsusp] Restore software_suspend() call.

- Allows 'backdoor' interface to swsusp, as requested by Pavel.

- Simply a wrapper to pm_suspend(), though guaranteeing that swsusp is used,
and system is shutdown (and put into low-power state).

- Call in sys_reboot() changed back to call to software_suspend().

<[email protected]> (03/08/30 1.1299)
[swsusp] Use BIO interface when reading from swap.

- bios are the preferred method for doing this type of stuff in 2.6. The
__bread() uses bio's in the end anyway.

- bios make it really easy to implement write functionality, so we are able
to reset the swap signature immediately after checking it during resume.
So, if something happens while resuming, we will still have valid swap to
use.

- Thanks to Jens for some help in getting it working several months ago.

<[email protected]> (03/08/29 1.1298)
[swsusp] Minor cleanups in read_suspend_image()

- Make resume_bdev global to file, so we don't have to pass it around (we
always use the same one, so it shouldn't make a difference).

- Allocate cur in read_suspend_image(), since it's the only function that
uses it.

- Check all errors and make sure we free cur if any happen.

- Make sure to return errors from the functions called, not our own.

- Free the pagedir if we hit an error after we allocate it.

<[email protected]> (03/08/27 1.1297)
[acpi] Move register save closer to call to enter sleep state.

- By moving acpi_{save,restore}_state_mem() into acpi_pm_enter(), implying
after interrupts have been disabled and nothing else is running on the
system, S3 is able to resume properly.

<[email protected]> (03/08/27 1.1296)
[power] Make sure devices get added to the PM lists before bus_add_device().

- Prevents ordering issues when drivers add more devices ->probe().

<[email protected]> (03/08/26 1.1295)
[power] Separate suspend-to-disk from other suspend sequences.

- Put in kernel/power/disk.c
- Make compilation depend on CONFIG_SOFTWARE_SUSPEND (should probably be
renamed to CONFIG_PM_STD or some such).

<[email protected]> (03/08/25 1.1294)
[power] Fix handling of pm_users.

- Actually decrement on device_pm_release()
- Call from device_pm_remove().

<[email protected]> (03/08/25 1.1292)
[power] Fix device suspend handling

- Handle -EAGAIN in device_suspend() properly: keep going, with error reset
to 0.

- Call dpm_resume() if we got a real error, instead of device_resume(), which
would deadlock.

<[email protected]> (03/08/22 1.1276.19.8)
[power] swsusp Cleanups

- do_magic()
- Rename to swsusp_arch_suspend().
- Move declaration to swsusp.c

- arch_prepare_suspend()
- Return an int
- Fix x86 version to return -EFAULT if cpu does not have pse, instead of
calling panic().
- Call from swsusp_save().

- do_magic_suspend_1()
- Move body to pm_suspend_disk()
- Remove.

- do_magic_suspend_2()
- Rename to swsusp_suspend()
- Move IRQ fiddling to suspend_save_image(), since that's the only call
that needs it.
- Return an int.

- do_magic_resume_1()
- Move body to pm_resume().
- Remove

- do_magic_resume_2()
- Rename to swsusp_resume().
- Return an int.

- swsusp general
- Remove unnecessary includes.
- Remove suspend_pagedir_lock, since it was only used to disable IRQs.
- Change swsusp_{suspend,resume} return an int, so pm_suspend_disk() knows
if anything failed.



<[email protected]> (03/08/22 1.1276.19.7)
[power] Move i386-specific swsusp code to arch/i386/power/

<[email protected]> (03/08/22 1.1276.19.6)
[power] Fix up sysfs state handling.

<[email protected]> (03/08/22 1.1276.19.5)
[power] Make sure console level is high when suspending.

<[email protected]> (03/08/22 1.1276.20.1)
[power] Fix sysfs state reporting.




2003-08-31 12:32:21

by Felipe Alfaro Solana

[permalink] [raw]
Subject: Re: Power Management Update

On Sat, 2003-08-30 at 23:25, Patrick Mochel wrote:
> I'm pleased to announce the release of the first patchset of power
> management changes for 2.6.0. The purpose of this release is to give
> people a chance to review and test the PM code before it's sent on to
> Linus.

Hi!

Running with 2.6.0-test4-mm4:

# echo 4 > /proc/acpi/sleep

Stopping tasks: ======|
Freeing memory: ..|
hdc: start_power_step(step: 0)
Unable to handle kernel NULL pointer dereference at virtual address
00000000
printing eip:
00000000
*pde = 00000000
Oops: 0000 [#1]
PREEMPT
CPU: 0
EIP: 0060:[<00000000>] Not taintled VLI
EFLAGS: 00010282
EIP is at 0x0
eax: c032f180 ebx: c039588c ecx: c02f7b50 edx: 00000282
esi: 00000000 edi: cffa1e2c ebp: c13ce780 esp: cffa1d40
ds: 007b es: 007b ss: 0068
Process bash (pid: 1, threadinfo=cffa0000 task=c12bb940)
Stack: c01fbcd1 c039588c cffa1e2c 00000000 00000088 0000001e 0000000f
cffa1e2c
c039588c c03957e0 c01fc063 c039588c cffa1e2c 00000001 cffa0000
c13cd600
cffa0000 cffa1e2c 00000202 00000001 c01fc8a3 c13ce780 ffffffff
00000001
Call Trace:
[<c01fbcd1>] start_request+0x131/0x290
[<c01fc063>] ide_do_request+0x203/0x3b0
[<c01fc8a3>] ide_do_drive_cmd+0xd3/0x130
[<c0205592>] generic_ide_suspend+0x92/0xc0
[<c01f17e8>] suspend_device+0x98/0x100
[<c01f18a8>] device_suspend+0x58/0x80
[<c0138739>] prepare+0x39/0xc0
[<c01387cc>] pm_suspend_disk+0xc/0xc0
[<c0137cc5>] enter_state+0xa5/0xb0
[<c013974b>] software_suspend+0x3b/0x40
[<c01c898a>] acpi_system_write_sleep+0xb3/0xcd
[<c01c88d7>] acpi_system_write_sleep+0x0/0xcd
[<c01564b8>] vfs_write+0xb8/0x130
[<c01565e2>] sys_write+0x42/0x70
[<c02ba00e>] sysenter_past_esp+0x43/0x65

Code: Bad EIP value.
<0>Kernel panic: Attempted to kill init!

Thanks!


Attachments:
config-2.6.0-test4-mm4 (20.35 kB)

2003-08-31 13:04:57

by Mathieu LESNIAK

[permalink] [raw]
Subject: Re: Power Management Update

#
# Automatically generated make config: don't edit
#
CONFIG_X86=y
CONFIG_MMU=y
CONFIG_UID16=y
CONFIG_GENERIC_ISA_DMA=y

#
# Code maturity level options
#
CONFIG_EXPERIMENTAL=y
# CONFIG_BROKEN is not set

#
# General setup
#
CONFIG_SWAP=y
CONFIG_SYSVIPC=y
CONFIG_BSD_PROCESS_ACCT=y
CONFIG_SYSCTL=y
CONFIG_LOG_BUF_SHIFT=14
CONFIG_IKCONFIG=y
CONFIG_IKCONFIG_PROC=y
# CONFIG_EMBEDDED is not set
CONFIG_KALLSYMS=y
CONFIG_FUTEX=y
CONFIG_EPOLL=y
CONFIG_IOSCHED_NOOP=y
CONFIG_IOSCHED_AS=y
CONFIG_IOSCHED_DEADLINE=y
CONFIG_IOSCHED_CFQ=y

#
# Loadable module support
#
CONFIG_MODULES=y
CONFIG_MODULE_UNLOAD=y
CONFIG_MODULE_FORCE_UNLOAD=y
CONFIG_OBSOLETE_MODPARM=y
# CONFIG_MODVERSIONS is not set
CONFIG_KMOD=y

#
# Processor type and features
#
CONFIG_X86_PC=y
# CONFIG_X86_VOYAGER is not set
# CONFIG_X86_NUMAQ is not set
# CONFIG_X86_SUMMIT is not set
# CONFIG_X86_BIGSMP is not set
# CONFIG_X86_VISWS is not set
# CONFIG_X86_GENERICARCH is not set
# CONFIG_X86_ES7000 is not set
# CONFIG_M386 is not set
# CONFIG_M486 is not set
# CONFIG_M586 is not set
# CONFIG_M586TSC is not set
# CONFIG_M586MMX is not set
# CONFIG_M686 is not set
# CONFIG_MPENTIUMII is not set
# CONFIG_MPENTIUMIII is not set
# CONFIG_MPENTIUM4 is not set
# CONFIG_MK6 is not set
CONFIG_MK7=y
# CONFIG_MK8 is not set
# CONFIG_MELAN is not set
# CONFIG_MCRUSOE is not set
# CONFIG_MWINCHIPC6 is not set
# CONFIG_MWINCHIP2 is not set
# CONFIG_MWINCHIP3D is not set
# CONFIG_MCYRIXIII is not set
# CONFIG_MVIAC3_2 is not set
CONFIG_X86_GENERIC=y
CONFIG_X86_CMPXCHG=y
CONFIG_X86_XADD=y
CONFIG_X86_L1_CACHE_SHIFT=7
CONFIG_RWSEM_XCHGADD_ALGORITHM=y
CONFIG_X86_WP_WORKS_OK=y
CONFIG_X86_INVLPG=y
CONFIG_X86_BSWAP=y
CONFIG_X86_POPAD_OK=y
CONFIG_X86_GOOD_APIC=y
CONFIG_X86_INTEL_USERCOPY=y
CONFIG_X86_USE_PPRO_CHECKSUM=y
CONFIG_X86_USE_3DNOW=y
# CONFIG_X86_4G is not set
# CONFIG_X86_SWITCH_PAGETABLES is not set
# CONFIG_X86_4G_VM_LAYOUT is not set
# CONFIG_X86_UACCESS_INDIRECT is not set
# CONFIG_X86_HIGH_ENTRY is not set
# CONFIG_HUGETLB_PAGE is not set
CONFIG_HPET_TIMER=y
# CONFIG_SMP is not set
CONFIG_PREEMPT=y
# CONFIG_X86_UP_APIC is not set
CONFIG_X86_TSC=y
CONFIG_X86_MCE=y
CONFIG_X86_MCE_NONFATAL=y
# CONFIG_TOSHIBA is not set
# CONFIG_I8K is not set
# CONFIG_MICROCODE is not set
# CONFIG_X86_MSR is not set
CONFIG_X86_CPUID=y
CONFIG_EDD=y
CONFIG_NOHIGHMEM=y
# CONFIG_HIGHMEM4G is not set
# CONFIG_HIGHMEM64G is not set
# CONFIG_MATH_EMULATION is not set
CONFIG_MTRR=y
CONFIG_HAVE_DEC_LOCK=y

#
# Power management options (ACPI, APM)
#
CONFIG_PM=y
CONFIG_SOFTWARE_SUSPEND=y

#
# ACPI (Advanced Configuration and Power Interface) Support
#
# CONFIG_ACPI_HT is not set
CONFIG_ACPI=y
CONFIG_ACPI_BOOT=y
CONFIG_ACPI_SLEEP=y
CONFIG_ACPI_SLEEP_PROC_FS=y
CONFIG_ACPI_AC=y
CONFIG_ACPI_BATTERY=y
CONFIG_ACPI_BUTTON=y
CONFIG_ACPI_FAN=y
CONFIG_ACPI_PROCESSOR=y
CONFIG_ACPI_THERMAL=y
# CONFIG_ACPI_ASUS is not set
# CONFIG_ACPI_TOSHIBA is not set
# CONFIG_ACPI_DEBUG is not set
CONFIG_ACPI_BUS=y
CONFIG_ACPI_INTERPRETER=y
CONFIG_ACPI_EC=y
CONFIG_ACPI_POWER=y
CONFIG_ACPI_PCI=y
CONFIG_ACPI_SYSTEM=y

#
# APM (Advanced Power Management) BIOS Support
#
# CONFIG_APM is not set

#
# CPU Frequency scaling
#
CONFIG_CPU_FREQ=y
CONFIG_CPU_FREQ_PROC_INTF=y
CONFIG_CPU_FREQ_GOV_USERSPACE=y
CONFIG_CPU_FREQ_24_API=y
CONFIG_CPU_FREQ_TABLE=y

#
# CPUFreq processor drivers
#
CONFIG_X86_ACPI_CPUFREQ=y
CONFIG_X86_ACPI_CPUFREQ_PROC_INTF=y
# CONFIG_X86_POWERNOW_K6 is not set
CONFIG_X86_POWERNOW_K7=y
# CONFIG_X86_GX_SUSPMOD is not set
CONFIG_X86_SPEEDSTEP_ICH=y
CONFIG_X86_SPEEDSTEP_CENTRINO=y
CONFIG_X86_SPEEDSTEP_LIB=y
CONFIG_X86_P4_CLOCKMOD=y
# CONFIG_X86_LONGRUN is not set
# CONFIG_X86_LONGHAUL is not set

#
# Bus options (PCI, PCMCIA, EISA, MCA, ISA)
#
CONFIG_PCI=y
# CONFIG_PCI_GOBIOS is not set
# CONFIG_PCI_GODIRECT is not set
CONFIG_PCI_GOANY=y
CONFIG_PCI_BIOS=y
CONFIG_PCI_DIRECT=y
CONFIG_PCI_LEGACY_PROC=y
CONFIG_PCI_NAMES=y
CONFIG_ISA=y
# CONFIG_EISA is not set
# CONFIG_MCA is not set
# CONFIG_SCx200 is not set
CONFIG_HOTPLUG=y

#
# PCMCIA/CardBus support
#
CONFIG_PCMCIA=m
CONFIG_YENTA=m
CONFIG_CARDBUS=y
CONFIG_I82092=m
# CONFIG_I82365 is not set
# CONFIG_TCIC is not set
CONFIG_PCMCIA_PROBE=y

#
# PCI Hotplug Support
#
# CONFIG_HOTPLUG_PCI is not set

#
# Executable file formats
#
CONFIG_BINFMT_ELF=y
# CONFIG_BINFMT_AOUT is not set
# CONFIG_BINFMT_MISC is not set

#
# Generic Driver Options
#
# CONFIG_FW_LOADER is not set

#
# Memory Technology Devices (MTD)
#
# CONFIG_MTD is not set

#
# Parallel port support
#
CONFIG_PARPORT=m
CONFIG_PARPORT_PC=m
CONFIG_PARPORT_PC_CML1=m
# CONFIG_PARPORT_SERIAL is not set
CONFIG_PARPORT_PC_FIFO=y
CONFIG_PARPORT_PC_SUPERIO=y
# CONFIG_PARPORT_PC_PCMCIA is not set
CONFIG_PARPORT_OTHER=y
CONFIG_PARPORT_1284=y

#
# Plug and Play support
#
CONFIG_PNP=y
# CONFIG_PNP_DEBUG is not set

#
# Protocols
#
# CONFIG_ISAPNP is not set
CONFIG_PNPBIOS=y

#
# Block devices
#
CONFIG_BLK_DEV_FD=y
# CONFIG_BLK_DEV_XD 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_LOOP=y
CONFIG_BLK_DEV_CRYPTOLOOP=y
CONFIG_BLK_DEV_NBD=y
CONFIG_BLK_DEV_RAM=y
CONFIG_BLK_DEV_RAM_SIZE=4096
CONFIG_BLK_DEV_INITRD=y
# CONFIG_LBD is not set

#
# ATA/ATAPI/MFM/RLL support
#
CONFIG_IDE=y
CONFIG_BLK_DEV_IDE=y

#
# Please see Documentation/ide.txt for help/info on IDE drives
#
# CONFIG_BLK_DEV_HD_IDE is not set
CONFIG_BLK_DEV_IDEDISK=y
CONFIG_IDEDISK_MULTI_MODE=y
# CONFIG_IDEDISK_STROKE is not set
CONFIG_BLK_DEV_IDECS=m
CONFIG_BLK_DEV_IDECD=y
# CONFIG_BLK_DEV_IDETAPE is not set
# CONFIG_BLK_DEV_IDEFLOPPY is not set
CONFIG_BLK_DEV_IDESCSI=m
# CONFIG_IDE_TASK_IOCTL is not set
CONFIG_IDE_TASKFILE_IO=y

#
# IDE chipset support/bugfixes
#
# CONFIG_BLK_DEV_CMD640 is not set
# CONFIG_BLK_DEV_IDEPNP is not set
CONFIG_BLK_DEV_IDEPCI=y
CONFIG_IDEPCI_SHARE_IRQ=y
CONFIG_BLK_DEV_OFFBOARD=y
CONFIG_BLK_DEV_GENERIC=y
# CONFIG_BLK_DEV_OPTI621 is not set
CONFIG_BLK_DEV_RZ1000=y
CONFIG_BLK_DEV_IDEDMA_PCI=y
# CONFIG_BLK_DEV_IDE_TCQ is not set
# CONFIG_BLK_DEV_IDEDMA_FORCED is not set
CONFIG_IDEDMA_PCI_AUTO=y
# CONFIG_IDEDMA_ONLYDISK is not set
# CONFIG_IDEDMA_PCI_WIP is not set
CONFIG_BLK_DEV_ADMA=y
# CONFIG_BLK_DEV_AEC62XX is not set
CONFIG_BLK_DEV_ALI15X3=y
# CONFIG_WDC_ALI15X3 is not set
# CONFIG_BLK_DEV_AMD74XX is not set
# CONFIG_BLK_DEV_CMD64X is not set
# CONFIG_BLK_DEV_TRIFLEX is not set
# CONFIG_BLK_DEV_CY82C693 is not set
# CONFIG_BLK_DEV_CS5520 is not set
# CONFIG_BLK_DEV_CS5530 is not set
# CONFIG_BLK_DEV_HPT34X is not set
# CONFIG_BLK_DEV_HPT366 is not set
# CONFIG_BLK_DEV_SC1200 is not set
# CONFIG_BLK_DEV_PIIX is not set
# CONFIG_BLK_DEV_NS87415 is not set
# CONFIG_BLK_DEV_PDC202XX_OLD is not set
# CONFIG_BLK_DEV_PDC202XX_NEW is not set
# CONFIG_BLK_DEV_SVWKS is not set
# CONFIG_BLK_DEV_SIIMAGE is not set
# CONFIG_BLK_DEV_SIS5513 is not set
# CONFIG_BLK_DEV_SLC90E66 is not set
# CONFIG_BLK_DEV_TRM290 is not set
# CONFIG_BLK_DEV_VIA82CXXX is not set
# CONFIG_IDE_CHIPSETS is not set
CONFIG_BLK_DEV_IDEDMA=y
CONFIG_IDEDMA_IVB=y
CONFIG_IDEDMA_AUTO=y
# CONFIG_DMA_NONPCI is not set
# CONFIG_BLK_DEV_HD is not set

#
# SCSI device support
#
CONFIG_SCSI=y

#
# 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 set
CONFIG_BLK_DEV_SR=m
# CONFIG_BLK_DEV_SR_VENDOR is not set
CONFIG_CHR_DEV_SG=m

#
# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
#
# CONFIG_SCSI_MULTI_LUN is not set
# CONFIG_SCSI_REPORT_LUNS is not set
# CONFIG_SCSI_CONSTANTS is not set
# CONFIG_SCSI_LOGGING is not set

#
# SCSI low-level drivers
#
# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
# CONFIG_SCSI_7000FASST is not set
# CONFIG_SCSI_ACARD is not set
# CONFIG_SCSI_AHA152X is not set
# CONFIG_SCSI_AHA1542 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_DPT_I2O is not set
# CONFIG_SCSI_ADVANSYS is not set
# CONFIG_SCSI_IN2000 is not set
# CONFIG_SCSI_AM53C974 is not set
# CONFIG_SCSI_MEGARAID is not set
# CONFIG_SCSI_BUSLOGIC is not set
# CONFIG_SCSI_CPQFCTS is not set
# CONFIG_SCSI_DMX3191D is not set
# CONFIG_SCSI_DTC3280 is not set
# CONFIG_SCSI_EATA is not set
# CONFIG_SCSI_EATA_PIO is not set
# CONFIG_SCSI_FUTURE_DOMAIN is not set
# CONFIG_SCSI_GDTH is not set
# CONFIG_SCSI_GENERIC_NCR5380 is not set
# CONFIG_SCSI_GENERIC_NCR5380_MMIO 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_NCR53C406A is not set
# CONFIG_SCSI_SYM53C8XX_2 is not set
# CONFIG_SCSI_SYM53C8XX is not set
# CONFIG_SCSI_PAS16 is not set
# CONFIG_SCSI_PCI2000 is not set
# CONFIG_SCSI_PCI2220I is not set
# CONFIG_SCSI_PSI240I is not set
# CONFIG_SCSI_QLOGIC_FAS is not set
# CONFIG_SCSI_QLOGIC_ISP is not set
# CONFIG_SCSI_QLOGIC_FC is not set
# CONFIG_SCSI_QLOGIC_1280 is not set
# CONFIG_SCSI_SEAGATE is not set
# CONFIG_SCSI_SYM53C416 is not set
# CONFIG_SCSI_DC395x is not set
# CONFIG_SCSI_DC390T is not set
# CONFIG_SCSI_T128 is not set
# CONFIG_SCSI_U14_34F is not set
# CONFIG_SCSI_ULTRASTOR is not set
# CONFIG_SCSI_NSP32 is not set
# CONFIG_SCSI_DEBUG is not set
# CONFIG_SCSI_FERAL_ISP is not set

#
# PCMCIA SCSI adapter support
#
# CONFIG_PCMCIA_AHA152X is not set
# CONFIG_PCMCIA_FDOMAIN is not set
# CONFIG_PCMCIA_NINJA_SCSI is not set
# CONFIG_PCMCIA_QLOGIC is not set

#
# Old CD-ROM drivers (not SCSI, not IDE)
#
# CONFIG_CD_NO_IDESCSI is not set

#
# Multi-device support (RAID and LVM)
#
# CONFIG_MD is not set

#
# Fusion MPT device support
#
# CONFIG_FUSION is not set

#
# IEEE 1394 (FireWire) support (EXPERIMENTAL)
#
# CONFIG_IEEE1394 is not set

#
# I2O device support
#
CONFIG_I2O=m
CONFIG_I2O_PCI=m
CONFIG_I2O_BLOCK=m
CONFIG_I2O_SCSI=m
CONFIG_I2O_PROC=m

#
# Networking support
#
CONFIG_NET=y

#
# Networking options
#
CONFIG_PACKET=y
CONFIG_PACKET_MMAP=y
# CONFIG_NETLINK_DEV is not set
CONFIG_UNIX=y
# CONFIG_NET_KEY is not set
CONFIG_INET=y
CONFIG_IP_MULTICAST=y
CONFIG_IP_ADVANCED_ROUTER=y
CONFIG_IP_MULTIPLE_TABLES=y
CONFIG_IP_ROUTE_FWMARK=y
CONFIG_IP_ROUTE_NAT=y
CONFIG_IP_ROUTE_MULTIPATH=y
CONFIG_IP_ROUTE_TOS=y
CONFIG_IP_ROUTE_VERBOSE=y
# CONFIG_IP_PNP is not set
CONFIG_NET_IPIP=m
CONFIG_NET_IPGRE=m
CONFIG_NET_IPGRE_BROADCAST=y
CONFIG_IP_MROUTE=y
CONFIG_IP_PIMSM_V1=y
CONFIG_IP_PIMSM_V2=y
CONFIG_ARPD=y
CONFIG_INET_ECN=y
CONFIG_SYN_COOKIES=y
# CONFIG_INET_AH is not set
# CONFIG_INET_ESP is not set
# CONFIG_INET_IPCOMP is not set

#
# IP: Virtual Server Configuration
#
# CONFIG_IP_VS is not set
# CONFIG_IPV6 is not set
# CONFIG_DECNET is not set
# CONFIG_BRIDGE is not set
CONFIG_NETFILTER=y
# CONFIG_NETFILTER_DEBUG is not set

#
# IP: Netfilter Configuration
#
# CONFIG_IP_NF_CONNTRACK is not set
# CONFIG_IP_NF_QUEUE is not set
# CONFIG_IP_NF_IPTABLES is not set
# CONFIG_IP_NF_ARPTABLES is not set
# CONFIG_IP_NF_COMPAT_IPCHAINS is not set
# CONFIG_IP_NF_COMPAT_IPFWADM is not set
CONFIG_XFRM=y
# CONFIG_XFRM_USER is not set

#
# SCTP Configuration (EXPERIMENTAL)
#
CONFIG_IPV6_SCTP__=y
# CONFIG_IP_SCTP is not set
# CONFIG_ATM is not set
# CONFIG_VLAN_8021Q is not set
# CONFIG_LLC is not set
# CONFIG_X25 is not set
# CONFIG_LAPB is not set
# CONFIG_NET_DIVERT is not set
# CONFIG_ECONET is not set
# CONFIG_WAN_ROUTER is not set
# CONFIG_NET_FASTROUTE is not set
# CONFIG_NET_HW_FLOWCONTROL is not set

#
# QoS and/or fair queueing
#
# CONFIG_NET_SCHED is not set

#
# Network testing
#
# CONFIG_NET_PKTGEN is not set
CONFIG_NETDEVICES=y

#
# ARCnet devices
#
# CONFIG_ARCNET is not set
# CONFIG_DUMMY is not set
# CONFIG_BONDING is not set
# CONFIG_EQUALIZER is not set
# CONFIG_TUN is not set
# CONFIG_ETHERTAP is not set
# CONFIG_NET_SB1000 is not set

#
# Ethernet (10 or 100Mbit)
#
CONFIG_NET_ETHERNET=y
# CONFIG_MII is not set
# CONFIG_HAPPYMEAL is not set
# CONFIG_SUNGEM is not set
# CONFIG_NET_VENDOR_3COM is not set
# CONFIG_LANCE is not set
# CONFIG_NET_VENDOR_SMC is not set
# CONFIG_NET_VENDOR_RACAL is not set

#
# Tulip family network device support
#
# CONFIG_NET_TULIP is not set
# CONFIG_AT1700 is not set
# CONFIG_DEPCA is not set
# CONFIG_HP100 is not set
# CONFIG_NET_ISA is not set
CONFIG_NET_PCI=y
# CONFIG_PCNET32 is not set
# CONFIG_AMD8111_ETH is not set
# CONFIG_ADAPTEC_STARFIRE is not set
# CONFIG_AC3200 is not set
# CONFIG_APRICOT is not set
# CONFIG_B44 is not set
# CONFIG_CS89x0 is not set
# CONFIG_DGRS is not set
# CONFIG_EEPRO100 is not set
# CONFIG_E100 is not set
# CONFIG_FEALNX is not set
CONFIG_NATSEMI=y
# CONFIG_NE2K_PCI is not set
# CONFIG_8139CP is not set
# CONFIG_8139TOO is not set
# CONFIG_SIS900 is not set
# CONFIG_EPIC100 is not set
# CONFIG_SUNDANCE is not set
# CONFIG_TLAN is not set
# CONFIG_VIA_RHINE is not set
# CONFIG_NET_POCKET 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_SK98LIN is not set
# CONFIG_TIGON3 is not set

#
# Ethernet (10000 Mbit)
#
# CONFIG_IXGB is not set
# CONFIG_FDDI is not set
# CONFIG_HIPPI is not set
# CONFIG_PLIP is not set
CONFIG_PPP=m
CONFIG_PPP_MULTILINK=y
CONFIG_PPP_FILTER=y
CONFIG_PPP_ASYNC=m
CONFIG_PPP_SYNC_TTY=m
CONFIG_PPP_DEFLATE=m
CONFIG_PPP_BSDCOMP=m
CONFIG_PPPOE=m
# CONFIG_SLIP is not set

#
# Wireless LAN (non-hamradio)
#
# CONFIG_NET_RADIO is not set

#
# Token Ring devices (depends on LLC=y)
#
# CONFIG_NET_FC is not set
# CONFIG_RCPCI is not set
# CONFIG_SHAPER is not set

#
# Wan interfaces
#
# CONFIG_WAN is not set

#
# PCMCIA network device support
#
# CONFIG_NET_PCMCIA is not set

#
# Amateur Radio support
#
# CONFIG_HAMRADIO is not set

#
# IrDA (infrared) support
#
# CONFIG_IRDA is not set

#
# ISDN subsystem
#
# CONFIG_ISDN_BOOL is not set

#
# Telephony Support
#
# CONFIG_PHONE is not set

#
# Input device support
#
CONFIG_INPUT=y

#
# Userland interfaces
#
CONFIG_INPUT_MOUSEDEV=y
CONFIG_INPUT_MOUSEDEV_PSAUX=y
CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
CONFIG_INPUT_JOYDEV=y
# CONFIG_INPUT_TSDEV is not set
CONFIG_INPUT_EVDEV=y
# CONFIG_INPUT_EVBUG is not set

#
# Input I/O drivers
#
# CONFIG_GAMEPORT is not set
CONFIG_SOUND_GAMEPORT=y
CONFIG_SERIO=y
CONFIG_SERIO_I8042=y
CONFIG_SERIO_SERPORT=y
# CONFIG_SERIO_CT82C710 is not set
# CONFIG_SERIO_PARKBD is not set
# CONFIG_SERIO_PCIPS2 is not set

#
# Input Device Drivers
#
CONFIG_INPUT_KEYBOARD=y
CONFIG_KEYBOARD_ATKBD=y
# CONFIG_KEYBOARD_SUNKBD is not set
# CONFIG_KEYBOARD_XTKBD is not set
# CONFIG_KEYBOARD_NEWTON is not set
CONFIG_INPUT_MOUSE=y
CONFIG_MOUSE_PS2=y
CONFIG_MOUSE_PS2_SYNAPTICS=y
# CONFIG_MOUSE_SERIAL is not set
# CONFIG_MOUSE_INPORT is not set
# CONFIG_MOUSE_LOGIBM is not set
# CONFIG_MOUSE_PC110PAD is not set
# CONFIG_INPUT_JOYSTICK is not set
# CONFIG_INPUT_TOUCHSCREEN is not set
CONFIG_INPUT_MISC=y
CONFIG_INPUT_PCSPKR=m
# CONFIG_INPUT_UINPUT is not set

#
# Character devices
#
CONFIG_VT=y
CONFIG_VT_CONSOLE=y
CONFIG_HW_CONSOLE=y
# CONFIG_SERIAL_NONSTANDARD is not set

#
# Serial drivers
#
CONFIG_SERIAL_8250=y
CONFIG_SERIAL_8250_CONSOLE=y
# CONFIG_SERIAL_8250_CS is not set
CONFIG_SERIAL_8250_ACPI=y
# CONFIG_SERIAL_8250_EXTENDED is not set

#
# Non-8250 serial port support
#
CONFIG_SERIAL_CORE=y
CONFIG_SERIAL_CORE_CONSOLE=y
CONFIG_UNIX98_PTYS=y
CONFIG_UNIX98_PTY_COUNT=256
CONFIG_PRINTER=m
# CONFIG_LP_CONSOLE is not set
CONFIG_PPDEV=m
# CONFIG_TIPAR is not set

#
# I2C support
#
# CONFIG_I2C is not set

#
# I2C Hardware Sensors Mainboard support
#

#
# I2C Hardware Sensors Chip support
#
# CONFIG_I2C_SENSOR is not set

#
# Mice
#
# CONFIG_BUSMOUSE is not set
# CONFIG_QIC02_TAPE is not set

#
# IPMI
#
# CONFIG_IPMI_HANDLER is not set

#
# Watchdog Cards
#
# CONFIG_WATCHDOG is not set
# CONFIG_HW_RANDOM is not set
# CONFIG_NVRAM is not set
CONFIG_RTC=y
# CONFIG_DTLK is not set
# CONFIG_R3964 is not set
# CONFIG_APPLICOM is not set
# CONFIG_SONYPI is not set

#
# Ftape, the floppy tape device driver
#
# CONFIG_FTAPE is not set
CONFIG_AGP=m
CONFIG_AGP_ALI=m
CONFIG_AGP_ATI=m
# CONFIG_AGP_AMD is not set
# CONFIG_AGP_AMD_8151 is not set
# CONFIG_AGP_INTEL is not set
# CONFIG_AGP_NVIDIA is not set
# CONFIG_AGP_SIS is not set
# CONFIG_AGP_SWORKS is not set
# CONFIG_AGP_VIA is not set
CONFIG_DRM=y
# CONFIG_DRM_TDFX is not set
# CONFIG_DRM_GAMMA is not set
# CONFIG_DRM_R128 is not set
CONFIG_DRM_RADEON=y
# CONFIG_DRM_MGA is not set

#
# PCMCIA character devices
#
# CONFIG_SYNCLINK_CS is not set
# CONFIG_MWAVE is not set
# CONFIG_RAW_DRIVER is not set
# CONFIG_HANGCHECK_TIMER is not set

#
# Multimedia devices
#
# CONFIG_VIDEO_DEV is not set

#
# Digital Video Broadcasting Devices
#
# CONFIG_DVB is not set

#
# File systems
#
CONFIG_EXT2_FS=y
# CONFIG_EXT2_FS_XATTR is not set
CONFIG_EXT3_FS=y
CONFIG_EXT3_FS_XATTR=y
# CONFIG_EXT3_FS_POSIX_ACL is not set
# CONFIG_EXT3_FS_SECURITY is not set
CONFIG_JBD=y
# CONFIG_JBD_DEBUG is not set
CONFIG_FS_MBCACHE=y
CONFIG_REISERFS_FS=y
# CONFIG_REISERFS_CHECK is not set
# CONFIG_REISERFS_PROC_INFO is not set
# CONFIG_JFS_FS is not set
# CONFIG_XFS_FS is not set
# CONFIG_MINIX_FS is not set
# CONFIG_ROMFS_FS is not set
# CONFIG_QUOTA is not set
# CONFIG_AUTOFS_FS is not set
CONFIG_AUTOFS4_FS=y

#
# CD-ROM/DVD Filesystems
#
CONFIG_ISO9660_FS=m
CONFIG_JOLIET=y
CONFIG_ZISOFS=y
CONFIG_ZISOFS_FS=m
# CONFIG_UDF_FS is not set

#
# DOS/FAT/NT Filesystems
#
CONFIG_FAT_FS=y
CONFIG_MSDOS_FS=y
CONFIG_VFAT_FS=y
# CONFIG_NTFS_FS is not set

#
# Pseudo filesystems
#
CONFIG_PROC_FS=y
# CONFIG_DEVFS_FS is not set
CONFIG_DEVPTS_FS=y
# CONFIG_DEVPTS_FS_XATTR is not set
CONFIG_TMPFS=y
CONFIG_RAMFS=y

#
# Miscellaneous filesystems
#
# CONFIG_ADFS_FS is not set
# CONFIG_AFFS_FS is not set
# CONFIG_HFS_FS is not set
# CONFIG_BEFS_FS is not set
# CONFIG_BFS_FS is not set
# CONFIG_EFS_FS is not set
# CONFIG_CRAMFS is not set
# 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=m
CONFIG_NFS_V3=y
# CONFIG_NFS_V4 is not set
CONFIG_NFS_DIRECTIO=y
# CONFIG_NFSD is not set
CONFIG_LOCKD=m
CONFIG_LOCKD_V4=y
# CONFIG_EXPORTFS is not set
CONFIG_SUNRPC=m
# CONFIG_SUNRPC_GSS is not set
CONFIG_SMB_FS=m
CONFIG_SMB_NLS_DEFAULT=y
CONFIG_SMB_NLS_REMOTE="cp850"
# CONFIG_CIFS is not set
# CONFIG_NCP_FS is not set
# CONFIG_CODA_FS is not set
# CONFIG_INTERMEZZO_FS is not set
# CONFIG_AFS_FS is not set

#
# Partition Types
#
# CONFIG_PARTITION_ADVANCED is not set
CONFIG_MSDOS_PARTITION=y
CONFIG_SMB_NLS=y
CONFIG_NLS=y

#
# Native Language Support
#
CONFIG_NLS_DEFAULT="iso8859-15"
# CONFIG_NLS_CODEPAGE_437 is not set
# CONFIG_NLS_CODEPAGE_737 is not set
# CONFIG_NLS_CODEPAGE_775 is not set
CONFIG_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 set
CONFIG_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 set
CONFIG_NLS_ISO8859_15=m
# CONFIG_NLS_KOI8_R is not set
# CONFIG_NLS_KOI8_U is not set
CONFIG_NLS_UTF8=m

#
# Graphics support
#
CONFIG_FB=y
# CONFIG_FB_CIRRUS is not set
# CONFIG_FB_PM2 is not set
# CONFIG_FB_CYBER2000 is not set
# CONFIG_FB_ASILIANT is not set
# CONFIG_FB_IMSTT is not set
# CONFIG_FB_VGA16 is not set
CONFIG_FB_VESA=y
CONFIG_VIDEO_SELECT=y
# CONFIG_FB_HGA is not set
# CONFIG_FB_RIVA is not set
# CONFIG_FB_MATROX is not set
CONFIG_FB_RADEON=y
# CONFIG_FB_ATY128 is not set
# CONFIG_FB_ATY is not set
# CONFIG_FB_SIS is not set
# CONFIG_FB_NEOMAGIC is not set
# CONFIG_FB_3DFX is not set
# CONFIG_FB_VOODOO1 is not set
# CONFIG_FB_TRIDENT is not set
# CONFIG_FB_PM3 is not set
# CONFIG_FB_VIRTUAL is not set

#
# Console display driver support
#
CONFIG_VGA_CONSOLE=y
# CONFIG_MDA_CONSOLE is not set
CONFIG_DUMMY_CONSOLE=y
CONFIG_FRAMEBUFFER_CONSOLE=y
CONFIG_PCI_CONSOLE=y
# CONFIG_FONTS is not set
CONFIG_FONT_8x8=y
CONFIG_FONT_8x16=y

#
# Logo configuration
#
CONFIG_LOGO=y
CONFIG_LOGO_LINUX_MONO=y
CONFIG_LOGO_LINUX_VGA16=y
CONFIG_LOGO_LINUX_CLUT224=y

#
# Sound
#
CONFIG_SOUND=y

#
# Advanced Linux Sound Architecture
#
CONFIG_SND=y
# CONFIG_SND_SEQUENCER is not set
CONFIG_SND_OSSEMUL=y
CONFIG_SND_MIXER_OSS=y
CONFIG_SND_PCM_OSS=y
# CONFIG_SND_RTCTIMER is not set
# CONFIG_SND_VERBOSE_PRINTK is not set
# CONFIG_SND_DEBUG is not set

#
# Generic devices
#
# CONFIG_SND_DUMMY is not set
# CONFIG_SND_MTPAV is not set
# CONFIG_SND_SERIAL_U16550 is not set
# CONFIG_SND_MPU401 is not set

#
# ISA devices
#
# CONFIG_SND_AD1848 is not set
# CONFIG_SND_CS4231 is not set
# CONFIG_SND_CS4232 is not set
# CONFIG_SND_CS4236 is not set
# CONFIG_SND_ES1688 is not set
# CONFIG_SND_ES18XX is not set
# CONFIG_SND_GUSCLASSIC is not set
# CONFIG_SND_GUSEXTREME is not set
# CONFIG_SND_GUSMAX is not set
# CONFIG_SND_INTERWAVE is not set
# CONFIG_SND_INTERWAVE_STB is not set
# CONFIG_SND_OPTI92X_AD1848 is not set
# CONFIG_SND_OPTI92X_CS4231 is not set
# CONFIG_SND_OPTI93X is not set
# CONFIG_SND_SB8 is not set
# CONFIG_SND_SB16 is not set
# CONFIG_SND_SBAWE is not set
# CONFIG_SND_WAVEFRONT is not set
# CONFIG_SND_CMI8330 is not set
# CONFIG_SND_OPL3SA2 is not set
# CONFIG_SND_SGALAXY is not set
# CONFIG_SND_SSCAPE is not set

#
# PCI devices
#
CONFIG_SND_ALI5451=m
# CONFIG_SND_AZT3328 is not set
# CONFIG_SND_CS46XX is not set
# CONFIG_SND_CS4281 is not set
# CONFIG_SND_EMU10K1 is not set
# CONFIG_SND_KORG1212 is not set
# CONFIG_SND_NM256 is not set
# CONFIG_SND_RME32 is not set
# CONFIG_SND_RME96 is not set
# CONFIG_SND_RME9652 is not set
# CONFIG_SND_HDSP is not set
# CONFIG_SND_TRIDENT is not set
# CONFIG_SND_YMFPCI is not set
# CONFIG_SND_ALS4000 is not set
# CONFIG_SND_CMIPCI 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_MAESTRO3 is not set
# CONFIG_SND_FM801 is not set
# CONFIG_SND_ICE1712 is not set
# CONFIG_SND_ICE1724 is not set
# CONFIG_SND_INTEL8X0 is not set
# CONFIG_SND_SONICVIBES is not set
# CONFIG_SND_VIA82XX is not set
# CONFIG_SND_VX222 is not set

#
# ALSA USB devices
#
# CONFIG_SND_USB_AUDIO is not set

#
# PCMCIA devices
#
# CONFIG_SND_VXPOCKET is not set
# CONFIG_SND_VXP440 is not set

#
# Open Sound System
#
# CONFIG_SOUND_PRIME is not set

#
# USB support
#
CONFIG_USB=y
# CONFIG_USB_DEBUG is not set

#
# Miscellaneous USB options
#
CONFIG_USB_DEVICEFS=y
# CONFIG_USB_BANDWIDTH is not set
# CONFIG_USB_DYNAMIC_MINORS is not set

#
# USB Host Controller Drivers
#
# CONFIG_USB_EHCI_HCD is not set
CONFIG_USB_OHCI_HCD=m
# CONFIG_USB_UHCI_HCD is not set

#
# USB Device Class drivers
#
# CONFIG_USB_AUDIO is not set
# CONFIG_USB_BLUETOOTH_TTY is not set
# CONFIG_USB_MIDI is not set
# CONFIG_USB_ACM is not set
# CONFIG_USB_PRINTER is not set
CONFIG_USB_STORAGE=y
# CONFIG_USB_STORAGE_DEBUG is not set
# CONFIG_USB_STORAGE_DATAFAB is not set
# CONFIG_USB_STORAGE_FREECOM is not set
# CONFIG_USB_STORAGE_ISD200 is not set
# CONFIG_USB_STORAGE_DPCM is not set
# CONFIG_USB_STORAGE_HP8200e is not set
# CONFIG_USB_STORAGE_SDDR09 is not set
# CONFIG_USB_STORAGE_SDDR55 is not set
# CONFIG_USB_STORAGE_JUMPSHOT is not set

#
# USB Human Interface Devices (HID)
#
CONFIG_USB_HID=y
CONFIG_USB_HIDINPUT=y
# CONFIG_HID_FF is not set
CONFIG_USB_HIDDEV=y
# CONFIG_USB_AIPTEK is not set
# CONFIG_USB_WACOM is not set
# CONFIG_USB_KBTAB is not set
# CONFIG_USB_POWERMATE is not set
# CONFIG_USB_XPAD is not set

#
# USB Imaging devices
#
# CONFIG_USB_MDC800 is not set
# CONFIG_USB_SCANNER is not set
# CONFIG_USB_MICROTEK is not set
# CONFIG_USB_HPUSBSCSI is not set

#
# USB Multimedia devices
#
# CONFIG_USB_DABUSB is not set

#
# Video4Linux support is needed for USB Multimedia device support
#

#
# USB Network adaptors
#
# CONFIG_USB_AX8817X is not set
# 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 is not set

#
# USB port drivers
#
# CONFIG_USB_USS720 is not set

#
# USB Serial Converter support
#
# CONFIG_USB_SERIAL is not set

#
# USB Miscellaneous drivers
#
# CONFIG_USB_TIGL is not set
# CONFIG_USB_AUERSWALD is not set
# CONFIG_USB_RIO500 is not set
# CONFIG_USB_BRLVGER is not set
# CONFIG_USB_LCD is not set
# CONFIG_USB_TEST is not set
# CONFIG_USB_GADGET is not set

#
# Bluetooth support
#
# CONFIG_BT is not set

#
# Profiling support
#
# CONFIG_PROFILING is not set

#
# Kernel hacking
#
CONFIG_DEBUG_KERNEL=y
# CONFIG_DEBUG_STACKOVERFLOW is not set
# CONFIG_DEBUG_SLAB is not set
# CONFIG_DEBUG_IOVIRT is not set
CONFIG_MAGIC_SYSRQ=y
# CONFIG_DEBUG_SPINLOCK is not set
# CONFIG_DEBUG_PAGEALLOC is not set
# CONFIG_SPINLINE is not set
# CONFIG_DEBUG_INFO is not set
# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
# CONFIG_KGDB is not set
# CONFIG_FRAME_POINTER is not set

#
# Security options
#
# CONFIG_SECURITY is not set

#
# Cryptographic options
#
CONFIG_CRYPTO=y
CONFIG_CRYPTO_HMAC=y
CONFIG_CRYPTO_NULL=y
CONFIG_CRYPTO_MD4=y
CONFIG_CRYPTO_MD5=y
CONFIG_CRYPTO_SHA1=y
CONFIG_CRYPTO_SHA256=y
CONFIG_CRYPTO_SHA512=y
CONFIG_CRYPTO_DES=y
CONFIG_CRYPTO_BLOWFISH=y
CONFIG_CRYPTO_TWOFISH=y
CONFIG_CRYPTO_SERPENT=y
CONFIG_CRYPTO_AES=y
CONFIG_CRYPTO_CAST5=y
CONFIG_CRYPTO_CAST6=y
CONFIG_CRYPTO_DEFLATE=y
# CONFIG_CRYPTO_TEST is not set

#
# Library routines
#
CONFIG_CRC32=y
CONFIG_ZLIB_INFLATE=y
CONFIG_ZLIB_DEFLATE=y
CONFIG_X86_BIOS_REBOOT=y


Attachments:
config--2.6.0-test4-mm4 (25.72 kB)

2003-08-31 21:28:33

by Pavel Machek

[permalink] [raw]
Subject: Re: Power Management Update

Hi!

> <[email protected]> (03/08/22 1.1276.19.8)
> [power] swsusp Cleanups
>
> - do_magic()
> - Rename to swsusp_arch_suspend().
> - Move declaration to swsusp.c
>
> - arch_prepare_suspend()
> - Return an int
> - Fix x86 version to return -EFAULT if cpu does not have pse, instead of
> calling panic().
> - Call from swsusp_save().
>
> - do_magic_suspend_1()
> - Move body to pm_suspend_disk()
> - Remove.
>
> - do_magic_suspend_2()
> - Rename to swsusp_suspend()
> - Move IRQ fiddling to suspend_save_image(), since that's the only call
> that needs it.
> - Return an int.
>
> - do_magic_resume_1()
> - Move body to pm_resume().
> - Remove
>
> - do_magic_resume_2()
> - Rename to swsusp_resume().
> - Return an int.
>
> - swsusp general
> - Remove unnecessary includes.
> - Remove suspend_pagedir_lock, since it was only used to disable IRQs.
> - Change swsusp_{suspend,resume} return an int, so pm_suspend_disk() knows
> if anything failed.

Gracious renames to make sure I can not orient in the code :-(.

-/* do_magic() is implemented in arch/?/kernel/suspend_asm.S, and
basically does:
+/* swsusp_arch_suspend() is implemented in arch/?/power/swsusp.S,
+ and basically does:

if (!resume) {
- do_magic_suspend_1();
save_processor_state();
SAVE_REGISTERS
- do_magic_suspend_2();
+ swsusp_suspend();
return;
}
GO_TO_SWAPPER_PAGE_TABLES
- do_magic_resume_1();
COPY_PAGES_BACK
RESTORE_REGISTERS
restore_processor_state();
- do_magic_resume_2();
+ swsusp_resume();

*/


do_magic_suspend_1() did disable interrupts, where do you disable them
now?

Did you test it with CONFIG_PREEMPT to hunt for "scheduling in atomic"
bugs?

Your new naming is even worse than my original (and that's quite an
achievement).

swsusp_write() does
swsusp_arch_suspend(), which in turn calls
swsusp_suspend()
^- and that does the writing.
Ouch. do_magic_* was clearer than *that*.

I do not see why you had to change to BIOs just now. Perhaps you
should get it into stable state, first, and then adding more code to
make it look 2.6-like is good idea?

[Will add more comments after a test].
Pavel

--
When do you have a heart between your knees?
[Johanka's followup: and *two* hearts?]

2003-08-31 22:15:42

by Pavel Machek

[permalink] [raw]
Subject: Re: Power Management Update

Hi!

> My main concerns right now are:

On xe3, you broken both S3 and S4 (relative to -test3). [S3 blanks
screen but does not enter sleep, S4

On 4030cdt, I could not test S3 due to unrelated ACPI error. I tried
to enter S4 -- its still in progress; you moved io into atomic session
with your "cleanups", so I get about 10000 "scheduling in atomic"
messages. It actually does suspend and resume, but drivers are in very
bad state after that, and machine is about 20x slower than it should
be (you have broken UHCI, this might be side effect; or it might be
one of 1001 other things).

You imported ton of untested crap into -test4. If you want power
managment to get into working state, REVERT THAT CRAP!

Pavel
--
When do you have a heart between your knees?
[Johanka's followup: and *two* hearts?]

2003-08-31 23:06:35

by Pavel Machek

[permalink] [raw]
Subject: Power Managment Fix [was Re: Power Management Update]

Hi!

And here is power managment *fix*: revert to -test3 state. PM -test4
changes should not have gone in in the first place.

Pavel
--
When do you have a heart between your knees?
[Johanka's followup: and *two* hearts?]


Attachments:
(No filename) (229.00 B)
delme.gz (38.57 kB)
Download all attachments

2003-09-01 10:58:15

by Éric Brunet

[permalink] [raw]
Subject: Re: Power Management Update

To: [email protected],[email protected]
Subject: Re: Power Management Update

(Resend. Seems it didn't get through the first time.)

In mailing-lists linux-kernel, you wrote:
>
>I'm pleased to announce the release of the first patchset of power
>management changes for 2.6.0. The purpose of this release is to give
>people a chance to review and test the PM code before it's sent on to
>Linus.

I gave this patch a try... All data concerning my computer (config
files, boot messages, dsdt, etc.) is available on
<http://perso.nerim.net/~tudia/bug-reports>.

On my computer, echoing anything to /sys/power/state does nothing at all.
Not even a line in the logs.

On the text console (but with XFree and kde running in the background),

echo 1 > /proc/acpi/sleep

the screen blinks and the fan speed goes up. (fan speed is set by
bios. Loading module i2c reinitialize the motherboard sensors and
make fan speed go up too. But here, i2c was not loaded nor
compiled in.) In the logs, I have:

Stopping tasks: ==================================================|
hdc: start_power_step(step: 0)
hdc: completing PM request, suspend
hda: start_power_step(step: 0)
hda: start_power_step(step: 1)
hda: complete_power_step(step: 1, stat: 50, err: 0)
hda: completing PM request, suspend
hwsleep-0257 [16] acpi_enter_sleep_state: Entering sleep state [S1]
Back to C!
PM: Finishing up.
PCI: Setting latency timer of device 0000:00:1d.0 to 64
PCI: Setting latency timer of device 0000:00:1d.1 to 64
PCI: Setting latency timer of device 0000:00:1d.2 to 64
PCI: Setting latency timer of device 0000:00:1f.5 to 64
eth0: Setting half-duplex based on auto-negotiated partner ability 0000.
hda: Wakeup request inited, waiting for !BSY...
hda: start_power_step(step: 1000)
blk: queue df60d800, I/O limit 4095Mb (mask 0xffffffff)
hda: completing PM request, resume
hdc: Wakeup request inited, waiting for !BSY...
hdc: start_power_step(step: 1000)
hdc: completing PM request, resume
Restarting tasks... done

Note that, sometimes, the computer waits after printing "Entering
sleep state [S1]", and resumes if I hit the key. The screen is
however fully lit, so I am not sure that this is a success.

echo 3 > /proc/acpi/sleep

Maybe the screen blinks a little bit, but I am not sure. It is so
fast... In the logs, I have:

PM: Preparing system for suspend
Stopping tasks:
=========================================================|
Restarting tasks... done


echo 4 > /proc/acpi/sleep

Suspend is working, the computer writes things in the swapfile
and shuts down. On resume, I have a kernel panic. I have hand
written this:

Process swapper
Call queue:
start_request
ide_do_request
__elv_do_drive_cmd
generic_ide_suspend
autoremove_wake_function
printk
suspend_device
device_suspend
prepare
pm_resume
do_initcalls
init_workqueues
init
init
kernel_thread_helper
Code: Bad EIP value
Kernel panic: Attemppted to kill init


Regards,

?ric Brunet

2003-09-02 18:11:15

by Patrick Mochel

[permalink] [raw]
Subject: Re: Power Management Update


> > Running with 2.6.0-test4-mm4:
> >
> > # echo 4 > /proc/acpi/sleep
> >
> > Stopping tasks: ======|
> > Freeing memory: ..|
> > hdc: start_power_step(step: 0)
> > Unable to handle kernel NULL pointer dereference at virtual address
> > 00000000
> > printing eip:
> > 00000000
> > *pde = 00000000
> > Oops: 0000 [#1]
> > PREEMPT
> > CPU: 0
> > EIP: 0060:[<00000000>] Not taintled VLI
> > EFLAGS: 00010282
> > EIP is at 0x0
> > eax: c032f180 ebx: c039588c ecx: c02f7b50 edx: 00000282
> > esi: 00000000 edi: cffa1e2c ebp: c13ce780 esp: cffa1d40
> > ds: 007b es: 007b ss: 0068
> > Process bash (pid: 1, threadinfo=cffa0000 task=c12bb940)
> > Stack: c01fbcd1 c039588c cffa1e2c 00000000 00000088 0000001e 0000000f
> > cffa1e2c
> > c039588c c03957e0 c01fc063 c039588c cffa1e2c 00000001 cffa0000
> > c13cd600
> > cffa0000 cffa1e2c 00000202 00000001 c01fc8a3 c13ce780 ffffffff
> > 00000001
> > Call Trace:
> > [<c01fbcd1>] start_request+0x131/0x290
> > [<c01fc063>] ide_do_request+0x203/0x3b0
> > [<c01fc8a3>] ide_do_drive_cmd+0xd3/0x130
> > [<c0205592>] generic_ide_suspend+0x92/0xc0
...

I apologize for the delay in getting back to you - I wanted to test an
actual fix, rather than just a work around.

I encountered this problem by having an IDE CD-ROM, but not having the
ide-cd drier compiled in. The patch below is from Benh, who wrote the IDE
power managment handlers.

He mentioned producing a cleaner patch, but this should at least fix the
Oops. Please give it a try and report if it helps or not.

Thanks,


Pat


===== drivers/ide/ide-io.c 1.21 vs edited =====
--- 1.21/drivers/ide/ide-io.c Mon Sep 1 10:21:10 2003
+++ edited/drivers/ide/ide-io.c Tue Sep 2 09:58:19 2003
@@ -609,6 +609,22 @@
EXPORT_SYMBOL(execute_drive_cmd);

/**
+ * do_start_power_step - wrapper on subdriver start_power_step()
+ *
+ * This is called by start_request instead of directly calling
+ * the subdriver's start_power_step() to deal with either no
+ * subdriver or no start_power_step method in the subdriver
+ * properly.
+ */
+static ide_startstop_t do_start_power_step(ide_drive_t *drive, struct request *rq)
+{
+ if (DRIVER(drive) && DRIVER(drive)->start_power_step)
+ return DRIVER(drive)->start_power_step(drive, rq);
+ rq->pm->pm_step = ide_pm_state_completed;
+ return ide_stopped;
+}
+
+/**
* start_request - start of I/O and command issuing for IDE
*
* start_request() initiates handling of a new I/O request. It
@@ -700,7 +716,7 @@
printk("%s: start_power_step(step: %d)\n",
drive->name, rq->pm->pm_step);
#endif
- startstop = DRIVER(drive)->start_power_step(drive, rq);
+ startstop = do_start_power_step(drive, rq);
if (startstop == ide_stopped &&
rq->pm->pm_step == ide_pm_state_completed)
ide_complete_pm_request(drive, rq);


2003-09-02 23:51:33

by Éric Brunet

[permalink] [raw]
Subject: Re: Power Management Update

On Tue, Sep 02, 2003 at 11:13:24AM -0700, Patrick Mochel wrote:
> I encountered this problem by having an IDE CD-ROM, but not having the
> ide-cd drier compiled in. The patch below is from Benh, who wrote the IDE
> power managment handlers.
>
> He mentioned producing a cleaner patch, but this should at least fix the
> Oops. Please give it a try and report if it helps or not.

I was waiting for Ben's ? new patch later today ?, but I finally gave a
try to this one
> ===== drivers/ide/ide-io.c 1.21 vs edited =====
> --- 1.21/drivers/ide/ide-io.c Mon Sep 1 10:21:10 2003
> +++ edited/drivers/ide/ide-io.c Tue Sep 2 09:58:19 2003
> @@ -609,6 +609,22 @@
> EXPORT_SYMBOL(execute_drive_cmd);
>
> /**
> + * do_start_power_step - wrapper on subdriver start_power_step()
> + *
> + * This is called by start_request instead of directly calling
> + * the subdriver's start_power_step() to deal with either no
> + * subdriver or no start_power_step method in the subdriver
> + * properly.
> + */
[snip]

The result is a panic at different place when resuming from suspend to
disk. Hand written partial debugging info:

EIP is at swsusp_arch_suspend
eax: 07200720 ebx: 07200720 ecx: c1700000 edx=esi=edi=ebp=0 esp=df793fac
Process swapper
Call trace:
swsusp_restore
pm_resume
do_initcalls
init_workqueues
init
init
kernel_thread_helper
Code: 8a 04 02 88 04 1a 0f 20 d8 0f 22 d8 a1 18 70 37 c0 8d 50 01
Panic: attempted to kill init !

Complete (?) information on my computer and kernel logs at
http://perso.nerim.net/~tudia/bug-reports

By the way, how comes the computer suspends when echoing 4 to
/proc/acpi/sleep, and nothing happens when echoing disk to
/sys/power/state ? Aren't those two things supposed to be equivalent ?
Regards,

?ric Brunet

2003-09-03 00:02:50

by Patrick Mochel

[permalink] [raw]
Subject: Re: Power Management Update


> The result is a panic at different place when resuming from suspend to
> disk. Hand written partial debugging info:
>
> EIP is at swsusp_arch_suspend
> eax: 07200720 ebx: 07200720 ecx: c1700000 edx=esi=edi=ebp=0 esp=df793fac
> Process swapper
> Call trace:
> swsusp_restore
> pm_resume
> do_initcalls
> init_workqueues
> init
> init
> kernel_thread_helper
> Code: 8a 04 02 88 04 1a 0f 20 d8 0f 22 d8 a1 18 70 37 c0 8d 50 01
> Panic: attempted to kill init !

Ouch, thanks for the report.

Can you tell me if and when swsusp last worked for you?

> By the way, how comes the computer suspends when echoing 4 to
> /proc/acpi/sleep, and nothing happens when echoing disk to
> /sys/power/state ? Aren't those two things supposed to be equivalent ?
> Regards,

Try 'echo -n disk > /sys/power/state'.


Pat

2003-09-03 09:40:32

by Mathieu LESNIAK

[permalink] [raw]
Subject: Re: Power Management Update

Patrick Mochel wrote:
> I apologize for the delay in getting back to you - I wanted to test an
> actual fix, rather than just a work around.
>
> I encountered this problem by having an IDE CD-ROM, but not having the
> ide-cd drier compiled in. The patch below is from Benh, who wrote the IDE
> power managment handlers.
>
> He mentioned producing a cleaner patch, but this should at least fix the
> Oops. Please give it a try and report if it helps or not.
>
> Thanks,
>
>
> Pat

Hi,

I've tested the patch you submitted for ide-io.c (I've tested it in
test4-mm5).
It solves the ide-cd problem, and the suspend process get to next step.
It frees memory. However, just after that, the system get in a loop
displaying "Bad: scheduling while atomic". I'm not able to capture the
output of this, the laptop only responding to syrq.
Hope it helps you.

Mathieu LESNIAK

2003-09-03 22:46:38

by Patrick Mochel

[permalink] [raw]
Subject: Re: Power Management Update


> I've tested the patch you submitted for ide-io.c (I've tested it in
> test4-mm5).
> It solves the ide-cd problem, and the suspend process get to next step.
> It frees memory. However, just after that, the system get in a loop
> displaying "Bad: scheduling while atomic". I'm not able to capture the
> output of this, the laptop only responding to syrq.
> Hope it helps you.

Definitely. I take it you have preempt enabled, right?

Below is a patch that should fix the problem. The problem was due to the
fact that I removed the kernel_fpu_end() call from
kernel/power/swsusp.c::swsusp_suspend(). kernel_fpu_end() disables
preempt, which causes any subsequent schedule() to trigger that BUG(). I
apologize for this regression.

The patch needs a bit more explanation, because I didn't simply replace
the call. Doing so would be a layering violation of the structure of the
code. kernel_fpu_end() is called by save_processor_state(), which is
called by swsusp_arch_suspend(). We should be calling it from the same
chain, and we shouldn't be calling a function from generic code that is
defined on only two architectures.

I modified swsusp_arch_suspend() to unconditionally call
restore_processor_state() when exiting, which provides the same layering.
However, it is still too late WRT to the other things that
swsusp_suspend() was doing (resuming drivers and writing the image).

Since those are unrelated to snapshotting memory, I divorced them from the
function. swsusp_save() now is the function that is responsible for
snapshoting memory, while swsusp_write() is responsible for writing the
image, only.

The resulting code is cleaner and more streamlined. It behaves as
predicted locally. Please try it and report whether or not it works for
you.

Andrew, please apply this to -test4-mm5. I realize I said I would not
touch swsusp any more, and this patch may become irrelevant in the future.
But, it fixes a real bug now.

Thanks,


Pat


===== arch/i386/power/swsusp.S 1.9 vs edited =====
--- 1.9/arch/i386/power/swsusp.S Fri Aug 22 16:08:57 2003
+++ edited/arch/i386/power/swsusp.S Wed Sep 3 15:23:20 2003
@@ -76,10 +76,10 @@
movl saved_context_edx, %edx
movl saved_context_esi, %esi
movl saved_context_edi, %edi
- call restore_processor_state
pushl saved_context_eflags ; popfl
call swsusp_resume
.L1449:
+ call restore_processor_state
popl %ebx
ret

===== kernel/power/disk.c 1.2 vs edited =====
--- 1.2/kernel/power/disk.c Tue Aug 26 12:25:46 2003
+++ edited/kernel/power/disk.c Wed Sep 3 15:20:10 2003
@@ -163,27 +163,27 @@

pr_debug("PM: snapshotting memory.\n");
in_suspend = 1;
- local_irq_disable();
if ((error = swsusp_save()))
goto Done;

- pr_debug("PM: writing image.\n");
+ if (in_suspend) {
+ pr_debug("PM: writing image.\n");

- /*
- * FIXME: Leftover from swsusp. Are they necessary?
- */
- mb();
- barrier();
-
- error = swsusp_write();
- if (!error && in_suspend) {
- error = power_down(pm_disk_mode);
- pr_debug("PM: Power down failed.\n");
+ /*
+ * FIXME: Leftover from swsusp. Are they necessary?
+ */
+ mb();
+ barrier();
+
+ error = swsusp_write();
+ if (!error) {
+ error = power_down(pm_disk_mode);
+ pr_debug("PM: Power down failed.\n");
+ }
} else
pr_debug("PM: Image restored successfully.\n");
swsusp_free();
Done:
- local_irq_enable();
finish();
return error;
}
@@ -217,7 +217,6 @@

barrier();
mb();
- local_irq_disable();

/* FIXME: The following (comment and mdelay()) are from swsusp.
* Are they really necessary?
@@ -231,7 +230,6 @@

pr_debug("PM: Restoring saved image.\n");
swsusp_restore();
- local_irq_enable();
pr_debug("PM: Restore failed, recovering.n");
finish();
Free:
===== kernel/power/swsusp.c 1.62 vs edited =====
--- 1.62/kernel/power/swsusp.c Sat Aug 30 13:23:28 2003
+++ edited/kernel/power/swsusp.c Wed Sep 3 15:23:35 2003
@@ -416,11 +416,12 @@
}


-static int suspend_prepare_image(void)
+int swsusp_suspend(void)
{
struct sysinfo i;
unsigned int nr_needed_pages = 0;

+ read_swapfiles();
drain_local_pages();

pagedir_nosave = NULL;
@@ -486,12 +487,10 @@
static int suspend_save_image(void)
{
int error;
- local_irq_enable();
device_resume();
lock_swapdevices();
error = write_suspend_image();
lock_swapdevices();
- local_irq_disable();
return error;
}

@@ -515,35 +514,16 @@
if (!resume) {
save_processor_state();
SAVE_REGISTERS
- swsusp_suspend();
- return;
+ return swsusp_suspend();
}
GO_TO_SWAPPER_PAGE_TABLES
COPY_PAGES_BACK
RESTORE_REGISTERS
restore_processor_state();
- swsusp_resume();
-
+ return swsusp_resume();
*/


-int swsusp_suspend(void)
-{
- int error;
- read_swapfiles();
- error = suspend_prepare_image();
- if (!error)
- error = suspend_save_image();
- if (error) {
- printk(KERN_EMERG "%sSuspend failed, trying to recover...\n",
- name_suspend);
- barrier();
- mb();
- mdelay(1000);
- }
- return error;
-}
-
/* More restore stuff */

/* FIXME: Why not memcpy(to, from, 1<<pagedir_order*PAGE_SIZE)? */
@@ -870,11 +850,19 @@

int swsusp_save(void)
{
+ int error;
+
#if defined (CONFIG_HIGHMEM) || defined (COFNIG_DISCONTIGMEM)
printk("swsusp is not supported with high- or discontig-mem.\n");
return -EPERM;
#endif
- return arch_prepare_suspend();
+ if ((error = arch_prepare_suspend()))
+ return error;
+
+ local_irq_disable();
+ error = swsusp_arch_suspend(0);
+ local_irq_enable();
+ return error;
}


@@ -890,7 +878,7 @@

int swsusp_write(void)
{
- return swsusp_arch_suspend(0);
+ return suspend_save_image();
}


@@ -933,7 +921,11 @@

int __init swsusp_restore(void)
{
- return swsusp_arch_suspend(1);
+ int error;
+ local_irq_disable();
+ error = swsusp_arch_suspend(1);
+ local_irq_enable();
+ return error;
}



2003-09-04 09:35:57

by Éric Brunet

[permalink] [raw]
Subject: Re: Power Management Update

On Wed, Sep 03, 2003 at 03:41:14PM -0700, Patrick Mochel wrote:
> > It solves the ide-cd problem, and the suspend process get to next step.
> > It frees memory. However, just after that, the system get in a loop
> > displaying "Bad: scheduling while atomic". I'm not able to capture the
> > output of this, the laptop only responding to syrq.
> > Hope it helps you.
>
> Definitely. I take it you have preempt enabled, right?

I don't have preempt enabled, so I thought that this patch wasn't
concerning me, but I tried it anyway. Result is a definite regression.

standby/S1 or mem/S3 make the kernel oops and hangs. Call strace:
enter_state
suspend_prepare
enter_state
state_store
subsys_attr_store
fill_write_buffer
sysfs_write_file
vfs_write
sys_write
sysenter_past_esp
or
acpi_system_write_sleep
acpi_system_write_sleep
vfs_write
sys_write
sysenter_past_esp
(depending on whether I use /sys/power/state or /proc/acpi/sleep)

Before the patch, S1 and S3 would have the screen blink and computer
immediately resume to normal operation. Sometimes, S1 would actually
standby (screen lit and hard disk spinning, though) waiting for a
keypress.

disk/S4 don't suspend anymore. It starts very well, but the computer
immediately resume to normal operation:
Stopping tasks: ====================================================|
Freeing memory: ........|
hdc: start_power_step(step: 0)
hdc: completing PM request, suspend
hda: start_power_step(step: 0)
hda: start_power_step(step: 1)
hda: complete_power_step(step: 1, stat: 50, err: 0)
hda: completing PM request, suspend
PM: Attempting to suspend to disk.
PM: snapshotting memory.
/critical section: Counting pages to copy[nosave c0377000] (pages needed:
46357+512=46869 free: 82650)
Alloc pagedir
[nosave c0377000]critical section/: done (46357 pages copied)
Packet log: input REJECT eth1 PROTO=17 207.34.121.71:1184
192.168.1.8:1434 L=404 S=0x00 I=38123 F=0x0000 T=112 (#14)
PCI: Setting latency timer of device 0000:00:1d.0 to 64
PCI: Setting latency timer of device 0000:00:1d.1 to 64
PCI: Setting latency timer of device 0000:00:1d.2 to 64
PCI: Setting latency timer of device 0000:00:1f.5 to 64
eth0: Setting half-duplex based on auto-negotiated partner ability 0000.
hda: Wakeup request inited, waiting for !BSY...
hda: start_power_step(step: 1000)
blk: queue df60d800, I/O limit 4095Mb (mask 0xffffffff)
hda: completing PM request, resume
hdc: Wakeup request inited, waiting for !BSY...
hdc: start_power_step(step: 1000)
hdc: completing PM request, resume
Restarting tasks... done

Prior to the patch, the computer would suspend and bug at resume time.

> Andrew, please apply this to -test4-mm5. I realize I said I would not
> touch swsusp any more, and this patch may become irrelevant in the future.
> But, it fixes a real bug now.

Thank you for actually improving swsusp, despite what you said.

?ric

2003-09-04 19:37:32

by Patrick Mochel

[permalink] [raw]
Subject: Re: Power Management Update


This is boggling.

> standby/S1 or mem/S3 make the kernel oops and hangs. Call strace:
> enter_state
> suspend_prepare
> enter_state

Is there anyway that you remember what the Oops was (i.e. the few lines
above the back trace)?

Also, could you please confirm that you're using 2.6.0-test4 + the PM
patches I posted last Saturday + the patch I posted yesterday? I trust
that you are, however I cannot reproduce the Oops at all.

The Oops looks the one that was present in -test4 initially, but why
you're able to at least begin a suspend-to-disk transition doesn't make
sense.

> Before the patch, S1 and S3 would have the screen blink and computer
> immediately resume to normal operation. Sometimes, S1 would actually
> standby (screen lit and hard disk spinning, though) waiting for a
> keypress.

Based on your dmesg here:

http://perso.nerim.net/~tudia/bug-reports/2.6.0-pre4-pm

Your system does not support S3, so returning immediately would be the
proper thing to do. I will continue to investigate.

Thanks for testing,


Pat

2003-09-07 09:54:36

by Éric Brunet

[permalink] [raw]
Subject: Re: Power Management Update

Hello,

I have been testing swsusp to disk on my computer using kernel
2.6.0-test4 + Patrick Mochel's main PM patch (posted on lkml on aug 31) +
IDE PM fix from benh (posted on lkml by P. Mochel on sep 2)

I found that my computer is able to suspend to disk if I boot with
init=/bin/sh, but not with a normal boot. I tried swsusp with a normal
boot (Xfree, kde, ...) but after removing several modules form
/lib/modules, to see which modules make problems. What I found:

* swsusp doesn't like accelerated graphics. If the following modules are
loaded:
i830 68120 20
intel_agp 14744 1
agpgart 25640 3 intel_agp
resuming fails. (Different kind of failures, from spontaneous reboot to
kernel panic.) I could try to pinpoint more precisely which module
causes trouble.

* Apart from that, the computer can suspend and come back to life !
Modules loaded:
snd_mixer_oss 16768 3
binfmt_misc 8200 1
autofs 12928 0
ne2k_pci 8288 0
8390 8576 1 ne2k_pci
snd_virmidi 3584 2
snd_seq_virmidi 5632 1 snd_virmidi
ipchains 48080 15
ide_cd 36736 0
cdrom 33312 1 ide_cd
loop 13192 14
hid 30272 0
ehci_hcd 21120 0
uhci_hcd 27656 0
usbcore 91348 5 hid,ehci_hcd,uhci_hcd
However, the mouse is not working anymore (mouse is usb, the only usb
device connected) nor network on eth1 (I haven't tried eth0.)
Here are the last lines of the log after resuming:
Restarting tasks...<6>usb 1-1: USB disconnect, address 2 done
PM: Removing info for usb:1-1:0
PM: Removing info for usb:1-1
hub 1-0:0: debounce: port 1: delay 100ms stable 4 status 0x301
eth1: mismatched read page pointers 3c vs 66.
eth1: mismatched read page pointers 4c vs d7.
eth1: mismatched read page pointers 4c vs d7.
eth1: mismatched read page pointers 4c vs d7.
eth1: mismatched read page pointers 4c vs d7.
eth1: mismatched read page pointers 4c vs d7.
eth1: mismatched read page pointers 4c vs d7.
eth1: mismatched read page pointers 4c vs d7.
eth1: mismatched read page pointers 4c vs d7.
hub 1-0:0: new USB device on port 1, assigned address 3
usb 1-1: control timeout on ep0out
eth1 is
01:08.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL-8029(AS)
Subsystem: Realtek Semiconductor Co., Ltd. RTL-8029(AS)
Control: I/O+ Mem+ BusMaster- SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B-
Status: Cap- 66Mhz- UDF- FastB2B- ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR-
Interrupt: pin A routed to IRQ 20
Region 0: I/O ports at c800 [size=32]

A last point; lates patch from P. Mochel (posted on Sep 3, supposed to
fix configuration with preempt enabled) completely prevents me from
suspending to disk.

Many data on my computer (.config, lspci, dsdt) available on
http://perso.nerim.net/~tudia/bug-reports/


?ric Brunet


2003-09-08 19:56:57

by Patrick Mochel

[permalink] [raw]
Subject: Re: Power Management Update


> I have been testing swsusp to disk on my computer using kernel
> 2.6.0-test4 + Patrick Mochel's main PM patch (posted on lkml on aug 31) +
> IDE PM fix from benh (posted on lkml by P. Mochel on sep 2)
>
> I found that my computer is able to suspend to disk if I boot with
> init=/bin/sh, but not with a normal boot. I tried swsusp with a normal
> boot (Xfree, kde, ...) but after removing several modules form
> /lib/modules, to see which modules make problems. What I found:

Wow. Thanks a lot for taking the time to test this.

> * swsusp doesn't like accelerated graphics. If the following modules are
> loaded:
> i830 68120 20
> intel_agp 14744 1
> agpgart 25640 3 intel_agp
> resuming fails. (Different kind of failures, from spontaneous reboot to
> kernel panic.) I could try to pinpoint more precisely which module
> causes trouble.

This is not suprising, and likely something that many people will run
into. There is a lot of driver work that needs to be done, especially WRT
video devices, as many of them are not tied into the new driver model at
all.

For now, the best I can say is to manually unload those modules before
suspending and reloading them after resume. We'll work on getting the
drivers fixed up, but it will probably take a while.

> * Apart from that, the computer can suspend and come back to life !
> Modules loaded:
> snd_mixer_oss 16768 3
> binfmt_misc 8200 1
> autofs 12928 0
> ne2k_pci 8288 0
> 8390 8576 1 ne2k_pci
> snd_virmidi 3584 2
> snd_seq_virmidi 5632 1 snd_virmidi
> ipchains 48080 15
> ide_cd 36736 0
> cdrom 33312 1 ide_cd
> loop 13192 14
> hid 30272 0
> ehci_hcd 21120 0
> uhci_hcd 27656 0
> usbcore 91348 5 hid,ehci_hcd,uhci_hcd
> However, the mouse is not working anymore (mouse is usb, the only usb
> device connected) nor network on eth1 (I haven't tried eth0.)

For both the mouse and eth1, will they work if you unload the modules
first, and reload them after resuming?

Thanks,


Pat

2003-09-09 10:53:43

by Éric Brunet

[permalink] [raw]
Subject: Re: Power Management Update

On Mon, Sep 08, 2003 at 12:54:12PM -0700, Patrick Mochel wrote:
> > * swsusp doesn't like accelerated graphics. If the following modules are
> > loaded:
> > i830 68120 20
> > intel_agp 14744 1
> > agpgart 25640 3 intel_agp
> > resuming fails. (Different kind of failures, from spontaneous reboot to
>
> This is not suprising, and likely something that many people will run
> into. There is a lot of driver work that needs to be done, especially WRT
> video devices, as many of them are not tied into the new driver model at
> all.

If you want more testers and interesting bug reports, that should be some
kinfd of priority, no ? Everybody is running with accelerated graphics
modules, nowadays.
>
> For now, the best I can say is to manually unload those modules before
> suspending and reloading them after resume. We'll work on getting the
> drivers fixed up, but it will probably take a while.
>
> > However, the mouse is not working anymore (mouse is usb, the only usb
> > device connected) nor network on eth1 (I haven't tried eth0.)
>
> For both the mouse and eth1, will they work if you unload the modules
> first, and reload them after resuming?

Ok, I tried this: after a normal boot, I went back to runlevel 3,
ifconfig'ed down eth1, unloaded modules i830, hid, ehci-hcd, uhcd-hcd
ne2K-pci and 8390 and echoed 4 to /proc/sleep/acpi. Note that intel_agp,
agpgart and usbcore were still there, those modules can't be removed once
loaded.

The system suspended and resumed correctly.

I ifconfig'ed up eth1 (which loaded automagically the two modules), and
network was working. I loaded hid, ehci-hcd and uhcd-hcd, and mouse was
working. I telinit'ed 5, X started, went back to runlevel 3 to load i830
which I had forgotten, went back again to runlevel 5. X was working fine,
and video acceleration too. (I think I saw a little glitch on screen; a
little gray line, there, that diseapeared quickly.)

Then I tried to pinpoint more precisely what was wrong. Back to telinit
3. ifconfig down eth1, but keep the modules loaded. rmmod i830, hid, but
keep ehci-hcd and uhci-hcd. I expected that, at least, the computer would
suspend and resume, and I wanted to see if I could recover my mouse and
network interface. I got a black screen at suspend time, and had to
reboot with magic sysrq. I thought that the computer wouldn't suspend
twice in a row.

After a clean boot, I tried again my latest experiment: telinit 3, rmmod
i830, rmmod hid, ifconfig eth1 down, echo 4 > /proc/acpi/sleep.
As I said, the computer should be able to suspend/resume in that
configuration. This time, it failed at resuming. Beautifull kernel panic,
tried to kill init, etc.

It isn't logical. To sum up:

agpgart i830 hid+uhci+ehci eth1 | suspend+resume
+intel_agp |
----------------------------------------------------------+--
unloaded unloaded loaded loaded+up | works but
| mouse+eth1 fail

loaded unloaded unloaded unloaded | works and
| mouse+eth1 can be
| recovered

loaded unloaded partially loaded | does not work.
loaded but down

What this probably means is that one of my succes was a piece of luck,
non reliably reproducible. Unfortunately, my wife came back from her
trip, and I now have much less time for testing...

If, anyway, I decide to try test5, what patches should be applied ?

?ric

2003-09-09 15:56:54

by Patrick Mochel

[permalink] [raw]
Subject: Re: Power Management Update


On Tue, 9 Sep 2003, ?ric Brunet wrote:

> On Mon, Sep 08, 2003 at 12:54:12PM -0700, Patrick Mochel wrote:
> > > * swsusp doesn't like accelerated graphics. If the following modules are
> > > loaded:
> > > i830 68120 20
> > > intel_agp 14744 1
> > > agpgart 25640 3 intel_agp
> > > resuming fails. (Different kind of failures, from spontaneous reboot to
> >
> > This is not suprising, and likely something that many people will run
> > into. There is a lot of driver work that needs to be done, especially WRT
> > video devices, as many of them are not tied into the new driver model at
> > all.
>
> If you want more testers and interesting bug reports, that should be some
> kinfd of priority, no ? Everybody is running with accelerated graphics
> modules, nowadays.

It is a priority, but they pose a stiff challenge that not many know how
to resolve, including yours truly. We'll get there..

> agpgart i830 hid+uhci+ehci eth1 | suspend+resume
> +intel_agp |
> ----------------------------------------------------------+--
> unloaded unloaded loaded loaded+up | works but
> | mouse+eth1 fail
>
> loaded unloaded unloaded unloaded | works and
> | mouse+eth1 can be
> | recovered
>
> loaded unloaded partially loaded | does not work.
> loaded but down
>
> What this probably means is that one of my succes was a piece of luck,
> non reliably reproducible. Unfortunately, my wife came back from her
> trip, and I now have much less time for testing...

Heh, thanks for testing this so far. This is definitely helpful in
pointing out some trouble areas.


Pat