Jes Sorensen wrote:
+/*
+ * Is this correct for PPC?
+ */
+#define dma_flush_range(start, end) \
+ do { (void) (start); (void) (end); } while (0)
Correct or not, should be a function/
+#define dma_flush_range(start, end) \
+ do { (void) (start); (void) (end); } while (0)
Another function.
@@ -24,6 +24,7 @@
#include "qemu-common.h"
#include "host-utils.h"
#include <assert.h>
+#include "cache-utils.h"
void pstrcpy(char *buf, int buf_size, const char *str)
{
@@ -176,6 +177,10 @@
if (copy > qiov->iov[i].iov_len)
copy = qiov->iov[i].iov_len;
memcpy(qiov->iov[i].iov_base, p, copy);
+
+ dma_flush_range((unsigned long)qiov->iov[i].iov_base,
+ (unsigned long)qiov->iov[i].iov_base + copy);
+
Bogus.
static AIOPool dma_aio_pool;
@@ -149,6 +150,17 @@
dbs->bh = NULL;
qemu_iovec_init(&dbs->iov, sg->nsg);
dma_bdrv_cb(dbs, 0);
+
+ if (!is_write) {
+ int i;
+ QEMUIOVector *qiov;
+ qiov = &dbs->iov;
+ for (i = 0; i < qiov->niov; ++i) {
+ dma_flush_range((unsigned long)qiov->iov[i].iov_base,
+ (unsigned long)(qiov->iov[i].iov_base + qiov->iov[i].iov_len));
+ }
+ }
+
cpu_physical_memory_unmap() will do this for you...
#if !defined(TARGET_IA64)
#include "tcg.h"
@@ -3385,6 +3386,8 @@
void cpu_physical_memory_unmap(void *buffer, target_phys_addr_t len,
int is_write, target_phys_addr_t access_len)
{
+ unsigned long flush_len = (unsigned long)access_len;
+
if (buffer != bounce.buffer) {
if (is_write) {
ram_addr_t addr1 = qemu_ram_addr_from_host(buffer);
@@ -3402,7 +3405,9 @@
}
addr1 += l;
access_len -= l;
- }
+ }
+ dma_flush_range((unsigned long)buffer,
+ (unsigned long)buffer + flush_len);
}
... here.
--
error compiling committee.c: too many arguments to function
--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html