virtualization.lists.linux-foundation.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 1/1] virtio_balloon: do not set pr_dev_info.report unconditionally
@ 2025-12-09 21:23 Dongli Zhang
  2025-12-10  8:09 ` David Hildenbrand (Red Hat)
  0 siblings, 1 reply; 5+ messages in thread
From: Dongli Zhang @ 2025-12-09 21:23 UTC (permalink / raw)
  To: virtualization; +Cc: david, jasowang, xuanzhuo, eperezma, linux-kernel

Do not set vb->pr_dev_info.report unconditionally if
VIRTIO_BALLOON_F_REPORTING is not available.

Signed-off-by: Dongli Zhang <dongli.zhang@oracle.com>
---
 drivers/virtio/virtio_balloon.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/drivers/virtio/virtio_balloon.c b/drivers/virtio/virtio_balloon.c
index 74fe59f5a78c..0c39f2415324 100644
--- a/drivers/virtio/virtio_balloon.c
+++ b/drivers/virtio/virtio_balloon.c
@@ -1034,7 +1034,6 @@ static int virtballoon_probe(struct virtio_device *vdev)
 				 poison_val, &poison_val);
 	}
 
-	vb->pr_dev_info.report = virtballoon_free_page_report;
 	if (virtio_has_feature(vb->vdev, VIRTIO_BALLOON_F_REPORTING)) {
 		unsigned int capacity;
 
@@ -1044,6 +1043,8 @@ static int virtballoon_probe(struct virtio_device *vdev)
 			goto out_unregister_oom;
 		}
 
+		vb->pr_dev_info.report = virtballoon_free_page_report;
+
 		/*
 		 * The default page reporting order is @pageblock_order, which
 		 * corresponds to 512MB in size on ARM64 when 64KB base page
-- 
2.39.3


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [PATCH 1/1] virtio_balloon: do not set pr_dev_info.report unconditionally
  2025-12-09 21:23 [PATCH 1/1] virtio_balloon: do not set pr_dev_info.report unconditionally Dongli Zhang
@ 2025-12-10  8:09 ` David Hildenbrand (Red Hat)
  2025-12-10 19:10   ` Dongli Zhang
  0 siblings, 1 reply; 5+ messages in thread
From: David Hildenbrand (Red Hat) @ 2025-12-10  8:09 UTC (permalink / raw)
  To: Dongli Zhang, virtualization; +Cc: jasowang, xuanzhuo, eperezma, linux-kernel

On 12/9/25 22:23, Dongli Zhang wrote:
> Do not set vb->pr_dev_info.report unconditionally if
> VIRTIO_BALLOON_F_REPORTING is not available.

Can you share with us why you think that should be done? Please document 
the "why" and not only the "what".

Without VIRTIO_BALLOON_F_REPORTING, we'll never call 
page_reporting_register(), so it will never be used.

But the compiler cannot optimize it out. It only happens during driver 
loading, so I am not sure it is worth the churn?

> 
> Signed-off-by: Dongli Zhang <dongli.zhang@oracle.com>
> ---
>   drivers/virtio/virtio_balloon.c | 3 ++-
>   1 file changed, 2 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/virtio/virtio_balloon.c b/drivers/virtio/virtio_balloon.c
> index 74fe59f5a78c..0c39f2415324 100644
> --- a/drivers/virtio/virtio_balloon.c
> +++ b/drivers/virtio/virtio_balloon.c
> @@ -1034,7 +1034,6 @@ static int virtballoon_probe(struct virtio_device *vdev)
>   				 poison_val, &poison_val);
>   	}
>   
> -	vb->pr_dev_info.report = virtballoon_free_page_report;
>   	if (virtio_has_feature(vb->vdev, VIRTIO_BALLOON_F_REPORTING)) {
>   		unsigned int capacity;
>   
> @@ -1044,6 +1043,8 @@ static int virtballoon_probe(struct virtio_device *vdev)
>   			goto out_unregister_oom;
>   		}
>   
> +		vb->pr_dev_info.report = virtballoon_free_page_report;
> +
>   		/*
>   		 * The default page reporting order is @pageblock_order, which
>   		 * corresponds to 512MB in size on ARM64 when 64KB base page


-- 
Cheers

David

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH 1/1] virtio_balloon: do not set pr_dev_info.report unconditionally
  2025-12-10  8:09 ` David Hildenbrand (Red Hat)
