qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH 0/3] Drop old_mmio accessor support
@ 2018-08-24 17:04 Peter Maydell
  2018-08-24 17:04 ` [Qemu-devel] [PATCH 1/3] memory: Remove old_mmio accessors Peter Maydell
                   ` (2 more replies)
  0 siblings, 3 replies; 6+ messages in thread
From: Peter Maydell @ 2018-08-24 17:04 UTC (permalink / raw)
  To: qemu-devel; +Cc: patches, Paolo Bonzini

Hi; this patchset removes support for the old_mmio accessors
from the memory core code, now that we have fixed all the
devices that were using it.

Patch 1 does that removal.
Patch 2 fixes up a wart in fw_cfg that was only needed while
we had the old_mmio accessors (spotted because of the comment
coming up in my grep for 'old_mmio'...)
Patch 3 is a bonus that adds documentation for the _with_attrs
accessors, since I noticed while writing patch 1 that we
hadn't actually written any.

Based-on: <20180802174042.29234-1-peter.maydell@linaro.org>
("[PATCH 0/2] hw/net/pcnet-pci: Convert away from old_mmio accessors")

The pcnet-pci patches are the only "convert away from old_mmio"
patches still not yet in master; they've been reviewed, they just
haven't been picked up by anybody yet.

thanks
-- PMM

Peter Maydell (3):
  memory: Remove old_mmio accessors
  hw/nvram/fw_cfg: Use memberwise copy of MemoryRegionOps struct
  docs/devel/memory.txt: Document _with_attrs accessors

 docs/devel/memory.txt | 13 ++++++---
 include/exec/memory.h |  5 ----
 hw/nvram/fw_cfg.c     |  7 +----
 memory.c              | 64 ++-----------------------------------------
 4 files changed, 12 insertions(+), 77 deletions(-)

-- 
2.18.0

^ permalink raw reply	[flat|nested] 6+ messages in thread

* [Qemu-devel] [PATCH 1/3] memory: Remove old_mmio accessors
  2018-08-24 17:04 [Qemu-devel] [PATCH 0/3] Drop old_mmio accessor support Peter Maydell
@ 2018-08-24 17:04 ` Peter Maydell
  2018-08-25 15:55   ` Richard Henderson
  2018-08-24 17:04 ` [Qemu-devel] [PATCH 2/3] hw/nvram/fw_cfg: Use memberwise copy of MemoryRegionOps struct Peter Maydell
  2018-08-24 17:04 ` [Qemu-devel] [PATCH 3/3] docs/devel/memory.txt: Document _with_attrs accessors Peter Maydell
  2 siblings, 1 reply; 6+ messages in thread
From: Peter Maydell @ 2018-08-24 17:04 UTC (permalink / raw)
  To: qemu-devel; +Cc: patches, Paolo Bonzini

Now that all the users of old_mmio MemoryRegion accessors
have been converted, we can remove the core code support.

Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
---
 docs/devel/memory.txt |  2 --
 include/exec/memory.h |  5 ----
 memory.c              | 64 ++-----------------------------------------
 3 files changed, 2 insertions(+), 69 deletions(-)

diff --git a/docs/devel/memory.txt b/docs/devel/memory.txt
index c1dee1252c2..4fff0d56031 100644
--- a/docs/devel/memory.txt
+++ b/docs/devel/memory.txt
@@ -342,5 +342,3 @@ various constraints can be supplied to control how these callbacks are called:
  - .impl.unaligned specifies that the *implementation* supports unaligned
    accesses; if false, unaligned accesses will be emulated by two aligned
    accesses.
- - .old_mmio eases the porting of code that was formerly using
-   cpu_register_io_memory(). It should not be used in new code.
diff --git a/include/exec/memory.h b/include/exec/memory.h
index eb4f2fb249c..f43a0d7e36a 100644
--- a/include/exec/memory.h
+++ b/include/exec/memory.h
@@ -201,11 +201,6 @@ struct MemoryRegionOps {
          */
         bool unaligned;
     } impl;
