)]}'
{
  "commit": "2f569afd9ced9ebec9a6eb3dbf6f83429be0a7b4",
  "tree": "23a31763887d9505e62e9d7cc8ec2fa4b86bd380",
  "parents": [
    "13214adf738abc92b0a00c0763fd3be79eebaa7c"
  ],
  "author": {
    "name": "Martin Schwidefsky",
    "email": "schwidefsky@de.ibm.com",
    "time": "Fri Feb 08 04:22:04 2008 -0800"
  },
  "committer": {
    "name": "Linus Torvalds",
    "email": "torvalds@woody.linux-foundation.org",
    "time": "Fri Feb 08 09:22:42 2008 -0800"
  },
  "message": "CONFIG_HIGHPTE vs. sub-page page tables.\n\nBackground: I\u0027ve implemented 1K/2K page tables for s390.  These sub-page\npage tables are required to properly support the s390 virtualization\ninstruction with KVM.  The SIE instruction requires that the page tables\nhave 256 page table entries (pte) followed by 256 page status table entries\n(pgste).  The pgstes are only required if the process is using the SIE\ninstruction.  The pgstes are updated by the hardware and by the hypervisor\nfor a number of reasons, one of them is dirty and reference bit tracking.\nTo avoid wasting memory the standard pte table allocation should return\n1K/2K (31/64 bit) and 2K/4K if the process is using SIE.\n\nProblem: Page size on s390 is 4K, page table size is 1K or 2K.  That means\nthe s390 version for pte_alloc_one cannot return a pointer to a struct\npage.  Trouble is that with the CONFIG_HIGHPTE feature on x86 pte_alloc_one\ncannot return a pointer to a pte either, since that would require more than\n32 bit for the return value of pte_alloc_one (and the pte * would not be\naccessible since its not kmapped).\n\nSolution: The only solution I found to this dilemma is a new typedef: a\npgtable_t.  For s390 pgtable_t will be a (pte *) - to be introduced with a\nlater patch.  For everybody else it will be a (struct page *).  The\nadditional problem with the initialization of the ptl lock and the\nNR_PAGETABLE accounting is solved with a constructor pgtable_page_ctor and\na destructor pgtable_page_dtor.  The page table allocation and free\nfunctions need to call these two whenever a page table page is allocated or\nfreed.  pmd_populate will get a pgtable_t instead of a struct page pointer.\n To get the pgtable_t back from a pmd entry that has been installed with\npmd_populate a new function pmd_pgtable is added.  It replaces the pmd_page\ncall in free_pte_range and apply_to_pte_range.\n\nSigned-off-by: Martin Schwidefsky \u003cschwidefsky@de.ibm.com\u003e\nCc: \u003clinux-arch@vger.kernel.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "1a2e5c8d03a9c7e639ab354705a08cb0916bb443",
      "old_mode": 33188,
      "old_path": "arch/frv/mm/pgalloc.c",
      "new_id": "66f616fb4860a779d5cc1eafa68d48d41b4db0e2",
      "new_mode": 33188,
      "new_path": "arch/frv/mm/pgalloc.c"
    },
    {
      "type": "modify",
      "old_id": "f80f90c4d58be2b277dd6bb6d602b43678b6dbad",
      "old_mode": 33188,
      "old_path": "arch/powerpc/mm/pgtable_32.c",
      "new_id": "ac3390f81900c64192c70a14e1a10258201c7090",
      "new_mode": 33188,
      "new_path": "arch/powerpc/mm/pgtable_32.c"
    },
    {
      "type": "modify",
      "old_id": "409fcaa4994a598736ec082218dacde0709f2d9a",
      "old_mode": 33188,
      "old_path": "arch/ppc/mm/pgtable.c",
      "new_id": "03a79bff1271fee749e842d56ca21df176e2674d",
      "new_mode": 33188,
      "new_path": "arch/ppc/mm/pgtable.c"
    },
    {
      "type": "modify",
      "old_id": "e60e0ae134025f4ef0b4bcbab65c48ca32cb6f60",
      "old_mode": 33188,
      "old_path": "arch/s390/mm/pgtable.c",
      "new_id": "019f518cd5a0c014c2e12db2e96274c5f65066d2",
      "new_mode": 33188,
      "new_path": "arch/s390/mm/pgtable.c"
    },
    {
      "type": "modify",
      "old_id": "dc98e3844a0a94363e1c9c5dc3f74e5522ce43a2",
      "old_mode": 33188,
      "old_path": "arch/sparc/mm/srmmu.c",
      "new_id": "23d3291a3e81e65736c862e03e3b24e3047ffa22",
      "new_mode": 33188,
      "new_path": "arch/sparc/mm/srmmu.c"
    },
    {
      "type": "modify",
      "old_id": "0729305f2f594a83ff6259ec1e5e223ba51ab30c",
      "old_mode": 33188,
      "old_path": "arch/sparc/mm/sun4c.c",
      "new_id": "c0442e8c4b1548a784037d1dbe223e996dcefd95",
      "new_mode": 33188,
      "new_path": "arch/sparc/mm/sun4c.c"
    },
    {
      "type": "modify",
      "old_id": "d872fdce1d7ec76e9d4b37782b2a9ac9dd108395",
      "old_mode": 33188,
      "old_path": "arch/um/kernel/mem.c",
      "new_id": "2627ce82e918887f2fdf4ad9d9031fd4d6ac26ad",
      "new_mode": 33188,
      "new_path": "arch/um/kernel/mem.c"
    },
    {
      "type": "modify",
      "old_id": "6c1914622a88344456f571d2cbf06e58921f451b",
      "old_mode": 33188,
      "old_path": "arch/x86/mm/pgtable_32.c",
      "new_id": "73aba7125203764b41a3cb3af48ac6d5d5cee5a4",
      "new_mode": 33188,
      "new_path": "arch/x86/mm/pgtable_32.c"
    },
    {
      "type": "modify",
      "old_id": "05f09f997d829429f0ece5af420105299997afd0",
      "old_mode": 33188,
      "old_path": "include/asm-alpha/page.h",
      "new_id": "22ff9762d17b63b8379abea371cb816d37dcaae2",
      "new_mode": 33188,
      "new_path": "include/asm-alpha/page.h"
    },
    {
      "type": "modify",
      "old_id": "fdbedacc7375158990236e13b546a7fa1c92a8a6",
      "old_mode": 33188,
      "old_path": "include/asm-alpha/pgalloc.h",
      "new_id": "fd090155dccd14367fcde13c425f5d224de7eb21",
      "new_mode": 33188,
      "new_path": "include/asm-alpha/pgalloc.h"
    },
    {
      "type": "modify",
      "old_id": "31ff12f4ffb7b5fdb757767a159c4f855c544630",
      "old_mode": 33188,
      "old_path": "include/asm-arm/page.h",
      "new_id": "c86f68ee65118b6c7cdd2fec34ee7509abbaae46",
      "new_mode": 33188,
      "new_path": "include/asm-arm/page.h"
    },
    {
      "type": "modify",
      "old_id": "fb6c6e3222bddc19131fc59408e12ffbfb824a22",
      "old_mode": 33188,
      "old_path": "include/asm-arm/pgalloc.h",
      "new_id": "163b0305dd76b3e83176f294eb204d3a389bd3ad",
      "new_mode": 33188,
      "new_path": "include/asm-arm/pgalloc.h"
    },
    {
      "type": "modify",
      "old_id": "ee23499cec34df071b4c6a75ae189ed08797f7df",
      "old_mode": 33188,
      "old_path": "include/asm-avr32/page.h",
      "new_id": "5582968feee853220432ac4b503c038c4beb7d0f",
      "new_mode": 33188,
      "new_path": "include/asm-avr32/page.h"
    },
    {
      "type": "modify",
      "old_id": "b77e364b4c444a164c9741d2d6ab94df1dfc2e35",
      "old_mode": 33188,
      "old_path": "include/asm-avr32/pgalloc.h",
      "new_id": "51fc1f6e4b17afb9d73b7065ad6bea459549d205",
      "new_mode": 33188,
      "new_path": "include/asm-avr32/pgalloc.h"
    },
    {
      "type": "modify",
      "old_id": "3b0156c4631107dc91dc13dd86468f2dff2c91ca",
      "old_mode": 33188,
      "old_path": "include/asm-cris/page.h",
      "new_id": "c45bb1ef397cb3466c2d836f8fc1679ba69d4a9d",
      "new_mode": 33188,
      "new_path": "include/asm-cris/page.h"
    },
    {
      "type": "modify",
      "old_id": "8ddd66f8177346aeba8c6dd42bf1d313e2355b0a",
      "old_mode": 33188,
      "old_path": "include/asm-cris/pgalloc.h",
      "new_id": "a1ba761d0573637ffb79ff4f9d6624d644dad9ce",
      "new_mode": 33188,
      "new_path": "include/asm-cris/pgalloc.h"
    },
    {
      "type": "modify",
      "old_id": "cacc045700de98eb36f156738cb12b2c24f0ad36",
      "old_mode": 33188,
      "old_path": "include/asm-frv/page.h",
      "new_id": "c2c1e89e747d248d78c0a7535fe2b4f11740edb7",
      "new_mode": 33188,
      "new_path": "include/asm-frv/page.h"
    },
    {
      "type": "modify",
      "old_id": "e89620ef08cab876e315ec845d6c96d0d6e1cc97",
      "old_mode": 33188,
      "old_path": "include/asm-frv/pgalloc.h",
      "new_id": "971e6addb0095a4175d86b68715937e918d2f474",
      "new_mode": 33188,
      "new_path": "include/asm-frv/pgalloc.h"
    },
    {
      "type": "modify",
      "old_id": "8a8aa3fd7cd4493dfa6060418bed502cf1bd5227",
      "old_mode": 33188,
      "old_path": "include/asm-ia64/page.h",
      "new_id": "4999a6c63775b87f4432378c6774e74f2ae2bfb0",
      "new_mode": 33188,
      "new_path": "include/asm-ia64/page.h"
    },
    {
      "type": "modify",
      "old_id": "556d988123ac1cd5ba351396caf39479401450b0",
      "old_mode": 33188,
      "old_path": "include/asm-ia64/pgalloc.h",
      "new_id": "b9ac1a6fc21694a55e2771e471ab8cc90ab997cf",
      "new_mode": 33188,
      "new_path": "include/asm-ia64/pgalloc.h"
    },
    {
      "type": "modify",
      "old_id": "05d43bbbf940b022b140edb86256526ea338c620",
      "old_mode": 33188,
      "old_path": "include/asm-m32r/page.h",
      "new_id": "8a677f3fca683d658dc41c6306ff6828f9df6390",
      "new_mode": 33188,
      "new_path": "include/asm-m32r/page.h"
    },
    {
      "type": "modify",
      "old_id": "e5921adfad1b6ae2490fb89aa61689f9eaf20b5e",
      "old_mode": 33188,
      "old_path": "include/asm-m32r/pgalloc.h",
      "new_id": "f11a2b909cdbf8ab3bc1a11195b0160173c2a58b",
      "new_mode": 33188,
      "new_path": "include/asm-m32r/pgalloc.h"
    },
    {
      "type": "modify",
      "old_id": "500ec9b8b1892aebb41ec8833fa982abf5acaf9f",
      "old_mode": 33188,
      "old_path": "include/asm-m68k/motorola_pgalloc.h",
      "new_id": "d08bf6261df88889f0e39091f8356580920208bb",
      "new_mode": 33188,
      "new_path": "include/asm-m68k/motorola_pgalloc.h"
    },
    {
      "type": "modify",
      "old_id": "3f29e2a03a43bd203d34c633ed2c5a5749b35b4e",
      "old_mode": 33188,
      "old_path": "include/asm-m68k/page.h",
      "new_id": "880c2cbff8a681cc8619ef50f5b26cd5fd202433",
      "new_mode": 33188,
      "new_path": "include/asm-m68k/page.h"
    },
    {
      "type": "modify",
      "old_id": "a5a91e72714b0b9e715bba4ee0a008a777187057",
      "old_mode": 33188,
      "old_path": "include/asm-m68k/sun3_pgalloc.h",
      "new_id": "d4c83f14381652402d35f4b3cb5fb5967f97a6de",
      "new_mode": 33188,
      "new_path": "include/asm-m68k/sun3_pgalloc.h"
    },
    {
      "type": "modify",
      "old_id": "635aa44d2290dfcb85b056015341ff0580d232b3",
      "old_mode": 33188,
      "old_path": "include/asm-mips/page.h",
      "new_id": "8735aa0b89630987f9d7341efa88e13a4bf9eb7a",
      "new_mode": 33188,
      "new_path": "include/asm-mips/page.h"
    },
    {
      "type": "modify",
      "old_id": "c4efeced8396da58d0bad7b56fc4f2da50d2f753",
      "old_mode": 33188,
      "old_path": "include/asm-mips/pgalloc.h",
      "new_id": "1275831dda29b65ae90d2046f781a747cb4a3df0",
      "new_mode": 33188,
      "new_path": "include/asm-mips/pgalloc.h"
    },
    {
      "type": "modify",
      "old_id": "b08d9151c71e4495b1ed9b8884199b92f7c007da",
      "old_mode": 33188,
      "old_path": "include/asm-parisc/page.h",
      "new_id": "27d50b85954109d123a8e9118a8799a4eadc5221",
      "new_mode": 33188,
      "new_path": "include/asm-parisc/page.h"
    },
    {
      "type": "modify",
      "old_id": "aab66f1bea14d67c3381d39ba6bd0d15550467b7",
      "old_mode": 33188,
      "old_path": "include/asm-parisc/pgalloc.h",
      "new_id": "3996dfc30a3f3366aebd714d63b35fb8455fcbac",
      "new_mode": 33188,
      "new_path": "include/asm-parisc/pgalloc.h"
    },
    {
      "type": "modify",
      "old_id": "61e3725bbd37e18eae791ed2b3cf36e3d045b2eb",
      "old_mode": 33188,
      "old_path": "include/asm-powerpc/page.h",
      "new_id": "df47bbb6ea1348e6c6ad95898baa911e819823b7",
      "new_mode": 33188,
      "new_path": "include/asm-powerpc/page.h"
    },
    {
      "type": "modify",
      "old_id": "c162a4c37b39ce5df12573c209dfd3a1edbdd59b",
      "old_mode": 33188,
      "old_path": "include/asm-powerpc/pgalloc-32.h",
      "new_id": "58c07147b3ea445c17851c8cb5ab8489a6432805",
      "new_mode": 33188,
      "new_path": "include/asm-powerpc/pgalloc-32.h"
    },
    {
      "type": "modify",
      "old_id": "5afae8593931e5cf4966688307488adfc856a38b",
      "old_mode": 33188,
      "old_path": "include/asm-powerpc/pgalloc-64.h",
      "new_id": "68980990f62a764f3896cfe95830d412f98cf824",
      "new_mode": 33188,
      "new_path": "include/asm-powerpc/pgalloc-64.h"
    },
    {
      "type": "modify",
      "old_id": "7c39a95829c7263932cf445fe94200c050991df4",
      "old_mode": 33188,
      "old_path": "include/asm-ppc/pgalloc.h",
      "new_id": "fd4d1d74cfb1da92f1714e30755ef228ba3fb275",
      "new_mode": 33188,
      "new_path": "include/asm-ppc/pgalloc.h"
    },
    {
      "type": "modify",
      "old_id": "a55f9d979dfb0a29aa87d8b61c2d1680529bc31c",
      "old_mode": 33188,
      "old_path": "include/asm-s390/page.h",
      "new_id": "7f29a981f48c78580bc80060bc72c798e7599ce7",
      "new_mode": 33188,
      "new_path": "include/asm-s390/page.h"
    },
    {
      "type": "modify",
      "old_id": "6f6619ba898062c6af642c83dd574eda02c0e6c6",
      "old_mode": 33188,
      "old_path": "include/asm-s390/pgalloc.h",
      "new_id": "900d44807e107bf2d8ce042b433cad88bf50f7e3",
      "new_mode": 33188,
      "new_path": "include/asm-s390/pgalloc.h"
    },
    {
      "type": "modify",
      "old_id": "985de2b88279c99a563d85635af1ccec07fc0a6c",
      "old_mode": 33188,
      "old_path": "include/asm-s390/tlb.h",
      "new_id": "3c8177fa9e06e9b0b7800f14ce112917b9843dcc",
      "new_mode": 33188,
      "new_path": "include/asm-s390/tlb.h"
    },
    {
      "type": "modify",
      "old_id": "e0fe02950f522b067d75bd8cf4f2d5ecbfeaf41c",
      "old_mode": 33188,
      "old_path": "include/asm-sh/page.h",
      "new_id": "134562dc8c4547224739ef99c819c91c39d4659c",
      "new_mode": 33188,
      "new_path": "include/asm-sh/page.h"
    },
    {
      "type": "modify",
      "old_id": "59ca16d77a1d79b20775362e8d76d7d9cc2d3594",
      "old_mode": 33188,
      "old_path": "include/asm-sh/pgalloc.h",
      "new_id": "84dd2db7104c74f4f57eb4f1c7d0bfc1f4159869",
      "new_mode": 33188,
      "new_path": "include/asm-sh/pgalloc.h"
    },
    {
      "type": "modify",
      "old_id": "cbc48c0c4e15324fdafe23640036a5127315eea1",
      "old_mode": 33188,
      "old_path": "include/asm-sparc/page.h",
      "new_id": "39ccf2da297c757e6b9e47f60d3dddec04bb4da4",
      "new_mode": 33188,
      "new_path": "include/asm-sparc/page.h"
    },
    {
      "type": "modify",
      "old_id": "b5fbdd36447fbf2b69f384957b76962731553645",
      "old_mode": 33188,
      "old_path": "include/asm-sparc/pgalloc.h",
      "new_id": "6292cd00e5affdd8f913ddbfc1dbf290795384ac",
      "new_mode": 33188,
      "new_path": "include/asm-sparc/pgalloc.h"
    },
    {
      "type": "modify",
      "old_id": "cdf950e017eeebad8cb7e553953ac8808ec188ec",
      "old_mode": 33188,
      "old_path": "include/asm-sparc64/page.h",
      "new_id": "e93a482aa24a0b874c50a2d109bf55f6b9c28fdc",
      "new_mode": 33188,
      "new_path": "include/asm-sparc64/page.h"
    },
    {
      "type": "modify",
      "old_id": "b48f73c2274ef7ee682204deffa9bcd09dad962f",
      "old_mode": 33188,
      "old_path": "include/asm-sparc64/pgalloc.h",
      "new_id": "3ee2d406373b9fc03a671d2c28b49adbb91dd634",
      "new_mode": 33188,
      "new_path": "include/asm-sparc64/pgalloc.h"
    },
    {
      "type": "modify",
      "old_id": "fe2374d705d15af36114379cfa5e4192a1125aca",
      "old_mode": 33188,
      "old_path": "include/asm-um/page.h",
      "new_id": "381f96b1c8259153fca3433c9eca220031fa1e63",
      "new_mode": 33188,
      "new_path": "include/asm-um/page.h"
    },
    {
      "type": "modify",
      "old_id": "4f3e62b02861f0a743a3ffe45f280e127b0c7f01",
      "old_mode": 33188,
      "old_path": "include/asm-um/pgalloc.h",
      "new_id": "9062a6e72241f60235b0c6f4c2bd41dd9c00ab6d",
      "new_mode": 33188,
      "new_path": "include/asm-um/pgalloc.h"
    },
    {
      "type": "modify",
      "old_id": "a6fd10f230d2e628660e252bda6623bc3840f67f",
      "old_mode": 33188,
      "old_path": "include/asm-x86/page_32.h",
      "new_id": "ba715d9798b093aeee1a50aecf5373caf8930835",
      "new_mode": 33188,
      "new_path": "include/asm-x86/page_32.h"
    },
    {
      "type": "modify",
      "old_id": "dcf0c0746075ba07f4527f2018bb846f8ebf8424",
      "old_mode": 33188,
      "old_path": "include/asm-x86/page_64.h",
      "new_id": "f7393bc516eff1c1d25ad799f0441f734a151280",
      "new_mode": 33188,
      "new_path": "include/asm-x86/page_64.h"
    },
    {
      "type": "modify",
      "old_id": "bab12718a913fa446f25c8c9e6e2b2d380e3761a",
      "old_mode": 33188,
      "old_path": "include/asm-x86/pgalloc_32.h",
      "new_id": "6bea6e5b5ee55044dd06bea1b55677bf9cba20bf",
      "new_mode": 33188,
      "new_path": "include/asm-x86/pgalloc_32.h"
    },
    {
      "type": "modify",
      "old_id": "4f6220db22b110bbf1606d75316a36e1b458fa1a",
      "old_mode": 33188,
      "old_path": "include/asm-x86/pgalloc_64.h",
      "new_id": "8d6722320dccd7818383abe4445eef5b9bc85f0c",
      "new_mode": 33188,
      "new_path": "include/asm-x86/pgalloc_64.h"
    },
    {
      "type": "modify",
      "old_id": "1adedbf41d019acd775bd1c8b3b61f664d649979",
      "old_mode": 33188,
      "old_path": "include/asm-xtensa/page.h",
      "new_id": "80a6ae0dd25957e548d53b4c3e125f32df042ba9",
      "new_mode": 33188,
      "new_path": "include/asm-xtensa/page.h"
    },
    {
      "type": "modify",
      "old_id": "1d51ba5463f9f2f215015c598b5ef51bb7ff06f2",
      "old_mode": 33188,
      "old_path": "include/asm-xtensa/pgalloc.h",
      "new_id": "8d1544eb461ebfa13b3cd352786ba2af6fcf077e",
      "new_mode": 33188,
      "new_path": "include/asm-xtensa/pgalloc.h"
    },
    {
      "type": "modify",
      "old_id": "89d7c691b93a6a660ee5468ac333a805b049a6f7",
      "old_mode": 33188,
      "old_path": "include/linux/mm.h",
      "new_id": "e8abb3814209f556a06750af5ba3941ed0796eda",
      "new_mode": 33188,
      "new_path": "include/linux/mm.h"
    },
    {
      "type": "modify",
      "old_id": "153a54b2013ca9927edf1dda4e047a82a952c05e",
      "old_mode": 33188,
      "old_path": "mm/memory.c",
      "new_id": "e5628a5fd678ff2b8faa02521e49cec4d769970e",
      "new_mode": 33188,
      "new_path": "mm/memory.c"
    },
    {
      "type": "modify",
      "old_id": "0536dde139d1e1f6f28fc93ccd05a9fc337e2c7e",
      "old_mode": 33188,
      "old_path": "mm/vmalloc.c",
      "new_id": "950c0be9ca8154d7b119019e50be5dc6838faa5b",
      "new_mode": 33188,
      "new_path": "mm/vmalloc.c"
    }
  ]
}
