lkml.org 
[lkml]   [2003]   [Mar]   [4]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: SWSUSP Discontiguous pagedir patch

    > > > --- 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.


    > > 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. ;)

    -pat

    -
    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/

    \
     
     \ /
      Last update: 2005-03-22 13:33    [W:0.026 / U:0.300 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site