Add a module parameter to opt in to the pre-zeroed page optimization. A proper virtio feature flag is needed before this can be merged.
insmod virtio_balloon.ko host_zeroes_pages=1 When host_zeroes_pages is set, callers skip folio_zero_user() for pages that are known to have been zeroed by the host. This is safe on cache-aliasing architectures because the hypervisor invalidates guest cache lines when reclaiming page backing (e.g. MADV_DONTNEED), so no stale cache state exists when the guest re-maps the page. Signed-off-by: Michael S. Tsirkin <[email protected]> Assisted-by: Claude:claude-opus-4-6 Assisted-by: cursor-agent:GPT-5.4-xhigh --- drivers/virtio/virtio_balloon.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/drivers/virtio/virtio_balloon.c b/drivers/virtio/virtio_balloon.c index d1fbc8fe8470..2e524bf6f934 100644 --- a/drivers/virtio/virtio_balloon.c +++ b/drivers/virtio/virtio_balloon.c @@ -19,6 +19,11 @@ #include <linux/mm.h> #include <linux/page_reporting.h> +static bool host_zeroes_pages; +module_param(host_zeroes_pages, bool, 0444); +MODULE_PARM_DESC(host_zeroes_pages, + "Host zeroes reported pages, skip guest re-zeroing"); + /* * Balloon device works in 4K page units. So each page is pointed to by * multiple balloon pages. All memory counters in this driver are in balloon @@ -1039,6 +1044,7 @@ static int virtballoon_probe(struct virtio_device *vdev) vb->pr_dev_info.order = 5; #endif + vb->pr_dev_info.host_zeroes_pages = host_zeroes_pages; err = page_reporting_register(&vb->pr_dev_info); if (err) goto out_unregister_oom; -- MST

