1. 29 6月, 2013 1 次提交
  2. 21 6月, 2013 4 次提交
  3. 20 6月, 2013 2 次提交
  4. 14 6月, 2013 6 次提交
    • S
      ARM64: mm: THP support. · af074848
      Steve Capper 提交于
      Bring Transparent HugePage support to ARM. The size of a
      transparent huge page depends on the normal page size. A
      transparent huge page is always represented as a pmd.
      
      If PAGE_SIZE is 4KB, THPs are 2MB.
      If PAGE_SIZE is 64KB, THPs are 512MB.
      Signed-off-by: NSteve Capper <steve.capper@linaro.org>
      Acked-by: NCatalin Marinas <catalin.marinas@arm.com>
      af074848
    • S
      ARM64: mm: Raise MAX_ORDER for 64KB pages and THP. · d03bb145
      Steve Capper 提交于
      The buddy allocator has a default MAX_ORDER of 11, which is too
      low to allocate enough memory for 512MB Transparent HugePages if
      our base page size is 64KB.
      
      This patch introduces MAX_ZONE_ORDER and sets it to 14 when 64KB
      pages are used in conjuction with THP, otherwise the default value
      of 11 is used.
      Signed-off-by: NSteve Capper <steve.capper@linaro.org>
      Acked-by: NCatalin Marinas <catalin.marinas@arm.com>
      d03bb145
    • S
      ARM64: mm: HugeTLB support. · 084bd298
      Steve Capper 提交于
      Add huge page support to ARM64, different huge page sizes are
      supported depending on the size of normal pages:
      
      PAGE_SIZE is 4KB:
         2MB - (pmds) these can be allocated at any time.
      1024MB - (puds) usually allocated on bootup with the command line
               with something like: hugepagesz=1G hugepages=6
      
      PAGE_SIZE is 64KB:
       512MB - (pmds) usually allocated on bootup via command line.
      Signed-off-by: NSteve Capper <steve.capper@linaro.org>
      Acked-by: NCatalin Marinas <catalin.marinas@arm.com>
      084bd298
    • S
      ARM64: mm: Move PTE_PROT_NONE bit. · 59911ca4
      Steve Capper 提交于
      Under ARM64, PTEs can be broadly categorised as follows:
         - Present and valid: Bit #0 is set. The PTE is valid and memory
           access to the region may fault.
      
         - Present and invalid: Bit #0 is clear and bit #1 is set.
           Represents present memory with PROT_NONE protection. The PTE
           is an invalid entry, and the user fault handler will raise a
           SIGSEGV.
      
         - Not present (file or swap): Bits #0 and #1 are clear.
           Memory represented has been paged out. The PTE is an invalid
           entry, and the fault handler will try and re-populate the
           memory where necessary.
      
      Huge PTEs are block descriptors that have bit #1 clear. If we wish
      to represent PROT_NONE huge PTEs we then run into a problem as
      there is no way to distinguish between regular and huge PTEs if we
      set bit #1.
      
      To resolve this ambiguity this patch moves PTE_PROT_NONE from
      bit #1 to bit #2 and moves PTE_FILE from bit #2 to bit #3. The
      number of swap/file bits is reduced by 1 as a consequence, leaving
      60 bits for file and swap entries.
      Signed-off-by: NSteve Capper <steve.capper@linaro.org>
      Acked-by: NCatalin Marinas <catalin.marinas@arm.com>
      59911ca4
    • S
      ARM64: mm: Make PAGE_NONE pages read only and no-execute. · 072b1b62
      Steve Capper 提交于
      If we consider the following code sequence:
      
      	my_pte = pte_modify(entry, myprot);
      	x = pte_write(my_pte);
      	y = pte_exec(my_pte);
      
      If myprot comes from a PROT_NONE page, then x and y will both be
      true which is undesireable behaviour.
      
      This patch sets the no-execute and read-only bits for PAGE_NONE
      such that the code above will return false for both x and y.
      Signed-off-by: NSteve Capper <steve.capper@linaro.org>
      Acked-by: NCatalin Marinas <catalin.marinas@arm.com>
      072b1b62
    • S
      ARM64: mm: Restore memblock limit when map_mem finished. · f6bc87c3
      Steve Capper 提交于
      In paging_init the memblock limit is set to restrict any addresses
      returned by early_alloc to fit within the initial direct kernel
      mapping in swapper_pg_dir. This allows map_mem to allocate puds,
      pmds and ptes from the initial direct kernel mapping.
      
      The limit stays low after paging_init() though, meaning any
      bootmem allocations will be from a restricted subset of memory.
      Gigabyte huge pages, for instance, are normally allocated from
      bootmem as their order (18) is too large for the default buddy
      allocator (MAX_ORDER = 11).
      
      This patch restores the memblock limit when map_mem has finished,
      allowing gigabyte huge pages (and other objects) to be allocated
      from all of bootmem.
      Signed-off-by: NSteve Capper <steve.capper@linaro.org>
      Acked-by: NCatalin Marinas <catalin.marinas@arm.com>
      f6bc87c3
  5. 12 6月, 2013 18 次提交
  6. 11 6月, 2013 1 次提交
  7. 08 6月, 2013 6 次提交
  8. 07 6月, 2013 2 次提交