Re: memcpy() in swsusp (was: Re: [PATCH 2/2] Fix console handling during suspend/resume)

Pavel Machek
2006-07-06T23:36:31Z

Hi!

> > > > Do you mean the one in copy_data_pages()? Indeed, that may be a problem if
> > > > the MMU-based memcpy is used.
> > > >
> > > > Pavel, should we fix this?
> > >
> > > Of course it needs fixing ... it's a bug, also a regression.
> > >
> > > My question is where to fix... swsusp_arch_resume() seems most
> > > correct, albeit messy. There's unfortunately no exact parallel
> > > on the resume side to where the bug was inserted. Those of us
> > > who avoid hacking asm code might prefer restore_processor_state().
> >
> > Well, I meant replacing the memcpy() in copy_data_pages with an open coded
> > copying loop. That should be enough to fix the problem.
>
> To be more specific, could you please check if the appended patch (tested
> on x86_64) helps?

ACK. Please submit it to akpm so it gets fixed.
Pavel

> kernel/power/snapshot.c | 10 ++++++++--
> 1 files changed, 8 insertions(+), 2 deletions(-)
>
> Index: linux-2.6.17-mm6/kernel/power/snapshot.c
> ===================================================================
> --- linux-2.6.17-mm6.orig/kernel/power/snapshot.c
> +++ linux-2.6.17-mm6/kernel/power/snapshot.c
> @@ -227,11 +227,17 @@ static void copy_data_pages(struct pbe *
> for (zone_pfn = 0; zone_pfn < zone->spanned_pages; ++zone_pfn) {
> if (saveable(zone, &zone_pfn)) {
> struct page *page;
> + long *src, *dst;
> + int n;
> +
> page = pfn_to_page(zone_pfn + zone->zone_start_pfn);
> BUG_ON(!pbe);
> pbe->orig_address = (unsigned long)page_address(page);
> - /* copy_page is not usable for copying task structs. */
> - memcpy((void *)pbe->address, (void *)pbe->orig_address, PAGE_SIZE);
> + /* copy_page and memcpy are not usable for copying task structs. */
> + dst = (long *)pbe->address;
> + src = (long *)pbe->orig_address;
> + for (n = PAGE_SIZE / sizeof(long); n; n--)
> + *dst++ = *src++;
> pbe = pbe->next;
> }
> }

--
(english) http://www.livejournal.com/~pavelmachek
(cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html