get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 2180673,
    "url": "http://patchwork.ozlabs.org/api/1.1/patches/2180673/?format=api",
    "web_url": "http://patchwork.ozlabs.org/project/linuxppc-dev/patch/20260107091823.68974-7-jniethe@nvidia.com/",
    "project": {
        "id": 2,
        "url": "http://patchwork.ozlabs.org/api/1.1/projects/2/?format=api",
        "name": "Linux PPC development",
        "link_name": "linuxppc-dev",
        "list_id": "linuxppc-dev.lists.ozlabs.org",
        "list_email": "linuxppc-dev@lists.ozlabs.org",
        "web_url": "https://github.com/linuxppc/wiki/wiki",
        "scm_url": "https://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux.git",
        "webscm_url": "https://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux.git/"
    },
    "msgid": "<20260107091823.68974-7-jniethe@nvidia.com>",
    "date": "2026-01-07T09:18:18",
    "name": "[v2,06/11] mm: Add helpers to create migration entries from struct pages",
    "commit_ref": null,
    "pull_url": null,
    "state": "handled-elsewhere",
    "archived": false,
    "hash": "602679e5993f994003b7349135cad445c40242ce",
    "submitter": {
        "id": 92354,
        "url": "http://patchwork.ozlabs.org/api/1.1/people/92354/?format=api",
        "name": "Jordan Niethe",
        "email": "jniethe@nvidia.com"
    },
    "delegate": null,
    "mbox": "http://patchwork.ozlabs.org/project/linuxppc-dev/patch/20260107091823.68974-7-jniethe@nvidia.com/mbox/",
    "series": [
        {
            "id": 487451,
            "url": "http://patchwork.ozlabs.org/api/1.1/series/487451/?format=api",
            "web_url": "http://patchwork.ozlabs.org/project/linuxppc-dev/list/?series=487451",
            "date": "2026-01-07T09:18:12",
            "name": "Remove device private pages from physical address space",
            "version": 2,
            "mbox": "http://patchwork.ozlabs.org/series/487451/mbox/"
        }
    ],
    "comments": "http://patchwork.ozlabs.org/api/patches/2180673/comments/",
    "check": "pending",
    "checks": "http://patchwork.ozlabs.org/api/patches/2180673/checks/",
    "tags": {},
    "headers": {
        "Return-Path": "\n <linuxppc-dev+bounces-15369-incoming=patchwork.ozlabs.org@lists.ozlabs.org>",
        "X-Original-To": [
            "incoming@patchwork.ozlabs.org",
            "linuxppc-dev@lists.ozlabs.org"
        ],
        "Delivered-To": "patchwork-incoming@legolas.ozlabs.org",
        "Authentication-Results": [
            "legolas.ozlabs.org;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=Nvidia.com header.i=@Nvidia.com header.a=rsa-sha256\n header.s=selector2 header.b=c63egCc+;\n\tdkim-atps=neutral",
            "legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=lists.ozlabs.org\n (client-ip=2404:9400:21b9:f100::1; helo=lists.ozlabs.org;\n envelope-from=linuxppc-dev+bounces-15369-incoming=patchwork.ozlabs.org@lists.ozlabs.org;\n receiver=patchwork.ozlabs.org)",
            "lists.ozlabs.org;\n arc=pass smtp.remote-ip=52.101.56.71 arc.chain=microsoft.com",
            "lists.ozlabs.org;\n dmarc=pass (p=reject dis=none) header.from=nvidia.com",
            "lists.ozlabs.org;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=Nvidia.com header.i=@Nvidia.com header.a=rsa-sha256\n header.s=selector2 header.b=c63egCc+;\n\tdkim-atps=neutral",
            "lists.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=nvidia.com\n (client-ip=52.101.56.71; helo=bn1pr04cu002.outbound.protection.outlook.com;\n envelope-from=jniethe@nvidia.com; receiver=lists.ozlabs.org)",
            "dkim=none (message not signed)\n header.d=none;dmarc=none action=none header.from=nvidia.com;"
        ],
        "Received": [
            "from lists.ozlabs.org (lists.ozlabs.org\n [IPv6:2404:9400:21b9:f100::1])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange x25519)\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4dmMtw4PVXz1xpR\n\tfor <incoming@patchwork.ozlabs.org>; Wed, 07 Jan 2026 20:19:52 +1100 (AEDT)",
            "from boromir.ozlabs.org (localhost [127.0.0.1])\n\tby lists.ozlabs.org (Postfix) with ESMTP id 4dmMtJ4kt7z2yjn;\n\tWed, 07 Jan 2026 20:19:20 +1100 (AEDT)",
            "from BN1PR04CU002.outbound.protection.outlook.com\n (mail-eastus2azon11010071.outbound.protection.outlook.com [52.101.56.71])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange secp256r1 server-signature RSA-PSS (2048 bits) server-digest\n SHA256)\n\t(No client certificate requested)\n\tby lists.ozlabs.org (Postfix) with ESMTPS id 4dmMtH6VvHz2yfP\n\tfor <linuxppc-dev@lists.ozlabs.org>; Wed, 07 Jan 2026 20:19:19 +1100 (AEDT)",
            "from DM4PR12MB9072.namprd12.prod.outlook.com (2603:10b6:8:be::6) by\n MN2PR12MB4335.namprd12.prod.outlook.com (2603:10b6:208:1d4::13) with\n Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9499.2; Wed, 7 Jan\n 2026 09:18:54 +0000",
            "from DM4PR12MB9072.namprd12.prod.outlook.com\n ([fe80::9e49:782:8e98:1ff1]) by DM4PR12MB9072.namprd12.prod.outlook.com\n ([fe80::9e49:782:8e98:1ff1%5]) with mapi id 15.20.9499.002; Wed, 7 Jan 2026\n 09:18:54 +0000"
        ],
        "ARC-Seal": [
            "i=2; a=rsa-sha256; d=lists.ozlabs.org; s=201707; t=1767777560;\n\tcv=pass;\n b=lkmZht5HM9L2bDWtQ420nu87y+opZmWeqjcQocyv3ESpmJzY86sKD2Y1xL+qXpu6DoF9y6JRMF+MrBDGs2+ueSG4NqshwKYKimIhTNPwKFFdTQPZbvw9igxs/dkmf9eGb9wGdkgPRaJuG33EZOrKpqHqeg0uaOiSXoDgiTjADL4nPm+At56kvUnCjG12F8Ans+WrVeN9X8ffGGNslRpYRhmVGb8FgDMmzS5kedP3JoqrsyUkE8ABj7YJldtTeb27V+g6fggTFNCI7DFQfjkcKx1cNWZHPor9xDZAW+p1A5quoxwF7Zg+5j7gw+EDIPXUvV9obl94+MsRRCP+3ESR7Q==",
            "i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;\n b=QULxXJwmkntpLOv6fDP7+KyT01Ie9KZIWyrnv4AtaGmzljyeuRO3uQTyoWiSvJjv/64MeykcvFcgNGQvCLuoGsEgr+abd7V/hTgCdbRofSGclLMkrwTmo7g4h7AgYrxOjxhklZz06S9LpVUQQWwdeS0qYZ9Ght68s4eOrmq/wVi8vNdfROdZHWIvrL9yubyofFcDwl+IUggm4Rx99omVLzag8VbuNS3ZKs5bui9GkuekXi7BR86kJYsIhJQa4LCUnRd+bWKiqIGwxccTeXlxCq5pgD46AsIIxq9649G9/uqPkf5NgU1quXOUmxua7X3l5VWVjTfffhx75PmWLlI92w=="
        ],
        "ARC-Message-Signature": [
            "i=2; a=rsa-sha256; d=lists.ozlabs.org; s=201707;\n\tt=1767777560; c=relaxed/relaxed;\n\tbh=Zf6IV6tZXTgf1IS6YNiAkxg/IGQzn0YllYcg+NS+wHs=;\n\th=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References:\n\t Content-Type:MIME-Version;\n b=bnU+LHzML+AUbs0Ee13JGqNPdXxhJLMdcTnMiLGRBrdRoiqWwy+yBWsoQEcoGxtos0hPbFpoa+4V065muYzICVTNFicy/E3ryUQLQyjRyJPIHil2+zMAZkmnqUIMu65FMswvGevTmOVIRXuddJ6JYkEuHlizDBX0A15y8uQIqKq+/v4/vT8fu0Llyjfs2DjoJHBpck2wUenmGUT2pQBPtgS/U8KGqmCe5pA/AZY786FqP6xrH/LxS/QypmEnVJTfAAG5IE7UGVLPplFqhWNu+5xbaFumcL+8D1ULiFa2LepgfXbQ3JpMcNB+unQMOLCJzAehsptxJI7IXdsdgXLbEg==",
            "i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;\n s=arcselector10001;\n h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1;\n bh=Zf6IV6tZXTgf1IS6YNiAkxg/IGQzn0YllYcg+NS+wHs=;\n b=qzndGrIBQsbqILl+4xpVRgOGbMrfLSQmS9EZQj8iigwAiyrQIOdBDyVlnVR406ODp3vSGptDSidAHtvqAAYRxZqrClx3on4Kap04fG3ZB8i8tPdSAKaC0k+bb+dgKDYTjrVfObre+RSKqBjJi1y6Ex+/38pLdbZE+HkE5ELtZ4bRceWTgFdOz5C/JfAFkbFm+v9k+ghCAhDIKKQu9XrU77UJtY6py8uHPZvl9wINlA2uUhD4JLk8wITr3yvzvrJoQ7Pjs5zBlVC3DKJs/DIDu8tMMvcnx8sHkVh0dc0n+fSEItu1rdgL2YMt2wy2viIBPZYif3mGITKgB+UFS9A6hg=="
        ],
        "ARC-Authentication-Results": [
            "i=2; lists.ozlabs.org;\n dmarc=pass (p=reject dis=none) header.from=nvidia.com;\n dkim=pass (2048-bit key;\n unprotected) header.d=Nvidia.com header.i=@Nvidia.com header.a=rsa-sha256\n header.s=selector2 header.b=c63egCc+; dkim-atps=neutral;\n spf=pass (client-ip=52.101.56.71;\n helo=bn1pr04cu002.outbound.protection.outlook.com;\n envelope-from=jniethe@nvidia.com;\n receiver=lists.ozlabs.org) smtp.mailfrom=nvidia.com",
            "i=1; mx.microsoft.com 1; spf=pass\n smtp.mailfrom=nvidia.com; dmarc=pass action=none header.from=nvidia.com;\n dkim=pass header.d=nvidia.com; arc=none"
        ],
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com;\n s=selector2;\n h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;\n bh=Zf6IV6tZXTgf1IS6YNiAkxg/IGQzn0YllYcg+NS+wHs=;\n b=c63egCc+rCvpGLlnqmT34iyjdBn9BewTq84VqrwmjTxonQytbcJyHPumQAmDnsaIW0Yc6VU7zQipLMlv2jTCU87gYMELdN6yMC7GLDvVOwwcsKW/Qci+RnkFUlZ0FSYV6L8dZiFaWYhXdx/NPu4E0tvQRANMA+kYYg3B8KxETaoMTmN87LuvIJUfF0X5qHj86sPKZ1ETcS6Ps1ACWO/Cz2YAICQO36v00SuXOYgOxbZWptbyt2X79cvGA5KNGM0plZzxQ0CrJWX/kiiv3pY8oGX01UDQ1K66bjfJaaPBABg4X9YPGa0LnLoQby1DgeltFN33sKgLGkt6kXUbkbJNSg==",
        "From": "Jordan Niethe <jniethe@nvidia.com>",
        "To": "linux-mm@kvack.org",
        "Cc": "balbirs@nvidia.com,\n\tmatthew.brost@intel.com,\n\takpm@linux-foundation.org,\n\tlinux-kernel@vger.kernel.org,\n\tdri-devel@lists.freedesktop.org,\n\tdavid@redhat.com,\n\tziy@nvidia.com,\n\tapopple@nvidia.com,\n\tlorenzo.stoakes@oracle.com,\n\tlyude@redhat.com,\n\tdakr@kernel.org,\n\tairlied@gmail.com,\n\tsimona@ffwll.ch,\n\trcampbell@nvidia.com,\n\tmpenttil@redhat.com,\n\tjgg@nvidia.com,\n\twilly@infradead.org,\n\tlinuxppc-dev@lists.ozlabs.org,\n\tintel-xe@lists.freedesktop.org,\n\tjgg@ziepe.ca,\n\tFelix.Kuehling@amd.com",
        "Subject": "[PATCH v2 06/11] mm: Add helpers to create migration entries from\n struct pages",
        "Date": "Wed,  7 Jan 2026 20:18:18 +1100",
        "Message-Id": "<20260107091823.68974-7-jniethe@nvidia.com>",
        "X-Mailer": "git-send-email 2.34.1",
        "In-Reply-To": "<20260107091823.68974-1-jniethe@nvidia.com>",
        "References": "<20260107091823.68974-1-jniethe@nvidia.com>",
        "Content-Transfer-Encoding": "8bit",
        "Content-Type": "text/plain",
        "X-ClientProxiedBy": "SJ0PR03CA0222.namprd03.prod.outlook.com\n (2603:10b6:a03:39f::17) To DM4PR12MB9072.namprd12.prod.outlook.com\n (2603:10b6:8:be::6)",
        "X-Mailing-List": "linuxppc-dev@lists.ozlabs.org",
        "List-Id": "<linuxppc-dev.lists.ozlabs.org>",
        "List-Help": "<mailto:linuxppc-dev+help@lists.ozlabs.org>",
        "List-Owner": "<mailto:linuxppc-dev+owner@lists.ozlabs.org>",
        "List-Post": "<mailto:linuxppc-dev@lists.ozlabs.org>",
        "List-Archive": "<https://lore.kernel.org/linuxppc-dev/>,\n  <https://lists.ozlabs.org/pipermail/linuxppc-dev/>",
        "List-Subscribe": "<mailto:linuxppc-dev+subscribe@lists.ozlabs.org>,\n  <mailto:linuxppc-dev+subscribe-digest@lists.ozlabs.org>,\n  <mailto:linuxppc-dev+subscribe-nomail@lists.ozlabs.org>",
        "List-Unsubscribe": "<mailto:linuxppc-dev+unsubscribe@lists.ozlabs.org>",
        "Precedence": "list",
        "MIME-Version": "1.0",
        "X-MS-PublicTrafficType": "Email",
        "X-MS-TrafficTypeDiagnostic": "DM4PR12MB9072:EE_|MN2PR12MB4335:EE_",
        "X-MS-Office365-Filtering-Correlation-Id": "ed9d0255-1ba9-4962-8240-08de4dcdc79c",
        "X-MS-Exchange-SenderADCheck": "1",
        "X-MS-Exchange-AntiSpam-Relay": "0",
        "X-Microsoft-Antispam": "BCL:0;ARA:13230040|7416014|376014|1800799024|366016;",
        "X-Microsoft-Antispam-Message-Info": "\n Ss+e89OmxvIPdxHV529XDg76+6jI+nNnNn+jf8iTeHF6n92rb8AQg7SLT88/EZQNzop/BewZUIcClUleIXBBnsIhXuQxJCGRsoCaiy6+50AHflq0jdUUojM8tsILHH/hOportFgfztPmV4i0I/kB5BfqoBs/BA1Pe40SayMz2E2maCzBvmDlcCShP1hiF65beUYex7DdEk/b0mDffgzwpV1yIhRtVtpAsFNqfsGG/VhUH3d/2yUxsDHAXXYoHnXprhV6LJR4LeoEMHcCq8z7Xu/SEjl9kNpdxQ/7VR/jTjcy4XaI9lASN/8qsWdNPB1dzHUxcTlhHHhWpyFqYxRtKANsqtDWtqgilFJvJH2Y04BLXsL3JpwyBouHK6W/i5zspjrMHErB+FEcEnSQ1iQ9R97JYNcRqMcbaTIVIXwlYS81rKX8GysJJ5YbyWNRbubVEguAlm36aLvrD5ZFxR37IX4LhbVUxO6b7dzRIPM0rH76o4CwWDXwRTdcSQ1/KGxO6pGwmobiBgSyFFs3SbTHOP0wG2ShKWu0NiHIKMp5+pgqSPxrrMiWYBJ7Qn1cmWPmbpZ6Ly1HctAklQZ3nUQkEFEC2nogpKMQ3T+ztDT6AjKEFwJqLOx8pUk+KL99tVSSABNZgWNgcvrArjSt39La0TPnPJraUpkv6oiXj46JvB/K7LTmzVxbUbNKVYfLjWT+sW+qFcbfyHYftjMcDutsdjG2nUBnVxVgf7m7ALsM3TmQbS2q7txusT5v7DpNuuzqyZgK35JIFiv6cLHiIGospwaml9mm077g+KP3zUdbWxWOzrA2LC27leA+++MwZI+7Sj1Hrd16lfS9YlKp1WdKCxSHkvDTUXkpKgFCf+odyEU2ZQvDTHK1TmnPUHDFwhW9qDp6BQHhwSUsSk7te31oHkyzSqb0P+baxEopW8czagjH+hoPV7Q2fWPO+eGjT5wZ09G0USk4j0agvnPuoLCoAQ+y2Q9KVp+1NWv09AMnE4/QnbCFExND4X5SEGajIvcLWqUGvdsXuf31RecL+vkwQWAyTr8wLgSCOnjRKXQmMubk5pvBE18nAwCD0rQkeLFumIoSmj3Mjsi1WB8WiWfRDukM0VeoR16m5S1/tGLH54DwRzQGgFQueN+PgJCKmO8CXJAZ1RPdMEQ9bc8pP6rMwIaBXRYlH6RtYZKPFdCnhZjozTxgwKKJnPPZef9dAcXeBkFAYL3bzmwZ74Fw7zpankC0kJjSSGUiIii2GXbmT+WkepUxv0129LZC8WDIvSHupWBtndYIUJjvk9h33yJSQ5EiXkzoOQBTivi/zSJWPFG2HrF6NaCQXi9+W7MWECd1pV2nBd5JYhku+LKtmrJrSZgXZMlnnwMpUcQeg7HIvxn3Ev9ja9oHzpf5wIW39A+XvhMp0nH/rwUMYZvCkrnp9BMtPEdHvQTQ4yiM6zhWv2MsgPD7+1XmSl+rqU3Qry/H",
        "X-Forefront-Antispam-Report": "\n\tCIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM4PR12MB9072.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(7416014)(376014)(1800799024)(366016);DIR:OUT;SFP:1101;",
        "X-MS-Exchange-AntiSpam-MessageData-ChunkCount": "1",
        "X-MS-Exchange-AntiSpam-MessageData-0": "\n qhSh1ak+t13fIw2XRUH+9FUq6MUb46Qgu0rnGAGHnlmPLOnnqt74T9JErbagQlnlZqBQ0Y+J/D9Hi9ukIw/B5SOau3+y18y6cyZxBrWA07owkKaRIHGgZmrDJykPoUO8KobaEQI5+q8rt4BJ9wJ8OiRCUh8aq8qgHhqnay30d4EYybOcVTUcQK8tojC1VdDGn4lJdS4pr6j2cPoj4ePKAYQ7TbVWUhw9AVSVnh66NWQ92dcCMt4Sh/EFPqcWHpaKLl2LjBneMsl8kILvW9AjhP8VO1YBUXJRE/Ui1vAUFnpbhm0etE1ngoO+ahobYFNNUjhUOzWKWu0lNTaIkO0Ks5N2Izzjn1UebcP60BPlCNpwTkVtVxrYC3YkNHTzQ80ovx5R33JgAesPvLMMivvAHPE5isGNo6R6RPM0KqMnBNsKmYLnaD2mOWt8f+HhQ/COU7rRffcPWIQ40oFCU4C5AipYmyHQUXey2d8diJkS1QIDnOzU8lVfkXSyD3DcECnmTGNgDoTDuLjSD6UxtIbMxvVvDzj+w0OZCbi3ysSRxt37E3OuM32uoyohr81Ngw5KEd52yqz8NXCFP7UrgyytZb59t6fUWUZkA3Y5T2Nq2KXEofP/THpqAXzvAEAeI8gKXjJmkEzucoPUMKaJdoYY1aVrUbGatAd+AzNbiE2yVNgDJySdFtNQhpijpK6VF9m9vMNXqnJnAEhR+VixTofoCxMx7if4eSXlt3UVupvz2abkcSlEV0PN8P5WVN2Q3ASv2bgAlcpRaF6D/8j/8XeG1D45H3R5one9e+OWnCCVKpDO1MI8zcNxGDe0LJ9h1W4M9yVZ4YSPDrW9E6e4HilUpTQlhJSdGzA4+xCtMVisp4PQd80cGn0KSHkEqDU/JuZuYcRtv0lk5QPk21E2g900Zz6ZelbQXTKFL7rIhwh1fK4S2M1AahA4mvmSoKhYIdVQmAbpnpOVupcv0dADY2bmQb9+UMgP7It7bZS9tJK0kMPSOn34QjkwWyaL+q+xShqEy6dBorfkQrAHoxK3fnhnsbt8RjhIFBqkiO8QgeFjYSNEI73T10ERcIqKhDvIEqcjSI1X0MyGBjAmuz2W6Fca84U+w9cpytKvLf7SVJVJVeV80MSSl2+EvhUS3iVg7pcOLvJ09OvcvbjqyoM/kaNaMi4f9j1AfmYh8NsclXLzSCn0XW6bDPpF+hwCEIsKh9jfxlyvlgbQm2iK+lMxV6Ufh+rDOS3TSnTMuxw4tTtAZcoT36r6yGJjen0Bba+M1Dwn7trWOFENR1Jl9McCWMt56397JtUoaMqkQwT5r6wn/IpXfVdzm69pEyaM+U8xwPdltdqqhr1qnpXbQJtCRkGbjV/Z0560MUMIqAP1rdPEh2Pbk7sR7w9mfgdGBoReLn7UfJWrcUb9D6D8g/v8vwc3cYbDLil06V1pdmqB6cByGjhNbr3VXl9GvyC8XJ305KdkZYSwgFcdtgHWge+ApcxoFLaawGHgV6B/o4HSBiyaqCFjEzaKAfSAR6eoVTNfZJbCW0ZnIFRLHttfwxJX7NVJ9r+WslHo3I+GZW8fvPY2RgQbo8QS0g72V43fvspHNQ/1cd3h/2gIiaP3a0Vt/RjFJbL1svu+OPBh6u1ImFbsektxIUPAvMahz4qtYG8ksEPcxbzk09cCr2TxJazR3yRQRVgZO/Z5ECTep+weJrVkaAa9jIEY8Oy3nElQNjqI56G0IOGpD2VSwTBuoFwo2D0jBw==",
        "X-OriginatorOrg": "Nvidia.com",
        "X-MS-Exchange-CrossTenant-Network-Message-Id": "\n ed9d0255-1ba9-4962-8240-08de4dcdc79c",
        "X-MS-Exchange-CrossTenant-AuthSource": "DM4PR12MB9072.namprd12.prod.outlook.com",
        "X-MS-Exchange-CrossTenant-AuthAs": "Internal",
        "X-MS-Exchange-CrossTenant-OriginalArrivalTime": "07 Jan 2026 09:18:54.7160\n (UTC)",
        "X-MS-Exchange-CrossTenant-FromEntityHeader": "Hosted",
        "X-MS-Exchange-CrossTenant-Id": "43083d15-7273-40c1-b7db-39efd9ccc17a",
        "X-MS-Exchange-CrossTenant-MailboxType": "HOSTED",
        "X-MS-Exchange-CrossTenant-UserPrincipalName": "\n CVf5792X5i5KCYV/pwbIG33k0SxUgDQkrNz4jv7ILaGq2m9nqLchiwc7Wi+WKyjMiYBpdpkL9OLj0V8vZYqbUQ==",
        "X-MS-Exchange-Transport-CrossTenantHeadersStamped": "MN2PR12MB4335",
        "X-Spam-Status": "No, score=-0.2 required=3.0 tests=ARC_SIGNED,ARC_VALID,\n\tDKIMWL_WL_HIGH,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,\n\tRCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H2,SPF_HELO_PASS,SPF_PASS\n\tautolearn=disabled version=4.0.1 OzLabs 8",
        "X-Spam-Checker-Version": "SpamAssassin 4.0.1 (2024-03-25) on lists.ozlabs.org"
    },
    "content": "To create a new migration entry for a given struct page, that page is\nfirst converted to its pfn, before passing the pfn to\nmake_readable_migration_entry() (and friends).\n\nA future change will remove device private pages from the physical\naddress space. This will mean that device private pages no longer have a\npfn and must be handled separately.\n\nPrepare for this with a new set of helpers:\n\n  - make_readable_migration_entry_from_page()\n  - make_readable_exclusive_migration_entry_from_page()\n  - make_writable_migration_entry_from_page()\n\nThese helpers take a struct page as parameter instead of a pfn. This\nwill allow more flexibility for handling the swap offset field\ndifferently for device private pages.\n\nSigned-off-by: Jordan Niethe <jniethe@nvidia.com>\n---\nv1:\n  - New to series\nv2:\n  - Add flags param\n---\n include/linux/leafops.h | 14 ++++++++++++++\n include/linux/swapops.h | 33 +++++++++++++++++++++++++++++++++\n mm/huge_memory.c        | 29 +++++++++++++++++------------\n mm/hugetlb.c            | 15 +++++++++------\n mm/memory.c             |  5 +++--\n mm/migrate_device.c     | 12 ++++++------\n mm/mprotect.c           | 10 +++++++---\n mm/rmap.c               | 12 ++++++------\n 8 files changed, 95 insertions(+), 35 deletions(-)",
    "diff": "diff --git a/include/linux/leafops.h b/include/linux/leafops.h\nindex cfafe7a5e7b1..2fde8208da13 100644\n--- a/include/linux/leafops.h\n+++ b/include/linux/leafops.h\n@@ -363,6 +363,20 @@ static inline unsigned long softleaf_to_pfn(softleaf_t entry)\n \treturn swp_offset(entry) & SWP_PFN_MASK;\n }\n \n+/**\n+ * softleaf_to_flags() - Obtain flags encoded within leaf entry.\n+ * @entry: Leaf entry, softleaf_has_pfn(@entry) must return true.\n+ *\n+ * Returns: The flags associated with the leaf entry.\n+ */\n+static inline unsigned long softleaf_to_flags(softleaf_t entry)\n+{\n+\tVM_WARN_ON_ONCE(!softleaf_has_pfn(entry));\n+\n+\t/* Temporary until swp_entry_t eliminated. */\n+\treturn swp_offset(entry) & (SWP_MIG_YOUNG | SWP_MIG_DIRTY);\n+}\n+\n /**\n  * softleaf_to_page() - Obtains struct page for PFN encoded within leaf entry.\n  * @entry: Leaf entry, softleaf_has_pfn(@entry) must return true.\ndiff --git a/include/linux/swapops.h b/include/linux/swapops.h\nindex 8cfc966eae48..a9ad997bd5ec 100644\n--- a/include/linux/swapops.h\n+++ b/include/linux/swapops.h\n@@ -173,16 +173,33 @@ static inline swp_entry_t make_readable_migration_entry(pgoff_t offset)\n \treturn swp_entry(SWP_MIGRATION_READ, offset);\n }\n \n+static inline swp_entry_t make_readable_migration_entry_from_page(struct page *page, pgoff_t flags)\n+{\n+\treturn swp_entry(SWP_MIGRATION_READ, page_to_pfn(page) | flags);\n+}\n+\n static inline swp_entry_t make_readable_exclusive_migration_entry(pgoff_t offset)\n {\n \treturn swp_entry(SWP_MIGRATION_READ_EXCLUSIVE, offset);\n }\n \n+static inline swp_entry_t make_readable_exclusive_migration_entry_from_page(struct page *page,\n+\t\t\t\t\t\t\t\t\t    pgoff_t flags)\n+{\n+\treturn swp_entry(SWP_MIGRATION_READ_EXCLUSIVE, page_to_pfn(page) | flags);\n+}\n+\n static inline swp_entry_t make_writable_migration_entry(pgoff_t offset)\n {\n \treturn swp_entry(SWP_MIGRATION_WRITE, offset);\n }\n \n+static inline swp_entry_t make_writable_migration_entry_from_page(struct page *page,\n+\t\t\t\t\t\t\t\t  pgoff_t flags)\n+{\n+\treturn swp_entry(SWP_MIGRATION_WRITE, page_to_pfn(page) | flags);\n+}\n+\n /*\n  * Returns whether the host has large enough swap offset field to support\n  * carrying over pgtable A/D bits for page migrations.  The result is\n@@ -222,11 +239,27 @@ static inline swp_entry_t make_readable_migration_entry(pgoff_t offset)\n \treturn swp_entry(0, 0);\n }\n \n+static inline swp_entry_t make_readable_migration_entry_from_page(struct page *page, pgoff_t flags)\n+{\n+\treturn swp_entry(0, 0);\n+}\n+\n+static inline swp_entry_t make_writeable_migration_entry_from_page(struct page *page, pgoff_t flags)\n+{\n+\treturn swp_entry(0, 0);\n+}\n+\n static inline swp_entry_t make_readable_exclusive_migration_entry(pgoff_t offset)\n {\n \treturn swp_entry(0, 0);\n }\n \n+static inline swp_entry_t make_readable_exclusive_migration_entry_from_page(struct page *page,\n+\t\t\t\t\t\t\t\t\t    pgoff_t flags)\n+{\n+\treturn swp_entry(0, 0);\n+}\n+\n static inline swp_entry_t make_writable_migration_entry(pgoff_t offset)\n {\n \treturn swp_entry(0, 0);\ndiff --git a/mm/huge_memory.c b/mm/huge_memory.c\nindex 40cf59301c21..e3a448cdb34d 100644\n--- a/mm/huge_memory.c\n+++ b/mm/huge_memory.c\n@@ -1800,7 +1800,8 @@ static void copy_huge_non_present_pmd(\n \n \tif (softleaf_is_migration_write(entry) ||\n \t    softleaf_is_migration_read_exclusive(entry)) {\n-\t\tentry = make_readable_migration_entry(swp_offset(entry));\n+\t\tentry = make_readable_migration_entry_from_page(softleaf_to_page(entry),\n+\t\t\t\t\t\t\t\tsoftleaf_to_flags(entry));\n \t\tpmd = swp_entry_to_pmd(entry);\n \t\tif (pmd_swp_soft_dirty(*src_pmd))\n \t\t\tpmd = pmd_swp_mksoft_dirty(pmd);\n@@ -2524,9 +2525,13 @@ static void change_non_present_huge_pmd(struct mm_struct *mm,\n \t\t * just be safe and disable write\n \t\t */\n \t\tif (folio_test_anon(folio))\n-\t\t\tentry = make_readable_exclusive_migration_entry(swp_offset(entry));\n+\t\t\tentry = make_readable_exclusive_migration_entry_from_page(\n+\t\t\t\t\t\tsoftleaf_to_page(entry),\n+\t\t\t\t\t\tsoftleaf_to_flags(entry));\n \t\telse\n-\t\t\tentry = make_readable_migration_entry(swp_offset(entry));\n+\t\t\tentry = make_readable_migration_entry_from_page(\n+\t\t\t\t\t\tsoftleaf_to_page(entry),\n+\t\t\t\t\t\tsoftleaf_to_flags(entry));\n \t\tnewpmd = swp_entry_to_pmd(entry);\n \t\tif (pmd_swp_soft_dirty(*pmd))\n \t\t\tnewpmd = pmd_swp_mksoft_dirty(newpmd);\n@@ -3183,14 +3188,14 @@ static void __split_huge_pmd_locked(struct vm_area_struct *vma, pmd_t *pmd,\n \n \t\tfor (i = 0, addr = haddr; i < HPAGE_PMD_NR; i++, addr += PAGE_SIZE) {\n \t\t\tif (write)\n-\t\t\t\tswp_entry = make_writable_migration_entry(\n-\t\t\t\t\t\t\tpage_to_pfn(page + i));\n+\t\t\t\tswp_entry = make_writable_migration_entry_from_page(\n+\t\t\t\t\t\t\tpage + i, 0);\n \t\t\telse if (anon_exclusive)\n-\t\t\t\tswp_entry = make_readable_exclusive_migration_entry(\n-\t\t\t\t\t\t\tpage_to_pfn(page + i));\n+\t\t\t\tswp_entry = make_readable_exclusive_migration_entry_from_page(\n+\t\t\t\t\t\t\tpage + i, 0);\n \t\t\telse\n-\t\t\t\tswp_entry = make_readable_migration_entry(\n-\t\t\t\t\t\t\tpage_to_pfn(page + i));\n+\t\t\t\tswp_entry = make_readable_migration_entry_from_page(\n+\t\t\t\t\t\t\tpage + i, 0);\n \t\t\tif (young)\n \t\t\t\tswp_entry = make_migration_entry_young(swp_entry);\n \t\t\tif (dirty)\n@@ -4890,11 +4895,11 @@ int set_pmd_migration_entry(struct page_vma_mapped_walk *pvmw,\n \tif (pmd_dirty(pmdval))\n \t\tfolio_mark_dirty(folio);\n \tif (pmd_write(pmdval))\n-\t\tentry = make_writable_migration_entry(page_to_pfn(page));\n+\t\tentry = make_writable_migration_entry_from_page(page, 0);\n \telse if (anon_exclusive)\n-\t\tentry = make_readable_exclusive_migration_entry(page_to_pfn(page));\n+\t\tentry = make_readable_exclusive_migration_entry_from_page(page, 0);\n \telse\n-\t\tentry = make_readable_migration_entry(page_to_pfn(page));\n+\t\tentry = make_readable_migration_entry_from_page(page, 0);\n \tif (pmd_young(pmdval))\n \t\tentry = make_migration_entry_young(entry);\n \tif (pmd_dirty(pmdval))\ndiff --git a/mm/hugetlb.c b/mm/hugetlb.c\nindex 51273baec9e5..6a5e40d4cfc2 100644\n--- a/mm/hugetlb.c\n+++ b/mm/hugetlb.c\n@@ -4939,8 +4939,9 @@ int copy_hugetlb_page_range(struct mm_struct *dst, struct mm_struct *src,\n \t\t\t\t * COW mappings require pages in both\n \t\t\t\t * parent and child to be set to read.\n \t\t\t\t */\n-\t\t\t\tsoftleaf = make_readable_migration_entry(\n-\t\t\t\t\t\t\tswp_offset(softleaf));\n+\t\t\t\tsoftleaf = make_readable_migration_entry_from_page(\n+\t\t\t\t\t\t\tsoftleaf_to_page(softleaf),\n+\t\t\t\t\t\t\tsoftleaf_to_flags(softleaf));\n \t\t\t\tentry = swp_entry_to_pte(softleaf);\n \t\t\t\tif (userfaultfd_wp(src_vma) && uffd_wp)\n \t\t\t\t\tentry = pte_swp_mkuffd_wp(entry);\n@@ -6491,11 +6492,13 @@ long hugetlb_change_protection(struct vm_area_struct *vma,\n \n \t\t\tif (softleaf_is_migration_write(entry)) {\n \t\t\t\tif (folio_test_anon(folio))\n-\t\t\t\t\tentry = make_readable_exclusive_migration_entry(\n-\t\t\t\t\t\t\t\tswp_offset(entry));\n+\t\t\t\t\tentry = make_readable_exclusive_migration_entry_from_page(\n+\t\t\t\t\t\t\t\tsoftleaf_to_page(entry),\n+\t\t\t\t\t\t\t\tsoftleaf_to_flags(entry));\n \t\t\t\telse\n-\t\t\t\t\tentry = make_readable_migration_entry(\n-\t\t\t\t\t\t\t\tswp_offset(entry));\n+\t\t\t\t\tentry = make_readable_migration_entry_from_page(\n+\t\t\t\t\t\t\t\tsoftleaf_to_page(entry),\n+\t\t\t\t\t\t\t\tsoftleaf_to_flags(entry));\n \t\t\t\tnewpte = swp_entry_to_pte(entry);\n \t\t\t\tpages++;\n \t\t\t}\ndiff --git a/mm/memory.c b/mm/memory.c\nindex 2a55edc48a65..16493fbb3adb 100644\n--- a/mm/memory.c\n+++ b/mm/memory.c\n@@ -963,8 +963,9 @@ copy_nonpresent_pte(struct mm_struct *dst_mm, struct mm_struct *src_mm,\n \t\t\t * to be set to read. A previously exclusive entry is\n \t\t\t * now shared.\n \t\t\t */\n-\t\t\tentry = make_readable_migration_entry(\n-\t\t\t\t\t\t\tswp_offset(entry));\n+\t\t\tentry = make_readable_migration_entry_from_page(\n+\t\t\t\t\t\t\tsoftleaf_to_page(entry),\n+\t\t\t\t\t\t\tsoftleaf_to_flags(entry));\n \t\t\tpte = softleaf_to_pte(entry);\n \t\t\tif (pte_swp_soft_dirty(orig_pte))\n \t\t\t\tpte = pte_swp_mksoft_dirty(pte);\ndiff --git a/mm/migrate_device.c b/mm/migrate_device.c\nindex a2baaa2a81f9..c876526ac6a3 100644\n--- a/mm/migrate_device.c\n+++ b/mm/migrate_device.c\n@@ -432,14 +432,14 @@ static int migrate_vma_collect_pmd(pmd_t *pmdp,\n \n \t\t\t/* Setup special migration page table entry */\n \t\t\tif (mpfn & MIGRATE_PFN_WRITE)\n-\t\t\t\tentry = make_writable_migration_entry(\n-\t\t\t\t\t\t\tpage_to_pfn(page));\n+\t\t\t\tentry = make_writable_migration_entry_from_page(\n+\t\t\t\t\t\t\tpage, 0);\n \t\t\telse if (anon_exclusive)\n-\t\t\t\tentry = make_readable_exclusive_migration_entry(\n-\t\t\t\t\t\t\tpage_to_pfn(page));\n+\t\t\t\tentry = make_readable_exclusive_migration_entry_from_page(\n+\t\t\t\t\t\t\tpage, 0);\n \t\t\telse\n-\t\t\t\tentry = make_readable_migration_entry(\n-\t\t\t\t\t\t\tpage_to_pfn(page));\n+\t\t\t\tentry = make_readable_migration_entry_from_page(\n+\t\t\t\t\t\t\tpage, 0);\n \t\t\tif (pte_present(pte)) {\n \t\t\t\tif (pte_young(pte))\n \t\t\t\t\tentry = make_migration_entry_young(entry);\ndiff --git a/mm/mprotect.c b/mm/mprotect.c\nindex 283889e4f1ce..adfe1b7a4a19 100644\n--- a/mm/mprotect.c\n+++ b/mm/mprotect.c\n@@ -328,10 +328,14 @@ static long change_pte_range(struct mmu_gather *tlb,\n \t\t\t\t * just be safe and disable write\n \t\t\t\t */\n \t\t\t\tif (folio_test_anon(folio))\n-\t\t\t\t\tentry = make_readable_exclusive_migration_entry(\n-\t\t\t\t\t\t\t     swp_offset(entry));\n+\t\t\t\t\tentry = make_readable_exclusive_migration_entry_from_page(\n+\t\t\t\t\t\t\tsoftleaf_to_page(entry),\n+\t\t\t\t\t\t\tsoftleaf_to_flags(entry));\n \t\t\t\telse\n-\t\t\t\t\tentry = make_readable_migration_entry(swp_offset(entry));\n+\t\t\t\t\tentry = make_readable_migration_entry_from_page(\n+\t\t\t\t\t\t\tsoftleaf_to_page(entry),\n+\t\t\t\t\t\t\tsoftleaf_to_flags(entry));\n+\n \t\t\t\tnewpte = swp_entry_to_pte(entry);\n \t\t\t\tif (pte_swp_soft_dirty(oldpte))\n \t\t\t\t\tnewpte = pte_swp_mksoft_dirty(newpte);\ndiff --git a/mm/rmap.c b/mm/rmap.c\nindex 79a2478b4aa9..6a63333f8722 100644\n--- a/mm/rmap.c\n+++ b/mm/rmap.c\n@@ -2539,14 +2539,14 @@ static bool try_to_migrate_one(struct folio *folio, struct vm_area_struct *vma,\n \t\t\t * pte is removed and then restart fault handling.\n \t\t\t */\n \t\t\tif (writable)\n-\t\t\t\tentry = make_writable_migration_entry(\n-\t\t\t\t\t\t\tpage_to_pfn(subpage));\n+\t\t\t\tentry = make_writable_migration_entry_from_page(\n+\t\t\t\t\t\t\tsubpage, 0);\n \t\t\telse if (anon_exclusive)\n-\t\t\t\tentry = make_readable_exclusive_migration_entry(\n-\t\t\t\t\t\t\tpage_to_pfn(subpage));\n+\t\t\t\tentry = make_readable_exclusive_migration_entry_from_page(\n+\t\t\t\t\t\t\tsubpage, 0);\n \t\t\telse\n-\t\t\t\tentry = make_readable_migration_entry(\n-\t\t\t\t\t\t\tpage_to_pfn(subpage));\n+\t\t\t\tentry = make_readable_migration_entry_from_page(\n+\t\t\t\t\t\t\tsubpage, 0);\n \t\t\tif (likely(pte_present(pteval))) {\n \t\t\t\tif (pte_young(pteval))\n \t\t\t\t\tentry = make_migration_entry_young(entry);\n",
    "prefixes": [
        "v2",
        "06/11"
    ]
}