From: Russell King <rmk@arm.linux.org.uk>
To: Andrew Morton <akpm@osdl.org>, Linus Torvalds <torvalds@osdl.org>,
linux-arch@vger.kernel.org
Subject: Re: [RFC] flush_cache_page in kernel/ptrace.c
Date: Thu, 23 Sep 2004 15:05:43 +0100 [thread overview]
Message-ID: <20040923150543.B24734@flint.arm.linux.org.uk> (raw)
Since there appears to be almost zero interest from architecture
people in this (except jejb who seems to be solving a similar
problem, but has okayed this), can we merge it?
----- Forwarded message from Russell King <rmk@arm.linux.org.uk> -----
Date: Fri, 17 Sep 2004 16:11:47 +0100
From: Russell King <rmk@arm.linux.org.uk>
To: linux-arch@vger.kernel.org, Andrew Morton <akpm@osdl.org>
Subject: Re: [RFC] flush_cache_page in kernel/ptrace.c
On Fri, Sep 10, 2004 at 04:23:30PM +0100, Russell King wrote:
> That's fine by me - please send your patches my way. 8)
Here's a patch which I've put together to achieve the first stage.
We remove flush_cache_page() from kernel/ptrace.c, adding it to
the arch-specific copy_{to,from}_user_page() where flush_cache_page
is non-empty.
Can architecture people test and check this patch please?
Thanks.
===== Documentation/cachetlb.txt 1.11 vs edited =====
--- 1.11/Documentation/cachetlb.txt 2004-07-11 01:14:00 +01:00
+++ edited/Documentation/cachetlb.txt 2004-09-17 14:50:31 +01:00
@@ -354,10 +354,6 @@
of arbitrary user pages (f.e. for ptrace()) it will use
these two routines.
- The page has been kmap()'d, and flush_cache_page() has
- just been called for the user mapping of this page (if
- necessary).
-
Any necessary cache flushing or other coherency operations
that need to occur should happen here. If the processor's
instruction cache does not snoop cpu stores, it is very
===== kernel/ptrace.c 1.36 vs edited =====
--- 1.36/kernel/ptrace.c 2004-09-08 07:32:59 +01:00
+++ edited/kernel/ptrace.c 2004-09-17 14:39:19 +01:00
@@ -202,8 +202,6 @@
if (bytes > PAGE_SIZE-offset)
bytes = PAGE_SIZE-offset;
- flush_cache_page(vma, addr);
-
maddr = kmap(page);
if (write) {
copy_to_user_page(vma, page, addr,
===== include/asm-arm/cacheflush.h 1.15 vs edited =====
--- 1.15/include/asm-arm/cacheflush.h 2004-09-07 14:43:06 +01:00
+++ edited/include/asm-arm/cacheflush.h 2004-09-17 15:15:48 +01:00
@@ -237,11 +237,17 @@
* space" model to handle this.
*/
#define copy_to_user_page(vma, page, vaddr, dst, src, len) \
-do { memcpy(dst, src, len); \
- flush_icache_user_range(vma, page, vaddr, len); \
-} while (0)
+ do { \
+ flush_cache_page(vma, vaddr); \
+ memcpy(dst, src, len); \
+ flush_dcache_page(page); \
+ } while (0)
+
#define copy_from_user_page(vma, page, vaddr, dst, src, len) \
- memcpy(dst, src, len)
+ do { \
+ flush_cache_page(vma, vaddr); \
+ memcpy(dst, src, len); \
+ } while (0)
/*
* Convert calls to our calling convention.
===== include/asm-m68k/cacheflush.h 1.9 vs edited =====
--- 1.9/include/asm-m68k/cacheflush.h 2004-05-22 22:56:28 +01:00
+++ edited/include/asm-m68k/cacheflush.h 2004-09-17 15:15:21 +01:00
@@ -132,10 +132,18 @@
#define flush_dcache_mmap_unlock(mapping) do { } while (0)
#define flush_icache_page(vma, page) __flush_page_to_ram(page_address(page))
#define flush_icache_user_range(vma,pg,adr,len) do { } while (0)
+
#define copy_to_user_page(vma, page, vaddr, dst, src, len) \
- memcpy(dst, src, len)
+ do { \
+ flush_cache_page(vma, vaddr); \
+ memcpy(dst, src, len); \
+ } while (0)
+
#define copy_from_user_page(vma, page, vaddr, dst, src, len) \
- memcpy(dst, src, len)
+ do { \
+ flush_cache_page(vma, vaddr); \
+ memcpy(dst, src, len); \
+ } while (0)
extern void flush_icache_range(unsigned long address, unsigned long endaddr);
===== include/asm-parisc/cacheflush.h 1.11 vs edited =====
--- 1.11/include/asm-parisc/cacheflush.h 2004-08-13 09:23:36 +01:00
+++ edited/include/asm-parisc/cacheflush.h 2004-09-17 16:04:02 +01:00
@@ -77,11 +77,17 @@
#define flush_icache_range(s,e) do { flush_kernel_dcache_range_asm(s,e); flush_kernel_icache_range_asm(s,e); } while (0)
#define copy_to_user_page(vma, page, vaddr, dst, src, len) \
-do { memcpy(dst, src, len); \
- flush_kernel_dcache_range_asm((unsigned long)dst, (unsigned long)dst + len); \
+do { \
+ flush_cache_page(vma, vaddr); \
+ memcpy(dst, src, len); \
+ flush_kernel_dcache_range_asm((unsigned long)dst, (unsigned long)dst + len); \
} while (0)
+
#define copy_from_user_page(vma, page, vaddr, dst, src, len) \
- memcpy(dst, src, len)
+do { \
+ flush_cache_page(vma, vaddr); \
+ memcpy(dst, src, len); \
+} while (0)
static inline void flush_cache_range(struct vm_area_struct *vma,
unsigned long start, unsigned long end)
===== include/asm-sh64/cacheflush.h 1.1 vs edited =====
--- 1.1/include/asm-sh64/cacheflush.h 2004-06-29 15:44:46 +01:00
+++ edited/include/asm-sh64/cacheflush.h 2004-09-17 15:31:42 +01:00
@@ -30,13 +30,17 @@
#define flush_icache_page(vma, page) do { } while (0)
#define copy_to_user_page(vma, page, vaddr, dst, src, len) \
-do { memcpy(dst, src, len); \
- flush_icache_user_range(vma, page, vaddr, len); \
-} while (0)
+ do { \
+ flush_cache_page(vma, vaddr); \
+ memcpy(dst, src, len); \
+ flush_icache_user_range(vma, page, vaddr, len); \
+ } while (0)
#define copy_from_user_page(vma, page, vaddr, dst, src, len) \
- memcpy(dst, src, len)
-
+ do { \
+ flush_cache_page(vma, vaddr); \
+ memcpy(dst, src, len); \
+ } while (0)
#endif /* __ASSEMBLY__ */
===== include/asm-sh/cacheflush.h 1.2 vs edited =====
--- 1.2/include/asm-sh/cacheflush.h 2003-10-02 08:11:59 +01:00
+++ edited/include/asm-sh/cacheflush.h 2004-09-17 15:29:45 +01:00
@@ -14,10 +14,16 @@
#define flush_cache_vunmap(start, end) flush_cache_all()
#define copy_to_user_page(vma, page, vaddr, dst, src, len) \
-do { memcpy(dst, src, len); \
- flush_icache_user_range(vma, page, vaddr, len); \
-} while (0)
+ do { \
+ flush_cache_page(vma, vaddr); \
+ memcpy(dst, src, len); \
+ flush_icache_user_range(vma, page, vaddr, len); \
+ } while (0)
+
#define copy_from_user_page(vma, page, vaddr, dst, src, len) \
- memcpy(dst, src, len)
+ do { \
+ flush_cache_page(vma, vaddr); \
+ memcpy(dst, src, len); \
+ } while (0)
#endif /* __ASM_SH_CACHEFLUSH_H */
===== include/asm-sparc64/cacheflush.h 1.6 vs edited =====
--- 1.6/include/asm-sparc64/cacheflush.h 2004-08-07 07:01:03 +01:00
+++ edited/include/asm-sparc64/cacheflush.h 2004-09-17 15:58:35 +01:00
@@ -38,9 +38,16 @@
#define flush_icache_user_range(vma,pg,adr,len) do { } while (0)
#define copy_to_user_page(vma, page, vaddr, dst, src, len) \
- memcpy(dst, src, len)
+ do { \
+ flush_cache_page(vma, vaddr); \
+ memcpy(dst, src, len); \
+ } while (0)
+
#define copy_from_user_page(vma, page, vaddr, dst, src, len) \
- memcpy(dst, src, len)
+ do { \
+ flush_cache_page(vma, vaddr); \
+ memcpy(dst, src, len); \
+ } while (0)
extern void flush_dcache_page(struct page *page);
#define flush_dcache_mmap_lock(mapping) do { } while (0)
===== include/asm-sparc/cacheflush.h 1.5 vs edited =====
--- 1.5/include/asm-sparc/cacheflush.h 2004-05-22 22:56:28 +01:00
+++ edited/include/asm-sparc/cacheflush.h 2004-09-17 15:57:49 +01:00
@@ -57,9 +57,15 @@
#define flush_icache_user_range(vma,pg,adr,len) do { } while (0)
#define copy_to_user_page(vma, page, vaddr, dst, src, len) \
- memcpy(dst, src, len)
+ do { \
+ flush_cache_page(vma, vaddr); \
+ memcpy(dst, src, len); \
+ } while (0)
#define copy_from_user_page(vma, page, vaddr, dst, src, len) \
- memcpy(dst, src, len)
+ do { \
+ flush_cache_page(vma, vaddr); \
+ memcpy(dst, src, len); \
+ } while (0)
BTFIXUPDEF_CALL(void, __flush_page_to_ram, unsigned long)
BTFIXUPDEF_CALL(void, flush_sig_insns, struct mm_struct *, unsigned long)
--
Russell King
Linux kernel 2.6 ARM Linux - http://www.arm.linux.org.uk/
maintainer of: 2.6 PCMCIA - http://pcmcia.arm.linux.org.uk/
2.6 Serial core
----- End forwarded message -----
--
Russell King
Linux kernel 2.6 ARM Linux - http://www.arm.linux.org.uk/
maintainer of: 2.6 PCMCIA - http://pcmcia.arm.linux.org.uk/
2.6 Serial core
next reply other threads:[~2004-09-23 14:05 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2004-09-23 14:05 Russell King [this message]
-- strict thread matches above, loose matches on Subject: below --
2004-09-09 21:56 [RFC] flush_cache_page in kernel/ptrace.c Russell King
2004-09-10 0:06 ` Linus Torvalds
2004-09-10 15:23 ` Russell King
2004-09-17 15:11 ` Russell King
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20040923150543.B24734@flint.arm.linux.org.uk \
--to=rmk@arm.linux.org.uk \
--cc=akpm@osdl.org \
--cc=linux-arch@vger.kernel.org \
--cc=torvalds@osdl.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox