)]}'
{
  "commit": "a3a9ea656d19251326cdeaaa0b5adbfac41ddacf",
  "tree": "b13aa05569b56683e8fda81e565ebad53d6f94a3",
  "parents": [
    "92871b94a5f9892e324c31960678387922c75049"
  ],
  "author": {
    "name": "Steven Capper",
    "email": "steve.capper@linaro.org",
    "time": "Mon Oct 14 09:49:10 2013 +0100"
  },
  "committer": {
    "name": "Russell King",
    "email": "rmk+kernel@arm.linux.org.uk",
    "time": "Tue Oct 29 11:06:15 2013 +0000"
  },
  "message": "ARM: 7858/1: mm: make UACCESS_WITH_MEMCPY huge page aware\n\nThe memory pinning code in uaccess_with_memcpy.c does not check\nfor HugeTLB or THP pmds, and will enter an infinite loop should\na __copy_to_user or __clear_user occur against a huge page.\n\nThis patch adds detection code for huge pages to pin_page_for_write.\nAs this code can be executed in a fast path it refers to the actual\npmds rather than the vma. If a HugeTLB or THP is found (they have\nthe same pmd representation on ARM), the page table spinlock is\ntaken to prevent modification whilst the page is pinned.\n\nOn ARM, huge pages are only represented as pmds, thus no huge pud\nchecks are performed. (For huge puds one would lock the page table\nin a similar manner as in the pmd case).\n\nTwo helper functions are introduced; pmd_thp_or_huge will check\nwhether or not a page is huge or transparent huge (which have the\nsame pmd layout on ARM), and pmd_hugewillfault will detect whether\nor not a page fault will occur on write to the page.\n\nRunning the following test (with the chunking from read_zero\nremoved):\n $ dd if\u003d/dev/zero of\u003d/dev/null bs\u003d10M count\u003d1024\nGave:  2.3 GB/s backed by normal pages,\n       2.9 GB/s backed by huge pages,\n       5.1 GB/s backed by huge pages, with page mask\u003dHPAGE_MASK.\n\nAfter some discussion, it was decided not to adopt the HPAGE_MASK,\nas this would have a significant detrimental effect on the overall\nsystem latency due to page_table_lock being held for too long.\nThis could be revisited if split huge page locks are adopted.\n\nSigned-off-by: Steve Capper \u003csteve.capper@linaro.org\u003e\nReviewed-by: Nicolas Pitre \u003cnico@linaro.org\u003e\nSigned-off-by: Russell King \u003crmk+kernel@arm.linux.org.uk\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "f97ee02386ee063ba12b78786c9a6cd8a4106676",
      "old_mode": 33188,
      "old_path": "arch/arm/include/asm/pgtable-2level.h",
      "new_id": "86a659a19526c75a2ba3b91ce839925cc52d26de",
      "new_mode": 33188,
      "new_path": "arch/arm/include/asm/pgtable-2level.h"
    },
    {
      "type": "modify",
      "old_id": "5689c18c85f5ebafb95a9bb2cc99fda227992976",
      "old_mode": 33188,
      "old_path": "arch/arm/include/asm/pgtable-3level.h",
      "new_id": "39c54cfa03e9b103ef39982a43bac74d5436b791",
      "new_mode": 33188,
      "new_path": "arch/arm/include/asm/pgtable-3level.h"
    },
    {
      "type": "modify",
      "old_id": "025f742dd4df6bf79b279babd264980d851f01d5",
      "old_mode": 33188,
      "old_path": "arch/arm/lib/uaccess_with_memcpy.c",
      "new_id": "3e58d710013c3ad9b377fc76e6dad58f377e88a7",
      "new_mode": 33188,
      "new_path": "arch/arm/lib/uaccess_with_memcpy.c"
    }
  ]
}
