All of lore.kernel.org
 help / color / mirror / Atom feed
From: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
To: "Rafael J. Wysocki" <rjw@sisk.pl>
Cc: mingo@kernel.org, hpa@zytor.com, linux-kernel@vger.kernel.org,
	tglx@linutronix.de, hpa@linux.intel.com,
	linux-tip-commits@vger.kernel.org
Subject: Re: [tip:x86/paravirt] x86-64, gdt: Store/ load GDT for ACPI S3 or hibernate/resume path is not needed.
Date: Tue, 30 Apr 2013 17:25:42 -0400	[thread overview]
Message-ID: <20130430212542.GA19753@phenom.dumpdata.com> (raw)
In-Reply-To: <4054620.GA2vTd0F6g@vostro.rjw.lan>

> > After the 'restore_registers' it returns and we end up called
> > restore_processor_state() - where we reload the GDT. The reload of
> > the GDT is not needed as bootup kernel has already loaded the GDT which
> > is at the same physical location as the the restored kernel.
> 
> I'm not sure if this particular statement is actually correct.  It is correct
> on 32-bit, but here it is not necessary for the bootup kernel to be the same
> as the image one.  Different kernel version may be used for that even (at
> least theoretically).  So the question is, and I'm quite unsure about the
> answer, if the GDT of from the bootup kernel is really *guaranteed* to be
> at the same location (given that those kernels may be really different).

A bit of testing with different bootup kernel provided me with this error:
PM: Image mismatch: version

which after a bit of digging pointed me to 'check_image_kernel'. The criteria
there imply that the different kernel versions or releases cannot be used with
hibernation.

For "fun" I subverted the checks and tried resuming a differently compiled
kernel (CONFIG_KALLSYMS_ALL=y) vs the one that was booting
(# CONFIG_KALLSYMS_ALL is not set) and found out that it does not work on a vanilla
v3.9 kernel.

diff --git a/kernel/power/snapshot.c b/kernel/power/snapshot.c
index 0de2857..8589e05 100644
--- a/kernel/power/snapshot.c
+++ b/kernel/power/snapshot.c
@@ -1633,10 +1633,16 @@ static char *check_image_kernel(struct swsusp_info *info)
 		return "kernel version";
 	if (strcmp(info->uts.sysname,init_utsname()->sysname))
 		return "system type";
-	if (strcmp(info->uts.release,init_utsname()->release))
-		return "kernel release";
-	if (strcmp(info->uts.version,init_utsname()->version))
-		return "version";
+	if (strcmp(info->uts.release,init_utsname()->release)) {
+		printk(KERN_ERR "%s != %s .. continuing on.\n", info->uts.release,
+			init_utsname()->release);
+		return NULL;
+	}
+	if (strcmp(info->uts.version,init_utsname()->version)) {
+		printk(KERN_ERR "%s != %s .. continuing on.\n", info->uts.version,
+			init_utsname()->version);
+		return NULL;
+	}
 	if (strcmp(info->uts.machine,init_utsname()->machine))
 		return "machine";
 	return NULL;

Meaning without these patches we do crash when trying to load a different kernel.

Here is the log:

# echo "8:1" > /sys/power/resume
[   18.881169] PM: Starting manual resume from disk
[   18.884164] PM: Hibernation image partition 8:1 present
[   18.885418] PM: Looking for hibernation image.
[   18.888344] PM: Image signature found, resuming
[   18.895387] PM: Marking nosave pages: [mem 0x0009f000-0x000fffff]
[   18.896892] PM: Basic memory bitmaps created
[   18.897937] PM: Preparing processes for restore.
[   18.900102] Freezing user space processes ... (elapsed 0.01 seconds) done.
[   18.914402] PM: Loading hibernation image.
[   19.201178] PM: Using 2 thread(s) for decompression.
[   19.201178] PM: Loading and decompressing image data (53823 pages)...
[   19.210490] 3.9.0upstream != 3.9.0upstream-dirty .. continuing on.
[   19.874986] PM: Image loading progress:   0%
[   20.027158] PM: Image loading progress:  10%
[   20.177723] PM: Image loading progress:  20%
[   20.335267] PM: Image loading progress:  30%
[   20.491458] PM: Image loading progress:  40%
[   20.578486] PM: Image loading progress:  50%
[   20.663751] PM: Image loading progress:  60%
[   20.985474] PM: Image loading progress:  70%
[   21.112780] PM: Image loading progress:  80%
[   21.219476] PM: Image loading progress:  90%
[   21.336482] PM: Image loading progress: 100%
[   21.340302] PM: Image loading done.
[   21.342830] PM: Read 215292 kbytes in 2.12 seconds (101.55 MB/s)
[   21.350612] PM: Image successfully loaded
[   21.353913] Suspending console(s) (use no_console_suspend to debug)

.. and the machine either reboots or just hangs

So I think the assumptions I made are OK?

  reply	other threads:[~2013-04-30 21:26 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-04-05 20:42 [RFC PATCH] axe the store_gdt() pvops call. (v1) Konrad Rzeszutek Wilk
2013-04-05 20:42 ` [PATCH 1/4] x86/gdt/64-bit: store/load GDT for ACPI S3 or hibernate/resume path is not needed Konrad Rzeszutek Wilk
2013-04-11 22:59   ` [tip:x86/paravirt] x86-64, gdt: Store/ load " tip-bot for Konrad Rzeszutek Wilk
2013-04-12 12:02     ` Rafael J. Wysocki
2013-04-30 21:25       ` Konrad Rzeszutek Wilk [this message]
2013-04-30 22:38         ` Rafael J. Wysocki
2013-05-01  0:48           ` Konrad Rzeszutek Wilk
2013-04-05 20:42 ` [PATCH 2/4] x86/gdt/i386: store/load GDT for ACPI S3 or hibernation/resume " Konrad Rzeszutek Wilk
2013-04-11 23:00   ` [tip:x86/paravirt] x86-32, gdt: Store/ load " tip-bot for Konrad Rzeszutek Wilk
2013-04-05 20:42 ` [PATCH 3/4] x86/xen/store_gdt: Remove the pvops variant of store_gdt Konrad Rzeszutek Wilk
2013-04-11 23:01   ` [tip:x86/paravirt] x86, xen, gdt: " tip-bot for Konrad Rzeszutek Wilk
2013-04-05 20:42 ` [PATCH 4/4] x86/wakeup/sleep: Use pvops functions for changing GDT entries Konrad Rzeszutek Wilk
2013-04-11 23:02   ` [tip:x86/paravirt] x86, wakeup, sleep: " tip-bot for konrad@kernel.org

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=20130430212542.GA19753@phenom.dumpdata.com \
    --to=konrad.wilk@oracle.com \
    --cc=hpa@linux.intel.com \
    --cc=hpa@zytor.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-tip-commits@vger.kernel.org \
    --cc=mingo@kernel.org \
    --cc=rjw@sisk.pl \
    --cc=tglx@linutronix.de \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.