intel_vgt_balloon(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

πŸ’– intel_vgt_balloon β€” kernel API manual, bestie edition πŸ’–

okay so you found the page for intel_vgt_balloon(9), the little icon that balloons out reserved graphics address trunks. sit down, grab a strawberry πŸ“, and let's get into it.


✨ NAME ✨

intel_vgt_balloon β€” balloon out reserved graphics address trunks 🎈

🌸 SYNOPSIS 🌸

int intel_vgt_balloon (struct i915_ggtt *ggtt );

πŸ¦‹ ARGUMENTS πŸ¦‹

  • ggtt β€” the global GGTT from which to reserve. that's it, that's the one. it's the global one, and we're reserving out of it, no cap πŸ’…

πŸ‘‘ DESCRIPTION πŸ‘‘

so this function gets called at the initialization stage, right? its whole job is to balloon out the graphic address space that's been allocated to the other vGPUs, by marking those spaces as reserved. very "this seat's taken" energy πŸŽ€

the ballooning-related knowledge β€” that's the starting address and the size of the mappable/unmappable graphic memory β€” is described in the vgt_if structure in a reserved mmio range. iykyk ✨

to give an example (and bestie, we love an example), the drawing below depicts one typical scenario after ballooning. here vGPU1 has 2 pieces of graphic address spaces ballooned out, each for the mappable and the non-mappable part. from the vGPU1 point of view, the total size is the same as the physical one, with the start address of its graphic space being zero. yet there are some portions ballooned out (the shadow part, which are marked as reserved by drm allocator β€” literally fenced off πŸ™ˆ). from the host point of view, the graphic address space is partitioned by multiple vGPUs in different VMs. it's giving subdivided apartment block 🏒:

                               vGPU1 view         Host view
                    0 ------> +-----------+     +-----------+
                      ^       |###########|     |   vGPU3   |
                      |       |###########|     +-----------+
                      |       |###########|     |   vGPU2   |
                      |       +-----------+     +-----------+
               mappable GM    | available | ==> |   vGPU1   |
                      |       +-----------+     +-----------+
                      |       |###########|     |           |
                      v       |###########|     |   Host    |
                      +=======+===========+     +===========+
                      ^       |###########|     |   vGPU3   |
                      |       |###########|     +-----------+
                      |       |###########|     |   vGPU2   |
                      |       +-----------+     +-----------+
             unmappable GM    | available | ==> |   vGPU1   |
                      |       +-----------+     +-----------+
                      |       |###########|     |           |
                      |       |###########|     |   Host    |
                      v       |###########|     |           |
        total GM size ------> +-----------+     +-----------+

the # blocks? those are the ballooned-out, reserved, not-yours parts. the "available" bits? those are the moment. main character energy 🌈

πŸ”₯ RETURN πŸ”₯

  • zero on success 🫢
  • non-zero if the configuration is invalid or if ballooning failed πŸ’€ (yeah, it can fail β€” vibe check accordingly)

πŸ’œ SEE ALSO πŸ’œ

pro tip from your girl: intel_vgt_deballoon(9) is right there in SEE ALSO, so if you ballooned it out you already know where to go to put it back. deflate responsibly πŸŽˆπŸ’¨

and that's the whole page, bestie! source path ./drivers/gpu/drm/i915, dated October 2026 β€” so like, future-vibes but make it kernel. go forth and reserve those trunks πŸ§šβ€β™€οΈβœ¨πŸ’–

πŸ“¦ where this page comes from