diff options
author | grehan <grehan@FreeBSD.org> | 2013-10-23 18:54:58 +0000 |
---|---|---|
committer | grehan <grehan@FreeBSD.org> | 2013-10-23 18:54:58 +0000 |
commit | c13162717bfc1efb3a023c9e09920c02b0705130 (patch) | |
tree | 891924dfbb80d42830705229461e4d0a4ee9185b /usr.sbin | |
parent | a5552b83b2d4da86b57e6457a83b9be291f813e7 (diff) | |
download | FreeBSD-src-c13162717bfc1efb3a023c9e09920c02b0705130.zip FreeBSD-src-c13162717bfc1efb3a023c9e09920c02b0705130.tar.gz |
Export the block size capability to guests.
- Use #defines for capability bits
- Export the VTBLK_F_BLK_SIZE capability
- Fix bug in calculating capacity: it is in
512-byte units, not the underlying sector size
This allows virtio-blk to have backing devices
with non 512-byte sector sizes e.g. /dev/cd0, and
4K-block harddrives.
Reviewed by: neel
MFC after: 3 days
Diffstat (limited to 'usr.sbin')
-rw-r--r-- | usr.sbin/bhyve/pci_virtio_block.c | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/usr.sbin/bhyve/pci_virtio_block.c b/usr.sbin/bhyve/pci_virtio_block.c index a7556d7..a642b11 100644 --- a/usr.sbin/bhyve/pci_virtio_block.c +++ b/usr.sbin/bhyve/pci_virtio_block.c @@ -66,11 +66,16 @@ __FBSDID("$FreeBSD$"); #define VTBLK_BLK_ID_BYTES 20 +/* Capability bits */ +#define VTBLK_F_SEG_MAX (1 << 2) /* Maximum request segments */ +#define VTBLK_F_BLK_SIZE (1 << 6) /* cfg block size valid */ + /* * Host capabilities */ #define VTBLK_S_HOSTCAPS \ - ( 0x00000004 | /* host maximum request segments */ \ + ( VTBLK_F_SEG_MAX | \ + VTBLK_F_BLK_SIZE | \ VIRTIO_RING_F_INDIRECT_DESC ) /* indirect descriptors */ /* @@ -315,7 +320,7 @@ pci_vtblk_init(struct vmctx *ctx, struct pci_devinst *pi, char *opts) digest[0], digest[1], digest[2], digest[3], digest[4], digest[5]); /* setup virtio block config space */ - sc->vbsc_cfg.vbc_capacity = size / sectsz; + sc->vbsc_cfg.vbc_capacity = size / DEV_BSIZE; /* 512-byte units */ sc->vbsc_cfg.vbc_seg_max = VTBLK_MAXSEGS; sc->vbsc_cfg.vbc_blk_size = sectsz; sc->vbsc_cfg.vbc_size_max = 0; /* not negotiated */ |