Updated from Linux LTS 3.10.25 to 3.10.26
This commit is contained in:
@@ -77,14 +77,12 @@ void __flush_dcache_page(struct page *page)
|
||||
|
||||
void __sync_icache_dcache(pte_t pte, unsigned long addr)
|
||||
{
|
||||
unsigned long pfn;
|
||||
struct page *page;
|
||||
struct page *page = pte_page(pte);
|
||||
|
||||
pfn = pte_pfn(pte);
|
||||
if (!pfn_valid(pfn))
|
||||
/* no flushing needed for anonymous pages */
|
||||
if (!page_mapping(page))
|
||||
return;
|
||||
|
||||
page = pfn_to_page(pfn);
|
||||
if (!test_and_set_bit(PG_dcache_clean, &page->flags)) {
|
||||
__flush_dcache_page(page);
|
||||
__flush_icache_all();
|
||||
@@ -94,28 +92,14 @@ void __sync_icache_dcache(pte_t pte, unsigned long addr)
|
||||
}
|
||||
|
||||
/*
|
||||
* Ensure cache coherency between kernel mapping and userspace mapping of this
|
||||
* page.
|
||||
* This function is called when a page has been modified by the kernel. Mark
|
||||
* it as dirty for later flushing when mapped in user space (if executable,
|
||||
* see __sync_icache_dcache).
|
||||
*/
|
||||
void flush_dcache_page(struct page *page)
|
||||
{
|
||||
struct address_space *mapping;
|
||||
|
||||
/*
|
||||
* The zero page is never written to, so never has any dirty cache
|
||||
* lines, and therefore never needs to be flushed.
|
||||
*/
|
||||
if (page == ZERO_PAGE(0))
|
||||
return;
|
||||
|
||||
mapping = page_mapping(page);
|
||||
if (mapping && mapping_mapped(mapping)) {
|
||||
__flush_dcache_page(page);
|
||||
__flush_icache_all();
|
||||
set_bit(PG_dcache_clean, &page->flags);
|
||||
} else {
|
||||
if (test_bit(PG_dcache_clean, &page->flags))
|
||||
clear_bit(PG_dcache_clean, &page->flags);
|
||||
}
|
||||
}
|
||||
EXPORT_SYMBOL(flush_dcache_page);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user