mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-06-18 04:34:36 +00:00
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
This commit is contained in:
commit
713d25dba9
2 changed files with 16 additions and 10 deletions
|
@ -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)
|
||||||
|
|
||||||
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)
|
||||||
|
|
||||||
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)
|
||||||
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 @@
|
||||||
#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 @@
|
||||||
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
|
||||||
|
|
Loading…
Add table
Reference in a new issue