virtio-blk: add topology support
Export all topology information in the block config structure, guarded by a new VIRTIO_BLK_F_TOPOLOGY feature flag. Signed-off-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
This commit is contained in:
		
							parent
							
								
									428c149b0b
								
							
						
					
					
						commit
						9752c371a2
					
				| @ -26,6 +26,7 @@ typedef struct VirtIOBlock | ||||
|     VirtQueue *vq; | ||||
|     void *rq; | ||||
|     QEMUBH *bh; | ||||
|     BlockConf *conf; | ||||
| } VirtIOBlock; | ||||
| 
 | ||||
| static VirtIOBlock *to_virtio_blk(VirtIODevice *vdev) | ||||
| @ -405,6 +406,10 @@ static void virtio_blk_update_config(VirtIODevice *vdev, uint8_t *config) | ||||
|     blkcfg.heads = heads; | ||||
|     blkcfg.sectors = secs; | ||||
|     blkcfg.size_max = 0; | ||||
|     blkcfg.physical_block_exp = get_physical_block_exp(s->conf); | ||||
|     blkcfg.alignment_offset = 0; | ||||
|     blkcfg.min_io_size = s->conf->min_io_size / 512; | ||||
|     blkcfg.opt_io_size = s->conf->opt_io_size / 512; | ||||
|     memcpy(config, &blkcfg, sizeof(struct virtio_blk_config)); | ||||
| } | ||||
| 
 | ||||
| @ -414,6 +419,7 @@ static uint32_t virtio_blk_get_features(VirtIODevice *vdev, uint32_t features) | ||||
| 
 | ||||
|     features |= (1 << VIRTIO_BLK_F_SEG_MAX); | ||||
|     features |= (1 << VIRTIO_BLK_F_GEOMETRY); | ||||
|     features |= (1 << VIRTIO_BLK_F_TOPOLOGY); | ||||
| 
 | ||||
|     if (bdrv_enable_write_cache(s->bs)) | ||||
|         features |= (1 << VIRTIO_BLK_F_WCACHE); | ||||
| @ -471,6 +477,7 @@ VirtIODevice *virtio_blk_init(DeviceState *dev, BlockConf *conf) | ||||
|     s->vdev.get_features = virtio_blk_get_features; | ||||
|     s->vdev.reset = virtio_blk_reset; | ||||
|     s->bs = conf->dinfo->bdrv; | ||||
|     s->conf = conf; | ||||
|     s->rq = NULL; | ||||
|     bdrv_guess_geometry(s->bs, &cylinders, &heads, &secs); | ||||
|     bdrv_set_geometry_hint(s->bs, cylinders, heads, secs); | ||||
|  | ||||
| @ -32,6 +32,7 @@ | ||||
| #define VIRTIO_BLK_F_SCSI       7       /* Supports scsi command passthru */ | ||||
| /* #define VIRTIO_BLK_F_IDENTIFY   8       ATA IDENTIFY supported, DEPRECATED */ | ||||
| #define VIRTIO_BLK_F_WCACHE     9       /* write cache enabled */ | ||||
| #define VIRTIO_BLK_F_TOPOLOGY   10      /* Topology information is available */ | ||||
| 
 | ||||
| struct virtio_blk_config | ||||
| { | ||||
| @ -42,6 +43,10 @@ struct virtio_blk_config | ||||
|     uint8_t heads; | ||||
|     uint8_t sectors; | ||||
|     uint32_t _blk_size;    /* structure pad, currently unused */ | ||||
|     uint8_t physical_block_exp; | ||||
|     uint8_t alignment_offset; | ||||
|     uint16_t min_io_size; | ||||
|     uint32_t opt_io_size; | ||||
| } __attribute__((packed)); | ||||
| 
 | ||||
| /* These two define direction. */ | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Christoph Hellwig
						Christoph Hellwig