{"id":2221320,"url":"http://patchwork.ozlabs.org/api/1.0/covers/2221320/?format=json","project":{"id":14,"url":"http://patchwork.ozlabs.org/api/1.0/projects/14/?format=json","name":"QEMU Development","link_name":"qemu-devel","list_id":"qemu-devel.nongnu.org","list_email":"qemu-devel@nongnu.org","web_url":"","scm_url":"","webscm_url":""},"msgid":"<20260409070114.11313-1-matthieu@min.io>","date":"2026-04-09T07:01:09","name":"[0/2] NVMe namespace hotplug and drive reconnection support","submitter":{"id":93098,"url":"http://patchwork.ozlabs.org/api/1.0/people/93098/?format=json","name":"mr-083","email":"matthieu@minio.io"},"series":[{"id":499254,"url":"http://patchwork.ozlabs.org/api/1.0/series/499254/?format=json","date":"2026-04-09T07:01:10","name":"NVMe namespace hotplug and drive reconnection support","version":1,"mbox":"http://patchwork.ozlabs.org/series/499254/mbox/"}],"headers":{"Return-Path":"<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>","X-Original-To":"incoming@patchwork.ozlabs.org","Delivered-To":"patchwork-incoming@legolas.ozlabs.org","Authentication-Results":["legolas.ozlabs.org;\n\tdkim=pass (2048-bit key;\n secure) header.d=minio.io header.i=@minio.io header.a=rsa-sha256\n header.s=minio header.b=c6M4Boml;\n\tdkim-atps=neutral","legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org\n (client-ip=209.51.188.17; helo=lists.gnu.org;\n envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org;\n receiver=patchwork.ozlabs.org)"],"Received":["from lists.gnu.org (lists1p.gnu.org [209.51.188.17])\n\t(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4frtCj3Wydz1yD3\n\tfor <incoming@patchwork.ozlabs.org>; Thu, 09 Apr 2026 18:20:17 +1000 (AEST)","from localhost ([::1] helo=lists1p.gnu.org)\n\tby lists.gnu.org with esmtp (Exim 4.90_1)\n\t(envelope-from <qemu-devel-bounces@nongnu.org>)\n\tid 1wAkbm-0006N7-JP; Thu, 09 Apr 2026 04:19:26 -0400","from eggs.gnu.org ([2001:470:142:3::10])\n by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)\n (Exim 4.90_1) (envelope-from <matthieu@minio.io>) id 1wAjOJ-00053v-3a\n for qemu-devel@nongnu.org; Thu, 09 Apr 2026 03:01:29 -0400","from mail-wr1-x435.google.com ([2a00:1450:4864:20::435])\n by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)\n (Exim 4.90_1) (envelope-from <matthieu@minio.io>) id 1wAjOG-00076F-LS\n for qemu-devel@nongnu.org; Thu, 09 Apr 2026 03:01:26 -0400","by mail-wr1-x435.google.com with SMTP id\n ffacd0b85a97d-43b8e8e7432so424460f8f.1\n for <qemu-devel@nongnu.org>; Thu, 09 Apr 2026 00:01:17 -0700 (PDT)","from localhost\n (2a01cb00141148004df9ec80d3fa1cac.ipv6.abo.wanadoo.fr.\n [2a01:cb00:1411:4800:4df9:ec80:d3fa:1cac])\n by smtp.gmail.com with UTF8SMTPSA id\n ffacd0b85a97d-43d1e4f1a99sm68622732f8f.32.2026.04.09.00.01.13\n (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);\n Thu, 09 Apr 2026 00:01:13 -0700 (PDT)"],"DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=minio.io; s=minio; t=1775718074; x=1776322874; darn=nongnu.org;\n h=content-transfer-encoding:mime-version:message-id:date:subject:cc\n :to:from:from:to:cc:subject:date:message-id:reply-to;\n bh=BQIDX/WNV5Pzl0aC//tD4ssejDFf4jBgsYoG1vBrsEc=;\n b=c6M4BomlwXWzE7NIrvduNvP7bCe4GMtXEuVLE/+ml3JV6pkVKKzDrTezWR5P+cUe5T\n IJWOuiaCJx5pCJQ2o/fPlaSoSonaDw3+Kl0cBy6QD1fGZ4gaYtMgT1A7hS1myDuyztQF\n zOCbZy81aXIiA6LQCg7xJDobGB+RzhtH958tr0tDBWY7OQjHdfnwf8x6zpD/BP60TXBV\n 0uG9teVOy1UC+N1kCGc2TLEH2JrCPn8MxIITM2zX0u+m4EgtlwXrbsbk2CYB4jdyMUIa\n h/wjfQIzmSISU4zocNy0vQw3QV7Xs0PH3Fs0ic92Q00loVn49fEtlgi22HnxPuEC2fOF\n C9lw==","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=1e100.net; s=20251104; t=1775718074; x=1776322874;\n h=content-transfer-encoding:mime-version:message-id:date:subject:cc\n :to:from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date\n :message-id:reply-to;\n bh=BQIDX/WNV5Pzl0aC//tD4ssejDFf4jBgsYoG1vBrsEc=;\n b=Drllbcgw3uG1R9YpqM5VGRTlw0Qg4YwdS5H/NxCUMpu9FvPvDviG26YupnutY1K7C3\n n0hPWi+tsEq5i784EMJ4Ro59Xn5Uuniv9i1RfRlbaCwbepQuMAlhyQCXGw0pZmoxsebJ\n /y6SHc57YbPhftSeIFGI8cohfWpnUnJfOmf0ApcNCoBVhVbca0jYTc47shw3ucFQntnA\n PNFNOjkOiwtybuB/z/ptvuUemx6xO/NGxcuqLqp0vQmNRj5AiBJkfyZzF11umxy9NmvB\n HVUXslAtdBBGoomIi3pARZImEbSgrgBb6ZvYOwWPS6W6a7sxJe9QVnQ4VUTcsGwLfDeu\n /HnQ==","X-Gm-Message-State":"AOJu0YzxlJxcgjVsML/oTMkbHNpAeuxbBqdXFvC8Pkp9capK40BqfZcJ\n fBBfWmMoAfcLdpWkkLveIonBIsOTrZGFQyIf0zLvBzNs24GcymCvi7NizwdNuL/wCGXOiYBH5M6\n cF2rEdQ/GBObPKDEGKWFNL4FGYOpd9dCMIuJ426xqOzqohbPM+ME49qzpQOACON4r/9gi6XVubg\n JulXbayo8SF+FL3xqeDqZUG2i/TMJZeM3hXX1thFY=","X-Gm-Gg":"AeBDieus+PCEmNJDR1tlR7MpOWhpZR8+S9DYPmRCe3SzQSbn4l8av0TEt2hpYO/mprn\n kCaIuac9hdNBZqFOOIPYptPBejeI5PlSrqy0JTI9/Hnrqw20tDDfgLZqhV8Ti3VylCkRurmjfy9\n J32hCGr8kpVghkVZfjO04avHaqgngZ84C5uhfbGcqhXYq1i3RvvrlZKKzHQ22p1VtD/F9/6zCUr\n xTR8x/9nDQmrV2KROlMlveo+y5WuKyp41fqFRbdWx1feOJ4pJWakdCWbimwsEJl5ibOgNGocNwP\n 9kQ/lx7Hx7JRXbP0Yb5Hyd6H7zgHLX55OSgyuF/C3L8YYCLBSP+55mGUFQBivZ3UIpO9QzEtxzX\n Yc1JnR48gg6F9k2cWCNYliCMsJ81uQreSKgmzjKVa8OL6o5mC+aMUql0iKme3chfApqt5m4BgiN\n hop1DOL0e+EEXCuKv/eHVPpA8bnzeyCRCts410pBEEVDP1FZV47T6W/JnN3aeHgKMSo+C9k1C1/\n KSBdtF4vZxPeiABuE+kh4Sdyn6P4XiumRwfX383TYwy9sWpAQGvex3tVrvLYA==","X-Received":"by 2002:a05:6000:1acf:b0:43d:20e9:b0e1 with SMTP id\n ffacd0b85a97d-43d29280e6dmr33088200f8f.7.1775718074190;\n Thu, 09 Apr 2026 00:01:14 -0700 (PDT)","From":"mr-083 <matthieu@minio.io>","X-Google-Original-From":"mr-083 <matthieu@min.io>","To":"qemu-devel@nongnu.org,\n\tqemu-block@nongnu.org","Cc":"its@irrelevant.dk, kbusch@kernel.org, stefanha@redhat.com,\n mr-083 <matthieu@min.io>","Subject":"[PATCH 0/2] NVMe namespace hotplug and drive reconnection support","Date":"Thu,  9 Apr 2026 09:01:09 +0200","Message-ID":"<20260409070114.11313-1-matthieu@min.io>","X-Mailer":"git-send-email 2.53.0","MIME-Version":"1.0","Content-Transfer-Encoding":"8bit","Received-SPF":"pass client-ip=2a00:1450:4864:20::435;\n envelope-from=matthieu@minio.io; helo=mail-wr1-x435.google.com","X-Spam_score_int":"-10","X-Spam_score":"-1.1","X-Spam_bar":"-","X-Spam_report":"(-1.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1,\n DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1,\n HK_NAME_MR_MRS=0.998,\n RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001,\n SPF_PASS=-0.001 autolearn=no autolearn_force=no","X-Spam_action":"no action","X-Mailman-Approved-At":"Thu, 09 Apr 2026 04:19:20 -0400","X-BeenThere":"qemu-devel@nongnu.org","X-Mailman-Version":"2.1.29","Precedence":"list","List-Id":"qemu development <qemu-devel.nongnu.org>","List-Unsubscribe":"<https://lists.nongnu.org/mailman/options/qemu-devel>,\n <mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>","List-Archive":"<https://lists.nongnu.org/archive/html/qemu-devel>","List-Post":"<mailto:qemu-devel@nongnu.org>","List-Help":"<mailto:qemu-devel-request@nongnu.org?subject=help>","List-Subscribe":"<https://lists.nongnu.org/mailman/listinfo/qemu-devel>,\n <mailto:qemu-devel-request@nongnu.org?subject=subscribe>","Errors-To":"qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org","Sender":"qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org"},"content":"This series adds two features that together enable transparent NVMe disk\nhot-swap simulation in QEMU, matching the behavior of physical NVMe\ndrives being pulled and reinserted in the same PCIe slot.\n\nProblem:\nCurrently, hot-swapping an NVMe disk in QEMU requires removing the\nentire NVMe controller via device_del, which causes the Linux guest to\nassign a new controller number on re-add (e.g. nvme2 becomes nvme4).\nThis breaks storage software that tracks drives by device name.\n\nSolution:\nPatch 1 adds hotplug support for nvme-ns devices on the NvmeBus, with\nproper Asynchronous Event Notification (AEN) so the guest kernel detects\nnamespace changes. This allows namespace-level hot-swap without removing\nthe NVMe controller.\n\nPatch 2 adds a drive_insert HMP command that reconnects a host block\ndevice file to an existing guest device after drive_del. This is the\ncounterpart to drive_del for non-removable devices where\nblockdev-change-medium cannot be used.\n\nThe recommended hot-swap sequence is:\n  1. drive_del <drive-id>          # disconnect backing store\n  2. drive_insert <device> <file>  # reconnect backing store\n  3. pcie_aer_inject_error <port> SDN  # trigger controller reset\n\nAfter this sequence, the guest sees the same controller and namespace\nnames (e.g. /dev/nvme2n1 remains /dev/nvme2n1), and the NVMe driver\nrecovers transparently via the standard AER recovery path.\n\nTested with:\n- Linux 6.1 guest on QEMU aarch64 with HVF (macOS)\n- NVMe subsystem model with multipath disabled\n- DirectPV and MinIO AIStor storage stack\n\nmr-083 (2):\n  hw/nvme: add namespace hotplug support\n  block/monitor: add drive_insert HMP command\n\n block/monitor/block-hmp-cmds.c | 59 +++++++++++++++++++++++\n hmp-commands.hx                | 18 +++++++\n hw/nvme/ctrl.c                 | 85 ++++++++++++++++++++++++++++++++++\n hw/nvme/ns.c                   |  1 +\n hw/nvme/subsys.c               |  2 +\n include/block/block-hmp-cmds.h |  1 +\n 6 files changed, 166 insertions(+)\n\n--\n2.50.1 (Apple Git-155)"}