Messages in this thread Patch in this message | | | From | "Rafael J. Wysocki" <> | Subject | [PATCH][Fix] swsusp: do not use memcpy for snapshotting memory | Date | Fri, 7 Jul 2006 10:38:42 +0200 |
| |
swsusp should not use memcpy for snapshotting memory, because on some architectures memcpy may increase preempt_count. Then, as a result, wrong value of preempt_count is stored in the image.
Replace memcpy in copy_data_pages with an open-coded loop.
Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl> Acked-by: Pavel Machek <pavel@ucw.cz> --- 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; } } - 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/
| |