summaryrefslogtreecommitdiffstats
path: root/meta/recipes-devtools/qemu/qemu/hw-block-nvme-refactor-nvme_addr_read.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta/recipes-devtools/qemu/qemu/hw-block-nvme-refactor-nvme_addr_read.patch')
-rw-r--r--meta/recipes-devtools/qemu/qemu/hw-block-nvme-refactor-nvme_addr_read.patch55
1 files changed, 55 insertions, 0 deletions
diff --git a/meta/recipes-devtools/qemu/qemu/hw-block-nvme-refactor-nvme_addr_read.patch b/meta/recipes-devtools/qemu/qemu/hw-block-nvme-refactor-nvme_addr_read.patch
new file mode 100644
index 0000000000..66ada52efb
--- /dev/null
+++ b/meta/recipes-devtools/qemu/qemu/hw-block-nvme-refactor-nvme_addr_read.patch
@@ -0,0 +1,55 @@
1From 55428706d5b0b8889b8e009eac77137bb556a4f0 Mon Sep 17 00:00:00 2001
2From: Klaus Jensen <k.jensen@samsung.com>
3Date: Tue, 9 Jun 2020 21:03:17 +0200
4Subject: [PATCH 1/2] hw/block/nvme: refactor nvme_addr_read
5MIME-Version: 1.0
6Content-Type: text/plain; charset=UTF-8
7Content-Transfer-Encoding: 8bit
8
9Pull the controller memory buffer check to its own function. The check
10will be used on its own in later patches.
11
12Signed-off-by: Klaus Jensen <k.jensen@samsung.com>
13Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
14Reviewed-by: Maxim Levitsky <mlevitsk@redhat.com>
15Reviewed-by: Keith Busch <kbusch@kernel.org>
16Message-Id: <20200609190333.59390-7-its@irrelevant.dk>
17Signed-off-by: Kevin Wolf <kwolf@redhat.com>
18---
19 hw/block/nvme.c | 16 ++++++++++++----
20 1 file changed, 12 insertions(+), 4 deletions(-)
21
22diff --git a/hw/block/nvme.c b/hw/block/nvme.c
23index 12d8254..e6f24a6 100644
24--- a/hw/block/nvme.c
25+++ b/hw/block/nvme.c
26@@ -52,14 +52,22 @@
27
28 static void nvme_process_sq(void *opaque);
29
30+static bool nvme_addr_is_cmb(NvmeCtrl *n, hwaddr addr)
31+{
32+ hwaddr low = n->ctrl_mem.addr;
33+ hwaddr hi = n->ctrl_mem.addr + int128_get64(n->ctrl_mem.size);
34+
35+ return addr >= low && addr < hi;
36+}
37+
38 static void nvme_addr_read(NvmeCtrl *n, hwaddr addr, void *buf, int size)
39 {
40- if (n->cmbsz && addr >= n->ctrl_mem.addr &&
41- addr < (n->ctrl_mem.addr + int128_get64(n->ctrl_mem.size))) {
42+ if (n->cmbsz && nvme_addr_is_cmb(n, addr)) {
43 memcpy(buf, (void *)&n->cmbuf[addr - n->ctrl_mem.addr], size);
44- } else {
45- pci_dma_read(&n->parent_obj, addr, buf, size);
46+ return;
47 }
48+
49+ pci_dma_read(&n->parent_obj, addr, buf, size);
50 }
51
52 static int nvme_check_sqid(NvmeCtrl *n, uint16_t sqid)
53--
541.8.3.1
55