1. 16 11月, 2015 1 次提交
  2. 12 11月, 2015 1 次提交
    • D
      MIPS: Fix PAGE_MASK definition · 22b14523
      Dan Williams 提交于
      Make PAGE_MASK an unsigned long, like it is on x86, to avoid:
      
      In file included from arch/mips/kernel/asm-offsets.c:14:0:
      include/linux/mm.h: In function '__pfn_to_pfn_t':
      include/linux/mm.h:1050:2: warning: left shift count >= width of type
        pfn_t pfn_t = { .val = pfn | (flags & PFN_FLAGS_MASK), };
      
      ...where PFN_FLAGS_MASK is:
      
      #define PFN_FLAGS_MASK (~PAGE_MASK << (BITS_PER_LONG - PAGE_SHIFT))
      Signed-off-by: NDan Williams <dan.j.williams@intel.com>
      Cc: ross.zwisler@linux.intel.com
      Cc: hch@lst.de
      Cc: linux-mips@linux-mips.org
      Cc: linux-nvdimm@lists.01.org
      Cc: linux-kernel@vger.kernel.org
      Cc: linux-mm@kvack.org
      Patchwork: https://patchwork.linux-mips.org/patch/11280/Signed-off-by: NRalf Baechle <ralf@linux-mips.org>
      22b14523
  3. 02 4月, 2015 1 次提交
  4. 25 11月, 2014 1 次提交
  5. 26 8月, 2014 3 次提交
  6. 27 3月, 2014 1 次提交
  7. 23 1月, 2014 1 次提交
  8. 01 7月, 2013 1 次提交
  9. 19 5月, 2013 1 次提交
    • R
      MIPS: Rewrite pfn_valid to work in modules, too. · 8b923214
      Ralf Baechle 提交于
      This fixes:
      
        MODPOST 393 modules
      ERROR: "min_low_pfn" [arch/mips/kvm/kvm.ko] undefined!
      make[3]: *** [__modpost] Error 1
      
      It would have been possible to just export min_low_pfn but in the end
      pfn_valid should return 1 for any pfn argument for which a struct page
      exists so using min_low_pfn was wrong anyway.
      Signed-off-by: NRalf Baechle <ralf@linux-mips.org>
      8b923214
  10. 18 5月, 2013 1 次提交
    • D
      MIPS: Make virt_to_phys() work for all unmapped addresses. · 49c426ba
      David Daney 提交于
      As reported:
        This problem was discovered when doing BGP traffic with the TCP MD5 option
        activated, where the following call chain caused a crash:
      
         * tcp_v4_rcv
         *  tcp_v4_timewait_ack
         *   tcp_v4_send_ack -> follow stack variable rep.th
         *    tcp_v4_md5_hash_hdr
         *     tcp_md5_hash_header
         *      sg_init_one
         *       sg_set_buf
         *        virt_to_page
      
        I noticed that tcp_v4_send_reset uses a similar stack variable and
        also calls tcp_v4_md5_hash_hdr, so it has the same problem.
      
      The networking core can indirectly call virt_to_phys() on stack
      addresses, if this is done from PID 0, the stack will usually be in
      CKSEG0, so virt_to_phys() needs to work there as well
      Signed-off-by: NDavid Daney <david.daney@cavium.com>
      Cc: linux-mips@linux-mips.org
      Cc: Jiang Liu <liuj97@gmail.com>
      Cc: eunb.song@samsung.com
      Cc: linux-kernel@vger.kernel.org
      Patchwork: https://patchwork.linux-mips.org/patch/5220/Signed-off-by: NRalf Baechle <ralf@linux-mips.org>
      49c426ba
  11. 23 4月, 2013 1 次提交
    • R
      Revert "MIPS: page.h: Provide more readable definition for PAGE_MASK." · 3b5e50ed
      Ralf Baechle 提交于
      This reverts commit c17a6554.
      
      Manuel Lauss writes:
      
      lmo commit c17a6554 (MIPS: page.h: Provide more readable definition for
      PAGE_MASK) apparently breaks ioremap of 36-bit addresses on my Alchemy
      systems (PCI and PCMCIA) The reason is that in arch/mips/mm/ioremap.c
      line 157  (phys_addr &= PAGE_MASK) bits 32-35 are cut off.  Seems the
      new PAGE_MASK is explicitly 32bit, or one could make it signed instead
      of unsigned long.
      3b5e50ed
  12. 01 2月, 2013 1 次提交
  13. 29 12月, 2012 2 次提交
  14. 12 12月, 2012 2 次提交
  15. 21 2月, 2012 1 次提交
  16. 11 1月, 2012 1 次提交
  17. 05 10月, 2010 1 次提交
  18. 13 4月, 2010 1 次提交
    • F
      MIPS: make CAC_ADDR and UNCAC_ADDR account for PHYS_OFFSET · 86f7d75e
      Florian Fainelli 提交于
      On AR7, we already redefine PHYS_OFFSET to match the system specifities, it
      is however not sufficient when unsing dma_{map,unmap}_single, specifically
      in the ethernet driver, we must also adjust CAC_ADDR and UNCAC_ADDR for DMA
      to work correctly. This patch fixes the following issue, seen in cpmac_open:
      
      ops[#1]:
      Cpu 0
      $ 0   : 00000000 10008400 a0f5b120 00000000
      $ 4   : 94c59000 94270f64 00000020 00000010
      $ 8   : 00000010 94103ce0 0000000a 94c03400
      $12   : ffffffff 94c03408 94c03410 00000001
      $16   : a0f5ba20 00000041 94c592c0 94c59200
      $20   : 94c59000 000005ee 00002000 9438c8f0
      $24   : 00000010 00000000
      $28   : 94fac000 94fadd58 94390000 942724a8
      Hi    : 00000000
      Lo    : 00000001
      epc   : 94272518 cpmac_open+0x208/0x3f8
          Not tainted
      ra    : 942724a8 cpmac_open+0x198/0x3f8
      Status: 10008403    KERNEL EXL IE
      Cause : 3080000c
      BadVA : 00000000
      PrId  : 00018448 (MIPS 4KEc)
      Modules linked in:
      Process ifconfig (pid: 278, threadinfo=94fac000, task=94e79590, tls=00000000)
      Stack : 7f8da120 2ab05cb0 94c59000 943356f0 00000000 943d0000 94c59000 943356f0
              94c59030 943d0000 943c27c0 94fade10 00000000 94fade20 94c59000 9428e5a4
              00000000 94c59000 00000041 94289768 94c59000 00000041 00001002 00001043
              00000000 9428d810 00000000 94fade10 7f8da4e8 9428e6b8 00000000 7f8da4a8
              7f8da4e8 00008914 00000000 942f7f2c 00000000 00000008 00408000 00008913
              ...
      Call Trace:
      [<94272518>] cpmac_open+0x208/0x3f8
      [<9428e5a4>] dev_open+0x164/0x264
      [<9428d810>] dev_change_flags+0xd0/0x1bc
      [<942f7f2c>] devinet_ioctl+0x2d8/0x908
      [<942771f8>] sock_ioctl+0x29c/0x2fc
      [<941a0fb4>] vfs_ioctl+0x2c/0x7c
      [<941a16ec>] do_vfs_ioctl+0x5dc/0x630
      [<941a1790>] sys_ioctl+0x50/0x88
      [<94101e10>] stack_done+0x20/0x3c
      Signed-off-by: Npeter fuerst <post@pfrst.de>
      Signed-off-by: NFlorian Fainelli <florian@openwrt.org>
      To: linux-mips@linux-mips.org
      Patchwork: http://patchwork.linux-mips.org/patch/1050/Signed-off-by: NRalf Baechle <ralf@linux-mips.org>
      86f7d75e
  19. 27 2月, 2010 1 次提交
  20. 18 9月, 2009 1 次提交
  21. 18 8月, 2009 1 次提交
  22. 03 7月, 2009 1 次提交
  23. 17 6月, 2009 1 次提交
  24. 12 6月, 2009 1 次提交
  25. 14 5月, 2009 1 次提交
  26. 11 10月, 2008 1 次提交
  27. 25 7月, 2008 1 次提交
    • A
      PAGE_ALIGN(): correctly handle 64-bit values on 32-bit architectures · 27ac792c
      Andrea Righi 提交于
      On 32-bit architectures PAGE_ALIGN() truncates 64-bit values to the 32-bit
      boundary. For example:
      
      	u64 val = PAGE_ALIGN(size);
      
      always returns a value < 4GB even if size is greater than 4GB.
      
      The problem resides in PAGE_MASK definition (from include/asm-x86/page.h for
      example):
      
      #define PAGE_SHIFT      12
      #define PAGE_SIZE       (_AC(1,UL) << PAGE_SHIFT)
      #define PAGE_MASK       (~(PAGE_SIZE-1))
      ...
      #define PAGE_ALIGN(addr)       (((addr)+PAGE_SIZE-1)&PAGE_MASK)
      
      The "~" is performed on a 32-bit value, so everything in "and" with
      PAGE_MASK greater than 4GB will be truncated to the 32-bit boundary.
      Using the ALIGN() macro seems to be the right way, because it uses
      typeof(addr) for the mask.
      
      Also move the PAGE_ALIGN() definitions out of include/asm-*/page.h in
      include/linux/mm.h.
      
      See also lkml discussion: http://lkml.org/lkml/2008/6/11/237
      
      [akpm@linux-foundation.org: fix drivers/media/video/uvc/uvc_queue.c]
      [akpm@linux-foundation.org: fix v850]
      [akpm@linux-foundation.org: fix powerpc]
      [akpm@linux-foundation.org: fix arm]
      [akpm@linux-foundation.org: fix mips]
      [akpm@linux-foundation.org: fix drivers/media/video/pvrusb2/pvrusb2-dvb.c]
      [akpm@linux-foundation.org: fix drivers/mtd/maps/uclinux.c]
      [akpm@linux-foundation.org: fix powerpc]
      Signed-off-by: NAndrea Righi <righi.andrea@gmail.com>
      Cc: <linux-arch@vger.kernel.org>
      Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      27ac792c
  28. 20 7月, 2008 1 次提交
  29. 09 2月, 2008 1 次提交
    • M
      CONFIG_HIGHPTE vs. sub-page page tables. · 2f569afd
      Martin Schwidefsky 提交于
      Background: I've implemented 1K/2K page tables for s390.  These sub-page
      page tables are required to properly support the s390 virtualization
      instruction with KVM.  The SIE instruction requires that the page tables
      have 256 page table entries (pte) followed by 256 page status table entries
      (pgste).  The pgstes are only required if the process is using the SIE
      instruction.  The pgstes are updated by the hardware and by the hypervisor
      for a number of reasons, one of them is dirty and reference bit tracking.
      To avoid wasting memory the standard pte table allocation should return
      1K/2K (31/64 bit) and 2K/4K if the process is using SIE.
      
      Problem: Page size on s390 is 4K, page table size is 1K or 2K.  That means
      the s390 version for pte_alloc_one cannot return a pointer to a struct
      page.  Trouble is that with the CONFIG_HIGHPTE feature on x86 pte_alloc_one
      cannot return a pointer to a pte either, since that would require more than
      32 bit for the return value of pte_alloc_one (and the pte * would not be
      accessible since its not kmapped).
      
      Solution: The only solution I found to this dilemma is a new typedef: a
      pgtable_t.  For s390 pgtable_t will be a (pte *) - to be introduced with a
      later patch.  For everybody else it will be a (struct page *).  The
      additional problem with the initialization of the ptl lock and the
      NR_PAGETABLE accounting is solved with a constructor pgtable_page_ctor and
      a destructor pgtable_page_dtor.  The page table allocation and free
      functions need to call these two whenever a page table page is allocated or
      freed.  pmd_populate will get a pgtable_t instead of a struct page pointer.
       To get the pgtable_t back from a pmd entry that has been installed with
      pmd_populate a new function pmd_pgtable is added.  It replaces the pmd_page
      call in free_pte_range and apply_to_pte_range.
      Signed-off-by: NMartin Schwidefsky <schwidefsky@de.ibm.com>
      Cc: <linux-arch@vger.kernel.org>
      Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      2f569afd
  30. 08 2月, 2008 1 次提交
  31. 12 10月, 2007 4 次提交
  32. 29 9月, 2007 1 次提交
  33. 28 9月, 2007 1 次提交