linux-next: manual merge of the sparc-next tree with Linus' tree

From: Stephen Rothwell
Date: Mon May 19 2014 - 22:00:59 EST


Hi David,

Today's linux-next merge of the sparc-next tree got a conflict in
arch/sparc/include/asm/pgtable_64.h between commit 26cf432551d7
("sparc64: Add basic validations to {pud,pmd}_bad()") from Linus' tree
and commit f05a68653e56 ("sparc: drop use of extern for prototypes in
arch/sparc/include/asm") from the sparc-next tree.

I fixed it up (see below) and can carry the fix as necessary (no action
is required).

--
Cheers,
Stephen Rothwell sfr@xxxxxxxxxxxxxxxx

diff --cc arch/sparc/include/asm/pgtable_64.h
index 1a49ffdf9da9,521b8d8c1f96..000000000000
--- a/arch/sparc/include/asm/pgtable_64.h
+++ b/arch/sparc/include/asm/pgtable_64.h
@@@ -765,23 -757,9 +765,23 @@@ static inline int pmd_present(pmd_t pmd

#define pmd_none(pmd) (!pmd_val(pmd))

+/* pmd_bad() is only called on non-trans-huge PMDs. Our encoding is
+ * very simple, it's just the physical address. PTE tables are of
+ * size PAGE_SIZE so make sure the sub-PAGE_SIZE bits are clear and
+ * the top bits outside of the range of any physical address size we
+ * support are clear as well. We also validate the physical itself.
+ */
+#define pmd_bad(pmd) ((pmd_val(pmd) & ~PAGE_MASK) || \
+ !__kern_addr_valid(pmd_val(pmd)))
+
+#define pud_none(pud) (!pud_val(pud))
+
+#define pud_bad(pud) ((pud_val(pud) & ~PAGE_MASK) || \
+ !__kern_addr_valid(pud_val(pud)))
+
#ifdef CONFIG_TRANSPARENT_HUGEPAGE
- extern void set_pmd_at(struct mm_struct *mm, unsigned long addr,
- pmd_t *pmdp, pmd_t pmd);
+ void set_pmd_at(struct mm_struct *mm, unsigned long addr,
+ pmd_t *pmdp, pmd_t pmd);
#else
static inline void set_pmd_at(struct mm_struct *mm, unsigned long addr,
pmd_t *pmdp, pmd_t pmd)
@@@ -900,28 -881,24 +900,28 @@@ static inline void __set_pte_at(struct
extern pgd_t swapper_pg_dir[PTRS_PER_PGD];
extern pmd_t swapper_low_pmd_dir[PTRS_PER_PMD];

- extern void paging_init(void);
- extern unsigned long find_ecache_flush_span(unsigned long size);
+ void paging_init(void);
+ unsigned long find_ecache_flush_span(unsigned long size);

struct seq_file;
- extern void mmu_info(struct seq_file *);
+ void mmu_info(struct seq_file *);

struct vm_area_struct;
- extern void update_mmu_cache(struct vm_area_struct *, unsigned long, pte_t *);
+ void update_mmu_cache(struct vm_area_struct *, unsigned long, pte_t *);
#ifdef CONFIG_TRANSPARENT_HUGEPAGE
- extern void update_mmu_cache_pmd(struct vm_area_struct *vma, unsigned long addr,
- pmd_t *pmd);
+ void update_mmu_cache_pmd(struct vm_area_struct *vma, unsigned long addr,
+ pmd_t *pmd);

+#define __HAVE_ARCH_PMDP_INVALIDATE
+extern void pmdp_invalidate(struct vm_area_struct *vma, unsigned long address,
+ pmd_t *pmdp);
+
#define __HAVE_ARCH_PGTABLE_DEPOSIT
- extern void pgtable_trans_huge_deposit(struct mm_struct *mm, pmd_t *pmdp,
- pgtable_t pgtable);
+ void pgtable_trans_huge_deposit(struct mm_struct *mm, pmd_t *pmdp,
+ pgtable_t pgtable);

#define __HAVE_ARCH_PGTABLE_WITHDRAW
- extern pgtable_t pgtable_trans_huge_withdraw(struct mm_struct *mm, pmd_t *pmdp);
+ pgtable_t pgtable_trans_huge_withdraw(struct mm_struct *mm, pmd_t *pmdp);
#endif

/* Encode and de-code a swap entry */
@@@ -937,12 -914,24 +937,12 @@@
#define __swp_entry_to_pte(x) ((pte_t) { (x).val })

/* File offset in PTE support. */
- extern unsigned long pte_file(pte_t);
+ unsigned long pte_file(pte_t);
#define pte_to_pgoff(pte) (pte_val(pte) >> PAGE_SHIFT)
- extern pte_t pgoff_to_pte(unsigned long);
+ pte_t pgoff_to_pte(unsigned long);
#define PTE_FILE_MAX_BITS (64UL - PAGE_SHIFT - 1UL)

- extern int page_in_phys_avail(unsigned long paddr);
-extern unsigned long sparc64_valid_addr_bitmap[];
-
-/* Needs to be defined here and not in linux/mm.h, as it is arch dependent */
-static inline bool kern_addr_valid(unsigned long addr)
-{
- unsigned long paddr = __pa(addr);
-
- if ((paddr >> 41UL) != 0UL)
- return false;
- return test_bit(paddr >> 22, sparc64_valid_addr_bitmap);
-}
-
+ int page_in_phys_avail(unsigned long paddr);

/*
* For sparc32&64, the pfn in io_remap_pfn_range() carries <iospace> in

Attachment: signature.asc
Description: PGP signature