Commit 71c01b9d authored by Linus Torvalds's avatar Linus Torvalds

Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/gerg/m68knommu

It contains 3 important fixes for ColdFire based machines:
 - fix processes getting stuck when running from strace
 - fix kernel vmalloced pages not being visible in all kernel contexts
 - fix shared user pages sometimes being visible in another process
   context

* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/gerg/m68knommu:
  m68k: Do not set global share for non-kernel shared pages
  m68k: Add shared bit to Coldfire kernel page entries
  m68knommu: fix syscall tracing stuck process
parents 437cf4c7 3372f5a7
...@@ -78,7 +78,8 @@ ...@@ -78,7 +78,8 @@
| CF_PAGE_READABLE \ | CF_PAGE_READABLE \
| CF_PAGE_WRITABLE \ | CF_PAGE_WRITABLE \
| CF_PAGE_EXEC \ | CF_PAGE_EXEC \
| CF_PAGE_SYSTEM) | CF_PAGE_SYSTEM \
| CF_PAGE_SHARED)
#define PAGE_COPY __pgprot(CF_PAGE_VALID \ #define PAGE_COPY __pgprot(CF_PAGE_VALID \
| CF_PAGE_ACCESSED \ | CF_PAGE_ACCESSED \
......
...@@ -87,7 +87,7 @@ void __init paging_init(void) ...@@ -87,7 +87,7 @@ void __init paging_init(void)
int cf_tlb_miss(struct pt_regs *regs, int write, int dtlb, int extension_word) int cf_tlb_miss(struct pt_regs *regs, int write, int dtlb, int extension_word)
{ {
unsigned long flags, mmuar; unsigned long flags, mmuar, mmutr;
struct mm_struct *mm; struct mm_struct *mm;
pgd_t *pgd; pgd_t *pgd;
pmd_t *pmd; pmd_t *pmd;
...@@ -137,9 +137,10 @@ int cf_tlb_miss(struct pt_regs *regs, int write, int dtlb, int extension_word) ...@@ -137,9 +137,10 @@ int cf_tlb_miss(struct pt_regs *regs, int write, int dtlb, int extension_word)
if (!pte_dirty(*pte) && !KMAPAREA(mmuar)) if (!pte_dirty(*pte) && !KMAPAREA(mmuar))
set_pte(pte, pte_wrprotect(*pte)); set_pte(pte, pte_wrprotect(*pte));
mmu_write(MMUTR, (mmuar & PAGE_MASK) | (asid << MMUTR_IDN) | mmutr = (mmuar & PAGE_MASK) | (asid << MMUTR_IDN) | MMUTR_V;
(((int)(pte->pte) & (int)CF_PAGE_MMUTR_MASK) if ((mmuar < TASK_UNMAPPED_BASE) || (mmuar >= TASK_SIZE))
>> CF_PAGE_MMUTR_SHIFT) | MMUTR_V); mmutr |= (pte->pte & CF_PAGE_MMUTR_MASK) >> CF_PAGE_MMUTR_SHIFT;
mmu_write(MMUTR, mmutr);
mmu_write(MMUDR, (pte_val(*pte) & PAGE_MASK) | mmu_write(MMUDR, (pte_val(*pte) & PAGE_MASK) |
((pte->pte) & CF_PAGE_MMUDR_MASK) | MMUDR_SZ_8KB | MMUDR_X); ((pte->pte) & CF_PAGE_MMUDR_MASK) | MMUDR_SZ_8KB | MMUDR_X);
......
...@@ -136,7 +136,7 @@ Luser_return: ...@@ -136,7 +136,7 @@ Luser_return:
movel %sp,%d1 /* get thread_info pointer */ movel %sp,%d1 /* get thread_info pointer */
andl #-THREAD_SIZE,%d1 /* at base of kernel stack */ andl #-THREAD_SIZE,%d1 /* at base of kernel stack */
movel %d1,%a0 movel %d1,%a0
movel %a0@(TINFO_FLAGS),%d1 /* get thread_info->flags */ moveb %a0@(TINFO_FLAGS+3),%d1 /* thread_info->flags (low 8 bits) */
jne Lwork_to_do /* still work to do */ jne Lwork_to_do /* still work to do */
Lreturn: Lreturn:
...@@ -148,8 +148,6 @@ Lwork_to_do: ...@@ -148,8 +148,6 @@ Lwork_to_do:
btst #TIF_NEED_RESCHED,%d1 btst #TIF_NEED_RESCHED,%d1
jne reschedule jne reschedule
/* GERG: do we need something here for TRACEing?? */
Lsignal_return: Lsignal_return:
subql #4,%sp /* dummy return address */ subql #4,%sp /* dummy return address */
SAVE_SWITCH_STACK SAVE_SWITCH_STACK
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment