* [rfc][patch] x86: avoid highmem cache attribute aliasing
@ 2008-08-01 1:15 Nick Piggin
2008-08-11 17:10 ` Ingo Molnar
0 siblings, 1 reply; 4+ messages in thread
From: Nick Piggin @ 2008-08-01 1:15 UTC (permalink / raw)
To: Pallipadi, Venkatesh, Siddha, Suresh B, andi@firstfloor.org
Cc: tglx, linux-kernel, mingo, hpa
Highmem code can leave ptes and tlb entries around for a given page even after
kunmap, and after it has been freed.
>From what I can gather, the PAT code may change the cache attributes of
arbitrary physical addresses (ie. including highmem pages), which would result
in aliases in the case that it operates on one of these lazy tlb highmem
pages.
Flushing kmaps should solve the problem.
I've also just added code for conditional flushing if we haven't got
any dangling highmem aliases -- this should help performance if we
change page attributes frequently or systems that aren't using much
highmem pages (eg. if < 4G RAM). Should be turned into 2 patches, but
just for RFC...
---
Index: linux-2.6/arch/x86/mm/pageattr.c
===================================================================
--- linux-2.6.orig/arch/x86/mm/pageattr.c
+++ linux-2.6/arch/x86/mm/pageattr.c
@@ -777,6 +777,9 @@ static int change_page_attr_set_clr(unsi
WARN_ON_ONCE(1);
}
+ /* Must avoid aliasing mappings in the highmem code */
+ kmap_flush_unused();
+
cpa.vaddr = addr;
cpa.numpages = numpages;
cpa.mask_set = mask_set;
Index: linux-2.6/mm/highmem.c
===================================================================
--- linux-2.6.orig/mm/highmem.c
+++ linux-2.6/mm/highmem.c
@@ -70,6 +70,7 @@ static DECLARE_WAIT_QUEUE_HEAD(pkmap_map
static void flush_all_zero_pkmaps(void)
{
int i;
+ int need_flush = 0;
flush_cache_kmaps();
@@ -101,8 +102,10 @@ static void flush_all_zero_pkmaps(void)
&pkmap_page_table[i]);
set_page_address(page, NULL);
+ need_flush = 1;
}
- flush_tlb_kernel_range(PKMAP_ADDR(0), PKMAP_ADDR(LAST_PKMAP));
+ if (need_flush)
+ flush_tlb_kernel_range(PKMAP_ADDR(0), PKMAP_ADDR(LAST_PKMAP));
}
/**
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [rfc][patch] x86: avoid highmem cache attribute aliasing
2008-08-01 1:15 [rfc][patch] x86: avoid highmem cache attribute aliasing Nick Piggin
@ 2008-08-11 17:10 ` Ingo Molnar
2008-08-11 19:09 ` Suresh Siddha
0 siblings, 1 reply; 4+ messages in thread
From: Ingo Molnar @ 2008-08-11 17:10 UTC (permalink / raw)
To: Nick Piggin
Cc: Pallipadi, Venkatesh, Siddha, Suresh B, andi@firstfloor.org, tglx,
linux-kernel, mingo, hpa, Arjan van de Ven
* Nick Piggin <npiggin@suse.de> wrote:
> Highmem code can leave ptes and tlb entries around for a given page
> even after kunmap, and after it has been freed.
>
> From what I can gather, the PAT code may change the cache attributes
> of arbitrary physical addresses (ie. including highmem pages), which
> would result in aliases in the case that it operates on one of these
> lazy tlb highmem pages.
>
> Flushing kmaps should solve the problem.
>
> I've also just added code for conditional flushing if we haven't got
> any dangling highmem aliases -- this should help performance if we
> change page attributes frequently or systems that aren't using much
> highmem pages (eg. if < 4G RAM). Should be turned into 2 patches, but
> just for RFC...
hm, such aliasing might happen in theory - and i guess in practice too
if the AGP driver allocates/deallocates aperture in short succession.
Maybe this could corrupt the X framebuffer - or even generic kernel RAM.
Mind resending the two split up patches? The fix we might want to take
into v2.6.27, the speedup probably for v2.6.28.
But maybe i'm missing something obvious that prevents such problems on
32-bit systems - Venki, Suresh, what do you think?
Ingo
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [rfc][patch] x86: avoid highmem cache attribute aliasing
2008-08-11 17:10 ` Ingo Molnar
@ 2008-08-11 19:09 ` Suresh Siddha
2008-08-15 15:22 ` Ingo Molnar
0 siblings, 1 reply; 4+ messages in thread
From: Suresh Siddha @ 2008-08-11 19:09 UTC (permalink / raw)
To: Ingo Molnar
Cc: Nick Piggin, Pallipadi, Venkatesh, Siddha, Suresh B,
andi@firstfloor.org, tglx@linutronix.de,
linux-kernel@vger.kernel.org, mingo@redhat.com, hpa@zytor.com,
Arjan van de Ven
On Mon, Aug 11, 2008 at 10:10:19AM -0700, Ingo Molnar wrote:
>
> * Nick Piggin <npiggin@suse.de> wrote:
>
> > Highmem code can leave ptes and tlb entries around for a given page
> > even after kunmap, and after it has been freed.
> >
> > From what I can gather, the PAT code may change the cache attributes
> > of arbitrary physical addresses (ie. including highmem pages), which
> > would result in aliases in the case that it operates on one of these
> > lazy tlb highmem pages.
> >
> > Flushing kmaps should solve the problem.
> >
> > I've also just added code for conditional flushing if we haven't got
> > any dangling highmem aliases -- this should help performance if we
> > change page attributes frequently or systems that aren't using much
> > highmem pages (eg. if < 4G RAM). Should be turned into 2 patches, but
> > just for RFC...
>
> hm, such aliasing might happen in theory - and i guess in practice too
> if the AGP driver allocates/deallocates aperture in short succession.
>
> Maybe this could corrupt the X framebuffer - or even generic kernel RAM.
> Mind resending the two split up patches? The fix we might want to take
> into v2.6.27, the speedup probably for v2.6.28.
>
> But maybe i'm missing something obvious that prevents such problems on
> 32-bit systems - Venki, Suresh, what do you think?
Andi pointed out in another thread that we don't use GFP_HIGHMEM in the
AGP drivers. And hence we haven't encountered an issue so far. But yes,
this is a good fix to close the hole.
thanks,
suresh
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [rfc][patch] x86: avoid highmem cache attribute aliasing
2008-08-11 19:09 ` Suresh Siddha
@ 2008-08-15 15:22 ` Ingo Molnar
0 siblings, 0 replies; 4+ messages in thread
From: Ingo Molnar @ 2008-08-15 15:22 UTC (permalink / raw)
To: Suresh Siddha
Cc: Nick Piggin, Pallipadi, Venkatesh, andi@firstfloor.org,
tglx@linutronix.de, linux-kernel@vger.kernel.org,
mingo@redhat.com, hpa@zytor.com, Arjan van de Ven
* Suresh Siddha <suresh.b.siddha@intel.com> wrote:
> [...] But yes, this is a good fix to close the hole.
ok, i've queued it up in tip/x86/pat.
Ingo
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2008-08-15 15:23 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-08-01 1:15 [rfc][patch] x86: avoid highmem cache attribute aliasing Nick Piggin
2008-08-11 17:10 ` Ingo Molnar
2008-08-11 19:09 ` Suresh Siddha
2008-08-15 15:22 ` Ingo Molnar
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox