1. 22 5月, 2012 1 次提交
  2. 25 3月, 2012 1 次提交
  3. 27 10月, 2010 1 次提交
  4. 21 2月, 2010 1 次提交
    • R
      MM: Pass a PTE pointer to update_mmu_cache() rather than the PTE itself · 4b3073e1
      Russell King 提交于
      On VIVT ARM, when we have multiple shared mappings of the same file
      in the same MM, we need to ensure that we have coherency across all
      copies.  We do this via make_coherent() by making the pages
      uncacheable.
      
      This used to work fine, until we allowed highmem with highpte - we
      now have a page table which is mapped as required, and is not available
      for modification via update_mmu_cache().
      
      Ralf Beache suggested getting rid of the PTE value passed to
      update_mmu_cache():
      
        On MIPS update_mmu_cache() calls __update_tlb() which walks pagetables
        to construct a pointer to the pte again.  Passing a pte_t * is much
        more elegant.  Maybe we might even replace the pte argument with the
        pte_t?
      
      Ben Herrenschmidt would also like the pte pointer for PowerPC:
      
        Passing the ptep in there is exactly what I want.  I want that
        -instead- of the PTE value, because I have issue on some ppc cases,
        for I$/D$ coherency, where set_pte_at() may decide to mask out the
        _PAGE_EXEC.
      
      So, pass in the mapped page table pointer into update_mmu_cache(), and
      remove the PTE value, updating all implementations and call sites to
      suit.
      
      Includes a fix from Stephen Rothwell:
      
        sparc: fix fallout from update_mmu_cache API change
      Signed-off-by: NStephen Rothwell <sfr@canb.auug.org.au>
      Acked-by: NBenjamin Herrenschmidt <benh@kernel.crashing.org>
      Signed-off-by: NRussell King <rmk+kernel@arm.linux.org.uk>
      4b3073e1
  5. 12 6月, 2009 1 次提交
  6. 23 10月, 2008 2 次提交
  7. 28 4月, 2008 1 次提交
    • N
      mm: introduce pte_special pte bit · 7e675137
      Nick Piggin 提交于
      s390 for one, cannot implement VM_MIXEDMAP with pfn_valid, due to their memory
      model (which is more dynamic than most).  Instead, they had proposed to
      implement it with an additional path through vm_normal_page(), using a bit in
      the pte to determine whether or not the page should be refcounted:
      
      vm_normal_page()
      {
      	...
              if (unlikely(vma->vm_flags & (VM_PFNMAP|VM_MIXEDMAP))) {
                      if (vma->vm_flags & VM_MIXEDMAP) {
      #ifdef s390
      			if (!mixedmap_refcount_pte(pte))
      				return NULL;
      #else
                              if (!pfn_valid(pfn))
                                      return NULL;
      #endif
                              goto out;
                      }
      	...
      }
      
      This is fine, however if we are allowed to use a bit in the pte to determine
      refcountedness, we can use that to _completely_ replace all the vma based
      schemes.  So instead of adding more cases to the already complex vma-based
      scheme, we can have a clearly seperate and simple pte-based scheme (and get
      slightly better code generation in the process):
      
      vm_normal_page()
      {
      #ifdef s390
      	if (!mixedmap_refcount_pte(pte))
      		return NULL;
      	return pte_page(pte);
      #else
      	...
      #endif
      }
      
      And finally, we may rather make this concept usable by any architecture rather
      than making it s390 only, so implement a new type of pte state for this.
      Unfortunately the old vma based code must stay, because some architectures may
      not be able to spare pte bits.  This makes vm_normal_page a little bit more
      ugly than we would like, but the 2 cases are clearly seperate.
      
      So introduce a pte_special pte state, and use it in mm/memory.c.  It is
      currently a noop for all architectures, so this doesn't actually result in any
      compiled code changes to mm/memory.o.
      
      BTW:
      I haven't put vm_normal_page() into arch code as-per an earlier suggestion.
      The reason is that, regardless of where vm_normal_page is actually
      implemented, the *abstraction* is still exactly the same. Also, while it
      depends on whether the architecture has pte_special or not, that is the
      only two possible cases, and it really isn't an arch specific function --
      the role of the arch code should be to provide primitive functions and
      accessors with which to build the core code; pte_special does that. We do
      not want architectures to know or care about vm_normal_page itself, and
      we definitely don't want them being able to invent something new there
      out of sight of mm/ code. If we made vm_normal_page an arch function, then
      we have to make vm_insert_mixed (next patch) an arch function too. So I
      don't think moving it to arch code fundamentally improves any abstractions,
      while it does practically make the code more difficult to follow, for both
      mm and arch developers, and easier to misuse.
      
      [akpm@linux-foundation.org: build fix]
      Signed-off-by: NNick Piggin <npiggin@suse.de>
      Acked-by: NCarsten Otte <cotte@de.ibm.com>
      Cc: Jared Hulbert <jaredeh@gmail.com>
      Cc: Martin Schwidefsky <schwidefsky@de.ibm.com>
      Cc: Heiko Carstens <heiko.carstens@de.ibm.com>
      Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      7e675137
  8. 06 2月, 2008 7 次提交
    • J
      uml: 64-bit tlb fixes · 909e90d3
      Jeff Dike 提交于
      Some 64-bit tlb fixes -
      	moved pmd_page_vaddr to pgtable.h since it's the same for both
      2-level and 3-level page tables
      	fixed a bogus cast on pud_page_vaddr
      	made the address checking in update_*_range more careful
      Signed-off-by: NJeff Dike <jdike@linux.intel.com>
      Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      909e90d3
    • J
      uml: add virt_to_pte · ca77b555
      Jeff Dike 提交于
      Turn um_virt_to_phys into virt_to_pte, cleaning up a horrid interface.
      
      It's also made non-static and declared in pgtable.h because it'll be
      needed when the stubs get a vma.
      Signed-off-by: NJeff Dike <jdike@linux.intel.com>
      Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      ca77b555
    • J
      uml: fix page table data sizes · 655e4ed0
      Jeff Dike 提交于
      Get the sizes of various pieces of data right when using three-level
      page tables.  pgd and pmd entries remain at 32 bits in a 32-bit
      compilation because page tables will remain in low memory.  So,
      PGDIR_SHIFT, the PTRS_PER_* values, set_pud, set_pmd are conditional
      on 64BIT.
      
      More use of phys_t is made when there are physical memory addresses
      floating around.
      
      ObCheckpatchViolationJustification - the new typedef is an alternate
      definition of pmd_t, which I can't really live without.
      Signed-off-by: NJeff Dike <jdike@linux.intel.com>
      Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      655e4ed0
    • J
      uml: header untangling · 8192ab42
      Jeff Dike 提交于
      Untangle UML headers somewhat and add some includes where they were
      needed explicitly, but gotten accidentally via some other header.
      
      arch/um/include/um_uaccess.h loses asm/fixmap.h because it uses no
      fixmap stuff and gains elf.h, because it needs FIXADDR_USER_*, and
      archsetjmp.h, because it needs jmp_buf.
      
      pmd_alloc_one is uninlined because it needs mm_struct, and that's
      inconvenient to provide in asm-um/pgtable-3level.h.
      
      elf_core_copy_fpregs is also uninlined from elf-i386.h and
      elf-x86_64.h, which duplicated the code anyway, to
      arch/um/kernel/process.c, so that the reference to current_thread
      doesn't pull sched.h or anything related into asm/elf.h.
      
      arch/um/sys-i386/ldt.c, arch/um/kernel/tlb.c and
      arch/um/kernel/skas/uaccess.c got sched.h because they dereference
      task_structs.  Its includes of linux and asm headers got turned from
      "" to <>.
      
      arch/um/sys-i386/bug.c gets asm/errno.h because it needs errno
      constants.
      
      asm/elf-i386 gets asm/user.h because it needs user_regs_struct.
      
      asm/fixmap.h gets page.h because it needs PAGE_SIZE and PAGE_MASK and
      system.h for BUG_ON.
      
      asm/pgtable doesn't need sched.h.
      
      asm/processor-generic.h defined mm_segment_t, but didn't use it.  So,
      that definition is moved to uaccess.h, which defines a bunch of
      mm_segment_t-related stuff.  thread_info.h uses mm_segment_t, and
      includes uaccess.h, which causes a recursion.  So, the definition is
      placed above the include of thread_info. in uaccess.h.  thread_info.h
      also gets page.h because it needs PAGE_SIZE.
      
      ObCheckpatchViolationJustification - I'm not adding a typedef; I'm
      moving mm_segment_t from one place to another.
      Signed-off-by: NJeff Dike <jdike@linux.intel.com>
      Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      8192ab42
    • J
      uml: move um_virt_to_phys · 9157f90f
      Jeff Dike 提交于
      This patchset makes UML build and run with three-level page tables on
      32-bit hosts.  This is an uncommon use case, but the code here needed
      fixing and cleaning up, so 32-bit three-level pages tables were tested
      to make sure the changes are good.
      
      Patch 1 - code movement
      Patch 2 - header untangling
      Patch 3 - style fixups in files affected so far
      Patch 4 - clean up use of current.h
      Patch 5 - fix sizes of types that are different between 2 and 3-level
      	page tables - three-level page table support should build at
      	this point
      Patch 6 - tidy (i.e. eliminate much of) the code that figures out how
      	big the address space is
      Patch 7 - change um_virt_to_phys into virt_to_pte, clean its
      	interface, and clean its (so far) one caller
      Patch 8 - the stub pages are covered with a VMA, allowing some nasty
      	code to be thrown out - three-level page tables now work
      
      This patch:
      
      um_virt_to_phys only has one user, so it can be moved to the same file
      and made static.  Its declarations in pgtable.h and ksyms.c are also
      gone.
      
      current_cmd was another apparent user, but it itself isn't used, so it
      is deleted.
      Signed-off-by: NJeff Dike <jdike@linux.intel.com>
      Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      9157f90f
    • J
      UML - Fix build in 2.6.24-rc2-mm1 · 300ecf59
      Jeff Dike 提交于
      The earlier pgtable.h tidying patch made things a bit too tidy.  Add
      back a header which is needed in VMALLOC_START and friend.  Also add
      back a definition of pmd_page_vaddr, which is needed on x86_64.
      Signed-off-by: NJeff Dike <jdike@linux.intel.com>
      Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      300ecf59
    • J
      uml: tidy pgtable.h · d83ecf08
      Jeff Dike 提交于
      Large pieces of include/asm/pgtable.h were unused cruft.
      
      This uncovered arch/um/kernel/trap.c needing skas.h in order to get
      ptrace_faultinfo.
      Signed-off-by: NJeff Dike <jdike@linux.intel.com>
      Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      d83ecf08
  9. 17 7月, 2007 1 次提交
  10. 02 3月, 2007 1 次提交
  11. 02 2月, 2007 1 次提交
  12. 30 9月, 2006 1 次提交
  13. 26 9月, 2006 1 次提交
    • D
      [PATCH] Standardize pxx_page macros · 46a82b2d
      Dave McCracken 提交于
      One of the changes necessary for shared page tables is to standardize the
      pxx_page macros.  pte_page and pmd_page have always returned the struct
      page associated with their entry, while pte_page_kernel and pmd_page_kernel
      have returned the kernel virtual address.  pud_page and pgd_page, on the
      other hand, return the kernel virtual address.
      
      Shared page tables needs pud_page and pgd_page to return the actual page
      structures.  There are very few actual users of these functions, so it is
      simple to standardize their usage.
      
      Since this is basic cleanup, I am submitting these changes as a standalone
      patch.  Per Hugh Dickins' comments about it, I am also changing the
      pxx_page_kernel macros to pxx_page_vaddr to clarify their meaning.
      Signed-off-by: NDave McCracken <dmccr@us.ibm.com>
      Cc: Hugh Dickins <hugh@veritas.com>
      Signed-off-by: NAndrew Morton <akpm@osdl.org>
      Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
      46a82b2d
  14. 30 10月, 2005 1 次提交
    • H
      [PATCH] mm: pte_offset_map_lock loops · 705e87c0
      Hugh Dickins 提交于
      Convert those common loops using page_table_lock on the outside and
      pte_offset_map within to use just pte_offset_map_lock within instead.
      
      These all hold mmap_sem (some exclusively, some not), so at no level can a
      page table be whipped away from beneath them.  But whereas pte_alloc loops
      tested with the "atomic" pmd_present, these loops are testing with pmd_none,
      which on i386 PAE tests both lower and upper halves.
      
      That's now unsafe, so add a cast into pmd_none to test only the vital lower
      half: we lose a little sensitivity to a corrupt middle directory, but not
      enough to worry about.  It appears that i386 and UML were the only
      architectures vulnerable in this way, and pgd and pud no problem.
      Signed-off-by: NHugh Dickins <hugh@veritas.com>
      Signed-off-by: NAndrew Morton <akpm@osdl.org>
      Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
      705e87c0
  15. 23 9月, 2005 1 次提交
  16. 11 9月, 2005 1 次提交
  17. 05 9月, 2005 2 次提交
  18. 29 5月, 2005 1 次提交
  19. 06 5月, 2005 1 次提交
  20. 17 4月, 2005 1 次提交
    • L
      Linux-2.6.12-rc2 · 1da177e4
      Linus Torvalds 提交于
      Initial git repository build. I'm not bothering with the full history,
      even though we have it. We can create a separate "historical" git
      archive of that later if we want to, and in the meantime it's about
      3.2GB when imported into git - space that would just make the early
      git days unnecessarily complicated, when we don't have a lot of good
      infrastructure for it.
      
      Let it rip!
      1da177e4