* [Qemu-devel] [PATCH] pflash: flush rom device memory region
@ 2019-01-25 15:57 Stefan Hajnoczi
2019-01-25 16:36 ` Philippe Mathieu-Daudé
0 siblings, 1 reply; 2+ messages in thread
From: Stefan Hajnoczi @ 2019-01-25 15:57 UTC (permalink / raw)
To: qemu-devel
Cc: Philippe Mathieu-Daudé,
Max Reitz, Peter Maydell, Kevin Wolf, qemu-block,
Stefan Hajnoczi
pflash devices should mark the memory region dirty and invalidate TBs
after directly writing to the RAM backing the ROM device.
Note that pflash_cfi01_get_memory() is used by several machine types to
populate ROM contents directly. Callers are untouched by this patch
because they only modify memory before the guest is started.
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
---
Based-on: <20190123212234.32068-1-stefanha@redhat.com>
Split from the original patch series. Philippe asked me to drop the
flush calls in ->realize() since they are unnecessary.
Peter: Your ARM tree has the memory_region_flush_rom_device() patch that
this depends on, so it may be easiest for this to go via your tree.
hw/block/pflash_cfi01.c | 3 +++
hw/block/pflash_cfi02.c | 6 ++++++
2 files changed, 9 insertions(+)
diff --git a/hw/block/pflash_cfi01.c b/hw/block/pflash_cfi01.c
index bffb4c40e7..2f0b9c4c02 100644
--- a/hw/block/pflash_cfi01.c
+++ b/hw/block/pflash_cfi01.c
@@ -446,6 +446,7 @@ static inline void pflash_data_write(pflash_t *pfl, hwaddr offset,
break;
}
+ memory_region_flush_rom_device(&pfl->mem, offset, width);
}
static void pflash_write(pflash_t *pfl, hwaddr offset,
@@ -482,6 +483,8 @@ static void pflash_write(pflash_t *pfl, hwaddr offset,
if (!pfl->ro) {
memset(p + offset, 0xff, pfl->sector_len);
pflash_update(pfl, offset, pfl->sector_len);
+ memory_region_flush_rom_device(&pfl->mem, offset,
+ pfl->sector_len);
} else {
pfl->status |= 0x20; /* Block erase error */
}
diff --git a/hw/block/pflash_cfi02.c b/hw/block/pflash_cfi02.c
index 0f8b7b8c7b..47edce8dcf 100644
--- a/hw/block/pflash_cfi02.c
+++ b/hw/block/pflash_cfi02.c
@@ -378,6 +378,8 @@ static void pflash_write (pflash_t *pfl, hwaddr offset,
pflash_update(pfl, offset, 4);
break;
}
+
+ memory_region_flush_rom_device(&pfl->orig_mem, offset, width);
}
pfl->status = 0x00 | ~(value & 0x80);
/* Let's pretend write is immediate */
@@ -426,6 +428,8 @@ static void pflash_write (pflash_t *pfl, hwaddr offset,
if (!pfl->ro) {
memset(pfl->storage, 0xFF, pfl->chip_len);
pflash_update(pfl, 0, pfl->chip_len);
+ memory_region_flush_rom_device(&pfl->orig_mem, 0,
+ pfl->chip_len);
}
pfl->status = 0x00;
/* Let's wait 5 seconds before chip erase is done */
@@ -441,6 +445,8 @@ static void pflash_write (pflash_t *pfl, hwaddr offset,
if (!pfl->ro) {
memset(p + offset, 0xFF, pfl->sector_len);
pflash_update(pfl, offset, pfl->sector_len);
+ memory_region_flush_rom_device(&pfl->orig_mem, offset,
+ pfl->sector_len);
}
pfl->status = 0x00;
/* Let's wait 1/2 second before sector erase is done */
--
2.20.1
^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [Qemu-devel] [PATCH] pflash: flush rom device memory region
2019-01-25 15:57 [Qemu-devel] [PATCH] pflash: flush rom device memory region Stefan Hajnoczi
@ 2019-01-25 16:36 ` Philippe Mathieu-Daudé
0 siblings, 0 replies; 2+ messages in thread
From: Philippe Mathieu-Daudé @ 2019-01-25 16:36 UTC (permalink / raw)
To: Stefan Hajnoczi, qemu-devel
Cc: Max Reitz, Peter Maydell, Kevin Wolf, qemu-block
On 1/25/19 4:57 PM, Stefan Hajnoczi wrote:
> pflash devices should mark the memory region dirty and invalidate TBs
> after directly writing to the RAM backing the ROM device.
>
> Note that pflash_cfi01_get_memory() is used by several machine types to
> populate ROM contents directly. Callers are untouched by this patch
> because they only modify memory before the guest is started.
>
> Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
> ---
> Based-on: <20190123212234.32068-1-stefanha@redhat.com>
>
> Split from the original patch series. Philippe asked me to drop the
> flush calls in ->realize() since they are unnecessary.
>
> Peter: Your ARM tree has the memory_region_flush_rom_device() patch that
> this depends on, so it may be easiest for this to go via your tree.
>
> hw/block/pflash_cfi01.c | 3 +++
> hw/block/pflash_cfi02.c | 6 ++++++
> 2 files changed, 9 insertions(+)
>
> diff --git a/hw/block/pflash_cfi01.c b/hw/block/pflash_cfi01.c
> index bffb4c40e7..2f0b9c4c02 100644
> --- a/hw/block/pflash_cfi01.c
> +++ b/hw/block/pflash_cfi01.c
> @@ -446,6 +446,7 @@ static inline void pflash_data_write(pflash_t *pfl, hwaddr offset,
> break;
> }
>
> + memory_region_flush_rom_device(&pfl->mem, offset, width);
> }
>
> static void pflash_write(pflash_t *pfl, hwaddr offset,
> @@ -482,6 +483,8 @@ static void pflash_write(pflash_t *pfl, hwaddr offset,
> if (!pfl->ro) {
> memset(p + offset, 0xff, pfl->sector_len);
> pflash_update(pfl, offset, pfl->sector_len);
> + memory_region_flush_rom_device(&pfl->mem, offset,
> + pfl->sector_len);
> } else {
> pfl->status |= 0x20; /* Block erase error */
> }
> diff --git a/hw/block/pflash_cfi02.c b/hw/block/pflash_cfi02.c
> index 0f8b7b8c7b..47edce8dcf 100644
> --- a/hw/block/pflash_cfi02.c
> +++ b/hw/block/pflash_cfi02.c
> @@ -378,6 +378,8 @@ static void pflash_write (pflash_t *pfl, hwaddr offset,
> pflash_update(pfl, offset, 4);
> break;
> }
> +
> + memory_region_flush_rom_device(&pfl->orig_mem, offset, width);
> }
> pfl->status = 0x00 | ~(value & 0x80);
> /* Let's pretend write is immediate */
> @@ -426,6 +428,8 @@ static void pflash_write (pflash_t *pfl, hwaddr offset,
> if (!pfl->ro) {
> memset(pfl->storage, 0xFF, pfl->chip_len);
> pflash_update(pfl, 0, pfl->chip_len);
> + memory_region_flush_rom_device(&pfl->orig_mem, 0,
> + pfl->chip_len);
> }
> pfl->status = 0x00;
> /* Let's wait 5 seconds before chip erase is done */
> @@ -441,6 +445,8 @@ static void pflash_write (pflash_t *pfl, hwaddr offset,
> if (!pfl->ro) {
> memset(p + offset, 0xFF, pfl->sector_len);
> pflash_update(pfl, offset, pfl->sector_len);
> + memory_region_flush_rom_device(&pfl->orig_mem, offset,
> + pfl->sector_len);
> }
> pfl->status = 0x00;
> /* Let's wait 1/2 second before sector erase is done */
>
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2019-01-25 16:36 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-01-25 15:57 [Qemu-devel] [PATCH] pflash: flush rom device memory region Stefan Hajnoczi
2019-01-25 16:36 ` Philippe Mathieu-Daudé
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).