[d-kernel] Опять проблемы acpi?
Александр Новосёлов
n_list at mail.ru
Sun May 16 18:37:38 MSD 2004
On Sun, 16 May 2004 16:04:32 +0400
"Albert R. Valiev" <darkstar at altlinux.ru> wrote:
> В сообщении от 16 Май 2004 01:16 Александр Новосёлов
> написал(a):
> > с новым ядром 2.6.6 появился глюк - при перезагрузке командой
> > reboot выключается питание харда.
>
> Проблема не в acpi, проблема в том, что при перезагрузке
> драйвером ide посылается ненужный suspend на диски. Посмотрим,
> что мона сделать.
http://bugzilla.kernel.org/show_bug.cgi?id=2672
этот патч помог:
diff -urN linux-2.6.6.orig/drivers/ide/ide-disk.c
linux-2.6.6/drivers/ide/ide-disk.c---
linux-2.6.6.orig/drivers/ide/ide-disk.c 2004-05-11
12:40:53.000000000 +0200+++ linux-2.6.6/drivers/ide/ide-disk.c 2004-05-11 12:09:30.000000000
+0200@@ -1704,10 +1704,11 @@
static void ide_device_shutdown(struct device *dev)
{
- ide_drive_t *drive = container_of(dev, ide_drive_t, gendev);
-
- printk("Shutdown: %s\n", drive->name);
- dev->bus->suspend(dev, PM_SUSPEND_STANDBY);
+ if (system_state != SYSTEM_RESTART) {
+ ide_drive_t *drive = container_of(dev, ide_drive_t,
gendev);+ printk("Shutdown: %s\n", drive->name);
+ dev->bus->suspend(dev, PM_SUSPEND_STANDBY);
+ }
}
/*
@@ -1758,6 +1759,8 @@
if (drive->doorlocking && ide_raw_taskfile(drive, &args,
NULL)) drive->doorlocking = 0;
}
+ if (drive->usage != 1 || !drive->removable)
+ return 0;
drive->wcache = 0;
/* Cache enabled? */
if (drive->id->csfo & 1)
diff -urN linux-2.6.6.orig/include/linux/kernel.h
linux-2.6.6/include/linux/kernel.h---
linux-2.6.6.orig/include/linux/kernel.h 2004-05-10
09:31:47.000000000 +0200+++ linux-2.6.6/include/linux/kernel.h 2004-05-11 11:18:09.000000000
+0200@@ -109,14 +109,17 @@
extern void bust_spinlocks(int yes);
extern int oops_in_progress; /* If set, an oops, panic(), BUG() or die() is
in progress */ extern int panic_on_oops;
-extern int system_state; /* See values below */
extern int tainted;
extern const char *print_tainted(void);
/* Values used for system_state */
-#define SYSTEM_BOOTING 0
-#define SYSTEM_RUNNING 1
-#define SYSTEM_SHUTDOWN 2
+extern enum system_states {
+ SYSTEM_BOOTING,
+ SYSTEM_RUNNING,
+ SYSTEM_HALT,
+ SYSTEM_POWER_OFF,
+ SYSTEM_RESTART,
+} system_state;
#define TAINT_PROPRIETARY_MODULE (1<<0)
#define TAINT_FORCED_MODULE (1<<1)
diff -urN linux-2.6.6.orig/init/main.c linux-2.6.6/init/main.c
--- linux-2.6.6.orig/init/main.c 2004-05-10 09:31:47.000000000 +0200
+++ linux-2.6.6/init/main.c 2004-05-11 11:18:09.000000000 +0200
@@ -95,7 +95,8 @@
extern void tc_init(void);
#endif
-int system_state; /* SYSTEM_BOOTING/RUNNING/SHUTDOWN */
+enum system_states system_state;
+EXPORT_SYMBOL(system_state);
/*
* Boot command-line arguments
diff -urN linux-2.6.6.orig/kernel/sys.c linux-2.6.6/kernel/sys.c
--- linux-2.6.6.orig/kernel/sys.c 2004-05-10 09:31:47.000000000 +0200
+++ linux-2.6.6/kernel/sys.c 2004-05-11 11:18:09.000000000 +0200
@@ -447,7 +447,7 @@
switch (cmd) {
case LINUX_REBOOT_CMD_RESTART:
notifier_call_chain(&reboot_notifier_list, SYS_RESTART,
NULL);- system_state = SYSTEM_SHUTDOWN;
+ system_state = SYSTEM_RESTART;
device_shutdown();
printk(KERN_EMERG "Restarting system.\n");
machine_restart(NULL);
@@ -463,7 +463,7 @@
case LINUX_REBOOT_CMD_HALT:
notifier_call_chain(&reboot_notifier_list, SYS_HALT,
NULL);- system_state = SYSTEM_SHUTDOWN;
+ system_state = SYSTEM_HALT;
device_shutdown();
printk(KERN_EMERG "System halted.\n");
machine_halt();
@@ -473,7 +473,7 @@
case LINUX_REBOOT_CMD_POWER_OFF:
notifier_call_chain(&reboot_notifier_list,
SYS_POWER_OFF, NULL);- system_state = SYSTEM_SHUTDOWN;
+ system_state = SYSTEM_POWER_OFF;
device_shutdown();
printk(KERN_EMERG "Power down.\n");
machine_power_off();
@@ -489,7 +489,7 @@
buffer[sizeof(buffer) - 1] = '\0';
notifier_call_chain(&reboot_notifier_list, SYS_RESTART,
buffer);- system_state = SYSTEM_SHUTDOWN;
+ system_state = SYSTEM_RESTART;
device_shutdown();
printk(KERN_EMERG "Restarting system with command
'%s'.\n", buffer); machine_restart(buffer);
More information about the devel-kernel
mailing list