All of lore.kernel.org
 help / color / mirror / Atom feed
* [patch] x86, pat: fix free_memtype() for legacy 1MB range
@ 2009-01-14 18:48 Suresh Siddha
  2009-01-14 19:16 ` Ingo Molnar
  0 siblings, 1 reply; 2+ messages in thread
From: Suresh Siddha @ 2009-01-14 18:48 UTC (permalink / raw)
  To: mingo, hpa, tglx; +Cc: venkatesh.pallipadi, linux-kernel

commit 0e95c190cf1b4adbf1fc67decff3f2bb20158ba8 in tip tree
is n't complete, as we left out adding similar logic to free_memtype().

Appended is the delta patch against tip.

thanks,
suresh
---

[patch] x86, pat: fix free_memtype() for legacy 1MB range

Starting this commit:

>	commit 0e95c190cf1b4adbf1fc67decff3f2bb20158ba8
>	Author: Suresh Siddha <suresh.b.siddha@intel.com>
>	Date:   Fri Jan 9 14:35:20 2009 -0800
>
>	    x86, pat: fix reserve_memtype() for legacy 1MB range

Attribute requests with in this 1MB region are tracked in reserve_memtype()
using linear linked list (and don't bother if the range is RAM or non-RAM or
mixed).

free_memtype() also needs to follow similar logic.

Signed-off-by: Suresh Siddha <suresh.b.siddha@intel.com>
Signed-off-by: Venkatesh Pallipadi <venkatesh.pallipadi@intel.com>
Cc: stable@kernel.org
---

diff --git a/arch/x86/mm/pat.c b/arch/x86/mm/pat.c
index ec8cd49..3be3990 100644
--- a/arch/x86/mm/pat.c
+++ b/arch/x86/mm/pat.c
@@ -446,11 +446,19 @@ int free_memtype(u64 start, u64 end)
 	if (is_ISA_range(start, end - 1))
 		return 0;
 
-	is_range_ram = pagerange_is_ram(start, end);
-	if (is_range_ram == 1)
-		return free_ram_pages_type(start, end);
-	else if (is_range_ram < 0)
-		return -EINVAL;
+	/*
+	 * For legacy reasons, some parts of the physical address range in the
+	 * legacy 1MB region is treated as non-RAM (even when listed as RAM in
+	 * the e820 tables).  So we will track the memory attributes of this
+	 * legacy 1MB region using the linear memtype_list always.
+	 */
+	if (end >= ISA_END_ADDRESS) {
+		is_range_ram = pagerange_is_ram(start, end);
+		if (is_range_ram == 1)
+			return free_ram_pages_type(start, end);
+		else if (is_range_ram < 0)
+			return -EINVAL;
+	}
 
 	spin_lock(&memtype_lock);
 	list_for_each_entry(entry, &memtype_list, nd) {

^ permalink raw reply related	[flat|nested] 2+ messages in thread

* Re: [patch] x86, pat: fix free_memtype() for legacy 1MB range
  2009-01-14 18:48 [patch] x86, pat: fix free_memtype() for legacy 1MB range Suresh Siddha
@ 2009-01-14 19:16 ` Ingo Molnar
  0 siblings, 0 replies; 2+ messages in thread
From: Ingo Molnar @ 2009-01-14 19:16 UTC (permalink / raw)
  To: Suresh Siddha; +Cc: hpa, tglx, venkatesh.pallipadi, linux-kernel


* Suresh Siddha <suresh.b.siddha@intel.com> wrote:

> -	is_range_ram = pagerange_is_ram(start, end);
> -	if (is_range_ram == 1)
> -		return free_ram_pages_type(start, end);
> -	else if (is_range_ram < 0)
> -		return -EINVAL;
> +	/*
> +	 * For legacy reasons, some parts of the physical address range in the
> +	 * legacy 1MB region is treated as non-RAM (even when listed as RAM in
> +	 * the e820 tables).  So we will track the memory attributes of this
> +	 * legacy 1MB region using the linear memtype_list always.
> +	 */
> +	if (end >= ISA_END_ADDRESS) {
> +		is_range_ram = pagerange_is_ram(start, end);
> +		if (is_range_ram == 1)
> +			return free_ram_pages_type(start, end);
> +		else if (is_range_ram < 0)
> +			return -EINVAL;
> +	}

this logic is now repeated in an open-coded way in two places in pat.c. 
Could you please send another delta patch that consolidates them into a 
single helper function, which is used both in free_memtype() and 
reserve_memtype()?

Thanks,

	Ingo

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2009-01-14 19:17 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-01-14 18:48 [patch] x86, pat: fix free_memtype() for legacy 1MB range Suresh Siddha
2009-01-14 19:16 ` Ingo Molnar

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.