提交 713d25db 编写于 作者: L Linus Torvalds

Merge branch 'parisc-4.0-1' of git://git.kernel.org/pub/scm/linux/kernel/git/deller/parisc-linux

Pull parsic fixes from Helge Deller:
 "One patch from Mikulas fixes a bug on parisc by artifically
  incrementing the counter in pmd_free when the kernel tries to free
  the preallocated pmd.

  Other than that we now prevent that syscalls gets added without
  incrementing __NR_Linux_syscalls and fix the initial pmd setup code
  if a default page size greater than 4k has been selected"

* 'parisc-4.0-1' of git://git.kernel.org/pub/scm/linux/kernel/git/deller/parisc-linux:
  parisc: Fix pmd code to depend on PT_NLEVELS value, not on CONFIG_64BIT
  parisc: mm: don't count preallocated pmds
  parisc: Add compile-time check when adding new syscalls
...@@ -26,7 +26,7 @@ static inline pgd_t *pgd_alloc(struct mm_struct *mm) ...@@ -26,7 +26,7 @@ static inline pgd_t *pgd_alloc(struct mm_struct *mm)
if (likely(pgd != NULL)) { if (likely(pgd != NULL)) {
memset(pgd, 0, PAGE_SIZE<<PGD_ALLOC_ORDER); memset(pgd, 0, PAGE_SIZE<<PGD_ALLOC_ORDER);
#ifdef CONFIG_64BIT #if PT_NLEVELS == 3
actual_pgd += PTRS_PER_PGD; actual_pgd += PTRS_PER_PGD;
/* Populate first pmd with allocated memory. We mark it /* Populate first pmd with allocated memory. We mark it
* with PxD_FLAG_ATTACHED as a signal to the system that this * with PxD_FLAG_ATTACHED as a signal to the system that this
...@@ -45,7 +45,7 @@ static inline pgd_t *pgd_alloc(struct mm_struct *mm) ...@@ -45,7 +45,7 @@ static inline pgd_t *pgd_alloc(struct mm_struct *mm)
static inline void pgd_free(struct mm_struct *mm, pgd_t *pgd) static inline void pgd_free(struct mm_struct *mm, pgd_t *pgd)
{ {
#ifdef CONFIG_64BIT #if PT_NLEVELS == 3
pgd -= PTRS_PER_PGD; pgd -= PTRS_PER_PGD;
#endif #endif
free_pages((unsigned long)pgd, PGD_ALLOC_ORDER); free_pages((unsigned long)pgd, PGD_ALLOC_ORDER);
...@@ -72,12 +72,15 @@ static inline pmd_t *pmd_alloc_one(struct mm_struct *mm, unsigned long address) ...@@ -72,12 +72,15 @@ static inline pmd_t *pmd_alloc_one(struct mm_struct *mm, unsigned long address)
static inline void pmd_free(struct mm_struct *mm, pmd_t *pmd) static inline void pmd_free(struct mm_struct *mm, pmd_t *pmd)
{ {
#ifdef CONFIG_64BIT
if(pmd_flag(*pmd) & PxD_FLAG_ATTACHED) if(pmd_flag(*pmd) & PxD_FLAG_ATTACHED)
/* This is the permanent pmd attached to the pgd; /*
* cannot free it */ * This is the permanent pmd attached to the pgd;
* cannot free it.
* Increment the counter to compensate for the decrement
* done by generic mm code.
*/
mm_inc_nr_pmds(mm);
return; return;
#endif
free_pages((unsigned long)pmd, PMD_ORDER); free_pages((unsigned long)pmd, PMD_ORDER);
} }
...@@ -99,7 +102,7 @@ static inline void pmd_free(struct mm_struct *mm, pmd_t *pmd) ...@@ -99,7 +102,7 @@ static inline void pmd_free(struct mm_struct *mm, pmd_t *pmd)
static inline void static inline void
pmd_populate_kernel(struct mm_struct *mm, pmd_t *pmd, pte_t *pte) pmd_populate_kernel(struct mm_struct *mm, pmd_t *pmd, pte_t *pte)
{ {
#ifdef CONFIG_64BIT #if PT_NLEVELS == 3
/* preserve the gateway marker if this is the beginning of /* preserve the gateway marker if this is the beginning of
* the permanent pmd */ * the permanent pmd */
if(pmd_flag(*pmd) & PxD_FLAG_ATTACHED) if(pmd_flag(*pmd) & PxD_FLAG_ATTACHED)
......
...@@ -55,8 +55,8 @@ ...@@ -55,8 +55,8 @@
#define ENTRY_COMP(_name_) .word sys_##_name_ #define ENTRY_COMP(_name_) .word sys_##_name_
#endif #endif
ENTRY_SAME(restart_syscall) /* 0 */ 90: ENTRY_SAME(restart_syscall) /* 0 */
ENTRY_SAME(exit) 91: ENTRY_SAME(exit)
ENTRY_SAME(fork_wrapper) ENTRY_SAME(fork_wrapper)
ENTRY_SAME(read) ENTRY_SAME(read)
ENTRY_SAME(write) ENTRY_SAME(write)
...@@ -439,7 +439,10 @@ ...@@ -439,7 +439,10 @@
ENTRY_SAME(bpf) ENTRY_SAME(bpf)
ENTRY_COMP(execveat) ENTRY_COMP(execveat)
/* Nothing yet */
.ifne (. - 90b) - (__NR_Linux_syscalls * (91b - 90b))
.error "size of syscall table does not fit value of __NR_Linux_syscalls"
.endif
#undef ENTRY_SAME #undef ENTRY_SAME
#undef ENTRY_DIFF #undef ENTRY_DIFF
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册