@ 2025-12-10 19:10   ` Dongli Zhang
  2025-12-17  4:52     ` Michael Kelley
  0 siblings, 1 reply; 5+ messages in thread
From: Dongli Zhang @ 2025-12-10 19:10 UTC (permalink / raw)
  To: David Hildenbrand (Red Hat), virtualization
  Cc: jasowang, xuanzhuo, eperezma, linux-kernel

Hi David,

On 12/10/25 12:09 AM, David Hildenbrand (Red Hat) wrote:
> On 12/9/25 22:23, Dongli Zhang wrote:
>> Do not set vb->pr_dev_info.report unconditionally if
>> VIRTIO_BALLOON_F_REPORTING is not available.
> 
> Can you share with us why you think that should be done? Please document the
> "why" and not only the "what".
> 
> Without VIRTIO_BALLOON_F_REPORTING, we'll never call page_reporting_register(),
> so it will never be used.
> 
> But the compiler cannot optimize it out. It only happens during driver loading,
> so I am not sure it is worth the churn?

When I was reading about the free-page reporting feature in virtio-balloon, I
was confused as to why pr_dev_info.report was always configured unconditionally.

Later, I looked at the implementation in the Hyper-V balloon driver and noticed
that it even resets pr_dev_info.report back to NULL if page_reporting_register()
fails (see line 1669).

