From: Rene Herman <rene.herman@keyaccess.nl>
To: Andrew Morton <akpm@osdl.org>
Cc: B.Zolnierkiewicz@elka.pw.edu.pl, torvalds@osdl.org,
linux-kernel@vger.kernel.org, arjanv@redhat.com
Subject: Re: Linux 2.6.6 "IDE cache-flush at shutdown fixes"
Date: Tue, 11 May 2004 13:24:10 +0200 [thread overview]
Message-ID: <40A0B7DA.9090905@keyaccess.nl> (raw)
In-Reply-To: <20040510221729.3b8e93da.akpm@osdl.org>
[-- Attachment #1: Type: text/plain, Size: 1154 bytes --]
Andrew Morton wrote:
>>It's a bit grubby, but we could easily add a fourth state to
>> `system_state': split SYSTEM_SHUTDOWN into SYSTEM_REBOOT and SYSTEM_HALT.
>> That would be a quite simple change.
>
> Like this. I checked all the SYSTEM_FOO users and none of them seem to
> care about the shutdown state at present. Easy.
Wonderful. Placed the following quick hack on top:
[drivers/ide/ide-disk.c]
@@ -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);
+ }
}
/*
Seems very wrong there; will likely want to be pushed up a few levels,
but... Works For Me.
Have attached a patch of what I'm currently using against 2.6.6 just in
case anyone interested lost track. It's bart+morton+hack.
Rene.
[-- Attachment #2: linux-2.6.6_rollup.diff --]
[-- Type: text/plain, Size: 3569 bytes --]
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);
next prev parent reply other threads:[~2004-05-11 11:26 UTC|newest]
Thread overview: 41+ messages / expand[flat|nested] mbox.gz Atom feed top
2004-05-10 9:20 Rene Herman
2004-05-10 11:32 ` Gene Heskett
2004-05-10 12:04 ` Rene Herman
2004-05-10 20:28 ` Arjan van de Ven
2004-05-10 19:25 ` Bartlomiej Zolnierkiewicz
2004-05-10 21:13 ` Rene Herman
2004-05-10 21:52 ` Bartlomiej Zolnierkiewicz
2004-05-11 4:56 ` Andrew Morton
2004-05-11 5:17 ` Andrew Morton
2004-05-11 11:24 ` Rene Herman [this message]
[not found] ` <200405111537.23535.bzolnier@elka.pw.edu.pl>
[not found] ` <40A1073E.3030605@keyaccess.nl>
2004-05-11 19:06 ` Rene Herman
[not found] ` <200405120236.00085.bzolnier@elka.pw.edu.pl>
2004-05-12 14:44 ` Rene Herman
2004-05-11 21:22 ` Mike Houston
2004-05-11 22:05 ` Bill Davidsen
2004-05-14 3:26 ` Pavel Machek
2004-05-15 0:53 ` Andrew Morton
2004-05-15 0:59 ` Andrew Morton
2004-05-15 1:05 ` Bartlomiej Zolnierkiewicz
2004-05-15 5:53 ` Herbert Xu
2004-05-15 6:16 ` Andrew Morton
2004-05-17 22:13 ` Greg KH
2004-05-17 22:55 ` Andrew Morton
2004-05-14 3:25 ` Pavel Machek
2004-05-11 11:24 ` Rene Herman
2004-05-11 12:56 ` Craig Bradney
2004-05-11 15:51 ` Athanasius
2004-05-11 16:10 ` dobrev
2004-05-12 18:07 ` Bartlomiej Zolnierkiewicz
2004-05-12 18:45 ` dobrev
2004-05-13 0:24 ` Patrick Wildi
2004-05-13 9:55 ` dobrev
2004-05-10 21:59 ` Rene Herman
2004-05-10 23:36 ` Mike Houston
2004-05-14 21:49 ` scsi shutdown flush, journaled fses Tom Vier
[not found] <fa.jr282gn.1ni2t37@ifi.uio.no>
[not found] ` <fa.cmd38j8.1tgg9ro@ifi.uio.no>
2004-05-12 6:09 ` Linux 2.6.6 "IDE cache-flush at shutdown fixes" Robert Hancock
2004-05-12 18:52 ` Eric D. Mudama
2004-05-12 19:55 ` Rene Herman
2004-05-12 21:05 ` Bartlomiej Zolnierkiewicz
2004-05-12 22:27 ` Rene Herman
2004-05-12 21:28 ` Gene Heskett
2004-05-13 17:41 ` Eric D. Mudama
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=40A0B7DA.9090905@keyaccess.nl \
--to=rene.herman@keyaccess.nl \
--cc=B.Zolnierkiewicz@elka.pw.edu.pl \
--cc=akpm@osdl.org \
--cc=arjanv@redhat.com \
--cc=linux-kernel@vger.kernel.org \
--cc=torvalds@osdl.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®