-
-    /* If .read and .write are not present, old_mmio may be used for
-     * backwards compatibility with old mmio registration
-     */
-    const MemoryRegionMmio old_mmio;
 };
 
 enum IOMMUMemoryRegionAttr {
diff --git a/memory.c b/memory.c
index 9b73892768d..fa915a88c08 100644
--- a/memory.c
+++ b/memory.c
@@ -396,32 +396,6 @@ static int get_cpu_index(void)
     return -1;
 }
 
-static MemTxResult memory_region_oldmmio_read_accessor(MemoryRegion *mr,
-                                                       hwaddr addr,
-                                                       uint64_t *value,
-                                                       unsigned size,
-                                                       unsigned shift,
-                                                       uint64_t mask,
-                                                       MemTxAttrs attrs)
-{
-    uint64_t tmp;
-
-    tmp = mr->ops->old_mmio.read[ctz32(size)](mr->opaque, addr);
-    if (mr->subpage) {
-        trace_memory_region_subpage_read(get_cpu_index(), mr, addr, tmp, size);
-    } else if (mr == &io_mem_notdirty) {
-        /* Accesses to code which has previously been translated into a TB show
-         * up in the MMIO path, as accesses to the io_mem_notdirty
-         * MemoryRegion. */
-        trace_memory_region_tb_read(get_cpu_index(), addr, tmp, size);
-    } else if (TRACE_MEMORY_REGION_OPS_READ_ENABLED) {
-        hwaddr abs_addr = memory_region_to_absolute_addr(mr, addr);
-        trace_memory_region_ops_read(get_cpu_index(), mr, abs_addr, tmp, size);
-    }
-    *value |= (tmp & mask) << shift;
-    return MEMTX_OK;
-}
-
 static MemTxResult  memory_region_read_accessor(MemoryRegion *mr,
                                                 hwaddr addr,
                                                 uint64_t *value,
@@ -475,32 +449,6 @@ static MemTxResult memory_region_read_with_attrs_accessor(MemoryRegion *mr,
     return r;
 }
 
-static MemTxResult memory_region_oldmmio_write_accessor(MemoryRegion *mr,
-                                                        hwaddr addr,
-                                                        uint64_t *value,
-                                                        unsigned size,
-                                                        unsigned shift,
-                                                        uint64_t mask,
-                                                        MemTxAttrs attrs)
-{
-    uint64_t tmp;
-
-    tmp = (*value >> shift) & mask;
-    if (mr->subpage) {
-        trace_memory_region_subpage_write(get_cpu_index(), mr, addr, tmp, size);
-    } else if (mr == &io_mem_notdirty) {
-        /* Accesses to code which has previously been translated into a TB show
-         * up in the MMIO path, as accesses to the io_mem_notdirty
-         * MemoryRegion. */
-        trace_memory_region_tb_write(get_cpu_index(), addr, tmp, size);
-    } else if (TRACE_MEMORY_REGION_OPS_WRITE_ENABLED) {
-        hwaddr abs_addr = memory_region_to_absolute_addr(mr, addr);
-        trace_memory_region_ops_write(get_cpu_index(), mr, abs_addr, tmp, size);
-    }
-    mr->ops->old_mmio.write[ctz32(size)](mr->opaque, addr, tmp);
-    return MEMTX_OK;
-}
-
 static MemTxResult memory_region_write_accessor(MemoryRegion *mr,
                                                 hwaddr addr,
                                                 uint64_t *value,
@@ -1394,16 +1342,12 @@ static MemTxResult memory_region_dispatch_read1(MemoryRegion *mr,
                                          mr->ops->impl.max_access_size,
                                          memory_region_read_accessor,
                                          mr, attrs);
-    } else if (mr->ops->read_with_attrs) {
+    } else {
         return access_with_adjusted_size(addr, pval, size,
                                          mr->ops->impl.min_access_size,
                                          mr->ops->impl.max_access_size,
                                          memory_region_read_with_attrs_accessor,
                                          mr, attrs);
-    } else {
-        return access_with_adjusted_size(addr, pval, size, 1, 4,
-                                         memory_region_oldmmio_read_accessor,
-                                         mr, attrs);
     }
 }
 
