Re: [PATCH v9 7/8] virtio-balloon: Pull page poisoning config out of free page hinting
From: Alexander Duyck
Date: Mon Sep 09 2019 - 11:31:53 EST
On Mon, 2019-09-09 at 10:59 +0200, David Hildenbrand wrote:
> On 07.09.19 19:26, Alexander Duyck wrote:
> > From: Alexander Duyck <alexander.h.duyck@xxxxxxxxxxxxxxx>
> >
> > Currently the page poisoning setting wasn't being enabled unless free page
> > hinting was enabled. However we will need the page poisoning tracking logic
> > as well for unused page reporting. As such pull it out and make it a
> > separate bit of config in the probe function.
> >
> > In addition we can actually wrap the code in a check for NO_SANITY. If we
> > don't care what is actually in the page we can just default to 0 and leave
> > it there.
> >
> > Signed-off-by: Alexander Duyck <alexander.h.duyck@xxxxxxxxxxxxxxx>
> > ---
> > drivers/virtio/virtio_balloon.c | 22 +++++++++++++++-------
> > 1 file changed, 15 insertions(+), 7 deletions(-)
> >
> > diff --git a/drivers/virtio/virtio_balloon.c b/drivers/virtio/virtio_balloon.c
> > index 226fbb995fb0..d2547df7de93 100644
> > --- a/drivers/virtio/virtio_balloon.c
> > +++ b/drivers/virtio/virtio_balloon.c
> > @@ -842,7 +842,6 @@ static int virtio_balloon_register_shrinker(struct virtio_balloon *vb)
> > static int virtballoon_probe(struct virtio_device *vdev)
> > {
> > struct virtio_balloon *vb;
> > - __u32 poison_val;
> > int err;
> >
> > if (!vdev->config->get) {
> > @@ -909,11 +908,18 @@ static int virtballoon_probe(struct virtio_device *vdev)
> > VIRTIO_BALLOON_CMD_ID_STOP);
> > spin_lock_init(&vb->free_page_list_lock);
> > INIT_LIST_HEAD(&vb->free_page_list);
> > - if (virtio_has_feature(vdev, VIRTIO_BALLOON_F_PAGE_POISON)) {
> > - memset(&poison_val, PAGE_POISON, sizeof(poison_val));
> > - virtio_cwrite(vb->vdev, struct virtio_balloon_config,
> > - poison_val, &poison_val);
> > - }
> > + }
> > + if (virtio_has_feature(vdev, VIRTIO_BALLOON_F_PAGE_POISON)) {
> > + __u32 poison_val;
> > +
> > + /*
> > + * Let hypervisor know that we are expecting a specific
> > + * value to be written back in unused pages.
> > + */
>
> "Let the hypervisor know" ... ?
>
> > + memset(&poison_val, PAGE_POISON, sizeof(poison_val));
> > +
> > + virtio_cwrite(vb->vdev, struct virtio_balloon_config,
> > + poison_val, &poison_val);
> > }
> > /*
> > * We continue to use VIRTIO_BALLOON_F_DEFLATE_ON_OOM to decide if a
> > @@ -1014,7 +1020,9 @@ static int virtballoon_restore(struct virtio_device *vdev)
> >
> > static int virtballoon_validate(struct virtio_device *vdev)
> > {
> > - if (!page_poisoning_enabled())
> > + /* Notify host if we care about poison value */
>
> "Tell the host whether we care about poisoned pages." ?
>
> > + if (IS_ENABLED(CONFIG_PAGE_POISONING_NO_SANITY) ||
> > + !page_poisoning_enabled())
> > __virtio_clear_bit(vdev, VIRTIO_BALLOON_F_PAGE_POISON);
> >
> > __virtio_clear_bit(vdev, VIRTIO_F_IOMMU_PLATFORM);
> >
>
> Reviewed-by: David Hildenbrand <david@xxxxxxxxxx>
>
Thanks. I will update the comments for v10.
- Alex