virtio_balloon: transitional interface
Virtio 1.0 doesn't include a modern balloon device. But it's not a big change to support a transitional balloon device: this has the advantage of supporting existing drivers, transparently. Signed-off-by: Michael S. Tsirkin <mst@redhat.com> Acked-by: Cornelia Huck <cornelia.huck@de.ibm.com> Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
This commit is contained in:
		
					parent
					
						
							
								9e1a27ea42
							
						
					
				
			
			
				commit
				
					
						df81b29c7b
					
				
			
		
					 2 changed files with 43 additions and 10 deletions
				
			
		| 
						 | 
				
			
			@ -25,6 +25,7 @@
 | 
			
		|||
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 | 
			
		||||
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 | 
			
		||||
 * SUCH DAMAGE. */
 | 
			
		||||
#include <linux/types.h>
 | 
			
		||||
#include <linux/virtio_ids.h>
 | 
			
		||||
#include <linux/virtio_config.h>
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -38,9 +39,9 @@
 | 
			
		|||
 | 
			
		||||
struct virtio_balloon_config {
 | 
			
		||||
	/* Number of pages host wants Guest to give up. */
 | 
			
		||||
	__le32 num_pages;
 | 
			
		||||
	__u32 num_pages;
 | 
			
		||||
	/* Number of pages we've actually got in balloon. */
 | 
			
		||||
	__le32 actual;
 | 
			
		||||
	__u32 actual;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#define VIRTIO_BALLOON_S_SWAP_IN  0   /* Amount of memory swapped in */
 | 
			
		||||
| 
						 | 
				
			
			@ -51,9 +52,32 @@ struct virtio_balloon_config {
 | 
			
		|||
#define VIRTIO_BALLOON_S_MEMTOT   5   /* Total amount of memory */
 | 
			
		||||
#define VIRTIO_BALLOON_S_NR       6
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Memory statistics structure.
 | 
			
		||||
 * Driver fills an array of these structures and passes to device.
 | 
			
		||||
 *
 | 
			
		||||
 * NOTE: fields are laid out in a way that would make compiler add padding
 | 
			
		||||
 * between and after fields, so we have to use compiler-specific attributes to
 | 
			
		||||
 * pack it, to disable this padding. This also often causes compiler to
 | 
			
		||||
 * generate suboptimal code.
 | 
			
		||||
 *
 | 
			
		||||
 * We maintain this statistics structure format for backwards compatibility,
 | 
			
		||||
 * but don't follow this example.
 | 
			
		||||
 *
 | 
			
		||||
 * If implementing a similar structure, do something like the below instead:
 | 
			
		||||
 *     struct virtio_balloon_stat {
 | 
			
		||||
 *         __virtio16 tag;
 | 
			
		||||
 *         __u8 reserved[6];
 | 
			
		||||
 *         __virtio64 val;
 | 
			
		||||
 *     };
 | 
			
		||||
 *
 | 
			
		||||
 * In other words, add explicit reserved fields to align field and
 | 
			
		||||
 * structure boundaries at field size, avoiding compiler padding
 | 
			
		||||
 * without the packed attribute.
 | 
			
		||||
 */
 | 
			
		||||
struct virtio_balloon_stat {
 | 
			
		||||
	__u16 tag;
 | 
			
		||||
	__u64 val;
 | 
			
		||||
	__virtio16 tag;
 | 
			
		||||
	__virtio64 val;
 | 
			
		||||
} __attribute__((packed));
 | 
			
		||||
 | 
			
		||||
#endif /* _LINUX_VIRTIO_BALLOON_H */
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue