diff options
author | Peter Maydell <peter.maydell@linaro.org> | 2018-11-23 08:54:52 +0000 |
---|---|---|
committer | Peter Maydell <peter.maydell@linaro.org> | 2018-11-23 08:54:52 +0000 |
commit | 5298f4d67a911dd9cefa4c4185eed242074d64c2 (patch) | |
tree | 77bbfc96f686fee8f467c9fab69fef77ac77d29e /hw | |
parent | ebfd6216ec14f8e0f8c9b167493e8a6e4484d75d (diff) | |
parent | 6bd858b3117a5aab066f3cf02ca72000eaa10ddb (diff) | |
download | qemu-5298f4d67a911dd9cefa4c4185eed242074d64c2.zip qemu-5298f4d67a911dd9cefa4c4185eed242074d64c2.tar.gz qemu-5298f4d67a911dd9cefa4c4185eed242074d64c2.tar.bz2 |
Merge remote-tracking branch 'remotes/kevin/tags/for-upstream' into staging
Block layer patches:
- block: Fix update of BDRV_O_AUTO_RDONLY in update_flags_from_options()
- block: Fix option inheritance after stream/commit job graph changes
- qemu-img: Fix memory leak and typo in error message
- nvme: Fixes for lockups and crashes
- scsi-disk: Fix crash if underlying host file or disk returns error
- Several qemu-iotests fixes and improvements
# gpg: Signature made Thu 22 Nov 2018 18:38:30 GMT
# gpg: using RSA key 7F09B272C88F2FD6
# gpg: Good signature from "Kevin Wolf <kwolf@redhat.com>"
# Primary key fingerprint: DC3D EB15 9A9A F95D 3D74 56FE 7F09 B272 C88F 2FD6
* remotes/kevin/tags/for-upstream:
block: Update BlockDriverState.inherits_from on bdrv_drop_intermediate()
block: Update BlockDriverState.inherits_from on bdrv_set_backing_hd()
iotests: Enhance 223 to cover multiple bitmap granularities
nvme: fix bug with PCI IRQ pins on teardown
nvme: fix CMB endianness confusion
Revert "nvme: fix oob access issue(CVE-2018-16847)"
nvme: fix out-of-bounds access to the CMB
nvme: call blk_drain in NVMe reset code to avoid lockups
iotests: fix nbd test 233 to work correctly with raw images
block: Fix update of BDRV_O_AUTO_RDONLY in update_flags_from_options()
scsi-disk: Fix crash if underlying host file or disk returns error
qemu-img: Fix leak
qemu-img: Fix typo
iotests: Skip 233 if certtool not installed
iotests: Replace assertEquals() with assertEqual()
iotests: Replace time.clock() with Timeout
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Diffstat (limited to 'hw')
-rw-r--r-- | hw/block/nvme.c | 19 | ||||
-rw-r--r-- | hw/scsi/scsi-disk.c | 2 |
2 files changed, 7 insertions, 14 deletions
diff --git a/hw/block/nvme.c b/hw/block/nvme.c index d0226e7..9fbe567 100644 --- a/hw/block/nvme.c +++ b/hw/block/nvme.c @@ -554,6 +554,7 @@ static uint16_t nvme_del_cq(NvmeCtrl *n, NvmeCmd *cmd) trace_nvme_err_invalid_del_cq_notempty(qid); return NVME_INVALID_QUEUE_DEL; } + nvme_irq_deassert(n, cq); trace_nvme_del_cq(qid); nvme_free_cq(cq, n); return NVME_SUCCESS; @@ -797,6 +798,8 @@ static void nvme_clear_ctrl(NvmeCtrl *n) { int i; + blk_drain(n->conf.blk); + for (i = 0; i < n->num_queues; i++) { if (n->sq[i] != NULL) { nvme_free_sq(n->sq[i], n); @@ -1175,23 +1178,13 @@ static void nvme_cmb_write(void *opaque, hwaddr addr, uint64_t data, unsigned size) { NvmeCtrl *n = (NvmeCtrl *)opaque; - - if (addr + size > NVME_CMBSZ_GETSIZE(n->bar.cmbsz)) { - return; - } - memcpy(&n->cmbuf[addr], &data, size); + stn_le_p(&n->cmbuf[addr], size, data); } static uint64_t nvme_cmb_read(void *opaque, hwaddr addr, unsigned size) { - uint64_t val; NvmeCtrl *n = (NvmeCtrl *)opaque; - - if (addr + size > NVME_CMBSZ_GETSIZE(n->bar.cmbsz)) { - return 0; - } - memcpy(&val, &n->cmbuf[addr], size); - return val; + return ldn_le_p(&n->cmbuf[addr], size); } static const MemoryRegionOps nvme_cmb_ops = { @@ -1199,7 +1192,7 @@ static const MemoryRegionOps nvme_cmb_ops = { .write = nvme_cmb_write, .endianness = DEVICE_LITTLE_ENDIAN, .impl = { - .min_access_size = 2, + .min_access_size = 1, .max_access_size = 8, }, }; diff --git a/hw/scsi/scsi-disk.c b/hw/scsi/scsi-disk.c index 6eb258d..0e9027c 100644 --- a/hw/scsi/scsi-disk.c +++ b/hw/scsi/scsi-disk.c @@ -482,7 +482,7 @@ static bool scsi_handle_rw_error(SCSIDiskReq *r, int error, bool acct_failed) if (action == BLOCK_ERROR_ACTION_STOP) { scsi_req_retry(&r->req); } - return false; + return true; } static void scsi_write_complete_noio(SCSIDiskReq *r, int ret) |