From: Herbert Xu <herbert@gondor.apana.org.au>
To: Pavel Machek <pavel@suse.cz>
Cc: mochel@digitalimplant.org, linux-kernel@vger.kernel.org, akpm@zip.com.au
Subject: Re: Fix memory leak in swsusp
Date: Fri, 11 Jun 2004 21:03:14 +1000 [thread overview]
Message-ID: <20040611110314.GA8592@gondor.apana.org.au> (raw)
In-Reply-To: <20040611102327.GF13834@elf.ucw.cz>
[-- Attachment #1: Type: text/plain, Size: 497 bytes --]
On Fri, Jun 11, 2004 at 12:23:27PM +0200, Pavel Machek wrote:
>
> If you want more cleanups, copy_pagedir() should be probably replaced
> by simple memset...
Yes that's a great idea. Here is the patch to do that. Again it
relies on all the previous patches in this thread.
Cheers,
--
Visit Openswan at http://www.openswan.org/
Email: Herbert Xu ~{PmV>HI~} <herbert@gondor.apana.org.au>
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt
[-- Attachment #2: p --]
[-- Type: text/plain, Size: 2609 bytes --]
===== kernel/power/pmdisk.c 1.86 vs edited =====
--- 1.86/kernel/power/pmdisk.c 2004-06-11 18:23:44 +10:00
+++ edited/kernel/power/pmdisk.c 2004-06-11 21:01:41 +10:00
@@ -732,19 +732,6 @@
/* More restore stuff */
-/* FIXME: Why not memcpy(to, from, 1<<pagedir_order*PAGE_SIZE)? */
-static void __init copy_pagedir(suspend_pagedir_t *to, suspend_pagedir_t *from)
-{
- int i;
- char *topointer=(char *)to, *frompointer=(char *)from;
-
- for(i=0; i < 1 << pagedir_order; i++) {
- copy_page(topointer, frompointer);
- topointer += PAGE_SIZE;
- frompointer += PAGE_SIZE;
- }
-}
-
#define does_collide(addr) does_collide_order(pm_pagedir_nosave, addr, 0)
/*
@@ -792,7 +779,7 @@
* We have to avoid recursion (not to overflow kernel stack),
* and that's why code looks pretty cryptic
*/
- suspend_pagedir_t *new_pagedir, *old_pagedir = pm_pagedir_nosave;
+ suspend_pagedir_t *old_pagedir = pm_pagedir_nosave;
void **eaten_memory = NULL;
void **c = eaten_memory, *m, *f;
int err;
@@ -808,8 +795,9 @@
while ((m = (void *) __get_free_pages(GFP_ATOMIC, pagedir_order))) {
if (!does_collide_order(old_pagedir, (unsigned long)m,
pagedir_order)) {
- pm_pagedir_nosave = new_pagedir = m;
- copy_pagedir(new_pagedir, old_pagedir);
+ pm_pagedir_nosave =
+ memcpy(m, old_pagedir,
+ PAGE_SIZE << pagedir_order);
err = 0;
break;
}
--- linux-2.5/kernel/power/swsusp.c.orig 2004-06-11 20:54:24.000000000 +1000
+++ linux-2.5/kernel/power/swsusp.c 2004-06-11 21:02:22.000000000 +1000
@@ -863,19 +863,6 @@
/* More restore stuff */
-/* FIXME: Why not memcpy(to, from, 1<<pagedir_order*PAGE_SIZE)? */
-static void copy_pagedir(suspend_pagedir_t *to, suspend_pagedir_t *from)
-{
- int i;
- char *topointer=(char *)to, *frompointer=(char *)from;
-
- for(i=0; i < 1 << pagedir_order; i++) {
- copy_page(topointer, frompointer);
- topointer += PAGE_SIZE;
- frompointer += PAGE_SIZE;
- }
-}
-
#define does_collide(addr) does_collide_order(pagedir_nosave, addr, 0)
/*
@@ -923,7 +910,7 @@
* We have to avoid recursion (not to overflow kernel stack),
* and that's why code looks pretty cryptic
*/
- suspend_pagedir_t *new_pagedir, *old_pagedir = pagedir_nosave;
+ suspend_pagedir_t *old_pagedir = pagedir_nosave;
void **eaten_memory = NULL;
void **c = eaten_memory, *m, *f;
int ret = 0;
@@ -948,8 +935,8 @@
printk("out of memory\n");
ret = -ENOMEM;
} else {
- pagedir_nosave = new_pagedir = m;
- copy_pagedir(new_pagedir, old_pagedir);
+ pagedir_nosave =
+ memcpy(m, old_pagedir, PAGE_SIZE << pagedir_order);
}
c = eaten_memory;
next prev parent reply other threads:[~2004-06-11 11:03 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2004-06-09 13:04 Pavel Machek
2004-06-10 10:50 ` Herbert Xu
2004-06-10 10:56 ` Herbert Xu
2004-06-10 20:08 ` Pavel Machek
2004-06-10 21:24 ` Pavel Machek
2004-06-10 23:37 ` Herbert Xu
2004-06-11 9:48 ` Pavel Machek
2004-06-11 10:16 ` Herbert Xu
2004-06-11 10:23 ` Pavel Machek
2004-06-11 11:03 ` Herbert Xu [this message]
2004-06-12 3:17 ` Nigel Cunningham
2004-06-12 4:00 ` Andrew Morton
2004-06-12 11:10 ` Dave Jones
2004-06-13 15:59 ` Pavel Machek
2004-06-12 22:07 ` Nigel Cunningham
2004-06-12 23:32 ` Jeff Sipek
2004-06-13 15:57 ` Pavel Machek
2004-06-13 8:15 ` Herbert Xu
2004-06-12 6:45 ` Herbert Xu
2004-06-12 10:45 pavel
2004-06-12 22:09 ` Nigel Cunningham
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=20040611110314.GA8592@gondor.apana.org.au \
--to=herbert@gondor.apana.org.au \
--cc=akpm@zip.com.au \
--cc=linux-kernel@vger.kernel.org \
--cc=mochel@digitalimplant.org \
--cc=pavel@suse.cz \
/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®