mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-01-26 18:43:33 -05:00
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
2 changed files with 13 additions and 0 deletions
|
@ -825,6 +825,7 @@ 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) {
|
||||
|
@ -892,6 +893,11 @@ static int virtballoon_probe(struct virtio_device *vdev)
|
|||
vb->num_free_page_blocks = 0;
|
||||
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);
|
||||
}
|
||||
}
|
||||
/*
|
||||
* 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)
|
||||
{
|
||||
if (!page_poisoning_enabled())
|
||||
__virtio_clear_bit(vdev, VIRTIO_BALLOON_F_PAGE_POISON);
|
||||
|
||||
__virtio_clear_bit(vdev, VIRTIO_F_IOMMU_PLATFORM);
|
||||
return 0;
|
||||
}
|
||||
|
@ -1001,6 +1010,7 @@ static unsigned int features[] = {
|
|||
VIRTIO_BALLOON_F_STATS_VQ,
|
||||
VIRTIO_BALLOON_F_DEFLATE_ON_OOM,
|
||||
VIRTIO_BALLOON_F_FREE_PAGE_HINT,
|
||||
VIRTIO_BALLOON_F_PAGE_POISON,
|
||||
};
|
||||
|
||||
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_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_PAGE_POISON 4 /* Guest is using page poisoning */
|
||||
|
||||
/* Size of a PFN in the balloon interface. */
|
||||
#define VIRTIO_BALLOON_PFN_SHIFT 12
|
||||
|
@ -48,6 +49,8 @@ struct virtio_balloon_config {
|
|||
__u32 actual;
|
||||
/* Free page report command id, readonly by guest */
|
||||
__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 */
|
||||
|
|
Loading…
Add table
Reference in a new issue