public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [patch] pageattr update
@ 2002-06-12  5:04 Benjamin LaHaise
  2002-06-12 22:52 ` Andi Kleen
  0 siblings, 1 reply; 5+ messages in thread
From: Benjamin LaHaise @ 2002-06-12  5:04 UTC (permalink / raw)
  To: Andi Kleen; +Cc: linux-kernel

Hey Andi, everyone,

Below are some updates to the pageattr patch you posted earlier.  The 
first set of changes were to add change_page_attrs in several paths 
where the AGP and DRM code would allocate a page and then call 
ioremap_nocache on it to create an uncachable mapping.  Secondly, I 
removed the #ifdef __i386__ around the change_page_attr hook, and 
instead put dummy macros in the headers for the various other archs.  
There was a race in pageattr.c that would make the P4 unhappy, so I 
moved the pte page free to after the tlb flush.  The tlb flush was 
not flushing global pages, so I replaced the code with a call to 
flush_tlb_all() to do the job.  Lastly, since the top page of the 
page tables on x86 is unique to each mm and contains copies of the 
pmd entries in non-PAE mode, I added a function to walk all mms via 
the mmlist to update the pmds before the tlb flush.

With these changes in place, my X server is starting up and using 
DRM happily.  Without the global TLB flush, X would hang on startup.  
Could people please review and test this version?  Thanks,

		-ben
-- 
"You will be reincarnated as a toad; and you will be much happier."

:r ~/patches/v2.4/v2.4.19-pre10-pageattr-B1.diff
diff -urN v2.4.19-pre10/arch/i386/mm/Makefile pageattr-v2.4.19-pre10.diff/arch/i386/mm/Makefile
--- v2.4.19-pre10/arch/i386/mm/Makefile	Fri Dec 29 17:07:20 2000
+++ pageattr-v2.4.19-pre10.diff/arch/i386/mm/Makefile	Tue Jun 11 21:41:54 2002
@@ -9,6 +9,7 @@
 
 O_TARGET := mm.o
 
-obj-y	 := init.o fault.o ioremap.o extable.o
+obj-y	 := init.o fault.o ioremap.o extable.o pageattr.o
+export-objs := pageattr.o
 
 include $(TOPDIR)/Rules.make
diff -urN v2.4.19-pre10/arch/i386/mm/pageattr.c pageattr-v2.4.19-pre10.diff/arch/i386/mm/pageattr.c
--- v2.4.19-pre10/arch/i386/mm/pageattr.c	Wed Dec 31 19:00:00 1969
+++ pageattr-v2.4.19-pre10.diff/arch/i386/mm/pageattr.c	Wed Jun 12 00:37:37 2002
@@ -0,0 +1,173 @@
+/* 
+ * Copyright 2002 Andi Kleen, SuSE Labs. 
+ * Copyright 2002 Red Hat, Inc.
+ * Additional fixes by Benjamin LaHaise, Red Hat.
+ */ 
+
+#include <linux/config.h>
+#include <linux/mm.h>
+#include <linux/sched.h>
+#include <linux/highmem.h>
+#include <linux/module.h>
+#include <asm/uaccess.h>
+#include <asm/processor.h>
+
+/* Should move most of this stuff into the appropiate includes */
+#define PAGE_LARGE (_PAGE_PSE|_PAGE_PRESENT) 
+#define LARGE_PAGE_MASK (~(LARGE_PAGE_SIZE-1))
+#define LARGE_PAGE_SIZE ((1UL << PMD_SHIFT)) 
+
+#ifdef CONFIG_DISCONTIGMEM
+#error you lose. sorry.
+#endif
+
+#ifdef CONFIG_X86_PAE
+/* note: PAT must be cleared also. assumes a PAE CPU also has PGE. */
+#define PAGE_KERNEL_4K \
+	__pgprot(_KERNPG_TABLE & ~(_PAGE_GLOBAL|_PAGE_DIRTY))
+#else
+#define PAGE_KERNEL_4K \
+	MAKE_GLOBAL(_KERNPG_TABLE & ~(_PAGE_DIRTY))
+#endif
+
+static inline pte_t *lookup_address(unsigned long address) 
+{ 
+	pte_t *pte;
+	pmd_t *pmd;	
+	pgd_t *pgd = pgd_offset(&init_mm, address); 
+
+	if ((pgd_val(*pgd) & PAGE_LARGE) == PAGE_LARGE)
+		return (pte_t *)pgd; 
+	pmd = pmd_offset(pgd, address); 	       
+	if ((pmd_val(*pmd) & PAGE_LARGE) == PAGE_LARGE)
+		return (pte_t *)pmd; 
+
+        return pte_offset(pmd, address);
+} 
+
+static pte_t *split_large_page(unsigned long address, pgprot_t prot)
+{ 
+	unsigned long addr;
+	int i; 
+	pte_t *base = (pte_t *) __get_free_page(GFP_KERNEL); 
+	if (!base) 
+		return NULL;
+	BUG_ON(atomic_read(&virt_to_page(base)->count) != 1); 	
+	address = __pa(address);
+	addr = address & LARGE_PAGE_MASK; 
+	for (i = 0; i < PTRS_PER_PTE; i++, addr += PAGE_SIZE) {
+		base[i] = mk_pte_phys(addr, addr == address ? prot : PAGE_KERNEL);
+	}
+	return base;
+} 
+
+/*
+ * Update all kernel pmd entries in the system for the given address.
+ */
+static void update_all_kernel_pmds(unsigned long address, pte_t new_pmd)
+{
+	/* PAE can avoid this operation as all mms share the same
+	 * kernel pmds, so the update will propagate when the TLBs 
+	 * are flushed.
+	 */
+#if !defined(CONFIG_HIGHMEM64G)
+	struct mm_struct *mm = &init_mm;
+
+	spin_lock(&mmlist_lock);
+	for (;;) {
+		pmd_t *pmdp;
+		mm = list_entry(mm->mmlist.next, struct mm_struct, mmlist);
+		if (mm == &init_mm)
+			break;
+
+		pmdp = pmd_offset(pgd_offset(mm, address), address);
+		set_pte((pte_t *)pmdp, new_pmd);
+	}
+	spin_unlock(&mmlist_lock);
+#endif
+	return;
+}
+
+/*
+ * Change the page attributes of an page in the linear mapping.
+ *
+ * This should be used when a page is mapped with a different caching policy
+ * than write-back somewhere - some CPUs do not like it when mappings with
+ * different caching policies exist. This changes the page attributes of the
+ * in kernel linear mapping too.
+ * 
+ * The caller needs to ensure that there are no conflicting mappings elsewhere.
+ * This function only deals with the kernel linear map.
+ * When page is in highmem it must never be kmap'ed.
+ */
+int change_page_attr(struct page *page, pgprot_t prot) 
+{ 
+	int err; 
+	pte_t *kpte, *split; 
+	unsigned long address;
+	struct page *kpte_page;
+	struct page *page_to_free = NULL;
+
+#ifdef CONFIG_HIGHMEM
+	if (page >= highmem_start_page) { 
+		/* Hopefully not be mapped anywhere else. */
+		return 0; 
+	} 
+#endif
+
+	address = ((unsigned long)(page - mem_map) << PAGE_SHIFT) + __PAGE_OFFSET;
+
+	down_write(&init_mm.mmap_sem); 
+	kpte = lookup_address(address);
+	kpte_page = virt_to_page(((unsigned long)kpte) & PAGE_MASK);
+	if (pgprot_val(prot) != pgprot_val(PAGE_KERNEL)) { 
+		if ((pte_val(*kpte) & _PAGE_PSE) == 0) { 
+			pte_t old = *kpte, standard = mk_pte(page, PAGE_KERNEL); 
+			/* Already a 4KB page. Just update it to the new protection.
+			 * Doesn't need to be atomic. It doesn't matter if dirty bits 
+			 * get lost.
+			 */
+			set_pte(kpte, mk_pte(page, prot)); 
+			if (!memcmp(&old,&standard,sizeof(pte_t))) 
+				atomic_inc(&kpte_page->count);
+		} else {
+			err = -ENOMEM; 
+			split = split_large_page(address, prot); 
+			if (!split)
+				goto out;
+
+			set_pte(kpte,mk_pte(virt_to_page(split), PAGE_KERNEL_4K));
+			update_all_kernel_pmds(address, *kpte);
+		}	
+	} else if ((pte_val(*kpte) & _PAGE_PSE) == 0) { 
+		/* just an ordinary page again - revert to standard mapping */	
+		set_pte(kpte, mk_pte(page, PAGE_KERNEL));
+		atomic_dec(&kpte_page->count); 
+		if (atomic_read(&kpte_page->count) == 1) {
+			/* no more special protections in this 4MB area - revert to
+			   large page again. */
+			pte_t *linear = (pte_t *) 
+				pmd_offset(pgd_offset(&init_mm, address), address);
+
+			set_pte(linear, 
+				mk_pte_phys(__pa(address & LARGE_PAGE_MASK),
+					    __pgprot(_KERNPG_TABLE|_PAGE_PSE)));
+			update_all_kernel_pmds(address, *linear);
+			page_to_free = kpte_page;
+		}
+	}
+
+	/* Kernel pages typically have the global bit set, so we must 
+	 * flush everything...
+	 */
+	flush_tlb_all();
+
+	if (NULL != page_to_free)
+		__free_page(page_to_free);
+	err = 0;
+ out:
+	up_write(&init_mm.mmap_sem); 
+	return err;
+} 
+
+EXPORT_SYMBOL(change_page_attr);
diff -urN v2.4.19-pre10/drivers/char/agp/agpgart_be.c pageattr-v2.4.19-pre10.diff/drivers/char/agp/agpgart_be.c
--- v2.4.19-pre10/drivers/char/agp/agpgart_be.c	Thu Jun  6 20:09:59 2002
+++ pageattr-v2.4.19-pre10.diff/drivers/char/agp/agpgart_be.c	Tue Jun 11 22:08:48 2002
@@ -397,7 +397,7 @@
 static void agp_generic_agp_enable(u32 mode)
 {
 	struct pci_dev *device = NULL;
-	u32 command, scratch, cap_id;
+	u32 command, scratch;
 	u8 cap_ptr;
 
 	pci_read_config_dword(agp_bridge.dev,
@@ -561,6 +561,7 @@
 					    agp_bridge.current_size;
 					break;
 				}
+				temp = agp_bridge.current_size;
 			} else {
 				agp_bridge.aperture_size_idx = i;
 			}
@@ -578,8 +579,10 @@
 	}
 	table_end = table + ((PAGE_SIZE * (1 << page_order)) - 1);
 
-	for (page = virt_to_page(table); page <= virt_to_page(table_end); page++)
+	for (page = virt_to_page(table); page <= virt_to_page(table_end); page++) {
 		SetPageReserved(page);
+		change_page_attr(page, __pgprot(__PAGE_KERNEL | _PAGE_PCD));
+	}
 
 	agp_bridge.gatt_table_real = (unsigned long *) table;
 	CACHE_FLUSH();
@@ -588,8 +591,10 @@
 	CACHE_FLUSH();
 
 	if (agp_bridge.gatt_table == NULL) {
-		for (page = virt_to_page(table); page <= virt_to_page(table_end); page++)
+		for (page = virt_to_page(table); page <= virt_to_page(table_end); page++) {
+			change_page_attr(page, PAGE_KERNEL);
 			ClearPageReserved(page);
+		}
 
 		free_pages((unsigned long) table, page_order);
 
@@ -655,8 +660,10 @@
 	table = (char *) agp_bridge.gatt_table_real;
 	table_end = table + ((PAGE_SIZE * (1 << page_order)) - 1);
 
-	for (page = virt_to_page(table); page <= virt_to_page(table_end); page++)
+	for (page = virt_to_page(table); page <= virt_to_page(table_end); page++) {
+		change_page_attr(page, PAGE_KERNEL);
 		ClearPageReserved(page);
+	}
 
 	free_pages((unsigned long) agp_bridge.gatt_table_real, page_order);
 	return 0;
@@ -769,6 +776,8 @@
 	if (page == NULL) {
 		return 0;
 	}
+	change_page_attr(page, __pgprot(__PAGE_KERNEL | _PAGE_PCD));
+
 	get_page(page);
 	LockPage(page);
 	atomic_inc(&agp_bridge.current_memory_agp);
@@ -785,6 +794,9 @@
 	}
 	
 	page = virt_to_page(pt);
+	change_page_attr(page, PAGE_KERNEL);
+	
+
 	put_page(page);
 	UnlockPage(page);
 	free_page((unsigned long) pt);
@@ -2243,9 +2255,11 @@
 	}
 	SetPageReserved(virt_to_page(page_map->real));
 	CACHE_FLUSH();
+	change_page_attr(virt_to_page(page_map->real), __pgprot(__PAGE_KERNEL | _PAGE_PCD));
 	page_map->remapped = ioremap_nocache(virt_to_phys(page_map->real), 
 					    PAGE_SIZE);
 	if (page_map->remapped == NULL) {
+		change_page_attr(virt_to_page(page_map->real), PAGE_KERNEL);
 		ClearPageReserved(virt_to_page(page_map->real));
 		free_page((unsigned long) page_map->real);
 		page_map->real = NULL;
@@ -2263,6 +2277,7 @@
 static void amd_free_page_map(amd_page_map *page_map)
 {
 	iounmap(page_map->remapped);
+	change_page_attr(virt_to_page(page_map->real), PAGE_KERNEL);
 	ClearPageReserved(virt_to_page(page_map->real));
 	free_page((unsigned long) page_map->real);
 }
@@ -2744,27 +2759,22 @@
 
 static unsigned long ali_alloc_page(void)
 {
-	struct page *page;
-	u32 temp;
-
-	page = alloc_page(GFP_KERNEL);
-	if (page == NULL)
+	unsigned long p = agp_generic_alloc_page(); 
+	if (!p) 
 		return 0;
 
-	get_page(page);
-	LockPage(page);
-	atomic_inc(&agp_bridge.current_memory_agp);
-
+	/* probably not needed anymore */
 	global_cache_flush();
 
 	if (agp_bridge.type == ALI_M1541) {
+		u32 temp;
 		pci_read_config_dword(agp_bridge.dev, ALI_CACHE_FLUSH_CTRL, &temp);
 		pci_write_config_dword(agp_bridge.dev, ALI_CACHE_FLUSH_CTRL,
 				(((temp & ALI_CACHE_FLUSH_ADDR_MASK) |
-				  virt_to_phys(page_address(page))) |
+				  virt_to_phys(p)) |
 				    ALI_CACHE_FLUSH_EN ));
 	}
-	return (unsigned long)page_address(page);
+	return p;
 }
 
 static void ali_destroy_page(unsigned long addr)
@@ -2786,11 +2796,7 @@
 				    ALI_CACHE_FLUSH_EN));
 	}
 
-	page = virt_to_page(pt);
-	put_page(page);
-	UnlockPage(page);
-	free_page((unsigned long) pt);
-	atomic_dec(&agp_bridge.current_memory_agp);
+	agp_generic_destroy_page(pt);
 }
 
 /* Setup function */
@@ -2872,9 +2878,11 @@
 	}
 	SetPageReserved(virt_to_page(page_map->real));
 	CACHE_FLUSH();
+	change_page_attr(virt_to_page(page_map->real), __pgprot(__PAGE_KERNEL | _PAGE_PCD));
 	page_map->remapped = ioremap_nocache(virt_to_phys(page_map->real), 
 					    PAGE_SIZE);
 	if (page_map->remapped == NULL) {
+		change_page_attr(virt_to_page(page_map->real), PAGE_KERNEL);
 		ClearPageReserved(virt_to_page(page_map->real));
 		free_page((unsigned long) page_map->real);
 		page_map->real = NULL;
@@ -2892,6 +2900,7 @@
 static void serverworks_free_page_map(serverworks_page_map *page_map)
 {
 	iounmap(page_map->remapped);
+	change_page_attr(virt_to_page(page_map->real), PAGE_KERNEL);
 	ClearPageReserved(virt_to_page(page_map->real));
 	free_page((unsigned long) page_map->real);
 }
diff -urN v2.4.19-pre10/drivers/char/drm-4.0/mga_dma.c pageattr-v2.4.19-pre10.diff/drivers/char/drm-4.0/mga_dma.c
--- v2.4.19-pre10/drivers/char/drm-4.0/mga_dma.c	Thu Mar  7 16:39:58 2002
+++ pageattr-v2.4.19-pre10.diff/drivers/char/drm-4.0/mga_dma.c	Tue Jun 11 22:01:01 2002
@@ -641,6 +641,7 @@
 		   	iounmap(dev_priv->status_page);
 		}
 	   	if(dev_priv->real_status_page != 0UL) {
+			change_page_attr(virt_to_page(dev_priv->real_status_page), PAGE_KERNEL);
 		   	mga_free_page(dev, dev_priv->real_status_page);
 		}
 	   	if(dev_priv->prim_bufs != NULL) {
@@ -731,6 +732,7 @@
 		return -ENOMEM;
 	}
 
+	change_page_attr(virt_to_page(dev_priv->real_status_page), __pgprot(__PAGE_KERNEL | _PAGE_PCD));
    	dev_priv->status_page =
 		ioremap_nocache(virt_to_bus((void *)dev_priv->real_status_page),
 				PAGE_SIZE);
diff -urN v2.4.19-pre10/include/asm-alpha/pgtable.h pageattr-v2.4.19-pre10.diff/include/asm-alpha/pgtable.h
--- v2.4.19-pre10/include/asm-alpha/pgtable.h	Thu Jun  6 20:10:08 2002
+++ pageattr-v2.4.19-pre10.diff/include/asm-alpha/pgtable.h	Tue Jun 11 22:17:39 2002
@@ -364,4 +364,6 @@
 /* We have our own get_unmapped_area to cope with ADDR_LIMIT_32BIT.  */
 #define HAVE_ARCH_UNMAPPED_AREA
 
+#define change_page_attr(page, prot)	do { } while (0)
+
 #endif /* _ALPHA_PGTABLE_H */
diff -urN v2.4.19-pre10/include/asm-arm/pgtable.h pageattr-v2.4.19-pre10.diff/include/asm-arm/pgtable.h
--- v2.4.19-pre10/include/asm-arm/pgtable.h	Thu Jun  6 20:10:08 2002
+++ pageattr-v2.4.19-pre10.diff/include/asm-arm/pgtable.h	Tue Jun 11 22:17:48 2002
@@ -175,6 +175,7 @@
 #include <asm-generic/pgtable.h>
 
 extern void pgtable_cache_init(void);
+#define change_page_attr(page, prot)	do { } while (0)
 
 #endif /* !__ASSEMBLY__ */
 
diff -urN v2.4.19-pre10/include/asm-cris/pgtable.h pageattr-v2.4.19-pre10.diff/include/asm-cris/pgtable.h
--- v2.4.19-pre10/include/asm-cris/pgtable.h	Thu Jun  6 20:10:08 2002
+++ pageattr-v2.4.19-pre10.diff/include/asm-cris/pgtable.h	Tue Jun 11 22:17:59 2002
@@ -520,4 +520,6 @@
  */
 #define pgtable_cache_init()   do { } while (0)
 
+#define change_page_attr(page, prot)	do { } while (0)
+
 #endif /* _CRIS_PGTABLE_H */
diff -urN v2.4.19-pre10/include/asm-i386/pgtable.h pageattr-v2.4.19-pre10.diff/include/asm-i386/pgtable.h
--- v2.4.19-pre10/include/asm-i386/pgtable.h	Thu Jun  6 20:10:08 2002
+++ pageattr-v2.4.19-pre10.diff/include/asm-i386/pgtable.h	Tue Jun 11 23:59:22 2002
@@ -347,6 +347,9 @@
 #define pte_to_swp_entry(pte)		((swp_entry_t) { (pte).pte_low })
 #define swp_entry_to_pte(x)		((pte_t) { (x).val })
 
+struct page;
+int change_page_attr(struct page *, pgprot_t prot);
+
 #endif /* !__ASSEMBLY__ */
 
 /* Needs to be defined here and not in linux/mm.h, as it is arch dependent */
diff -urN v2.4.19-pre10/include/asm-ia64/pgtable.h pageattr-v2.4.19-pre10.diff/include/asm-ia64/pgtable.h
--- v2.4.19-pre10/include/asm-ia64/pgtable.h	Thu Jun  6 20:10:08 2002
+++ pageattr-v2.4.19-pre10.diff/include/asm-ia64/pgtable.h	Tue Jun 11 22:18:10 2002
@@ -473,4 +473,6 @@
  */
 #define pgtable_cache_init()	do { } while (0)
 
+#define change_page_attr(page, prot)	do { } while (0)
+
 #endif /* _ASM_IA64_PGTABLE_H */
diff -urN v2.4.19-pre10/include/asm-m68k/pgtable.h pageattr-v2.4.19-pre10.diff/include/asm-m68k/pgtable.h
--- v2.4.19-pre10/include/asm-m68k/pgtable.h	Mon Nov 12 17:49:51 2001
+++ pageattr-v2.4.19-pre10.diff/include/asm-m68k/pgtable.h	Tue Jun 11 22:18:14 2002
@@ -187,4 +187,6 @@
  */
 #define pgtable_cache_init()	do { } while (0)
 
+#define change_page_attr(page, prot)	do { } while (0)
+
 #endif /* _M68K_PGTABLE_H */
diff -urN v2.4.19-pre10/include/asm-mips/pgtable.h pageattr-v2.4.19-pre10.diff/include/asm-mips/pgtable.h
--- v2.4.19-pre10/include/asm-mips/pgtable.h	Thu Jun  6 20:10:09 2002
+++ pageattr-v2.4.19-pre10.diff/include/asm-mips/pgtable.h	Tue Jun 11 22:18:24 2002
@@ -538,4 +538,6 @@
  */
 #define pgtable_cache_init()	do { } while (0)
 
+#define change_page_attr(page, prot)	do { } while (0)
+
 #endif /* _ASM_PGTABLE_H */
diff -urN v2.4.19-pre10/include/asm-mips64/pgtable.h pageattr-v2.4.19-pre10.diff/include/asm-mips64/pgtable.h
--- v2.4.19-pre10/include/asm-mips64/pgtable.h	Thu Jun  6 20:10:10 2002
+++ pageattr-v2.4.19-pre10.diff/include/asm-mips64/pgtable.h	Tue Jun 11 22:18:20 2002
@@ -566,6 +566,8 @@
 
 #include <asm-generic/pgtable.h>
 
+#define change_page_attr(page, prot)	do { } while (0)
+
 #endif /* !defined (_LANGUAGE_ASSEMBLY) */
 
 #endif /* _ASM_PGTABLE_H */
diff -urN v2.4.19-pre10/include/asm-parisc/pgtable.h pageattr-v2.4.19-pre10.diff/include/asm-parisc/pgtable.h
--- v2.4.19-pre10/include/asm-parisc/pgtable.h	Thu Jun  6 20:10:10 2002
+++ pageattr-v2.4.19-pre10.diff/include/asm-parisc/pgtable.h	Tue Jun 11 22:18:32 2002
@@ -338,4 +338,6 @@
  */
 #define pgtable_cache_init()	do { } while (0)
 
+#define change_page_attr(page, prot)	do { } while (0)
+
 #endif /* _PARISC_PAGE_H */
diff -urN v2.4.19-pre10/include/asm-ppc/pgtable.h pageattr-v2.4.19-pre10.diff/include/asm-ppc/pgtable.h
--- v2.4.19-pre10/include/asm-ppc/pgtable.h	Thu Jun  6 20:10:10 2002
+++ pageattr-v2.4.19-pre10.diff/include/asm-ppc/pgtable.h	Tue Jun 11 22:18:43 2002
@@ -556,6 +556,8 @@
  */
 #define pgtable_cache_init()	do { } while (0)
 
+#define change_page_attr(page, prot)	do { } while (0)
+
 #endif /* __ASSEMBLY__ */
 #endif /* _PPC_PGTABLE_H */
 #endif /* __KERNEL__ */
diff -urN v2.4.19-pre10/include/asm-ppc64/pgtable.h pageattr-v2.4.19-pre10.diff/include/asm-ppc64/pgtable.h
--- v2.4.19-pre10/include/asm-ppc64/pgtable.h	Thu Jun  6 20:10:10 2002
+++ pageattr-v2.4.19-pre10.diff/include/asm-ppc64/pgtable.h	Tue Jun 11 22:18:39 2002
@@ -440,5 +440,7 @@
 extern void make_pte(HPTE * htab, unsigned long va, unsigned long pa,
 		int mode, unsigned long hash_mask, int large);
 
+#define change_page_attr(page, prot)	do { } while (0)
+
 #endif /* __ASSEMBLY__ */
 #endif /* _PPC64_PGTABLE_H */
diff -urN v2.4.19-pre10/include/asm-s390/pgtable.h pageattr-v2.4.19-pre10.diff/include/asm-s390/pgtable.h
--- v2.4.19-pre10/include/asm-s390/pgtable.h	Thu Jun  6 20:10:10 2002
+++ pageattr-v2.4.19-pre10.diff/include/asm-s390/pgtable.h	Tue Jun 11 22:18:47 2002
@@ -503,5 +503,7 @@
  */
 #define pgtable_cache_init()	do { } while (0)
 
+#define change_page_attr(page, prot)	do { } while (0)
+
 #endif /* _S390_PAGE_H */
 
diff -urN v2.4.19-pre10/include/asm-s390x/pgtable.h pageattr-v2.4.19-pre10.diff/include/asm-s390x/pgtable.h
--- v2.4.19-pre10/include/asm-s390x/pgtable.h	Thu Jun  6 20:10:10 2002
+++ pageattr-v2.4.19-pre10.diff/include/asm-s390x/pgtable.h	Tue Jun 11 22:18:50 2002
@@ -523,5 +523,7 @@
  */
 #define pgtable_cache_init()	do { } while (0)
 
+#define change_page_attr(page, prot)	do { } while (0)
+
 #endif /* _S390_PAGE_H */
 
diff -urN v2.4.19-pre10/include/asm-sh/pgtable.h pageattr-v2.4.19-pre10.diff/include/asm-sh/pgtable.h
--- v2.4.19-pre10/include/asm-sh/pgtable.h	Thu Jun  6 20:10:10 2002
+++ pageattr-v2.4.19-pre10.diff/include/asm-sh/pgtable.h	Tue Jun 11 22:18:57 2002
@@ -310,4 +310,6 @@
  */
 #define pgtable_cache_init()	do { } while (0)
 
+#define change_page_attr(page, prot)	do { } while (0)
+
 #endif /* __ASM_SH_PAGE_H */
diff -urN v2.4.19-pre10/include/asm-sparc/pgtable.h pageattr-v2.4.19-pre10.diff/include/asm-sparc/pgtable.h
--- v2.4.19-pre10/include/asm-sparc/pgtable.h	Thu Jun  6 20:10:10 2002
+++ pageattr-v2.4.19-pre10.diff/include/asm-sparc/pgtable.h	Tue Jun 11 22:19:05 2002
@@ -458,4 +458,6 @@
  */
 #define pgtable_cache_init()	do { } while (0)
 
+#define change_page_attr(page, prot)	do { } while (0)
+
 #endif /* !(_SPARC_PGTABLE_H) */
diff -urN v2.4.19-pre10/include/asm-sparc64/pgtable.h pageattr-v2.4.19-pre10.diff/include/asm-sparc64/pgtable.h
--- v2.4.19-pre10/include/asm-sparc64/pgtable.h	Thu Jun  6 20:10:10 2002
+++ pageattr-v2.4.19-pre10.diff/include/asm-sparc64/pgtable.h	Tue Jun 11 22:19:00 2002
@@ -357,4 +357,6 @@
  */
 #define pgtable_cache_init()	do { } while (0)
 
+#define change_page_attr(page, prot)	do { } while (0)
+
 #endif /* !(_SPARC64_PGTABLE_H) */

^ permalink raw reply	[flat|nested] 5+ messages in thread
[parent not found: <20020612010443.B1350@redhat.com.suse.lists.linux.kernel>]

end of thread, other threads:[~2002-06-13 16:13 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2002-06-12  5:04 [patch] pageattr update Benjamin LaHaise
2002-06-12 22:52 ` Andi Kleen
2002-06-13 10:12   ` Benjamin LaHaise
2002-06-13 15:09     ` David Mosberger
     [not found] <20020612010443.B1350@redhat.com.suse.lists.linux.kernel>
     [not found] ` <20020613005238.A17700@averell.suse.lists.linux.kernel>
     [not found]   ` <20020613061246.A7121@redhat.com.suse.lists.linux.kernel>
     [not found]     ` <15624.46508.257287.233406@napali.hpl.hp.com.suse.lists.linux.kernel>
2002-06-13 16:13       ` Andi Kleen

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox