| From 37a366face294facb9c9d9fdd9f5b64a27456cbd Mon Sep 17 00:00:00 2001 |
| From: Gerald Schaefer <gerald.schaefer@de.ibm.com> |
| Date: Tue, 7 Aug 2018 18:57:11 +0200 |
| Subject: s390/mm: fix addressing exception after suspend/resume |
| |
| From: Gerald Schaefer <gerald.schaefer@de.ibm.com> |
| |
| commit 37a366face294facb9c9d9fdd9f5b64a27456cbd upstream. |
| |
| Commit c9b5ad546e7d "s390/mm: tag normal pages vs pages used in page tables" |
| accidentally changed the logic in arch_set_page_states(), which is used by |
| the suspend/resume code. set_page_stable(page, order) was changed to |
| set_page_stable_dat(page, 0). After this, only the first page of higher order |
| pages will be set to stable, and a write to one of the unstable pages will |
| result in an addressing exception. |
| |
| Fix this by using "order" again, instead of "0". |
| |
| Fixes: c9b5ad546e7d ("s390/mm: tag normal pages vs pages used in page tables") |
| Cc: stable@vger.kernel.org # 4.14+ |
| Reviewed-by: Heiko Carstens <heiko.carstens@de.ibm.com> |
| Signed-off-by: Gerald Schaefer <gerald.schaefer@de.ibm.com> |
| Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| arch/s390/mm/page-states.c | 2 +- |
| 1 file changed, 1 insertion(+), 1 deletion(-) |
| |
| --- a/arch/s390/mm/page-states.c |
| +++ b/arch/s390/mm/page-states.c |
| @@ -271,7 +271,7 @@ void arch_set_page_states(int make_stabl |
| list_for_each(l, &zone->free_area[order].free_list[t]) { |
| page = list_entry(l, struct page, lru); |
| if (make_stable) |
| - set_page_stable_dat(page, 0); |
| + set_page_stable_dat(page, order); |
| else |
| set_page_unused(page, order); |
| } |