From: hugang@soulinfo.com
To: "Rafael J. Wysocki" <rjw@sisk.pl>
Cc: linux-kernel@vger.kernel.org, qemu-devel@nongnu.org
Subject: Re: 2.6.10-mm3: swsusp: out of memory on resume (was: Re: Ho ho ho - Linux v2.6.10)
Date: Sun, 16 Jan 2005 13:54:20 +0800 [thread overview]
Message-ID: <20050116055420.GA11880@hugang.soulinfo.com> (raw)
In-Reply-To: <200501152220.42129.rjw@sisk.pl>
On Sat, Jan 15, 2005 at 10:20:42PM +0100, Rafael J. Wysocki wrote:
> > > > >
> > > > > 2.6.11-rc1-mm1
> > > > > -> 2005-1-14.core.diff core patch TEST PASSED
> > > > > -> 2005-1-14.x86_64.diff x86_64 patch NOT TESTED
> > > >
> > > > Unfortunately, on x86_64 it goes south on suspend, probably somwhere in write_pagedir(),
> > > > but I'm not quite sure as I can't make it print any useful stuff to the serial console
> > > > (everything is dumped to a virtual tty only). Seemingly, it prints some
> > > > "write_pagedir: ..." debug messages and then starts to print garbage in
> > > > an infinite loop.
>
> I have some good news for you. :-)
>
> The patch actually works fine on my box. What I thought was a result of an infinite loop,
> turned out to be "only" a debug output from it, which is _really_ excessive. After I had
> commented out the most of pr_debug()s in your code, it works nicely and I like it very
> much. Thanks a lot for porting it to x86_64!
>
Cool, Current I making software suspend also works in Qemu X86_64
emulation, Here is a update patch to making copyback more safed and
possible to improve copyback speed.
I change the swsusp_arch_resume to nosave section, the in memory copy
back it not touch this code. before not change that to nosave section,
I'm also geting a infinite loop in copy_one_page, From the qemu in_asm,
I sure that loop in copy_one_page, when I change it to nosave section,
that problem go away, I dont' sure tha't good idea to fixed it, but
current it works in my qemu, Can someone owner x86_64 test it.
I disable Flush TLB after copy page, It speedup the in qemu, But I can't
sure the right thing in real machine, can someone give me point.
--
Hu Gang .-.
/v\
// \\
Linux User /( )\ [204016]
GPG Key ID ^^-^^ http://soulinfo.com/~hugang/hugang.asc
2005-1-16.x86_64.diff
--- 2.6.11-rc1-mm1/arch/x86_64/kernel/suspend_asm.S 2004-12-30 14:56:35.000000000 +0800
+++ 2.6.11-rc1-mm1-swsusp-x86_64/arch/x86_64/kernel/suspend_asm.S 2005-01-16 13:38:25.000000000 +0800
@@ -35,6 +35,7 @@ ENTRY(swsusp_arch_suspend)
call swsusp_save
ret
+ .section .data.nosave
ENTRY(swsusp_arch_resume)
/* set up cr3 */
leaq init_level4_pgt(%rip),%rax
@@ -49,43 +50,47 @@ ENTRY(swsusp_arch_resume)
movq %rcx, %cr3;
movq %rax, %cr4; # turn PGE back on
- movl nr_copy_pages(%rip), %eax
- xorl %ecx, %ecx
- movq $0, %r10
- testl %eax, %eax
- jz done
-.L105:
- xorl %esi, %esi
- movq $0, %r11
- jmp .L104
- .p2align 4,,7
+ movq pagedir_nosave(%rip), %rdi
+ testq %rdi, %rdi
+ je done
+
+copyback_page:
+ movq 24(%rdi), %r9
+ xorl %r8d, %r8d
+
+copy_one_pgdir:
+ movq 8(%rdi), %rsi
+ testq %rsi, %rsi
+ je done
+ movq (%rdi), %rcx
+ xorl %edx, %edx
+
copy_one_page:
- movq %r10, %rcx
-.L104:
- movq pagedir_nosave(%rip), %rdx
- movq %rcx, %rax
- salq $5, %rax
- movq 8(%rdx,%rax), %rcx
- movq (%rdx,%rax), %rax
- movzbl (%rsi,%rax), %eax
- movb %al, (%rsi,%rcx)
-
- movq %cr3, %rax; # flush TLB
- movq %rax, %cr3;
-
- movq %r11, %rax
- incq %rax
- cmpq $4095, %rax
- movq %rax, %rsi
- movq %rax, %r11
- jbe copy_one_page
- movq %r10, %rax
- incq %rax
- movq %rax, %rcx
- movq %rax, %r10
- mov nr_copy_pages(%rip), %eax
- cmpq %rax, %rcx
- jb .L105
+ movq (%rcx,%rdx,8), %rax
+ movq %rax, (%rsi,%rdx,8)
+ movq 8(%rcx,%rdx,8), %rax
+ movq %rax, 8(%rsi,%rdx,8)
+ movq 16(%rcx,%rdx,8), %rax
+ movq %rax, 16(%rsi,%rdx,8)
+ movq 24(%rcx,%rdx,8), %rax
+ movq %rax, 24(%rsi,%rdx,8)
+#if 0 /* XXX speep up in qemu */
+ movq %cr3, %rax; # flush TLB
+ movq %rax, %cr3;
+#endif
+ addq $4, %rdx
+ cmpq $511, %rdx
+ jbe copy_one_page; # copy one page
+
+ incq %r8
+ addq $32, %rdi
+ cmpq $127, %r8
+ jbe copy_one_pgdir; # copy one pgdir
+
+ testq %r9, %r9
+ movq %r9, %rdi
+ jne copyback_page
+
done:
movl $24, %eax
movl %eax, %ds
Here is the patch for current qemu, with this it has no problem in
software suspend/resume, everything. :)
--- target-i386/helper.c~cvs 2005-01-16 14:06:22.000000000 -0500
+++ target-i386/helper.c 2005-01-16 14:07:21.000000000 -0500
@@ -1454,7 +1454,7 @@ void load_seg(int seg_reg, int selector)
selector &= 0xffff;
if ((selector & 0xfffc) == 0) {
/* null selector case */
- if (seg_reg == R_SS)
+ if (seg_reg == R_CS)
raise_exception_err(EXCP0D_GPF, 0);
cpu_x86_load_seg_cache(env, seg_reg, selector, 0, 0, 0);
} else {
next prev parent reply other threads:[~2005-01-16 5:58 UTC|newest]
Thread overview: 38+ messages / expand[flat|nested] mbox.gz Atom feed top
2004-12-24 22:39 Ho ho ho - Linux v2.6.10 Linus Torvalds
2004-12-25 11:11 ` Andrew Walrond
2004-12-25 12:19 ` Alan Cox
2004-12-26 11:30 ` Wichert Akkerman
2004-12-26 13:45 ` R. J. Wysocki
2004-12-26 19:37 ` Pavel Machek
2004-12-26 19:39 ` Pavel Machek
2004-12-26 20:27 ` R. J. Wysocki
2004-12-26 22:10 ` Pavel Machek
2005-01-13 18:09 ` 2.6.10-mm3: swsusp: out of memory on resume (was: Re: Ho ho ho - Linux v2.6.10) Rafael J. Wysocki
2005-01-13 19:59 ` Pavel Machek
2005-01-13 21:22 ` Rafael J. Wysocki
2005-01-14 14:34 ` hugang
2005-01-14 17:25 ` Rafael J. Wysocki
2005-01-15 21:43 ` Rafael J. Wysocki
2005-01-16 21:51 ` Pavel Machek
2005-01-17 14:53 ` Rafael J. Wysocki
2005-01-17 15:22 ` Pavel Machek
2005-01-18 1:44 ` hugang
[not found] ` <200501150042.35377.rjw@sisk.pl>
2005-01-15 1:21 ` hugang
[not found] ` <200501151147.32919.rjw@sisk.pl>
[not found] ` <200501152220.42129.rjw@sisk.pl>
2005-01-16 5:54 ` hugang [this message]
2005-01-16 10:07 ` Rafael J. Wysocki
2005-01-16 14:46 ` hugang
2005-01-17 15:48 ` Rafael J. Wysocki
2005-01-17 16:49 ` Rafael J. Wysocki
2004-12-30 9:58 ` Ho ho ho - Linux v2.6.10 Rafael J. Wysocki
2004-12-26 15:45 ` Alan Cox
2004-12-29 12:44 ` Paolo Ciarrocchi
2004-12-26 2:55 ` Bill Davidsen
2004-12-26 3:36 ` Linus Torvalds
[not found] ` <1104171962.18174.28.camel@d845pe>
2004-12-28 16:38 ` Ho ho ho - Linux v2.6.10 (irq18) Bill Davidsen
2004-12-26 4:19 ` Ho ho ho - Linux v2.6.10 Alexander E. Patrakov
2004-12-26 5:12 ` [PATCH] parport_pc: don't mix module parameter styles Randy.Dunlap
2004-12-26 20:35 ` Ho ho ho - Linux v2.6.10 Greg Norris
2004-12-27 1:31 ` Dmitry Torokhov
2004-12-28 2:36 ` Greg Norris
2004-12-27 16:10 ` Ho ho ho - Linux v2.6.10 (compile stats) John Cherry
2004-12-28 1:04 ` Ho ho ho - Linux v2.6.10 Håkan Lindqvist
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=20050116055420.GA11880@hugang.soulinfo.com \
--to=hugang@soulinfo.com \
--cc=linux-kernel@vger.kernel.org \
--cc=qemu-devel@nongnu.org \
--cc=rjw@sisk.pl \
/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®