--- linux-2.6.0-test5/arch/alpha/boot/misc.c 2003-08-08 22:55:10.000000000 -0700 +++ 25/arch/alpha/boot/misc.c 2003-09-13 11:31:52.000000000 -0700 @@ -106,8 +106,8 @@ static void *malloc(int size) { void *p; - if (size <0) error("Malloc error\n"); - if (free_mem_ptr <= 0) error("Memory error\n"); + if (size <0) error("Malloc error"); + if (free_mem_ptr <= 0) error("Memory error"); free_mem_ptr = (free_mem_ptr + 3) & ~3; /* Align */ @@ -140,7 +140,7 @@ static void gzip_release(void **ptr) int fill_inbuf(void) { if (insize != 0) - error("ran out of input data\n"); + error("ran out of input data"); inbuf = input_data; insize = input_data_size; --- linux-2.6.0-test5/arch/alpha/kernel/core_irongate.c 2003-06-14 12:18:25.000000000 -0700 +++ 25/arch/alpha/kernel/core_irongate.c 2003-09-13 11:32:25.000000000 -0700 @@ -391,7 +391,7 @@ irongate_ioremap(unsigned long addr, uns cur_gatt = phys_to_virt(GET_GATT(baddr) & ~1); pte = cur_gatt[GET_GATT_OFF(baddr)] & ~1; - if (__alpha_remap_area_pages(VMALLOC_VMADDR(vaddr), + if (__alpha_remap_area_pages(vaddr, pte, PAGE_SIZE, 0)) { printk("AGP ioremap: FAILED to map...\n"); vfree(area->addr); --- linux-2.6.0-test5/arch/alpha/kernel/core_marvel.c 2003-08-22 19:23:39.000000000 -0700 +++ 25/arch/alpha/kernel/core_marvel.c 2003-09-13 11:32:25.000000000 -0700 @@ -696,7 +696,7 @@ marvel_ioremap(unsigned long addr, unsig } pfn >>= 1; /* make it a true pfn */ - if (__alpha_remap_area_pages(VMALLOC_VMADDR(vaddr), + if (__alpha_remap_area_pages(vaddr, pfn << PAGE_SHIFT, PAGE_SIZE, 0)) { printk("FAILED to map...\n"); --- linux-2.6.0-test5/arch/alpha/kernel/core_titan.c 2003-09-08 13:58:55.000000000 -0700 +++ 25/arch/alpha/kernel/core_titan.c 2003-09-13 11:32:25.000000000 -0700 @@ -534,7 +534,7 @@ titan_ioremap(unsigned long addr, unsign } pfn >>= 1; /* make it a true pfn */ - if (__alpha_remap_area_pages(VMALLOC_VMADDR(vaddr), + if (__alpha_remap_area_pages(vaddr, pfn << PAGE_SHIFT, PAGE_SIZE, 0)) { printk("FAILED to map...\n"); --- linux-2.6.0-test5/arch/arm26/boot/compressed/misc.c 2003-06-14 12:18:04.000000000 -0700 +++ 25/arch/arm26/boot/compressed/misc.c 2003-09-13 11:31:52.000000000 -0700 @@ -191,8 +191,8 @@ static void *malloc(int size) { void *p; - if (size <0) error("Malloc error\n"); - if (free_mem_ptr <= 0) error("Memory error\n"); + if (size <0) error("Malloc error"); + if (free_mem_ptr <= 0) error("Memory error"); free_mem_ptr = (free_mem_ptr + 3) & ~3; /* Align */ @@ -236,7 +236,7 @@ static void gzip_release(void **ptr) int fill_inbuf(void) { if (insize != 0) - error("ran out of input data\n"); + error("ran out of input data"); inbuf = input_data; insize = &input_data_end[0] - &input_data[0]; --- linux-2.6.0-test5/arch/arm/boot/compressed/head-sa1100.S 2003-06-14 12:17:58.000000000 -0700 +++ 25/arch/arm/boot/compressed/head-sa1100.S 2003-09-13 11:31:52.000000000 -0700 @@ -34,6 +34,10 @@ __SA1100_start: @ REVISIT_PFS168: Temporary until firmware updated to use assigned machine number mov r7, #MACH_TYPE_PFS168 #endif +#ifdef CONFIG_SA1100_SIMPAD / + @ UNTIL we've something like an open bootldr + mov r7, #MACH_TYPE_SIMPAD @should be 87 +#endif #ifdef CONFIG_SA1100_VICTOR teq r7, #MACH_TYPE_VICTOR --- linux-2.6.0-test5/arch/arm/boot/compressed/misc.c 2003-06-14 12:18:25.000000000 -0700 +++ 25/arch/arm/boot/compressed/misc.c 2003-09-13 11:31:52.000000000 -0700 @@ -191,8 +191,8 @@ static void *malloc(int size) { void *p; - if (size <0) error("Malloc error\n"); - if (free_mem_ptr <= 0) error("Memory error\n"); + if (size <0) error("Malloc error"); + if (free_mem_ptr <= 0) error("Memory error"); free_mem_ptr = (free_mem_ptr + 3) & ~3; /* Align */ @@ -236,7 +236,7 @@ static void gzip_release(void **ptr) int fill_inbuf(void) { if (insize != 0) - error("ran out of input data\n"); + error("ran out of input data"); inbuf = input_data; insize = &input_data_end[0] - &input_data[0]; --- linux-2.6.0-test5/arch/arm/common/sa1111.c 2003-09-08 13:58:55.000000000 -0700 +++ 25/arch/arm/common/sa1111.c 2003-09-13 11:31:52.000000000 -0700 @@ -958,17 +958,6 @@ static struct device_driver sa1111_devic }; /* - * Register the SA1111 driver with LDM. - */ -static int sa1111_driver_init(void) -{ - driver_register(&sa1111_device_driver); - return 0; -} - -arch_initcall(sa1111_driver_init); - -/* * Get the parent device driver (us) structure * from a child function device */ @@ -1180,13 +1169,6 @@ struct bus_type sa1111_bus_type = { .resume = sa1111_bus_resume, }; -static int sa1111_rab_bus_init(void) -{ - return bus_register(&sa1111_bus_type); -} - -postcore_initcall(sa1111_rab_bus_init); - int sa1111_driver_register(struct sa1111_driver *driver) { driver->drv.probe = sa1111_bus_probe; @@ -1200,6 +1182,26 @@ void sa1111_driver_unregister(struct sa1 driver_unregister(&driver->drv); } +static int __init sa1111_init(void) +{ + int ret = bus_register(&sa1111_bus_type); + if (ret == 0) + driver_register(&sa1111_device_driver); + return ret; +} + +static void __exit sa1111_exit(void) +{ + driver_unregister(&sa1111_device_driver); + bus_unregister(&sa1111_bus_type); +} + +module_init(sa1111_init); +module_exit(sa1111_exit); + +MODULE_DESCRIPTION("Intel Corporation SA1111 core driver"); +MODULE_LICENSE("GPL"); + EXPORT_SYMBOL(sa1111_check_dma_bug); EXPORT_SYMBOL(sa1111_select_audio_mode); EXPORT_SYMBOL(sa1111_set_audio_rate); --- linux-2.6.0-test5/arch/arm/mach-sa1100/simpad.c 2003-06-14 12:17:57.000000000 -0700 +++ 25/arch/arm/mach-sa1100/simpad.c 2003-09-13 11:31:52.000000000 -0700 @@ -9,24 +9,37 @@ #include #include #include +#include +#include #include #include +#include #include #include #include +#include +#include + #include +#include +#include #include "generic.h" long cs3_shadow; -long get_cs3_shadow() +long get_cs3_shadow(void) { return cs3_shadow; } +void set_cs3(long value) +{ + *(CS3BUSTYPE *)(CS3_BASE) = cs3_shadow = value; +} + void set_cs3_bit(int value) { cs3_shadow |= value; @@ -39,10 +52,15 @@ void clear_cs3_bit(int value) *(CS3BUSTYPE *)(CS3_BASE) = cs3_shadow; } +EXPORT_SYMBOL(set_cs3_bit); +EXPORT_SYMBOL(clear_cs3_bit); + static struct map_desc simpad_io_desc[] __initdata = { - /* virtual physical length type */ - { 0xf2800000, 0x4b800000, 0x00800000, MT_DEVICE }, /* MQ200 */ - { 0xf1000000, 0x18000000, 0x00100000, MT_DEVICE } /* Paules CS3, write only */ + /* virtual physical length type */ + /* MQ200 */ + { 0xf2800000, 0x4b800000, 0x00800000, MT_DEVICE }, + /* Paules CS3, write only */ + { 0xf1000000, 0x18000000, 0x00100000, MT_DEVICE }, }; @@ -50,32 +68,52 @@ static void simpad_uart_pm(struct uart_p { if (port->mapbase == (u_int)&Ser1UTCR0) { if (state) + { clear_cs3_bit(RS232_ON); - else + clear_cs3_bit(DECT_POWER_ON); + }else + { set_cs3_bit(RS232_ON); + set_cs3_bit(DECT_POWER_ON); + } } } static struct sa1100_port_fns simpad_port_fns __initdata = { - .pm = simpad_uart_pm, + .pm = simpad_uart_pm, }; static void __init simpad_map_io(void) { sa1100_map_io(); + iotable_init(simpad_io_desc, ARRAY_SIZE(simpad_io_desc)); - PSPR = 0xc0008000; - GPDR &= ~GPIO_GPIO0; - cs3_shadow = (EN1 | EN0 | LED2_ON | DISPLAY_ON | RS232_ON | - ENABLE_5V | RESET_SIMCARD); - *(CS3BUSTYPE *)(CS3_BASE) = cs3_shadow; + set_cs3_bit (EN1 | EN0 | LED2_ON | DISPLAY_ON | RS232_ON | + ENABLE_5V | RESET_SIMCARD | DECT_POWER_ON); + + + sa1100_register_uart_fns(&simpad_port_fns); + sa1100_register_uart(0, 3); /* serial interface */ + sa1100_register_uart(1, 1); /* DECT */ + + // Reassign UART 1 pins + GAFR |= GPIO_UART_TXD | GPIO_UART_RXD; + GPDR |= GPIO_UART_TXD | GPIO_LDD13 | GPIO_LDD15; + GPDR &= ~GPIO_UART_RXD; + PPAR |= PPAR_UPR; + + /* + * Set up registers for sleep mode. + */ + + + PWER = PWER_GPIO0| PWER_RTC; + PGSR = 0x818; + PCFR = 0; + PSDR = 0; - //It is only possible to register 3 UART in serial_sa1100.c - sa1100_register_uart(0, 3); - sa1100_register_uart(1, 1); - set_irq_type(IRQ_GPIO_UCB1300_IRQ, IRQT_RISING); } #ifdef CONFIG_PROC_FS @@ -105,7 +143,7 @@ static int proc_cs3_read(char *page, cha char *p = page; int len, i; - p += sprintf(p, "Chipselect3 : %x\n", cs3_shadow); + p += sprintf(p, "Chipselect3 : %x\n", (uint)cs3_shadow); for (i = 0; i <= 15; i++) { if(cs3_shadow & (1<read_proc = proc_cs3_read; + proc_cs3->write_proc = (void*)proc_cs3_write; + } +#endif + + + return 0; } arch_initcall(cs3_init); -#endif // CONFIG_PROC_FS +static void simpad_power_off(void) +{ + local_irq_disable(); // was cli + set_cs3(0x800); /* only SD_MEDIAQ */ + + /* disable internal oscillator, float CS lines */ + PCFR = (PCFR_OPDE | PCFR_FP | PCFR_FS); + /* enable wake-up on GPIO0 (Assabet...) */ + PWER = GFER = GRER = 1; + /* + * set scratchpad to zero, just in case it is used as a + * restart address by the bootloader. + */ + PSPR = 0; + PGSR = 0; + /* enter sleep mode */ + PMCR = PMCR_SF; + while(1); + + local_irq_enable(); /* we won't ever call it */ + + +} + +static int __init simpad_init(void) +{ + set_power_off_handler( simpad_power_off ); + return 0; +} + +arch_initcall(simpad_init); + MACHINE_START(SIMPAD, "Simpad") MAINTAINER("Juergen Messerer") BOOT_MEM(0xc0000000, 0x80000000, 0xf8000000) + BOOT_PARAMS(0xc0000100) MAPIO(simpad_map_io) INITIRQ(sa1100_init_irq) MACHINE_END --- linux-2.6.0-test5/arch/arm/mm/ioremap.c 2003-06-14 12:18:24.000000000 -0700 +++ 25/arch/arm/mm/ioremap.c 2003-09-13 11:32:25.000000000 -0700 @@ -150,7 +150,7 @@ __ioremap(unsigned long phys_addr, size_ if (!area) return NULL; addr = area->addr; - if (remap_area_pages(VMALLOC_VMADDR(addr), phys_addr, size, flags)) { + if (remap_area_pages((unsigned long) addr, phys_addr, size, flags)) { vfree(addr); return NULL; } --- linux-2.6.0-test5/arch/cris/arch-v10/boot/compressed/misc.c 2003-07-10 18:50:30.000000000 -0700 +++ 25/arch/cris/arch-v10/boot/compressed/misc.c 2003-09-13 11:31:52.000000000 -0700 @@ -115,7 +115,7 @@ static void *malloc(int size) { void *p; - if (size <0) error("Malloc error\n"); + if (size <0) error("Malloc error"); free_mem_ptr = (free_mem_ptr + 3) & ~3; /* Align */ --- linux-2.6.0-test5/arch/cris/mm/ioremap.c 2003-07-10 18:50:30.000000000 -0700 +++ 25/arch/cris/mm/ioremap.c 2003-09-13 11:32:25.000000000 -0700 @@ -157,7 +157,7 @@ void * __ioremap(unsigned long phys_addr if (!area) return NULL; addr = area->addr; - if (remap_area_pages(VMALLOC_VMADDR(addr), phys_addr, size, flags)) { + if (remap_area_pages((unsigned long) addr, phys_addr, size, flags)) { vfree(addr); return NULL; } --- linux-2.6.0-test5/arch/h8300/kernel/signal.c 2003-08-22 19:23:40.000000000 -0700 +++ 25/arch/h8300/kernel/signal.c 2003-09-13 11:32:15.000000000 -0700 @@ -593,7 +593,7 @@ asmlinkage int do_signal(sigset_t *oldse continue; case SIGTSTP: case SIGTTIN: case SIGTTOU: - if (is_orphaned_pgrp(current->pgrp)) + if (is_orphaned_pgrp(process_group(current))) continue; /* FALLTHRU */ --- linux-2.6.0-test5/arch/i386/boot98/compressed/misc.c 2003-06-14 12:18:01.000000000 -0700 +++ 25/arch/i386/boot98/compressed/misc.c 2003-09-13 11:31:52.000000000 -0700 @@ -132,8 +132,8 @@ static void *malloc(int size) { void *p; - if (size <0) error("Malloc error\n"); - if (free_mem_ptr <= 0) error("Memory error\n"); + if (size <0) error("Malloc error"); + if (free_mem_ptr <= 0) error("Memory error"); free_mem_ptr = (free_mem_ptr + 3) & ~3; /* Align */ @@ -141,7 +141,7 @@ static void *malloc(int size) free_mem_ptr += size; if (free_mem_ptr >= free_mem_end_ptr) - error("\nOut of memory\n"); + error("Out of memory"); return p; } @@ -232,7 +232,7 @@ static void* memcpy(void* __dest, __cons static int fill_inbuf(void) { if (insize != 0) { - error("ran out of input data\n"); + error("ran out of input data"); } inbuf = input_data; @@ -306,9 +306,9 @@ struct { static void setup_normal_output_buffer(void) { #ifdef STANDARD_MEMORY_BIOS_CALL - if (EXT_MEM_K < 1024) error("Less than 2MB of memory.\n"); + if (EXT_MEM_K < 1024) error("Less than 2MB of memory"); #else - if ((ALT_MEM_K > EXT_MEM_K ? ALT_MEM_K : EXT_MEM_K) < 1024) error("Less than 2MB of memory.\n"); + if ((ALT_MEM_K > EXT_MEM_K ? ALT_MEM_K : EXT_MEM_K) < 1024) error("Less than 2MB of memory"); #endif output_data = (char *)0x100000; /* Points to 1M */ free_mem_end_ptr = (long)real_mode; @@ -323,9 +323,9 @@ static void setup_output_buffer_if_we_ru { high_buffer_start = (uch *)(((ulg)&end) + HEAP_SIZE); #ifdef STANDARD_MEMORY_BIOS_CALL - if (EXT_MEM_K < (3*1024)) error("Less than 4MB of memory.\n"); + if (EXT_MEM_K < (3*1024)) error("Less than 4MB of memory"); #else - if ((ALT_MEM_K > EXT_MEM_K ? ALT_MEM_K : EXT_MEM_K) < (3*1024)) error("Less than 4MB of memory.\n"); + if ((ALT_MEM_K > EXT_MEM_K ? ALT_MEM_K : EXT_MEM_K) < (3*1024)) error("Less than 4MB of memory"); #endif mv->low_buffer_start = output_data = (char *)LOW_BUFFER_START; low_buffer_end = ((unsigned int)real_mode > LOW_BUFFER_MAX --- linux-2.6.0-test5/arch/i386/boot/compressed/misc.c 2003-06-14 12:18:23.000000000 -0700 +++ 25/arch/i386/boot/compressed/misc.c 2003-09-13 11:31:52.000000000 -0700 @@ -132,8 +132,8 @@ static void *malloc(int size) { void *p; - if (size <0) error("Malloc error\n"); - if (free_mem_ptr <= 0) error("Memory error\n"); + if (size <0) error("Malloc error"); + if (free_mem_ptr <= 0) error("Memory error"); free_mem_ptr = (free_mem_ptr + 3) & ~3; /* Align */ @@ -141,7 +141,7 @@ static void *malloc(int size) free_mem_ptr += size; if (free_mem_ptr >= free_mem_end_ptr) - error("\nOut of memory\n"); + error("Out of memory"); return p; } @@ -232,7 +232,7 @@ static void* memcpy(void* __dest, __cons static int fill_inbuf(void) { if (insize != 0) { - error("ran out of input data\n"); + error("ran out of input data"); } inbuf = input_data; @@ -306,9 +306,9 @@ struct { static void setup_normal_output_buffer(void) { #ifdef STANDARD_MEMORY_BIOS_CALL - if (EXT_MEM_K < 1024) error("Less than 2MB of memory.\n"); + if (EXT_MEM_K < 1024) error("Less than 2MB of memory"); #else - if ((ALT_MEM_K > EXT_MEM_K ? ALT_MEM_K : EXT_MEM_K) < 1024) error("Less than 2MB of memory.\n"); + if ((ALT_MEM_K > EXT_MEM_K ? ALT_MEM_K : EXT_MEM_K) < 1024) error("Less than 2MB of memory"); #endif output_data = (char *)0x100000; /* Points to 1M */ free_mem_end_ptr = (long)real_mode; @@ -323,9 +323,9 @@ static void setup_output_buffer_if_we_ru { high_buffer_start = (uch *)(((ulg)&end) + HEAP_SIZE); #ifdef STANDARD_MEMORY_BIOS_CALL - if (EXT_MEM_K < (3*1024)) error("Less than 4MB of memory.\n"); + if (EXT_MEM_K < (3*1024)) error("Less than 4MB of memory"); #else - if ((ALT_MEM_K > EXT_MEM_K ? ALT_MEM_K : EXT_MEM_K) < (3*1024)) error("Less than 4MB of memory.\n"); + if ((ALT_MEM_K > EXT_MEM_K ? ALT_MEM_K : EXT_MEM_K) < (3*1024)) error("Less than 4MB of memory"); #endif mv->low_buffer_start = output_data = (char *)LOW_BUFFER_START; low_buffer_end = ((unsigned int)real_mode > LOW_BUFFER_MAX --- linux-2.6.0-test5/arch/i386/boot/Makefile 2003-09-08 13:58:55.000000000 -0700 +++ 25/arch/i386/boot/Makefile 2003-09-13 11:32:07.000000000 -0700 @@ -99,4 +99,4 @@ zlilo: $(BOOTIMAGE) if [ -x /sbin/lilo ]; then /sbin/lilo; else /etc/lilo/install; fi install: $(BOOTIMAGE) - sh $(src)/install.sh $(KERNELRELEASE) $(BOOTIMAGE) System.map "$(INSTALL_PATH)" + sh $(srctree)/$(src)/install.sh $(KERNELRELEASE) $< System.map "$(INSTALL_PATH)" --- linux-2.6.0-test5/arch/i386/boot/setup.S 2003-06-14 12:18:22.000000000 -0700 +++ 25/arch/i386/boot/setup.S 2003-09-14 22:04:06.000000000 -0700 @@ -162,7 +162,7 @@ cmd_line_ptr: .long 0 # (Header versio # can be located anywhere in # low memory 0x10000 or higher. -ramdisk_max: .long MAXMEM-1 # (Header version 0x0203 or later) +ramdisk_max: .long __MAXMEM-1 # (Header version 0x0203 or later) # The highest safe address for # the contents of an initrd @@ -506,6 +506,17 @@ no_voyager: movw $0xAA, (0x1ff) # device present no_psmouse: +#if defined(CONFIG_X86_SPEEDSTEP_SMI) || defined(CONFIG_X86_SPEEDSTEP_SMI_MODULE) + movl $0x0000E980, %eax # IST Support + movl $0x47534943, %edx # Request value + int $0x15 + + movl %eax, (96) + movl %ebx, (100) + movl %ecx, (104) + movl %edx, (108) +#endif + #if defined(CONFIG_APM) || defined(CONFIG_APM_MODULE) # Then check for an APM BIOS... # %ds points to the bootsector --- linux-2.6.0-test5/arch/i386/Kconfig 2003-09-08 13:58:55.000000000 -0700 +++ 25/arch/i386/Kconfig 2003-09-14 22:04:06.000000000 -0700 @@ -397,6 +397,54 @@ config X86_OOSTORE depends on MWINCHIP3D || MWINCHIP2 || MWINCHIPC6 default y +config X86_4G + bool "4 GB kernel-space and 4 GB user-space virtual memory support" + help + This option is only useful for systems that have more than 1 GB + of RAM. + + The default kernel VM layout leaves 1 GB of virtual memory for + kernel-space mappings, and 3 GB of VM for user-space applications. + This option ups both the kernel-space VM and the user-space VM to + 4 GB. + + The cost of this option is additional TLB flushes done at + system-entry points that transition from user-mode into kernel-mode. + I.e. system calls and page faults, and IRQs that interrupt user-mode + code. There's also additional overhead to kernel operations that copy + memory to/from user-space. The overhead from this is hard to tell and + depends on the workload - it can be anything from no visible overhead + to 20-30% overhead. A good rule of thumb is to count with a runtime + overhead of 20%. + + The upside is the much increased kernel-space VM, which more than + quadruples the maximum amount of RAM supported. Kernels compiled with + this option boot on 64GB of RAM and still have more than 3.1 GB of + 'lowmem' left. Another bonus is that highmem IO bouncing decreases, + if used with drivers that still use bounce-buffers. + + There's also a 33% increase in user-space VM size - database + applications might see a boost from this. + + But the cost of the TLB flushes and the runtime overhead has to be + weighed against the bonuses offered by the larger VM spaces. The + dividing line depends on the actual workload - there might be 4 GB + systems that benefit from this option. Systems with less than 4 GB + of RAM will rarely see a benefit from this option - but it's not + out of question, the exact circumstances have to be considered. + +config X86_SWITCH_PAGETABLES + def_bool X86_4G + +config X86_4G_VM_LAYOUT + def_bool X86_4G + +config X86_UACCESS_INDIRECT + def_bool X86_4G + +config X86_HIGH_ENTRY + def_bool X86_4G + config HUGETLB_PAGE bool "Huge TLB Page Support" help @@ -454,6 +502,7 @@ config SMP config NR_CPUS int "Maximum number of CPUs (2-255)" depends on SMP + default "32" if X86_NUMAQ || X86_SUMMIT || X86_BIGSMP || X86_ES7000 default "8" help This allows you to specify the maximum number of CPUs which this @@ -814,49 +863,7 @@ endmenu menu "Power management options (ACPI, APM)" depends on !X86_VOYAGER -config PM - bool "Power Management support" - ---help--- - "Power Management" means that parts of your computer are shut - off or put into a power conserving "sleep" mode if they are not - being used. There are two competing standards for doing this: APM - and ACPI. If you want to use either one, say Y here and then also - to the requisite support below. - - Power Management is most important for battery powered laptop - computers; if you have a laptop, check out the Linux Laptop home - page on the WWW at - and the - Battery Powered Linux mini-HOWTO, available from - . - - Note that, even if you say N here, Linux on the x86 architecture - will issue the hlt instruction if nothing is to be done, thereby - sending the processor to sleep and saving power. - -config SOFTWARE_SUSPEND - bool "Software Suspend (EXPERIMENTAL)" - depends on EXPERIMENTAL && PM && SWAP - ---help--- - Enable the possibilty of suspendig machine. It doesn't need APM. - You may suspend your machine by 'swsusp' or 'shutdown -z