On Wed, Sep 03, 2025 at 11:59:21AM -0700, Vishal Moola (Oracle) wrote: > free_pages() should be used when we only have a virtual address. We > should call __free_pages() directly on our page instead. > > Signed-off-by: Vishal Moola (Oracle) <vishal.moola@xxxxxxxxx> Acked-by: Michael S. Tsirkin <mst@xxxxxxxxxx> > --- > drivers/virtio/virtio_balloon.c | 8 +++----- > 1 file changed, 3 insertions(+), 5 deletions(-) > > diff --git a/drivers/virtio/virtio_balloon.c b/drivers/virtio/virtio_balloon.c > index eae65136cdfb..7f3fd72678eb 100644 > --- a/drivers/virtio/virtio_balloon.c > +++ b/drivers/virtio/virtio_balloon.c > @@ -488,8 +488,7 @@ static unsigned long return_free_pages_to_mm(struct virtio_balloon *vb, > page = balloon_page_pop(&vb->free_page_list); > if (!page) > break; > - free_pages((unsigned long)page_address(page), > - VIRTIO_BALLOON_HINT_BLOCK_ORDER); > + __free_pages(page, VIRTIO_BALLOON_HINT_BLOCK_ORDER); > } > vb->num_free_page_blocks -= num_returned; > spin_unlock_irq(&vb->free_page_list_lock); > @@ -719,8 +718,7 @@ static int get_free_page_and_send(struct virtio_balloon *vb) > if (vq->num_free > 1) { > err = virtqueue_add_inbuf(vq, &sg, 1, p, GFP_KERNEL); > if (unlikely(err)) { > - free_pages((unsigned long)p, > - VIRTIO_BALLOON_HINT_BLOCK_ORDER); > + __free_pages(page, VIRTIO_BALLOON_HINT_BLOCK_ORDER); > return err; > } > virtqueue_kick(vq); > @@ -733,7 +731,7 @@ static int get_free_page_and_send(struct virtio_balloon *vb) > * The vq has no available entry to add this page block, so > * just free it. > */ > - free_pages((unsigned long)p, VIRTIO_BALLOON_HINT_BLOCK_ORDER); > + __free_pages(page, VIRTIO_BALLOON_HINT_BLOCK_ORDER); > } > > return 0; > -- > 2.51.0