Some drivers might require page sized chunks to be reported. This patch allows registering a driver with order as zero. Example use case: virtio-balloon driver running on a guest with very small memory. After some time has passed, the guest might not be able to find a chunk of 8KB. Signed-off-by: Yuvraj Sakshith --- mm/page_reporting.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mm/page_reporting.c b/mm/page_reporting.c index e4c428e61..fd7c5f0de 100644 --- a/mm/page_reporting.c +++ b/mm/page_reporting.c @@ -370,7 +370,7 @@ int page_reporting_register(struct page_reporting_dev_info *prdev) */ if (page_reporting_order == -1) { - if (prdev->order > 0 && prdev->order <= MAX_PAGE_ORDER) + if (prdev->order >= 0 && prdev->order <= MAX_PAGE_ORDER) page_reporting_order = prdev->order; else page_reporting_order = pageblock_order; -- 2.34.1 page_reporting_order used to fall back to default value (passed as parameter or MAX_PAGE_ORDER) if the driver wishes to not provide it. The way the driver used to do this was by passing the order as zero. Now that zero is a valid order that can be passed by a driver to page reporting, we use -1 to signal default value to be used. Signed-off-by: Yuvraj Sakshith --- drivers/hv/hv_balloon.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/hv/hv_balloon.c b/drivers/hv/hv_balloon.c index 2b4080e51..e33d6e3b2 100644 --- a/drivers/hv/hv_balloon.c +++ b/drivers/hv/hv_balloon.c @@ -1663,7 +1663,7 @@ static void enable_page_reporting(void) * We let the page_reporting_order parameter decide the order * in the page_reporting code */ - dm_device.pr_dev_info.order = 0; + dm_device.pr_dev_info.order = -1; ret = page_reporting_register(&dm_device.pr_dev_info); if (ret < 0) { dm_device.pr_dev_info.report = NULL; -- 2.34.1 Drivers registering with page reporting used zero as a way to signal page_reporting_order to be set as a default value (either passed as a param or MAX_PAGE_ORDER). Since page_reporting_order can now have zero as valid order, default fallback value send by drivers to page reporting is now -1. Signed-off-by: Yuvraj Sakshith --- drivers/virtio/virtio_balloon.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/drivers/virtio/virtio_balloon.c b/drivers/virtio/virtio_balloon.c index 74fe59f5a..3cc3dc28a 100644 --- a/drivers/virtio/virtio_balloon.c +++ b/drivers/virtio/virtio_balloon.c @@ -1044,6 +1044,20 @@ static int virtballoon_probe(struct virtio_device *vdev) goto out_unregister_oom; } + /* + * page_reporting_register() takes the order either + * from the driver or the commandline. If neither + * are provided, it falls back to MAX_PAGE_ORDER. + * + * Order given by the driver is required to be in the + * range [0, MAX_PAGE_ORDER]. + * + * One way for the driver to not provide any order + * is by setting it to -1. + */ + + vb->pr_dev_info.order = -1; + /* * The default page reporting order is @pageblock_order, which * corresponds to 512MB in size on ARM64 when 64KB base page -- 2.34.1