diff options
author | Philippe Mathieu-Daudé <philmd@redhat.com> | 2020-09-22 10:38:16 +0200 |
---|---|---|
committer | Stefan Hajnoczi <stefanha@redhat.com> | 2020-10-05 09:35:52 +0100 |
commit | b02c01a513a17e03e2245feff19b3dcc8c408859 (patch) | |
tree | a4bb66de8c0091fc06398ee4dd4e6361759f3733 | |
parent | 469e72ab7dbbd7ff4ee601e5ea7c29545d46593b (diff) | |
download | qemu-b02c01a513a17e03e2245feff19b3dcc8c408859.zip qemu-b02c01a513a17e03e2245feff19b3dcc8c408859.tar.gz qemu-b02c01a513a17e03e2245feff19b3dcc8c408859.tar.bz2 |
util/vfio-helpers: Pass page protections to qemu_vfio_pci_map_bar()
Pages are currently mapped READ/WRITE. To be able to use different
protections, add a new argument to qemu_vfio_pci_map_bar().
Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
Message-Id: <20200922083821.578519-2-philmd@redhat.com>
-rw-r--r-- | block/nvme.c | 3 | ||||
-rw-r--r-- | include/qemu/vfio-helpers.h | 2 | ||||
-rw-r--r-- | util/vfio-helpers.c | 4 |
3 files changed, 5 insertions, 4 deletions
diff --git a/block/nvme.c b/block/nvme.c index f4f27b6..5a4dc6a 100644 --- a/block/nvme.c +++ b/block/nvme.c @@ -712,7 +712,8 @@ static int nvme_init(BlockDriverState *bs, const char *device, int namespace, goto out; } - s->regs = qemu_vfio_pci_map_bar(s->vfio, 0, 0, NVME_BAR_SIZE, errp); + s->regs = qemu_vfio_pci_map_bar(s->vfio, 0, 0, NVME_BAR_SIZE, + PROT_READ | PROT_WRITE, errp); if (!s->regs) { ret = -EINVAL; goto out; diff --git a/include/qemu/vfio-helpers.h b/include/qemu/vfio-helpers.h index 1f057c2..4491c8e 100644 --- a/include/qemu/vfio-helpers.h +++ b/include/qemu/vfio-helpers.h @@ -22,7 +22,7 @@ int qemu_vfio_dma_map(QEMUVFIOState *s, void *host, size_t size, int qemu_vfio_dma_reset_temporary(QEMUVFIOState *s); void qemu_vfio_dma_unmap(QEMUVFIOState *s, void *host); void *qemu_vfio_pci_map_bar(QEMUVFIOState *s, int index, - uint64_t offset, uint64_t size, + uint64_t offset, uint64_t size, int prot, Error **errp); void qemu_vfio_pci_unmap_bar(QEMUVFIOState *s, int index, void *bar, uint64_t offset, uint64_t size); diff --git a/util/vfio-helpers.c b/util/vfio-helpers.c index 583bdfb..9ac307e 100644 --- a/util/vfio-helpers.c +++ b/util/vfio-helpers.c @@ -146,13 +146,13 @@ static int qemu_vfio_pci_init_bar(QEMUVFIOState *s, int index, Error **errp) * Map a PCI bar area. */ void *qemu_vfio_pci_map_bar(QEMUVFIOState *s, int index, - uint64_t offset, uint64_t size, + uint64_t offset, uint64_t size, int prot, Error **errp) { void *p; assert_bar_index_valid(s, index); p = mmap(NULL, MIN(size, s->bar_region_info[index].size - offset), - PROT_READ | PROT_WRITE, MAP_SHARED, + prot, MAP_SHARED, s->device, s->bar_region_info[index].offset + offset); if (p == MAP_FAILED) { error_setg_errno(errp, errno, "Failed to map BAR region"); |