Skip to content
Snippets Groups Projects
Commit b1506d22 authored by Wei Wang's avatar Wei Wang Committed by Michael S. Tsirkin
Browse files

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 in use.

Signed-off-by: default avatarWei Wang <wei.w.wang@intel.com>
Suggested-by: default avatarMichael S. Tsirkin <mst@redhat.com>
Cc: Michael S. Tsirkin <mst@redhat.com>
Cc: Michal Hocko <mhocko@suse.com>
Cc: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarMichael S. Tsirkin <mst@redhat.com>
parent 39dda390
Branches
No related tags found
No related merge requests found
...@@ -736,6 +736,7 @@ static struct file_system_type balloon_fs = { ...@@ -736,6 +736,7 @@ static struct file_system_type balloon_fs = {
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) {
...@@ -781,6 +782,11 @@ static int virtballoon_probe(struct virtio_device *vdev) ...@@ -781,6 +782,11 @@ static int virtballoon_probe(struct virtio_device *vdev)
vb->stop_cmd_id = cpu_to_virtio32(vb->vdev, vb->stop_cmd_id = cpu_to_virtio32(vb->vdev,
VIRTIO_BALLOON_FREE_PAGE_REPORT_STOP_ID); VIRTIO_BALLOON_FREE_PAGE_REPORT_STOP_ID);
INIT_WORK(&vb->report_free_page_work, report_free_page_func); INIT_WORK(&vb->report_free_page_work, report_free_page_func);
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);
}
} }
vb->nb.notifier_call = virtballoon_oom_notify; vb->nb.notifier_call = virtballoon_oom_notify;
...@@ -899,6 +905,9 @@ static int virtballoon_restore(struct virtio_device *vdev) ...@@ -899,6 +905,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;
} }
...@@ -908,6 +917,7 @@ static unsigned int features[] = { ...@@ -908,6 +917,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 @@ ...@@ -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
...@@ -47,6 +48,8 @@ struct virtio_balloon_config { ...@@ -47,6 +48,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 */
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment