Re: [PATCH 3/3][Fix] swsusp: prevent swsusp from failing if there's too many pagedir pages

Rafael J. Wysocki
2005-09-26T11:11:21Z

Hi,

On Monday, 26 of September 2005 12:33, Pavel Machek wrote:
> Hi!
>
> > There's a silent assumption in swsusp that always
> > sizeof(struct swsusp_info) <= PAGE_SIZE, which is wrong, because
> > eg. on x86-64 sizeof(swp_entry_t) = 8. This causes swsusp to skip some pagedir
> > pages while reading the image if there are too many of them (depending on the
> > architecture, approx. 500 on x86-64).
>
> Last time I did the math, swsusp_info could cover a *lot* of
> memory. It was wrong not to check for overflow, but I do not think we
> want to introduce *yet another* linklist.

Yes, I thought of another solution, but any of them would require more
than one swap page and I'd have to track the swap offsets of them somehow.

> Lets see...
>
> for i386, we have 768 pagedir entries. Each pagedir entry points to
> page with 1023 pointers to pages. That means that up-to 768*1023*4096
> bytes image can be saved to swap ~= 768 * 1K * 4K ~= 3 GB. That's more
> than enough for i386.
>
> for x86-64, we can have 128 pagedir entries (could not we fit more
> there? 384 entries should fit, no?).

Yes. To be exact, 460.

> Each pagedir entry has 511 pointers to pages (IIRC)...

512, I think.

> that is up-to 128*511*4K ~= 64*1K*4K = 256 MB image.
> Hmm, that should still be enough for any 512MB machine, and
> probably okay for much bigger machines, too...
>
> We can still get to 768 MB image (good enough for any 1.5GB machine,
> and probably for anything else, too).
>
> If that is not good enough for you, can you simply allocate more than
> 1 page for swsusp_info? No need for linklists yet.

I can. The problem is I have to track the swap offsets of these pages
which is necessary for resume. Is it guaranteed that the swap offsets
of pages allocated in a row will be consecutive?

> Andrew, please drop this one. It is too complex solution for quite a
> simple problem.

Perhaps it is. Anyway the problem hit me when I was playing with swsusp on
a machine with 768 MB of RAM.

Greetings,
Rafael