get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

GET /api/patches/818319/?format=api
HTTP 200 OK
Allow: GET, PUT, PATCH, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 818319,
    "url": "http://patchwork.ozlabs.org/api/patches/818319/?format=api",
    "web_url": "http://patchwork.ozlabs.org/project/sparclinux/patch/054902a1108bdef6d16b19e9e843939b4b6aaa5c.1506089472.git.khalid.aziz@oracle.com/",
    "project": {
        "id": 10,
        "url": "http://patchwork.ozlabs.org/api/projects/10/?format=api",
        "name": "Linux SPARC Development ",
        "link_name": "sparclinux",
        "list_id": "sparclinux.vger.kernel.org",
        "list_email": "sparclinux@vger.kernel.org",
        "web_url": null,
        "scm_url": null,
        "webscm_url": null,
        "list_archive_url": "",
        "list_archive_url_format": "",
        "commit_url_format": ""
    },
    "msgid": "<054902a1108bdef6d16b19e9e843939b4b6aaa5c.1506089472.git.khalid.aziz@oracle.com>",
    "list_archive_url": null,
    "date": "2017-09-25T16:48:53",
    "name": "[v8,2/9] mm, swap: Add infrastructure for saving page metadata as well on swap",
    "commit_ref": null,
    "pull_url": null,
    "state": "changes-requested",
    "archived": false,
    "hash": "068d04f3c288e8b660e174836eb80bcbbe785d28",
    "submitter": {
        "id": 42386,
        "url": "http://patchwork.ozlabs.org/api/people/42386/?format=api",
        "name": "Khalid Aziz",
        "email": "khalid.aziz@oracle.com"
    },
    "delegate": {
        "id": 34,
        "url": "http://patchwork.ozlabs.org/api/users/34/?format=api",
        "username": "davem",
        "first_name": "David",
        "last_name": "Miller",
        "email": "davem@davemloft.net"
    },
    "mbox": "http://patchwork.ozlabs.org/project/sparclinux/patch/054902a1108bdef6d16b19e9e843939b4b6aaa5c.1506089472.git.khalid.aziz@oracle.com/mbox/",
    "series": [
        {
            "id": 4990,
            "url": "http://patchwork.ozlabs.org/api/series/4990/?format=api",
            "web_url": "http://patchwork.ozlabs.org/project/sparclinux/list/?series=4990",
            "date": "2017-09-25T16:48:55",
            "name": "Application Data Integrity feature introduced by SPARC M7",
            "version": 8,
            "mbox": "http://patchwork.ozlabs.org/series/4990/mbox/"
        }
    ],
    "comments": "http://patchwork.ozlabs.org/api/patches/818319/comments/",
    "check": "pending",
    "checks": "http://patchwork.ozlabs.org/api/patches/818319/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "<sparclinux-owner@vger.kernel.org>",
        "X-Original-To": "patchwork-incoming@ozlabs.org",
        "Delivered-To": "patchwork-incoming@ozlabs.org",
        "Authentication-Results": "ozlabs.org;\n\tspf=none (mailfrom) smtp.mailfrom=vger.kernel.org\n\t(client-ip=209.132.180.67; helo=vger.kernel.org;\n\tenvelope-from=sparclinux-owner@vger.kernel.org;\n\treceiver=<UNKNOWN>)",
        "Received": [
            "from vger.kernel.org (vger.kernel.org [209.132.180.67])\n\tby ozlabs.org (Postfix) with ESMTP id 3y19CD2CKnz9t62\n\tfor <patchwork-incoming@ozlabs.org>;\n\tTue, 26 Sep 2017 02:53:44 +1000 (AEST)",
            "(majordomo@vger.kernel.org) by vger.kernel.org via listexpand\n\tid S936353AbdIYQxO (ORCPT <rfc822;patchwork-incoming@ozlabs.org>);\n\tMon, 25 Sep 2017 12:53:14 -0400",
            "from userp1040.oracle.com ([156.151.31.81]:19884 \"EHLO\n\tuserp1040.oracle.com\" rhost-flags-OK-OK-OK-OK) by vger.kernel.org\n\twith ESMTP id S935734AbdIYQxN (ORCPT\n\t<rfc822; sparclinux@vger.kernel.org>); Mon, 25 Sep 2017 12:53:13 -0400",
            "from userv0021.oracle.com (userv0021.oracle.com [156.151.31.71])\n\tby userp1040.oracle.com (Sentrion-MTA-4.3.2/Sentrion-MTA-4.3.2) with\n\tESMTP id v8PGp7Aa018294\n\t(version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256\n\tverify=OK); Mon, 25 Sep 2017 16:51:08 GMT",
            "from userv0122.oracle.com (userv0122.oracle.com [156.151.31.75])\n\tby userv0021.oracle.com (8.14.4/8.14.4) with ESMTP id v8PGp7wm022940\n\t(version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256\n\tverify=OK); Mon, 25 Sep 2017 16:51:07 GMT",
            "from abhmp0019.oracle.com (abhmp0019.oracle.com [141.146.116.25])\n\tby userv0122.oracle.com (8.14.4/8.14.4) with ESMTP id\n\tv8PGp5xq014479; Mon, 25 Sep 2017 16:51:05 GMT",
            "from concerto.us.oracle.com (/24.9.64.241)\n\tby default (Oracle Beehive Gateway v4.0)\n\twith ESMTP ; Mon, 25 Sep 2017 09:51:05 -0700"
        ],
        "From": "Khalid Aziz <khalid.aziz@oracle.com>",
        "To": "akpm@linux-foundation.org, davem@davemloft.net,\n\tdave.hansen@linux.intel.com, arnd@arndb.de",
        "Cc": "Khalid Aziz <khalid.aziz@oracle.com>,\n\tkirill.shutemov@linux.intel.com, mhocko@suse.com, jack@suse.cz,\n\tross.zwisler@linux.intel.com, aneesh.kumar@linux.vnet.ibm.com,\n\tdave.jiang@intel.com, willy@infradead.org, hughd@google.com,\n\tminchan@kernel.org, hannes@cmpxchg.org, hillf.zj@alibaba-inc.com,\n\tshli@fb.com, mingo@kernel.org, jmarchan@redhat.com,\n\tlstoakes@gmail.com, linux-arch@vger.kernel.org,\n\tlinux-kernel@vger.kernel.org, linux-mm@kvack.org,\n\tsparclinux@vger.kernel.org, Khalid Aziz <khalid@gonehiking.org>",
        "Subject": "[PATCH v8 2/9] mm,\n\tswap: Add infrastructure for saving page metadata as well on swap",
        "Date": "Mon, 25 Sep 2017 10:48:53 -0600",
        "Message-Id": "<054902a1108bdef6d16b19e9e843939b4b6aaa5c.1506089472.git.khalid.aziz@oracle.com>",
        "X-Mailer": "git-send-email 2.11.0",
        "In-Reply-To": [
            "<cover.1506089472.git.khalid.aziz@oracle.com>",
            "<cover.1506089472.git.khalid.aziz@oracle.com>"
        ],
        "References": [
            "<cover.1506089472.git.khalid.aziz@oracle.com>",
            "<cover.1506089472.git.khalid.aziz@oracle.com>"
        ],
        "X-Source-IP": "userv0021.oracle.com [156.151.31.71]",
        "Sender": "sparclinux-owner@vger.kernel.org",
        "Precedence": "bulk",
        "List-ID": "<sparclinux.vger.kernel.org>",
        "X-Mailing-List": "sparclinux@vger.kernel.org"
    },
    "content": "If a processor supports special metadata for a page, for example ADI\nversion tags on SPARC M7, this metadata must be saved when the page is\nswapped out. The same metadata must be restored when the page is swapped\nback in. This patch adds two new architecture specific functions -\narch_do_swap_page() to be called when a page is swapped in, and\narch_unmap_one() to be called when a page is being unmapped for swap\nout. These architecture hooks allow page metadata to be saved if the\narchitecture supports it.\n\nSigned-off-by: Khalid Aziz <khalid.aziz@oracle.com>\nCc: Khalid Aziz <khalid@gonehiking.org>\nAcked-by: Jerome Marchand <jmarchan@redhat.com>\n---\nv8:\n\t- Fixed an erroneous \"}\"\nv6:\n\t- Updated parameter list for arch_do_swap_page() and\n\t  arch_unmap_one()\nv5:\n\t- Replaced set_swp_pte() function with new architecture\n\t  functions arch_do_swap_page() and arch_unmap_one()\n\n include/asm-generic/pgtable.h | 36 ++++++++++++++++++++++++++++++++++++\n mm/memory.c                   |  1 +\n mm/rmap.c                     | 14 ++++++++++++++\n 3 files changed, 51 insertions(+)",
    "diff": "diff --git a/include/asm-generic/pgtable.h b/include/asm-generic/pgtable.h\nindex 7dfa767dc680..15668c2470b4 100644\n--- a/include/asm-generic/pgtable.h\n+++ b/include/asm-generic/pgtable.h\n@@ -392,6 +392,42 @@ static inline int pud_same(pud_t pud_a, pud_t pud_b)\n #endif /* CONFIG_TRANSPARENT_HUGEPAGE */\n #endif\n \n+#ifndef __HAVE_ARCH_DO_SWAP_PAGE\n+/*\n+ * Some architectures support metadata associated with a page. When a\n+ * page is being swapped out, this metadata must be saved so it can be\n+ * restored when the page is swapped back in. SPARC M7 and newer\n+ * processors support an ADI (Application Data Integrity) tag for the\n+ * page as metadata for the page. arch_do_swap_page() can restore this\n+ * metadata when a page is swapped back in.\n+ */\n+static inline void arch_do_swap_page(struct mm_struct *mm,\n+\t\t\t\t     struct vm_area_struct *vma,\n+\t\t\t\t     unsigned long addr,\n+\t\t\t\t     pte_t pte, pte_t oldpte)\n+{\n+\n+}\n+#endif\n+\n+#ifndef __HAVE_ARCH_UNMAP_ONE\n+/*\n+ * Some architectures support metadata associated with a page. When a\n+ * page is being swapped out, this metadata must be saved so it can be\n+ * restored when the page is swapped back in. SPARC M7 and newer\n+ * processors support an ADI (Application Data Integrity) tag for the\n+ * page as metadata for the page. arch_unmap_one() can save this\n+ * metadata on a swap-out of a page.\n+ */\n+static inline int arch_unmap_one(struct mm_struct *mm,\n+\t\t\t\t  struct vm_area_struct *vma,\n+\t\t\t\t  unsigned long addr,\n+\t\t\t\t  pte_t orig_pte)\n+{\n+\treturn 0;\n+}\n+#endif\n+\n #ifndef __HAVE_ARCH_PGD_OFFSET_GATE\n #define pgd_offset_gate(mm, addr)\tpgd_offset(mm, addr)\n #endif\ndiff --git a/mm/memory.c b/mm/memory.c\nindex 56e48e4593cb..ef0459938e96 100644\n--- a/mm/memory.c\n+++ b/mm/memory.c\n@@ -2828,6 +2828,7 @@ int do_swap_page(struct vm_fault *vmf)\n \tif (pte_swp_soft_dirty(vmf->orig_pte))\n \t\tpte = pte_mksoft_dirty(pte);\n \tset_pte_at(vma->vm_mm, vmf->address, vmf->pte, pte);\n+\tarch_do_swap_page(vma->vm_mm, vma, vmf->address, pte, vmf->orig_pte);\n \tvmf->orig_pte = pte;\n \tif (page == swapcache) {\n \t\tdo_page_add_anon_rmap(page, vma, vmf->address, exclusive);\ndiff --git a/mm/rmap.c b/mm/rmap.c\nindex c570f82e6827..40a436c927c6 100644\n--- a/mm/rmap.c\n+++ b/mm/rmap.c\n@@ -1448,6 +1448,14 @@ static bool try_to_unmap_one(struct page *page, struct vm_area_struct *vma,\n \t\t\t\t(flags & TTU_MIGRATION)) {\n \t\t\tswp_entry_t entry;\n \t\t\tpte_t swp_pte;\n+\n+\t\t\tif (arch_unmap_one(mm, vma, address, pteval) < 0) {\n+\t\t\t\tset_pte_at(mm, address, pvmw.pte, pteval);\n+\t\t\t\tret = false;\n+\t\t\t\tpage_vma_mapped_walk_done(&pvmw);\n+\t\t\t\tbreak;\n+\t\t\t}\n+\n \t\t\t/*\n \t\t\t * Store the pfn of the page in a special migration\n \t\t\t * pte. do_swap_page() will wait until the migration\n@@ -1498,6 +1506,12 @@ static bool try_to_unmap_one(struct page *page, struct vm_area_struct *vma,\n \t\t\t\tpage_vma_mapped_walk_done(&pvmw);\n \t\t\t\tbreak;\n \t\t\t}\n+\t\t\tif (arch_unmap_one(mm, vma, address, pteval) < 0) {\n+\t\t\t\tset_pte_at(mm, address, pvmw.pte, pteval);\n+\t\t\t\tret = false;\n+\t\t\t\tpage_vma_mapped_walk_done(&pvmw);\n+\t\t\t\tbreak;\n+\t\t\t}\n \t\t\tif (list_empty(&mm->mmlist)) {\n \t\t\t\tspin_lock(&mmlist_lock);\n \t\t\t\tif (list_empty(&mm->mmlist))\n",
    "prefixes": [
        "v8",
        "2/9"
    ]
}