1651 static void enable_page_reporting(void)
1652 {
1653         int ret;
1654
1655         if (!hv_query_ext_cap(HV_EXT_CAPABILITY_MEMORY_COLD_DISCARD_HINT)) {
1656                 pr_debug("Cold memory discard hint not supported by
Hyper-V\n");
1657                 return;
1658         }
1659
1660         BUILD_BUG_ON(PAGE_REPORTING_CAPACITY >
HV_MEMORY_HINT_MAX_GPA_PAGE_RANGES);
1661         dm_device.pr_dev_info.report = hv_free_page_report;
1662         /*
1663          * We let the page_reporting_order parameter decide the order
1664          * in the page_reporting code
1665          */
1666         dm_device.pr_dev_info.order = 0;
1667         ret = page_reporting_register(&dm_device.pr_dev_info);
1668         if (ret < 0) {
1669                 dm_device.pr_dev_info.report = NULL;
1670                 pr_err("Failed to enable cold memory discard: %d\n", ret);
1671         } else {
1672                 pr_info("Cold memory discard hint enabled with order %d\n",
1673                         page_reporting_order);
1674         }
1675 }

That's why I'd like to move the configuration of pr_dev_info.report inside the
if statement.

It's a purely non-functional change, intended only to make the initialization
look cleaner.

Apologies - I should have mentioned that this is a non-functional change in the
commit message.

Thank you very much!

Dongli Zhang



> 
>>
>> Signed-off-by: Dongli Zhang <dongli.zhang@oracle.com>
>> ---
>>   drivers/virtio/virtio_balloon.c | 3 ++-
>>   1 file changed, 2 insertions(+), 1 deletion(-)
>>
>> diff --git a/drivers/virtio/virtio_balloon.c b/drivers/virtio/virtio_balloon.c
>> index 74fe59f5a78c..0c39f2415324 100644
>> --- a/drivers/virtio/virtio_balloon.c
>> +++ b/drivers/virtio/virtio_balloon.c
>> @@ -1034,7 +1034,6 @@ static int virtballoon_probe(struct virtio_device *vdev)
>>                    poison_val, &poison_val);
>>       }
>>   -    vb->pr_dev_info.report = virtballoon_free_page_report;
>>       if (virtio_has_feature(vb->vdev, VIRTIO_BALLOON_F_REPORTING)) {
>>           unsigned int capacity;
>>   @@ -1044,6 +1043,8 @@ static int virtballoon_probe(struct virtio_device *vdev)
>>               goto out_unregister_oom;
>>           }
>>   +        vb->pr_dev_info.report = virtballoon_free_page_report;
>> +
>>           /*
>>            * The default page reporting order is @pageblock_order, which
>>            * corresponds to 512MB in size on ARM64 when 64KB base page
> 
> 


^ permalink raw reply	[flat|nested] 5+ messages in thread

* RE: [PATCH 1/1] virtio_balloon: do not set pr_dev_info.report unconditionally
  2025-12-10 19:10   ` Dongli Zhang
@ 2025-12-17  4:52     ` Michael Kelley
  2025-12-18  8:34       ` David Hildenbrand (Red Hat)
  0 siblings, 1 reply; 5+ messages in thread
From: Michael Kelley @ 2025-12-17  4:52 UTC (permalink / raw)
  To: Dongli Zhang, David Hildenbrand (Red Hat),
	virtualization@lists.linux.dev
  Cc: jasowang@redhat.com, xuanzhuo@linux.alibaba.com,
	eperezma@redhat.com, linux-kernel@vger.kernel.org

From: Dongli Zhang <dongli.zhang@oracle.com> Sent: Wednesday, December 10, 2025 11:10 AM
> 
> Hi David,
> 
> On 12/10/25 12:09 AM, David Hildenbrand (Red Hat) wrote:
> > On 12/9/25 22:23, Dongli Zhang wrote:
> >> Do not set vb->pr_dev_info.report unconditionally if
> >> VIRTIO_BALLOON_F_REPORTING is not available.
> >
> > Can you share with us why you think that should be done? Please document the
> > "why" and not only the "what".
> >
> > Without VIRTIO_BALLOON_F_REPORTING, we'll never call page_reporting_register(),
> > so it will never be used.
> >
> > But the compiler cannot optimize it out. It only happens during driver loading,
> > so I am not sure it is worth the churn?
> 
> When I was reading about the free-page reporting feature in virtio-balloon, I
> was confused as to why pr_dev_info.report was always configured unconditionally.
> 
> Later, I looked at the implementation in the Hyper-V balloon driver and noticed
> that it even resets pr_dev_info.report back to NULL if page_reporting_register()
> fails (see line 1669).

The Hyper-V balloon driver does this because it uses the NULL in pr_dev_info.report
to indicate if page_reporting_unregister() should be called when the driver exits.
See disable_page_reporting(). Unlike the virtio balloon driver, the Hyper-V
balloon_probe() function succeeds even if page_reporting_register() fails, so
some indicator is needed on exit.  I didn't look super carefully, but it appears the
virtio balloon driver doesn't need such an indicator.

That said, I don't have opinion on the tradeoffs of this proposed change.

Michael

> 
> 1651 static void enable_page_reporting(void)
> 1652 {
> 1653         int ret;
> 1654
> 1655         if
> (!hv_query_ext_cap(HV_EXT_CAPABILITY_MEMORY_COLD_DISCARD_HINT)) {
> 1656                 pr_debug("Cold memory discard hint not supported by
> Hyper-V\n");
> 1657                 return;
> 1658         }
> 1659
> 1660         BUILD_BUG_ON(PAGE_REPORTING_CAPACITY >
> HV_MEMORY_HINT_MAX_GPA_PAGE_RANGES);
> 1661         dm_device.pr_dev_info.report = hv_free_page_report;
> 1662         /*
> 1663          * We let the page_reporting_order parameter decide the order
> 1664          * in the page_reporting code
> 1665          */
> 1666         dm_device.pr_dev_info.order = 0;
> 1667         ret = page_reporting_register(&dm_device.pr_dev_info);
> 1668         if (ret < 0) {
> 1669                 dm_device.pr_dev_info.report = NULL;
> 1670                 pr_err("Failed to enable cold memory discard: %d\n", ret);
> 1671         } else {
> 1672                 pr_info("Cold memory discard hint enabled with order %d\n",
> 1673                         page_reporting_order);
> 1674         }
> 1675 }
> 
> That's why I'd like to move the configuration of pr_dev_info.report inside the
> if statement.
> 
> It's a purely non-functional change, intended only to make the initialization
> look cleaner.
> 
> Apologies - I should have mentioned that this is a non-functional change in the
> commit message.
> 
> Thank you very much!
> 
> Dongli Zhang
> 
> 
> 
> >
> >>
> >> Signed-off-by: Dongli Zhang <dongli.zhang@oracle.com>
> >> ---
> >>   drivers/virtio/virtio_balloon.c | 3 ++-
> >>   1 file changed, 2 insertions(+), 1 deletion(-)
> >>
> >> diff --git a/drivers/virtio/virtio_balloon.c b/drivers/virtio/virtio_balloon.c
> >> index 74fe59f5a78c..0c39f2415324 100644
> >> --- a/drivers/virtio/virtio_balloon.c
> >> +++ b/drivers/virtio/virtio_balloon.c
> >> @@ -1034,7 +1034,6 @@ static int virtballoon_probe(struct virtio_device *vdev)
> >>                    poison_val, &poison_val);
> >>       }
> >>   -    vb->pr_dev_info.report = virtballoon_free_page_report;
> >>       if (virtio_has_feature(vb->vdev, VIRTIO_BALLOON_F_REPORTING)) {
> >>           unsigned int capacity;
> >>   @@ -1044,6 +1043,8 @@ static int virtballoon_probe(struct virtio_device *vdev)
> >>               goto out_unregister_oom;
> >>           }
> >>   +        vb->pr_dev_info.report = virtballoon_free_page_report;
> >> +
> >>           /*
> >>            * The default page reporting order is @pageblock_order, which
> >>            * corresponds to 512MB in size on ARM64 when 64KB base page
> >
> >
> 


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH 1/1] virtio_balloon: do not set pr_dev_info.report unconditionally
  2025-12-17  4:52     ` Michael Kelley
@ 2025-12-18  8:34       ` David Hildenbrand (Red Hat)
  0 siblings, 0 replies; 5+ messages in thread
From: David Hildenbrand (Red Hat) @ 2025-12-18  8:34 UTC (permalink / raw)
  To: Michael Kelley, Dongli Zhang, virtualization@lists.linux.dev
  Cc: jasowang@redhat.com, xuanzhuo@linux.alibaba.com,
	eperezma@redhat.com, linux-kernel@vger.kernel.org

On 12/17/25 05:52, Michael Kelley wrote:
> From: Dongli Zhang <dongli.zhang@oracle.com> Sent: Wednesday, December 10, 2025 11:10 AM
>>
>> Hi David,
>>
>> On 12/10/25 12:09 AM, David Hildenbrand (Red Hat) wrote:
>>> On 12/9/25 22:23, Dongli Zhang wrote:
>>>> Do not set vb->pr_dev_info.report unconditionally if
>>>> VIRTIO_BALLOON_F_REPORTING is not available.
>>>
>>> Can you share with us why you think that should be done? Please document the
>>> "why" and not only the "what".
>>>
>>> Without VIRTIO_BALLOON_F_REPORTING, we'll never call page_reporting_register(),
>>> so it will never be used.
>>>
>>> But the compiler cannot optimize it out. It only happens during driver loading,
>>> so I am not sure it is worth the churn?
>>
>> When I was reading about the free-page reporting feature in virtio-balloon, I
>> was confused as to why pr_dev_info.report was always configured unconditionally.
>>
>> Later, I looked at the implementation in the Hyper-V balloon driver and noticed
>> that it even resets pr_dev_info.report back to NULL if page_reporting_register()
>> fails (see line 1669).
> 
> The Hyper-V balloon driver does this because it uses the NULL in pr_dev_info.report
> to indicate if page_reporting_unregister() should be called when the driver exits.
> See disable_page_reporting(). Unlike the virtio balloon driver, the Hyper-V
> balloon_probe() function succeeds even if page_reporting_register() fails, so
> some indicator is needed on exit.  I didn't look super carefully, but it appears the
> virtio balloon driver doesn't need such an indicator.

Nothing is broken AFAIKT.

The patch description should be updated to reflect why we would want to 
do that given that nothing is broken.

No strong opinion on the patch with an updated patch description from my 
side.

-- 
Cheers

David

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2025-12-18  8:34 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-12-09 21:23 [PATCH 1/1] virtio_balloon: do not set pr_dev_info.report unconditionally Dongli Zhang
2025-12-10  8:09 ` David Hildenbrand (Red Hat)
2025-12-10 19:10   ` Dongli Zhang
2025-12-17  4:52     ` Michael Kelley
2025-12-18  8:34       ` David Hildenbrand (Red Hat)

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).