virtio-balloon: VIRTIO_BALLOON_F_PAGE_POISON
The VIRTIO_BALLOON_F_PAGE_POISON feature bit is used to indicate if the guest is using page poisoning. Guest writes to the poison_val config field to tell host about the page poisoning value that is in use. Suggested-by: Michael S. Tsirkin <mst@redhat.com> Signed-off-by: Wei Wang <wei.w.wang@intel.com> Cc: Michael S. Tsirkin <mst@redhat.com> Cc: Michal Hocko <mhocko@suse.com> Cc: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
This commit is contained in:
parent
d95f58f4a6
commit
2e991629bc
|
@ -825,6 +825,7 @@ static int virtio_balloon_register_shrinker(struct virtio_balloon *vb)
|
||||||
static int virtballoon_probe(struct virtio_device *vdev)
|
static int virtballoon_probe(struct virtio_device *vdev)
|
||||||
{
|
{
|
||||||
struct virtio_balloon *vb;
|
struct virtio_balloon *vb;
|
||||||
|
__u32 poison_val;
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
if (!vdev->config->get) {
|
if (!vdev->config->get) {
|
||||||
|
@ -892,6 +893,11 @@ static int virtballoon_probe(struct virtio_device *vdev)
|
||||||
vb->num_free_page_blocks = 0;
|
vb->num_free_page_blocks = 0;
|
||||||
spin_lock_init(&vb->free_page_list_lock);
|
spin_lock_init(&vb->free_page_list_lock);
|
||||||
INIT_LIST_HEAD(&vb->free_page_list);
|
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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
/*
|
/*
|
||||||
* We continue to use VIRTIO_BALLOON_F_DEFLATE_ON_OOM to decide if a
|
* We continue to use VIRTIO_BALLOON_F_DEFLATE_ON_OOM to decide if a
|
||||||
|
@ -992,6 +998,9 @@ static int virtballoon_restore(struct virtio_device *vdev)
|
||||||
|
|
||||||
static int virtballoon_validate(struct virtio_device *vdev)
|
static int virtballoon_validate(struct virtio_device *vdev)
|
||||||
{
|
{
|
||||||
|
if (!page_poisoning_enabled())
|
||||||
|
__virtio_clear_bit(vdev, VIRTIO_BALLOON_F_PAGE_POISON);
|
||||||
|
|
||||||
__virtio_clear_bit(vdev, VIRTIO_F_IOMMU_PLATFORM);
|
__virtio_clear_bit(vdev, VIRTIO_F_IOMMU_PLATFORM);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -1001,6 +1010,7 @@ static unsigned int features[] = {
|
||||||
VIRTIO_BALLOON_F_STATS_VQ,
|
VIRTIO_BALLOON_F_STATS_VQ,
|
||||||
VIRTIO_BALLOON_F_DEFLATE_ON_OOM,
|
VIRTIO_BALLOON_F_DEFLATE_ON_OOM,
|
||||||
VIRTIO_BALLOON_F_FREE_PAGE_HINT,
|
VIRTIO_BALLOON_F_FREE_PAGE_HINT,
|
||||||
|
VIRTIO_BALLOON_F_PAGE_POISON,
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct virtio_driver virtio_balloon_driver = {
|
static struct virtio_driver virtio_balloon_driver = {
|
||||||
|
|
|
@ -35,6 +35,7 @@
|
||||||
#define VIRTIO_BALLOON_F_STATS_VQ 1 /* Memory Stats virtqueue */
|
#define VIRTIO_BALLOON_F_STATS_VQ 1 /* Memory Stats virtqueue */
|
||||||
#define VIRTIO_BALLOON_F_DEFLATE_ON_OOM 2 /* Deflate balloon on OOM */
|
#define VIRTIO_BALLOON_F_DEFLATE_ON_OOM 2 /* Deflate balloon on OOM */
|
||||||
#define VIRTIO_BALLOON_F_FREE_PAGE_HINT 3 /* VQ to report free pages */
|
#define VIRTIO_BALLOON_F_FREE_PAGE_HINT 3 /* VQ to report free pages */
|
||||||
|
#define VIRTIO_BALLOON_F_PAGE_POISON 4 /* Guest is using page poisoning */
|
||||||
|
|
||||||
/* Size of a PFN in the balloon interface. */
|
/* Size of a PFN in the balloon interface. */
|
||||||
#define VIRTIO_BALLOON_PFN_SHIFT 12
|
#define VIRTIO_BALLOON_PFN_SHIFT 12
|
||||||
|
@ -48,6 +49,8 @@ struct virtio_balloon_config {
|
||||||
__u32 actual;
|
__u32 actual;
|
||||||
/* Free page report command id, readonly by guest */
|
/* Free page report command id, readonly by guest */
|
||||||
__u32 free_page_report_cmd_id;
|
__u32 free_page_report_cmd_id;
|
||||||
|
/* Stores PAGE_POISON if page poisoning is in use */
|
||||||
|
__u32 poison_val;
|
||||||
};
|
};
|
||||||
|
|
||||||
#define VIRTIO_BALLOON_S_SWAP_IN 0 /* Amount of memory swapped in */
|
#define VIRTIO_BALLOON_S_SWAP_IN 0 /* Amount of memory swapped in */
|
||||||
|
|
Loading…
Reference in New Issue