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