@@ -1475,17 +1419,13 @@ MemTxResult memory_region_dispatch_write(MemoryRegion *mr,
                                          mr->ops->impl.max_access_size,
                                          memory_region_write_accessor, mr,
                                          attrs);
-    } else if (mr->ops->write_with_attrs) {
+    } else {
         return
             access_with_adjusted_size(addr, &data, size,
                                       mr->ops->impl.min_access_size,
                                       mr->ops->impl.max_access_size,
                                       memory_region_write_with_attrs_accessor,
                                       mr, attrs);
-    } else {
-        return access_with_adjusted_size(addr, &data, size, 1, 4,
-                                         memory_region_oldmmio_write_accessor,
-                                         mr, attrs);
     }
 }
 
-- 
2.18.0

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [Qemu-devel] [PATCH 2/3] hw/nvram/fw_cfg: Use memberwise copy of MemoryRegionOps struct
  2018-08-24 17:04 [Qemu-devel] [PATCH 0/3] Drop old_mmio accessor support Peter Maydell
  2018-08-24 17:04 ` [Qemu-devel] [PATCH 1/3] memory: Remove old_mmio accessors Peter Maydell
@ 2018-08-24 17:04 ` Peter Maydell
  2018-08-25 15:56   ` Richard Henderson
  2018-08-24 17:04 ` [Qemu-devel] [PATCH 3/3] docs/devel/memory.txt: Document _with_attrs accessors Peter Maydell
  2 siblings, 1 reply; 6+ messages in thread
From: Peter Maydell @ 2018-08-24 17:04 UTC (permalink / raw)
  To: qemu-devel; +Cc: patches, Paolo Bonzini

We've now removed the 'old_mmio' member from MemoryRegionOps,
so we can perform the copy as a simple struct copy rather
than having to do it via a memberwise copy.

Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
---
 hw/nvram/fw_cfg.c | 7 +------
 1 file changed, 1 insertion(+), 6 deletions(-)

