[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20191213020316-mutt-send-email-mst@kernel.org>
Date: Fri, 13 Dec 2019 02:03:34 -0500
From: "Michael S. Tsirkin" <mst@...hat.com>
To: Alexander Duyck <alexander.duyck@...il.com>
Cc: kvm@...r.kernel.org, linux-kernel@...r.kernel.org,
willy@...radead.org, mhocko@...nel.org, linux-mm@...ck.org,
akpm@...ux-foundation.org, mgorman@...hsingularity.net,
vbabka@...e.cz, yang.zhang.wz@...il.com, nitesh@...hat.com,
konrad.wilk@...cle.com, david@...hat.com, pagupta@...hat.com,
riel@...riel.com, lcapitulino@...hat.com, dave.hansen@...el.com,
wei.w.wang@...el.com, aarcange@...hat.com, pbonzini@...hat.com,
dan.j.williams@...el.com, alexander.h.duyck@...ux.intel.com,
osalvador@...e.de
Subject: Re: [PATCH v15 5/7] virtio-balloon: Pull page poisoning config out
of free page hinting
On Thu, Dec 05, 2019 at 08:22:47AM -0800, Alexander Duyck wrote:
> From: Alexander Duyck <alexander.h.duyck@...ux.intel.com>
>
> 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 free page reporting. As such pull it out and make it a separate
> bit of config in the probe function.
>
> In addition we need to add support for the more recent init_on_free feature
> which expects a behavior similar to page poisoning in that we expect the
> page to be pre-zeroed.
>
> Reviewed-by: David Hildenbrand <david@...hat.com>
> Signed-off-by: Alexander Duyck <alexander.h.duyck@...ux.intel.com>
Acked-by: Michael S. Tsirkin <mst@...hat.com>
> ---
> drivers/virtio/virtio_balloon.c | 23 +++++++++++++++++------
> 1 file changed, 17 insertions(+), 6 deletions(-)
>
> diff --git a/drivers/virtio/virtio_balloon.c b/drivers/virtio/virtio_balloon.c
> index 15b7f1d8c334..252591bc7e01 100644
> --- a/drivers/virtio/virtio_balloon.c
> +++ b/drivers/virtio/virtio_balloon.c
> @@ -849,7 +849,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) {
> @@ -916,11 +915,20 @@ 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)) {
> + }
> + if (virtio_has_feature(vdev, VIRTIO_BALLOON_F_PAGE_POISON)) {
> + /* Start with poison val of 0 representing general init */
> + __u32 poison_val = 0;
> +
> + /*
> + * Let the hypervisor know that we are expecting a
> + * specific value to be written back in balloon pages.
> + */
> + if (!want_init_on_free())
> memset(&poison_val, PAGE_POISON, sizeof(poison_val));
> - virtio_cwrite(vb->vdev, struct virtio_balloon_config,
> - poison_val, &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
> @@ -1021,7 +1029,10 @@ static int virtballoon_restore(struct virtio_device *vdev)
>
> static int virtballoon_validate(struct virtio_device *vdev)
> {
> - if (!page_poisoning_enabled())
> + /* Tell the host whether we care about poisoned pages. */
> + if (!want_init_on_free() &&
> + (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);
Powered by blists - more mailing lists