linux-mm.kvack.org archive mirror
 help / color / mirror / Atom feed
From: William Lee Irwin III <wli@holomorphy.com>
To: Andrew Morton <akpm@digeo.com>,
	linux-kernel@vger.kernel.org, linux-mm@kvack.org
Subject: Re: 2.5.67-mm3
Date: Mon, 14 Apr 2003 21:17:59 -0700	[thread overview]
Message-ID: <20030415041759.GA12487@holomorphy.com> (raw)
In-Reply-To: <20030415020057.GC706@holomorphy.com>

On Mon, Apr 14, 2003 at 07:00:57PM -0700, William Lee Irwin III wrote:
> Hence, this "FIXME: do not do for zone highmem". Presumably this is a

Another FIXME patch:


It's a bit of an open question as to how much of a difference this one
makes now, but it says "FIXME". fault_in_pages_writeable() and 
fault_in_pages_readable() have a limited "range" with respect to the
size of the region they can prefault; as they are now, they are only
meant to handle spanning a page boundary. This converts them to iterate
over the virtual address range specified and so touch each virtual page
within it once as specified. As per the comment within the "FIXME",
this is only an issue if PAGE_SIZE < PAGE_CACHE_SIZE.


diff -urpN mm3-2.5.67-3/include/linux/pagemap.h mm3-2.5.67-4/include/linux/pagemap.h
--- mm3-2.5.67-3/include/linux/pagemap.h	2003-04-07 10:30:34.000000000 -0700
+++ mm3-2.5.67-4/include/linux/pagemap.h	2003-04-14 19:10:17.000000000 -0700
@@ -168,46 +168,32 @@ extern void end_page_writeback(struct pa
 
 /*
  * Fault a userspace page into pagetables.  Return non-zero on a fault.
- *
- * FIXME: this assumes that two userspace pages are always sufficient.  That's
- * not true if PAGE_CACHE_SIZE > PAGE_SIZE.
+ * Both walk with stride PAGE_SIZE touching the start of the affected
+ * pages until faulting or at the start of a page beyond size from uaddr.
  */
 static inline int fault_in_pages_writeable(char *uaddr, int size)
 {
-	int ret;
+	int ret = 0;
+	unsigned long addr = (unsigned long)uaddr & PAGE_MASK;
 
 	/*
 	 * Writing zeroes into userspace here is OK, because we know that if
 	 * the zero gets there, we'll be overwriting it.
 	 */
-	ret = __put_user(0, uaddr);
-	if (ret == 0) {
-		char *end = uaddr + size - 1;
-
-		/*
-		 * If the page was already mapped, this will get a cache miss
-		 * for sure, so try to avoid doing it.
-		 */
-		if (((unsigned long)uaddr & PAGE_MASK) !=
-				((unsigned long)end & PAGE_MASK))
-		 	ret = __put_user(0, end);
-	}
+	for (; addr < (unsigned long)uaddr + size && !ret; addr += PAGE_SIZE)
+		ret = __put_user(0, (char *)max(addr, (unsigned long)uaddr));
+
 	return ret;
 }
 
 static inline void fault_in_pages_readable(const char *uaddr, int size)
 {
 	volatile char c;
-	int ret;
+	int ret = 0;
+	unsigned long addr = (unsigned long)uaddr & PAGE_MASK;
 
-	ret = __get_user(c, (char *)uaddr);
-	if (ret == 0) {
-		const char *end = uaddr + size - 1;
-
-		if (((unsigned long)uaddr & PAGE_MASK) !=
-				((unsigned long)end & PAGE_MASK))
-		 	__get_user(c, (char *)end);
-	}
+	for (; addr < (unsigned long)uaddr + size && !ret; addr += PAGE_SIZE)
+		ret = __get_user(c, (char *)addr);
 }
 
 #endif /* _LINUX_PAGEMAP_H */
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"aart@kvack.org"> aart@kvack.org </a>

  reply	other threads:[~2003-04-15  4:17 UTC|newest]

Thread overview: 21+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2003-04-14  8:53 2.5.67-mm3 Andrew Morton
2003-04-14 11:03 ` 2.5.67-mm3 Bill Huey
2003-04-14 15:13   ` 2.5.67-mm3 Rudmer van Dijk
2003-04-15  1:03     ` 2.5.67-mm3 Bill Huey
2003-04-15  1:13       ` 2.5.67-mm3 Andrew Morton
2003-04-15  1:34         ` 2.5.67-mm3 Bill Huey
2003-04-15  9:38           ` 2.5.67-mm3 Rudmer van Dijk
2003-04-15  2:00 ` 2.5.67-mm3 William Lee Irwin III
2003-04-15  4:17   ` William Lee Irwin III [this message]
2003-04-15  4:31     ` 2.5.67-mm3 Andrew Morton
2003-04-15  4:39       ` 2.5.67-mm3 William Lee Irwin III
2003-04-15  4:55         ` 2.5.67-mm3 Andrew Morton
2003-04-15  5:15           ` 2.5.67-mm3 William Lee Irwin III
2003-04-15  5:35             ` 2.5.67-mm3 Andrew Morton
2003-04-15  6:09           ` 2.5.67-mm3 William Lee Irwin III
2003-04-15  6:10             ` 2.5.67-mm3 William Lee Irwin III
2003-04-15  5:52     ` 2.5.67-mm3 Antonio Vargas
2003-04-15  5:52       ` 2.5.67-mm3 William Lee Irwin III
2003-04-15 15:09         ` 2.5.67-mm3 Antonio Vargas
2003-04-16  2:21 ` 2.5.67-mm3 William Lee Irwin III
2003-04-16  2:40   ` 2.5.67-mm3 William Lee Irwin III

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=20030415041759.GA12487@holomorphy.com \
    --to=wli@holomorphy.com \
    --cc=akpm@digeo.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.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