)]}'
{
  "commit": "d0f13e3c20b6fb73ccb467bdca97fa7cf5a574cd",
  "tree": "a2de01a21dbb28449893102742e6b516a519c03e",
  "parents": [
    "16f1c746755836aa823658000493cdab8ce7b098"
  ],
  "author": {
    "name": "Benjamin Herrenschmidt",
    "email": "benh@kernel.crashing.org",
    "time": "Tue May 08 16:27:27 2007 +1000"
  },
  "committer": {
    "name": "Paul Mackerras",
    "email": "paulus@samba.org",
    "time": "Wed May 09 16:35:00 2007 +1000"
  },
  "message": "[POWERPC] Introduce address space \"slices\"\n\nThe basic issue is to be able to do what hugetlbfs does but with\ndifferent page sizes for some other special filesystems; more\nspecifically, my need is:\n\n - Huge pages\n\n - SPE local store mappings using 64K pages on a 4K base page size\nkernel on Cell\n\n - Some special 4K segments in 64K-page kernels for mapping a dodgy\ntype of powerpc-specific infiniband hardware that requires 4K MMU\nmappings for various reasons I won\u0027t explain here.\n\nThe main issues are:\n\n - To maintain/keep track of the page size per \"segment\" (as we can\nonly have one page size per segment on powerpc, which are 256MB\ndivisions of the address space).\n\n - To make sure special mappings stay within their allotted\n\"segments\" (including MAP_FIXED crap)\n\n - To make sure everybody else doesn\u0027t mmap/brk/grow_stack into a\n\"segment\" that is used for a special mapping\n\nSome of the necessary mechanisms to handle that were present in the\nhugetlbfs code, but mostly in ways not suitable for anything else.\n\nThe patch relies on some changes to the generic get_unmapped_area()\nthat just got merged.  It still hijacks hugetlb callbacks here or\nthere as the generic code hasn\u0027t been entirely cleaned up yet but\nthat shouldn\u0027t be a problem.\n\nSo what is a slice ?  Well, I re-used the mechanism used formerly by our\nhugetlbfs implementation which divides the address space in\n\"meta-segments\" which I called \"slices\".  The division is done using\n256MB slices below 4G, and 1T slices above.  Thus the address space is\ndivided currently into 16 \"low\" slices and 16 \"high\" slices.  (Special\ncase: high slice 0 is the area between 4G and 1T).\n\nDoing so simplifies significantly the tracking of segments and avoids\nhaving to keep track of all the 256MB segments in the address space.\n\nWhile I used the \"concepts\" of hugetlbfs, I mostly re-implemented\neverything in a more generic way and \"ported\" hugetlbfs to it.\n\nSlices can have an associated page size, which is encoded in the mmu\ncontext and used by the SLB miss handler to set the segment sizes.  The\nhash code currently doesn\u0027t care, it has a specific check for hugepages,\nthough I might add a mechanism to provide per-slice hash mapping\nfunctions in the future.\n\nThe slice code provide a pair of \"generic\" get_unmapped_area() (bottomup\nand topdown) functions that should work with any slice size.  There is\nsome trickiness here so I would appreciate people to have a look at the\nimplementation of these and let me know if I got something wrong.\n\nSigned-off-by: Benjamin Herrenschmidt \u003cbenh@kernel.crashing.org\u003e\nSigned-off-by: Paul Mackerras \u003cpaulus@samba.org\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "808d2ef80e2f77459760c7aa044f51e00926b4df",
      "old_mode": 33188,
      "old_path": "arch/powerpc/Kconfig",
      "new_id": "5226f701634e629ea8a0aa598fcf386b8d05996d",
      "new_mode": 33188,
      "new_path": "arch/powerpc/Kconfig"
    },
    {
      "type": "modify",
      "old_id": "8f48560b7ee2f9e445dfa764bcae1e99c3cb3dc2",
      "old_mode": 33188,
      "old_path": "arch/powerpc/kernel/asm-offsets.c",
      "new_id": "d6803fb7b28b40a7c5381c7cc5a4fac860397e77",
      "new_mode": 33188,
      "new_path": "arch/powerpc/kernel/asm-offsets.c"
    },
    {
      "type": "modify",
      "old_id": "38a81967ca0702a1f0f04b4de7aa8712fe79627d",
      "old_mode": 33188,
      "old_path": "arch/powerpc/mm/Makefile",
      "new_id": "4f839c6a97682165fc9c7d18c91140fea0eddd31",
      "new_mode": 33188,
      "new_path": "arch/powerpc/mm/Makefile"
    },
    {
      "type": "modify",
      "old_id": "71092c2f65cdd056adebb91ae02ef089bda08e39",
      "old_mode": 33188,
      "old_path": "arch/powerpc/mm/hash_utils_64.c",
      "new_id": "5610ffb142110afda95b4b81fc2967aa633be04e",
      "new_mode": 33188,
      "new_path": "arch/powerpc/mm/hash_utils_64.c"
    },
    {
      "type": "modify",
      "old_id": "fb959264c104387b5c51c647e6f64743c0e4d6bb",
      "old_mode": 33188,
      "old_path": "arch/powerpc/mm/hugetlbpage.c",
      "new_id": "92a1b16fb7e3bab4fe1716d228d32961b77ee302",
      "new_mode": 33188,
      "new_path": "arch/powerpc/mm/hugetlbpage.c"
    },
    {
      "type": "modify",
      "old_id": "90a06ac02d5e5f35f44adf4366cc016b473463ee",
      "old_mode": 33188,
      "old_path": "arch/powerpc/mm/mmu_context_64.c",
      "new_id": "7a78cdc0515a283cd13a6487b558adea435caf8b",
      "new_mode": 33188,
      "new_path": "arch/powerpc/mm/mmu_context_64.c"
    },
    {
      "type": "modify",
      "old_id": "224e960650a09ce3e1face7057fd8643d58a9e0d",
      "old_mode": 33188,
      "old_path": "arch/powerpc/mm/slb.c",
      "new_id": "304375a735747cfc868f67cfba4fc6715809b6c2",
      "new_mode": 33188,
      "new_path": "arch/powerpc/mm/slb.c"
    },
    {
      "type": "modify",
      "old_id": "b10e4707d7c1396f858f43ba4f9f30eb6d233072",
      "old_mode": 33188,
      "old_path": "arch/powerpc/mm/slb_low.S",
      "new_id": "cd1a93d4948ca85868dd943a60667f541229a26e",
      "new_mode": 33188,
      "new_path": "arch/powerpc/mm/slb_low.S"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "f833dba2a0287ea06218f180620b8634300a58e7",
      "new_mode": 33188,
      "new_path": "arch/powerpc/mm/slice.c"
    },
    {
      "type": "modify",
      "old_id": "fec51525252e2dfba33d8bb0c860bbbc0630d974",
      "old_mode": 33188,
      "old_path": "arch/powerpc/platforms/cell/spu_base.c",
      "new_id": "a7f5a7653c62e19149fd9d8865d6e0bc2c3aa890",
      "new_mode": 33188,
      "new_path": "arch/powerpc/platforms/cell/spu_base.c"
    },
    {
      "type": "modify",
      "old_id": "6739457d8bc02aa3fbf45935c967a70be668e369",
      "old_mode": 33188,
      "old_path": "include/asm-powerpc/mmu-hash64.h",
      "new_id": "e2ca55bcfe0b64de87c79e00a36430738980a0ff",
      "new_mode": 33188,
      "new_path": "include/asm-powerpc/mmu-hash64.h"
    },
    {
      "type": "modify",
      "old_id": "cf95274f735e43ea3e9120b9697e0b0be75177bf",
      "old_mode": 33188,
      "old_path": "include/asm-powerpc/paca.h",
      "new_id": "c6a5b173566676c5d5bef92336f687c95bc13142",
      "new_mode": 33188,
      "new_path": "include/asm-powerpc/paca.h"
    },
    {
      "type": "modify",
      "old_id": "eab779c219958b18b82afd1ff5c55bc5de05f89b",
      "old_mode": 33188,
      "old_path": "include/asm-powerpc/page_64.h",
      "new_id": "3448a3d4bc64efc74d84a9c3e337a8989b108fd9",
      "new_mode": 33188,
      "new_path": "include/asm-powerpc/page_64.h"
    }
  ]
}