diff --git a/hw/nvram/fw_cfg.c b/hw/nvram/fw_cfg.c
index d79a568f540..b3c9b066239 100644
--- a/hw/nvram/fw_cfg.c
+++ b/hw/nvram/fw_cfg.c
@@ -1109,12 +1109,7 @@ static void fw_cfg_mem_realize(DeviceState *dev, Error **errp)
     sysbus_init_mmio(sbd, &s->ctl_iomem);
 
     if (s->data_width > data_ops->valid.max_access_size) {
-        /* memberwise copy because the "old_mmio" member is const */
-        s->wide_data_ops.read       = data_ops->read;
-        s->wide_data_ops.write      = data_ops->write;
-        s->wide_data_ops.endianness = data_ops->endianness;
-        s->wide_data_ops.valid      = data_ops->valid;
-        s->wide_data_ops.impl       = data_ops->impl;
+        s->wide_data_ops = *data_ops;
 
         s->wide_data_ops.valid.max_access_size = s->data_width;
         s->wide_data_ops.impl.max_access_size  = s->data_width;
-- 
2.18.0

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [Qemu-devel] [PATCH 3/3] docs/devel/memory.txt: Document _with_attrs accessors
  2018-08-24 17:04 [Qemu-devel] [PATCH 0/3] Drop old_mmio accessor support Peter Maydell
  2018-08-24 17:04 ` [Qemu-devel] [PATCH 1/3] memory: Remove old_mmio accessors Peter Maydell
  2018-08-24 17:04 ` [Qemu-devel] [PATCH 2/3] hw/nvram/fw_cfg: Use memberwise copy of MemoryRegionOps struct Peter Maydell
@ 2018-08-24 17:04 ` Peter Maydell
  2 siblings, 0 replies; 6+ messages in thread
From: Peter Maydell @ 2018-08-24 17:04 UTC (permalink / raw)
  To: qemu-devel; +Cc: patches, Paolo Bonzini

When we added the _with_attrs accessors we forgot to mention
them in the documentation.

Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
---
 docs/devel/memory.txt | 11 +++++++++--
 1 file changed, 9 insertions(+), 2 deletions(-)

diff --git a/docs/devel/memory.txt b/docs/devel/memory.txt
index 4fff0d56031..42577e1d860 100644
--- a/docs/devel/memory.txt
+++ b/docs/devel/memory.txt
@@ -326,8 +326,15 @@ visible as the pci-hole alias clips it to a 0.5GB range.
 MMIO Operations
 ---------------
 
-MMIO regions are provided with ->read() and ->write() callbacks; in addition
-various constraints can be supplied to control how these callbacks are called:
+MMIO regions are provided with ->read() and ->write() callbacks,
+which are sufficient for most devices. Some devices change behaviour
+based on the attributes used for the memory transaction, or need
+to be able to respond that the access should provoke a bus error
+rather than completing successfully; those devices can use the
+->read_with_attrs() and ->write_with_attrs() callbacks instead.
+
+In addition various constraints can be supplied to control how these
+callbacks are called:
 
  - .valid.min_access_size, .valid.max_access_size define the access sizes
    (in bytes) which the device accepts; accesses outside this range will
-- 
2.18.0

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [Qemu-devel] [PATCH 1/3] memory: Remove old_mmio accessors
  2018-08-24 17:04 ` [Qemu-devel] [PATCH 1/3] memory: Remove old_mmio accessors Peter Maydell
@ 2018-08-25 15:55   ` Richard Henderson
  0 siblings, 0 replies; 6+ messages in thread
From: Richard Henderson @ 2018-08-25 15:55 UTC (permalink / raw)
  To: Peter Maydell, qemu-devel; +Cc: Paolo Bonzini, patches

On 08/24/2018 10:04 AM, Peter Maydell wrote:
> Now that all the users of old_mmio MemoryRegion accessors
> have been converted, we can remove the core code support.
> 
> Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
> ---
>  docs/devel/memory.txt |  2 --
>  include/exec/memory.h |  5 ----
>  memory.c              | 64 ++-----------------------------------------
>  3 files changed, 2 insertions(+), 69 deletions(-)

Reviewed-by: Richard Henderson <richard.henderson@linaro.org>


r~

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [Qemu-devel] [PATCH 2/3] hw/nvram/fw_cfg: Use memberwise copy of MemoryRegionOps struct
  2018-08-24 17:04 ` [Qemu-devel] [PATCH 2/3] hw/nvram/fw_cfg: Use memberwise copy of MemoryRegionOps struct Peter Maydell
@ 2018-08-25 15:56   ` Richard Henderson
  0 siblings, 0 replies; 6+ messages in thread
From: Richard Henderson @ 2018-08-25 15:56 UTC (permalink / raw)
  To: Peter Maydell, qemu-devel; +Cc: Paolo Bonzini, patches

On 08/24/2018 10:04 AM, Peter Maydell wrote:
> We've now removed the 'old_mmio' member from MemoryRegionOps,
> so we can perform the copy as a simple struct copy rather
> than having to do it via a memberwise copy.
> 
> Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
> ---
>  hw/nvram/fw_cfg.c | 7 +------
>  1 file changed, 1 insertion(+), 6 deletions(-)

Reviewed-by: Richard Henderson <richard.henderson@linaro.org>


r~

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2018-08-25 16:11 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2018-08-24 17:04 [Qemu-devel] [PATCH 0/3] Drop old_mmio accessor support Peter Maydell
2018-08-24 17:04 ` [Qemu-devel] [PATCH 1/3] memory: Remove old_mmio accessors Peter Maydell
2018-08-25 15:55   ` Richard Henderson
2018-08-24 17:04 ` [Qemu-devel] [PATCH 2/3] hw/nvram/fw_cfg: Use memberwise copy of MemoryRegionOps struct Peter Maydell
2018-08-25 15:56   ` Richard Henderson
2018-08-24 17:04 ` [Qemu-devel] [PATCH 3/3] docs/devel/memory.txt: Document _with_attrs accessors Peter Maydell

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).