Message ID | 20200204095208.269131-7-k.jensen@samsung.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | nvme: support NVMe v1.3d, SGLs and multiple namespaces | expand |
On Tue, 2020-02-04 at 10:51 +0100, Klaus Jensen wrote: > Pull the controller memory buffer check to its own function. The check > will be used on its own in later patches. > > Signed-off-by: Klaus Jensen <k.jensen@samsung.com> > --- > hw/block/nvme.c | 18 +++++++++++++----- > 1 file changed, 13 insertions(+), 5 deletions(-) > > diff --git a/hw/block/nvme.c b/hw/block/nvme.c > index 9abf74da20f2..ba5089df9ece 100644 > --- a/hw/block/nvme.c > +++ b/hw/block/nvme.c > @@ -54,14 +54,22 @@ > > static void nvme_process_sq(void *opaque); > > +static inline bool nvme_addr_is_cmb(NvmeCtrl *n, hwaddr addr) > +{ > + hwaddr low = n->ctrl_mem.addr; > + hwaddr hi = n->ctrl_mem.addr + int128_get64(n->ctrl_mem.size); > + > + return addr >= low && addr < hi; > +} > + > static void nvme_addr_read(NvmeCtrl *n, hwaddr addr, void *buf, int size) > { > - if (n->cmbsz && addr >= n->ctrl_mem.addr && > - addr < (n->ctrl_mem.addr + int128_get64(n->ctrl_mem.size))) { > - memcpy(buf, (void *)&n->cmbuf[addr - n->ctrl_mem.addr], size); > - } else { > - pci_dma_read(&n->parent_obj, addr, buf, size); > + if (n->cmbsz && nvme_addr_is_cmb(n, addr)) { > + memcpy(buf, (void *) &n->cmbuf[addr - n->ctrl_mem.addr], size); Nitpick: I am not an expert on qemu coding style but I suspect that there is extra space after that (void *). Also note that in following patches you fix a serious bug in this function that it doesn't check that the whole range is in CMB but only that the start of the area is. I would move it here, or even to a separate patch. > + return; > } > + > + pci_dma_read(&n->parent_obj, addr, buf, size); > } > > static int nvme_check_sqid(NvmeCtrl *n, uint16_t sqid) Best regards, Maxim Levitsky
diff --git a/hw/block/nvme.c b/hw/block/nvme.c index 9abf74da20f2..ba5089df9ece 100644 --- a/hw/block/nvme.c +++ b/hw/block/nvme.c @@ -54,14 +54,22 @@ static void nvme_process_sq(void *opaque); +static inline bool nvme_addr_is_cmb(NvmeCtrl *n, hwaddr addr) +{ + hwaddr low = n->ctrl_mem.addr; + hwaddr hi = n->ctrl_mem.addr + int128_get64(n->ctrl_mem.size); + + return addr >= low && addr < hi; +} + static void nvme_addr_read(NvmeCtrl *n, hwaddr addr, void *buf, int size) { - if (n->cmbsz && addr >= n->ctrl_mem.addr && - addr < (n->ctrl_mem.addr + int128_get64(n->ctrl_mem.size))) { - memcpy(buf, (void *)&n->cmbuf[addr - n->ctrl_mem.addr], size); - } else { - pci_dma_read(&n->parent_obj, addr, buf, size); + if (n->cmbsz && nvme_addr_is_cmb(n, addr)) { + memcpy(buf, (void *) &n->cmbuf[addr - n->ctrl_mem.addr], size); + return; } + + pci_dma_read(&n->parent_obj, addr, buf, size); } static int nvme_check_sqid(NvmeCtrl *n, uint16_t sqid)
Pull the controller memory buffer check to its own function. The check will be used on its own in later patches. Signed-off-by: Klaus Jensen <k.jensen@samsung.com> --- hw/block/nvme.c | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-)