From mboxrd@z Thu Jan 1 00:00:00 1970 From: Avi Kivity Date: Mon, 25 May 2009 11:25:09 +0000 Subject: Re: [PATCH] qemu-kvm: Flush icache after dma operations for ia64 Message-Id: <4A1A8015.8080908@redhat.com> List-Id: References: <706158FABBBA044BAD4FE898A02E4BC236B1935F@pdsmsx503.ccr.corp.intel.com> In-Reply-To: <706158FABBBA044BAD4FE898A02E4BC236B1935F@pdsmsx503.ccr.corp.intel.com> MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: kvm-ia64@vger.kernel.org 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 > +#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