Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b31059f7 authored by Helge Deller's avatar Helge Deller Committed by Kyle McMartin
Browse files

[PARISC] Add STRICT_MM_TYPECHECKS



Add STRICT_MM_TYPECHECKS to page.h as other architectures do.

Signed-off-by: default avatarHelge Deller <deller@parisc-linux.org>
Signed-off-by: default avatarKyle McMartin <kyle@parisc-linux.org>
parent b9e71ac1
Loading
Loading
Loading
Loading
+40 −16
Original line number Diff line number Diff line
@@ -40,14 +40,19 @@ clear_user_page(void *page, unsigned long vaddr, struct page *pg)
/*
 * These are used to make use of C type-checking..
 */
#ifdef __LP64__
typedef struct { unsigned long pte; } pte_t;
#else
typedef struct {
	unsigned long pte;
	unsigned long flags;
} pte_t;
#define STRICT_MM_TYPECHECKS
#ifdef STRICT_MM_TYPECHECKS
typedef struct { unsigned long pte;
#if !defined(CONFIG_64BIT)
                 unsigned long future_flags;
 /* XXX: it's possible to remove future_flags and change BITS_PER_PTE_ENTRY
	 to 2, but then strangely the identical 32bit kernel boots on a
	 c3000(pa20), but not any longer on a 715(pa11).
	 Still investigating... HelgeD.
  */
#endif
} pte_t; /* either 32 or 64bit */

/* NOTE: even on 64 bits, these entries are __u32 because we allocate
 * the pmd and pgd in ZONE_DMA (i.e. under 4GB) */
typedef struct { __u32 pmd; } pmd_t;
@@ -55,25 +60,44 @@ typedef struct { __u32 pgd; } pgd_t;
typedef struct { unsigned long pgprot; } pgprot_t;

#define pte_val(x)	((x).pte)
#ifdef __LP64__
#define pte_flags(x)	(*(__u32 *)&((x).pte))
#else
#define pte_flags(x)	((x).flags)
#endif

/* These do not work lvalues, so make sure we don't use them as such. */
#define pmd_val(x)	((x).pmd + 0)
#define pgd_val(x)	((x).pgd + 0)
#define pgprot_val(x)	((x).pgprot)

#define __pmd_val_set(x,n) (x).pmd = (n)
#define __pgd_val_set(x,n) (x).pgd = (n)

#define __pte(x)	((pte_t) { (x) } )
#define __pmd(x)	((pmd_t) { (x) } )
#define __pgd(x)	((pgd_t) { (x) } )
#define __pgprot(x)	((pgprot_t) { (x) } )

#define __pmd_val_set(x,n) (x).pmd = (n)
#define __pgd_val_set(x,n) (x).pgd = (n)

#else
/*
 * .. while these make it easier on the compiler
 */
typedef unsigned long pte_t;
typedef         __u32 pmd_t;
typedef         __u32 pgd_t;
typedef unsigned long pgprot_t;

#define pte_val(x)      (x)
#define pmd_val(x)      (x)
#define pgd_val(x)      (x)
#define pgprot_val(x)   (x)

#define __pte(x)        (x)
#define __pmd(x)	(x)
#define __pgd(x)        (x)
#define __pgprot(x)     (x)

#define __pmd_val_set(x,n) (x) = (n)
#define __pgd_val_set(x,n) (x) = (n)

#endif /* STRICT_MM_TYPECHECKS */


typedef struct __physmem_range {
	unsigned long start_pfn;
	unsigned long pages;       /* PAGE_SIZE pages */