Hello,

On 22.09.22 20:45, Konstantin Khorenko wrote:
On 05.09.2022 16:01, Konstantin Khorenko wrote:

+static int virtio_balloon_debug_show(struct seq_file *f, void *offset)
+{
+    struct virtio_balloon *vb = f->private;
+    u64 inflated_kb = vb->num_pages << (VIRTIO_BALLOON_PFN_SHIFT - 10);

/*
   * Balloon device works in 4K page units.  So each page is pointed to by    * multiple balloon pages.  All memory counters in this driver are in balloon
   * page units.
   */
#define VIRTIO_BALLOON_PAGES_PER_PAGE (unsigned)(PAGE_SIZE >> VIRTIO_BALLOON_PFN_SHIFT)

/* Size of a PFN in the balloon interface. */
#define VIRTIO_BALLOON_PFN_SHIFT 12

Taking into account defines above, i think the proper code should be:
    /* "+2" here because we want the value in kilobytes */
    u64 inflated_kb = vb->num_pages << (PAGE_SHIFT - VIRTIO_BALLOON_PFN_SHIFT + 2);

As it's said VIRTIO_BALLOON_PAGE cannot be larger than PAGE_SIZE,
so if we imagine VIRTIO_BALLOON_PFN_SHIFT is defined to, say, 10, the original code
"<< (VIRTIO_BALLOON_PFN_SHIFT - 10)" will definitely work wrong.

And please, address this comment as well.

num_pages is accounted in balloon pages, so to make the calculation we use only the VIRTIO_BALLOON_PFN_SHIFT.

So it is num_pages << (CONVERT TO BYTES - CONVERT TO KILO BYTES).

Using PAGE_SHIFT will be:
12 - 12 + 2 will do the same but if at some point they start to differ the calculation will go wrong because it is mixing units - host vs ballon page shifts.


--
Regards,
Alexander Atanasov

_______________________________________________
Devel mailing list
Devel@openvz.org
https://lists.openvz.org/mailman/listinfo/devel

Reply via email to