From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-wm1-f43.google.com (mail-wm1-f43.google.com [209.85.128.43]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 62213346E43 for ; Wed, 24 Jun 2026 14:08:53 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.43 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782310134; cv=none; b=SezTmOgoG0A4GodfW9jC9ZASLkl30A6OkRYbyNe3nws2bPO3SB3NNSFN9q76LAjGnyfSklEXLgWHzk1uRvs1+vvEgSRtWv6GJx5Fw3jIL4k2X1l+LGwEBacitAuWhgHxmqM3YRy4ZTzunsET1pFw4wlV9Zwrk67XJpfEuT1LbK4= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782310134; c=relaxed/simple; bh=xqw+Ltv0NK+PjorAzSM5UFN9Dv1kLsYar47vJWcEzn4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=YKMhp5S/k/QbZ9iW+mRxHg41FWWICyp8d13z0L4UGpUnKp6zBaIEqIltDU/qtw9f0rdHygkjp5XU2bxBG5YmsggUnnJfhJixIdZS1DIrV4TGN6SB/mrhnPcnzDdz5W9jF8sFHS4OweLnuP2NRtjW9b3XWadvNDUAvoDcE0VFk2c= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=openvz.org; spf=pass smtp.mailfrom=openvz.org; dkim=pass (2048-bit key) header.d=openvz.org header.i=@openvz.org header.b=c+ppHcwp; arc=none smtp.client-ip=209.85.128.43 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=openvz.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=openvz.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=openvz.org header.i=@openvz.org header.b="c+ppHcwp" Received: by mail-wm1-f43.google.com with SMTP id 5b1f17b1804b1-4924593f45dso12355065e9.1 for ; Wed, 24 Jun 2026 07:08:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=openvz.org; s=google; t=1782310132; x=1782914932; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=jiMVlU2iiq+RGw5HJ9eGDxxDIHcXec2SI+DnMj/Et+U=; b=c+ppHcwpUen7RBg355VD70DGYgPrGWZTe+NMk7wDW15l8rMhZtgYZawExPkoSu3hu1 x7upWNnuZgONtfToRJRFkRIjr9FlVt0sV6T9aDKHVPI9jPgfXErHJVV3O2YVgnE4BEbR DPQgautfj4icRjdPIDwxfkccaWB7YuSuy2HACYyNxsOgKWs4QlRxHZXStkVFFoiYPLI6 ueY/CeVhjFozvqqSMrWTPpVEtVCVrs10Hfsx8SYnhY481oQXmSN5vwDNPmYpg+ArNhpP KAYQCjy288A/5CtNgp9Ra9rOxP7VlU0WWmyMkj2N0AcERIx20/VYQeHpUaRVbsENPcm/ Zxyw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1782310132; x=1782914932; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=jiMVlU2iiq+RGw5HJ9eGDxxDIHcXec2SI+DnMj/Et+U=; b=hCSzEvvS99/PXQBPU0fWTB9eTrkKRCx1O9rLKZsoLei0qKVWzSggpadwK8IRuz9vkx nsnv7nwlfrqMVK53+YsCs6GrdsZGfiKsmn0EuyRGyx04ww7sh7u5SGKTNTgO/CWu9o6E GKOLnaWf14H3tfc9Xjo1d4uKdNeAbrSuiFX0sVcYGFJid/jTaaMzkegSkN0AIlwQ4uKT E5hvmhmWYKwyHbRoOevneKJ0yNzLLFOfbFeI4it1ij319PzVOVC6PsddAJyvmcaw4Xo6 Hd9IFpzayAVuUjF7LN6cKq0FpJurfmzdHJru0qHWA3wn7Fya95V9AQlJOGTaJSKytBzU T8ow== X-Forwarded-Encrypted: i=1; AFNElJ+RGxSbXYs+bwKVg8ZSu/kPNVP6V+M2s/3Ivu9wr6fiXaIVpplbSUiq7tDOArrI/bBM+85PZ5Firo+JLnY=@vger.kernel.org X-Gm-Message-State: AOJu0YzFxfO3YFHpR5eROmssPdXmhux2SEWQmZ52f+bmjCSBEExtyuFQ /QG8qlkXxfYv6m1N0A2cmjZ/Yet00xxIkYGTKkE35OXFk2HXkNVmOTB4nzv6X3G9aRk= X-Gm-Gg: AfdE7cmppykUcXk98RuIwGaVvn7qC6Hgt86rR23AC477ipordzNTkZauHmfvOOlLwQZ HUuwh/NbtInlQLgJ+KouunlgDPFepPj+IsdNlmShvat79qHVP8epJXV+A77jfN7PgHVUP9m89aZ EZXaxA2Kv1U5osTUrcThq+FDC+A5WKaTQRdzobBJvBYcnrK9pVEmXKnyKYfym2ib4Jskz9scZ9k ODp4uuFI7oqayrmtgrtZZhFW1Zgt9vrbgadZ2ZfGWBppXSVSQykKBLcBVeP0kiyVFV0EugfB69T rcQqhfszRBcjs7K05f3Bd5Y6WPD0IlcfpmkGEpJc+LQUa7BF8GRCrkwu24ebB4xGR5VIYok+6tj 0+ZMp7QF8cDZiRhiDVnBn6687SfKIGMtNwxnRrtU7rcBoOQ1T4or0aY7tbWWb8p7SiPZzeA== X-Received: by 2002:a05:600c:e547:10b0:492:1e36:bb04 with SMTP id 5b1f17b1804b1-4926087b5d6mr35199605e9.37.1782310131847; Wed, 24 Jun 2026 07:08:51 -0700 (PDT) Received: from athena.sw.ru ([2a06:5b06:b600:300:306c:c2d:85d5:28d5]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-4923fd1fa34sm519680275e9.5.2026.06.24.07.08.50 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 24 Jun 2026 07:08:51 -0700 (PDT) From: "Denis V. Lunev" To: mst@redhat.com, david@kernel.org Cc: virtualization@lists.linux.dev, linux-kernel@vger.kernel.org, "Denis V. Lunev" Subject: [PATCH v2 2/4] virtio_balloon: factor out virtballoon_quiesce() Date: Wed, 24 Jun 2026 16:08:44 +0200 Message-ID: <20260624140846.2616797-3-den@openvz.org> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260624140846.2616797-1-den@openvz.org> References: <20260624140846.2616797-1-den@openvz.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit virtballoon_remove() stops all of the balloon's asynchronous work (the free page reporting worker, the inflate/deflate and stats workers, the OOM notifier and the free page shrinker) before tearing the device down. A following change needs the same teardown from a .shutdown handler, so move it into a virtballoon_quiesce() helper. No functional change. Signed-off-by: Denis V. Lunev --- drivers/virtio/virtio_balloon.c | 27 ++++++++++++++++++++------- 1 file changed, 20 insertions(+), 7 deletions(-) diff --git a/drivers/virtio/virtio_balloon.c b/drivers/virtio/virtio_balloon.c index 088b3a0e6ce6..5b02d9191ac6 100644 --- a/drivers/virtio/virtio_balloon.c +++ b/drivers/virtio/virtio_balloon.c @@ -1098,26 +1098,39 @@ static void remove_common(struct virtio_balloon *vb) vb->vdev->config->del_vqs(vb->vdev); } -static void virtballoon_remove(struct virtio_device *vdev) +/* + * Stop all asynchronous balloon work. The device must still be alive so that + * in-flight requests can drain via the host before it is reset or freed. + */ +static void virtballoon_quiesce(struct virtio_balloon *vb) { - struct virtio_balloon *vb = vdev->priv; + struct virtio_device *vdev = vb->vdev; - if (virtio_has_feature(vb->vdev, VIRTIO_BALLOON_F_REPORTING)) + if (virtio_has_feature(vdev, VIRTIO_BALLOON_F_REPORTING)) page_reporting_unregister(&vb->pr_dev_info); - if (virtio_has_feature(vb->vdev, VIRTIO_BALLOON_F_DEFLATE_ON_OOM)) + if (virtio_has_feature(vdev, VIRTIO_BALLOON_F_DEFLATE_ON_OOM)) unregister_oom_notifier(&vb->oom_nb); - if (virtio_has_feature(vb->vdev, VIRTIO_BALLOON_F_FREE_PAGE_HINT)) + if (virtio_has_feature(vdev, VIRTIO_BALLOON_F_FREE_PAGE_HINT)) virtio_balloon_unregister_shrinker(vb); + spin_lock_irq(&vb->stop_update_lock); vb->stop_update = true; spin_unlock_irq(&vb->stop_update_lock); cancel_work_sync(&vb->update_balloon_size_work); cancel_work_sync(&vb->update_balloon_stats_work); - if (virtio_has_feature(vdev, VIRTIO_BALLOON_F_FREE_PAGE_HINT)) { + if (virtio_has_feature(vdev, VIRTIO_BALLOON_F_FREE_PAGE_HINT)) cancel_work_sync(&vb->report_free_page_work); +} + +static void virtballoon_remove(struct virtio_device *vdev) +{ + struct virtio_balloon *vb = vdev->priv; + + virtballoon_quiesce(vb); + + if (virtio_has_feature(vdev, VIRTIO_BALLOON_F_FREE_PAGE_HINT)) destroy_workqueue(vb->balloon_wq); - } remove_common(vb); mutex_destroy(&vb->balloon_lock); -- 2.53.0