)]}'
{
  "commit": "a3eae205c601dd491d2e83fa9ff0d15fce7236b5",
  "tree": "0136b1e6898f90375768b0d5908aa61051b971f3",
  "parents": [
    "efc65873131dac48d2f7620adfcd683834acc94b"
  ],
  "author": {
    "name": "Steve Sistare",
    "email": "steven.sistare@oracle.com",
    "time": "Wed Oct 01 08:33:58 2025 -0700"
  },
  "committer": {
    "name": "Peter Xu",
    "email": "peterx@redhat.com",
    "time": "Fri Oct 03 09:48:02 2025 -0400"
  },
  "message": "migration: cpr-exec mode\n\nAdd the cpr-exec migration mode.  Usage:\n  qemu-system-$arch -machine aux-ram-share\u003don ...\n  migrate_set_parameter mode cpr-exec\n  migrate_set_parameter cpr-exec-command \\\n    \u003carg1\u003e \u003carg2\u003e ... -incoming \u003curi-1\u003e \\\n  migrate -d \u003curi-1\u003e\n\nThe migrate command stops the VM, saves state to uri-1,\ndirectly exec\u0027s a new version of QEMU on the same host,\nreplacing the original process while retaining its PID, and\nloads state from uri-1.  Guest RAM is preserved in place,\nalbeit with new virtual addresses.\n\nThe new QEMU process is started by exec\u0027ing the command\nspecified by the @cpr-exec-command parameter.  The first word of\nthe command is the binary, and the remaining words are its\narguments.  The command may be a direct invocation of new QEMU,\nor may be a non-QEMU command that exec\u0027s the new QEMU binary.\n\nThis mode creates a second migration channel that is not visible\nto the user.  At the start of migration, old QEMU saves CPR state\nto the second channel, and at the end of migration, it tells the\nmain loop to call cpr_exec.  New QEMU loads CPR state early, before\nobjects are created.\n\nBecause old QEMU terminates when new QEMU starts, one cannot\nstream data between the two, so uri-1 must be a type,\nsuch as a file, that accepts all data before old QEMU exits.\nOtherwise, old QEMU may quietly block writing to the channel.\n\nMemory-backend objects must have the share\u003don attribute, but\nmemory-backend-epc is not supported.  The VM must be started with\nthe \u0027-machine aux-ram-share\u003don\u0027 option, which allows anonymous\nmemory to be transferred in place to the new process.  The memfds\nare kept open across exec by clearing the close-on-exec flag, their\nvalues are saved in CPR state, and they are mmap\u0027d in new QEMU.\n\nSigned-off-by: Steve Sistare \u003csteven.sistare@oracle.com\u003e\nAcked-by: Markus Armbruster \u003carmbru@redhat.com\u003e\nLink: https://lore.kernel.org/r/1759332851-370353-7-git-send-email-steven.sistare@oracle.com\nSigned-off-by: Peter Xu \u003cpeterx@redhat.com\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "b84389ff04a9f7a144f46b14e8272adc447e3249",
      "old_mode": 33188,
      "old_path": "include/migration/cpr.h",
      "new_id": "a412d6663c3df65c7234fc4a2c44c799e903bc7f",
      "new_mode": 33188,
      "new_path": "include/migration/cpr.h"
    },
    {
      "type": "modify",
      "old_id": "81d84425e1b7ccbdc31b9bbd8e39690bd384c537",
      "old_mode": 33188,
      "old_path": "migration/cpr-exec.c",
      "new_id": "d57714bc5da89273ff34827c76f604b21a5d9c56",
      "new_mode": 33188,
      "new_path": "migration/cpr-exec.c"
    },
    {
      "type": "modify",
      "old_id": "6feda78f1bd244bf7255465eedad7408500b6b51",
      "old_mode": 33188,
      "old_path": "migration/cpr.c",
      "new_id": "22dbac7c728c3b226ecfb68399d37a3e4ee9d4b8",
      "new_mode": 33188,
      "new_path": "migration/cpr.c"
    },
    {
      "type": "modify",
      "old_id": "a399735f023f6a007fb4e2aafd674a89133bf8f7",
      "old_mode": 33188,
      "old_path": "migration/migration.c",
      "new_id": "a63b46bbef90f093650bc2ae8e074356a28ca2c7",
      "new_mode": 33188,
      "new_path": "migration/migration.c"
    },
    {
      "type": "modify",
      "old_id": "a8e8d2cc6790336625de626fee070ecc51327200",
      "old_mode": 33188,
      "old_path": "migration/ram.c",
      "new_id": "9aac89638aebb6cbbf43de5b459c8e38b40322d0",
      "new_mode": 33188,
      "new_path": "migration/ram.c"
    },
    {
      "type": "modify",
      "old_id": "706db97def9c524b6d8f030ca9f25574d2ec60d7",
      "old_mode": 33188,
      "old_path": "migration/trace-events",
      "new_id": "e8edd1fbbadf4c53f343296cff1b2914fbd5ce4a",
      "new_mode": 33188,
      "new_path": "migration/trace-events"
    },
    {
      "type": "modify",
      "old_id": "a1cd7a95fa0148858dd883acf9a707b2b076d89e",
      "old_mode": 33188,
      "old_path": "migration/vmstate-types.c",
      "new_id": "4b01dc19c277c5cb9bf106c58113176b6b762bde",
      "new_mode": 33188,
      "new_path": "migration/vmstate-types.c"
    },
    {
      "type": "modify",
      "old_id": "2be8fa1d1603a675a717a14e3b61e73f28afcf76",
      "old_mode": 33188,
      "old_path": "qapi/migration.json",
      "new_id": "be0f3fcc12a9cee6937c49788144c00c5351e56a",
      "new_mode": 33188,
      "new_path": "qapi/migration.json"
    },
    {
      "type": "modify",
      "old_id": "00f36947257a536c54916c470e57f23e664ab33a",
      "old_mode": 33188,
      "old_path": "system/vl.c",
      "new_id": "646239e4a69d14eb8f3a397dfc256625b0193bb6",
      "new_mode": 33188,
      "new_path": "system/vl.c"
    }
  ]
}
