Re: SWSUSP Discontiguous pagedir patch

Pavel Machek (pavel@suse.cz)
Wed, 5 Mar 2003 21:50:32 +0100


Hi!

> > > > --- linux-2.5.63/arch/i386/kernel/suspend.c 2003-02-20 08:25:26.000000000 +1300
> > > > +++ linux-2.5.63-01/arch/i386/kernel/suspend.c 2003-02-20 08:27:36.000000000 +1300
> > >
> > > Thank you for putting this back in C, it's much appreciated.
> >
> > Actually, it can not be put back in C. Manipulating stack pointer from
> > gcc inline assembly is just undefined. Its back in C so we can edit
> > it, but it needs to get back to assembly before merging with Linus.
>
> Noted. I'll convert it back.

Okay.

> > > This is better done as
> > >
> > > for (loop = 0; loop < nr_copy_pagse; loop++) {
> > > memcpy((char *)pagedir_nosave[loop].orig_address,
> > > (char *)pagedir_nosave[loop].address,
> > > PAGE_SIZE);
> > > __flush_tlb();
> > > }
> >
> > Hehe, try it.
> >
> > You may not do function call at this point, because you are
> > overwriting your stack. See mails with Andi Kleen. This *needs* to be
> > in assembly.
>
> memcpy() is inlined, at least on x86, and it seems to work fine for me
> here. Besides, even if memcpy is not safe, you could at least copy 4 bytes
> at a time. ;)

Well, this whole needs to be in assembly, anyway. I decided it is not
perfomance critical, and copied it byte-by-byte. That can be
changed...
Pavel

-- 
Horseback riding is like software...
...vgf orggre jura vgf serr.
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/