All of lore.kernel.org
 help / color / mirror / Atom feed
From: Rene Herman <rene.herman@keyaccess.nl>
To: Ingo Molnar <mingo@elte.hu>
Cc: Venki Pallipadi <venkatesh.pallipadi@intel.com>,
	Dave Airlie <airlied@gmail.com>,
	"Li, Shaohua" <shaohua.li@intel.com>,
	Yinghai Lu <yhlu.kernel@gmail.com>,
	Andreas Herrmann <andreas.herrmann3@amd.com>,
	Arjan van de Ven <arjan@infradead.org>,
	Linux Kernel <linux-kernel@vger.kernel.org>,
	"Siddha, Suresh B" <suresh.b.siddha@intel.com>,
	Thomas Gleixner <tglx@linutronix.de>,
	"H. Peter Anvin" <hpa@zytor.com>,
	Dave Jones <davej@codemonkey.org.uk>
Subject: [PATCH] x86: have set_memory_array_{uc,wb} coalesce memtypes.
Date: Fri, 22 Aug 2008 01:02:20 +0200	[thread overview]
Message-ID: <48ADF3FC.7070002@keyaccess.nl> (raw)
In-Reply-To: <48ADA2C2.8090905@keyaccess.nl>

[-- Attachment #1: Type: text/plain, Size: 1068 bytes --]

On 21-08-08 19:15, Rene Herman wrote:

> On 21-08-08 14:06, Ingo Molnar wrote:

>> Would be nice to test tip/master - it has both that patch included and 
>> the latest pageattr-array API (with enablement in AGP drivers) 
>> patchset, done by Shaohua Li, based on Dave's original patch.
> 
> That patch by itself doesn't help any -- the new set_memory_array_uc() 
> still calls reserve_memtype() for each single page in the array. To 
> help, it needs to coalesce adjacent entries, which is itself easy to do 
> were it not for the need to keep the list of reserved (base,end) pairs 
> around for free_memtype() time (and halfway fail time).

Actually, might as well simply reconstruct the memtype list at free time 
I guess. How is this for a coalescing version of the array functions?

NOTE: I am posting this because I'm going to bed but haven't stared 
comfortably long at this and might be buggy. Compiles, boots and 
provides me with:

root@7ixe4:~# wc -l /debug/x86/pat_memtype_list
53 /debug/x86/pat_memtype_list

otherwise (down from 16384+).

<snore>

Rene.

[-- Attachment #2: 0001-x86-have-set_memory_array_-uc-wb-coalesce-memtypes.patch --]
[-- Type: text/plain, Size: 2236 bytes --]

>From b5dc6e481b38cf4e7792bcb9a8f5dd9aab0e5590 Mon Sep 17 00:00:00 2001
From: Rene Herman <rene.herman@gmail.com>
Date: Fri, 22 Aug 2008 00:56:00 +0200
Subject: [PATCH] x86: have set_memory_array_{uc,wb} coalesce memtypes.

---
 arch/x86/mm/pageattr.c |   38 ++++++++++++++++++++++++++++++++------
 1 files changed, 32 insertions(+), 6 deletions(-)

diff --git a/arch/x86/mm/pageattr.c b/arch/x86/mm/pageattr.c
index d49e4db..a2a497a 100644
--- a/arch/x86/mm/pageattr.c
+++ b/arch/x86/mm/pageattr.c
@@ -942,21 +942,38 @@ EXPORT_SYMBOL(set_memory_uc);
 
 int set_memory_array_uc(unsigned long *addr, int addrinarray)
 {
+	unsigned long start;
+	unsigned long end;
 	int i;
 	/*
 	 * for now UC MINUS. see comments in ioremap_nocache()
 	 */
 	for (i = 0; i < addrinarray; i++) {
-		if (reserve_memtype(__pa(addr[i]), __pa(addr[i]) + PAGE_SIZE,
-			    _PAGE_CACHE_UC_MINUS, NULL))
+		start = __pa(addr[i]);
+		for (end = start + PAGE_SIZE; i < addrinarray - 1; end += PAGE_SIZE) {
+			if (end != __pa(addr[i + 1]))
+				break;
+			i++;
+		}
+		if (reserve_memtype(start, end, _PAGE_CACHE_UC_MINUS, NULL))
 			goto out;
 	}
 
 	return change_page_attr_set(addr, addrinarray,
 				    __pgprot(_PAGE_CACHE_UC_MINUS), 1);
 out:
-	while (--i >= 0)
-		free_memtype(__pa(addr[i]), __pa(addr[i]) + PAGE_SIZE);
+	for (i = 0; i < addrinarray; i++) {
+		unsigned long tmp = __pa(addr[i]);
+
+		if (tmp == start)
+			break;
+		for (end = start + PAGE_SIZE; i < addrinarray - 1; end += PAGE_SIZE) {
+			if (end != __pa(addr[i + 1]))
+				break;
+			i++;
+		}
+		free_memtype(tmp, end);
+	}
 	return -EINVAL;
 }
 EXPORT_SYMBOL(set_memory_array_uc);
@@ -997,9 +1014,18 @@ EXPORT_SYMBOL(set_memory_wb);
 int set_memory_array_wb(unsigned long *addr, int addrinarray)
 {
 	int i;
-	for (i = 0; i < addrinarray; i++)
-		free_memtype(__pa(addr[i]), __pa(addr[i]) + PAGE_SIZE);
 
+	for (i = 0; i < addrinarray; i++) {
+		unsigned long start = __pa(addr[i]);
+		unsigned long end;
+
+		for (end = start + PAGE_SIZE; i < addrinarray - 1; end += PAGE_SIZE) {
+			if (end != __pa(addr[i + 1]))
+				break;
+			i++;
+		}
+		free_memtype(start, end);
+	}
 	return change_page_attr_clear(addr, addrinarray,
 				      __pgprot(_PAGE_CACHE_MASK), 1);
 }
-- 
1.5.5


  parent reply	other threads:[~2008-08-21 23:01 UTC|newest]

Thread overview: 46+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-08-04 16:30 AGP and PAT (induced?) problem (on AMD family 6) Rene Herman
2008-08-06 13:51 ` Andreas Herrmann
2008-08-06 20:57   ` Rene Herman
2008-08-11  9:46     ` Rene Herman
2008-08-15 14:22 ` Ingo Molnar
2008-08-15 15:24   ` Rene Herman
2008-08-19 10:11     ` Rene Herman
2008-08-19 10:26       ` Ingo Molnar
2008-08-19 14:19         ` Rene Herman
2008-08-19 19:07           ` Venki Pallipadi
2008-08-19 19:22             ` Rene Herman
2008-08-19 23:28               ` Venki Pallipadi
2008-08-20 10:09                 ` Ingo Molnar
2008-08-20 10:04             ` Ingo Molnar
2008-08-20 10:50               ` Rene Herman
2008-08-20 14:27                 ` Rene Herman
2008-08-20 19:41                   ` Venki Pallipadi
2008-08-20 21:40                     ` Rene Herman
2008-08-20 21:46                       ` Dave Airlie
2008-08-20 22:16                         ` Venki Pallipadi
2008-08-21  3:42                           ` Andi Kleen
2008-08-21 21:13                             ` Suresh Siddha
2008-08-22  2:12                               ` Andi Kleen
2008-08-21 12:06                           ` Ingo Molnar
2008-08-21 17:15                             ` Rene Herman
2008-08-21 22:10                               ` [PATCH] x86: {reverve,free}_memtype() take a physical address Rene Herman
2008-08-21 22:16                                 ` Pallipadi, Venkatesh
2008-08-21 22:26                                   ` Rene Herman
2008-08-21 22:57                                     ` Pallipadi, Venkatesh
2008-08-21 23:06                                       ` Rene Herman
2008-08-21 23:02                               ` Rene Herman [this message]
2008-08-22  4:15                                 ` [PATCH] x86: have set_memory_array_{uc,wb} coalesce memtypes Ingo Molnar
2008-08-22 19:08                                   ` Venki Pallipadi
2008-08-22 20:15                                     ` Rene Herman
2008-08-23 15:33                                       ` Ingo Molnar
2008-08-22 20:02                                   ` Rene Herman
2008-09-10 19:52                                     ` AGP PAT issue Rene Herman
2008-09-11  8:17                                       ` Ingo Molnar
2008-09-11  8:30                                         ` Rene Herman
2008-09-13  0:26                                           ` Pallipadi, Venkatesh
2008-09-13  0:44                                             ` Rene Herman
2008-10-09 15:53                                               ` Thomas Hellstrom
2008-10-13 17:10                                                 ` Pallipadi, Venkatesh
2008-10-13 19:26                                                   ` Thomas Hellström
2008-08-20 21:02                 ` AGP and PAT (induced?) problem (on AMD family 6) Dave Airlie
2008-08-20 21:16                   ` Rene Herman

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=48ADF3FC.7070002@keyaccess.nl \
    --to=rene.herman@keyaccess.nl \
    --cc=airlied@gmail.com \
    --cc=andreas.herrmann3@amd.com \
    --cc=arjan@infradead.org \
    --cc=davej@codemonkey.org.uk \
    --cc=hpa@zytor.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@elte.hu \
    --cc=shaohua.li@intel.com \
    --cc=suresh.b.siddha@intel.com \
    --cc=tglx@linutronix.de \
    --cc=venkatesh.pallipadi@intel.com \
    --cc=yhlu.kernel@gmail.com \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.