From mboxrd@z Thu Jan 1 00:00:00 1970 From: Lorenzo Pieralisi Subject: Re: [PATCH v2 10/11] PM / Hibernate: clean cached pages on architectures that require it Date: Wed, 11 Nov 2015 11:40:39 +0000 Message-ID: <20151111114039.GA8375@red-moon> References: <1445966960-31724-1-git-send-email-james.morse@arm.com> <1445966960-31724-11-git-send-email-james.morse@arm.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Return-path: Received: from foss.arm.com ([217.140.101.70]:59611 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752133AbbKKLjs (ORCPT ); Wed, 11 Nov 2015 06:39:48 -0500 Content-Disposition: inline In-Reply-To: <1445966960-31724-11-git-send-email-james.morse@arm.com> Sender: linux-pm-owner@vger.kernel.org List-Id: linux-pm@vger.kernel.org To: James Morse , "Rafael J. Wysocki" , Pavel Machek Cc: linux-arm-kernel@lists.infradead.org, linux-pm@vger.kernel.org, Will Deacon , Sudeep Holla , Kevin Kang , Geoff Levand , Catalin Marinas , Mark Rutland , AKASHI Takahiro , wangfei , Marc Zyngier Hi Pavel, Rafael, Do you have any feedback on this patch ? It is fundamental to this series and affects Hibernate core code so if you have any feedback that would be much appreciated. Thanks a lot, Lorenzo On Tue, Oct 27, 2015 at 05:29:19PM +0000, James Morse wrote: > Some architectures require code written to memory as if it were data to be > 'cleaned' from any data caches so that the processor can fetch them as new > instructions. > > During resume from hibernate, the snapshot code copies some pages directly, > meaning these architectures do not get a chance to perform their cache > maintenance. Add a call to flush_icache_range(), which is provided by > architectures that require it, to perform the maintenance. > > This mirrors the kernel's behaviour when loading kernel modules and when > mapping executable pages to user space. > > Signed-off-by: James Morse > --- > kernel/power/snapshot.c | 4 ++++ > 1 file changed, 4 insertions(+) > > diff --git a/kernel/power/snapshot.c b/kernel/power/snapshot.c > index 5235dd4e1e2f..139fc449ad75 100644 > --- a/kernel/power/snapshot.c > +++ b/kernel/power/snapshot.c > @@ -31,6 +31,7 @@ > #include > > #include > +#include > #include > #include > #include > @@ -1196,9 +1197,12 @@ static unsigned int count_data_pages(void) > static inline void do_copy_page(long *dst, long *src) > { > int n; > + unsigned long __maybe_unused start = (unsigned long)dst; > > for (n = PAGE_SIZE / sizeof(long); n; n--) > *dst++ = *src++; > + > + flush_icache_range(start, start+PAGE_SIZE); > } > > > -- > 2.1.4 >