diff for duplicates of <1565166840081.62776@bt.com> diff --git a/a/2.bin b/a/2.bin deleted file mode 100644 index 8525394..0000000 --- a/a/2.bin +++ /dev/null @@ -1,351 +0,0 @@ -<html> -<head> -<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> -<style type="text/css" style="display:none"><!-- P { margin-top: 0px; margin-bottom: 0px; } .EmailQuote { margin-left: 1pt; padding-left: 4pt; border-left-width: 2px; border-left-style: solid; border-left-color: rgb(128, 0, 0); }--></style> -</head> -<body dir="ltr" style="font-size:12pt;color:#000000;background-color:#FFFFFF;font-family:Calibri,Arial,Helvetica,sans-serif;"> -<p></p> -<div><span style="font-size: 12pt;">Now that MemOp has been pushed down into the memory API, and</span><br> -</div> -<div>callers are encoding endianness, we can collapse byte swaps</div> -<div>along the I/O path into the accelerator and target independent</div> -<div>adjust_endianness.</div> -<div><br> -</div> -<div>Collapsing byte swaps along the I/O path enables additional endian</div> -<div>inversion logic, e.g. SPARC64 Invert Endian TTE bit, with redundant</div> -<div>byte swaps cancelling out.</div> -<div><br> -</div> -<div>Suggested-by: Richard Henderson <richard.henderson@linaro.org></div> -<div>Signed-off-by: Tony Nguyen <tony.nguyen@bt.com></div> -<div>---</div> -<div> accel/tcg/cputlb.c | 42 +++------------------------------</div> -<div> hw/virtio/virtio-pci.c | 10 ++++----</div> -<div> memory.c | 33 ++++++++++----------------</div> -<div> memory_ldst.inc.c | 64 --------------------------------------------------</div> -<div> 4 files changed, 19 insertions(+), 130 deletions(-)</div> -<div><br> -</div> -<div>diff --git a/accel/tcg/cputlb.c b/accel/tcg/cputlb.c</div> -<div>index 86d85cc..473b8e6 100644</div> -<div>--- a/accel/tcg/cputlb.c</div> -<div>+++ b/accel/tcg/cputlb.c</div> -<div>@@ -1200,38 +1200,6 @@ static void *atomic_mmu_lookup(CPUArchState *env, target_ulong addr,</div> -<div> cpu_loop_exit_atomic(env_cpu(env), retaddr);</div> -<div> }</div> -<div> </div> -<div>-#ifdef TARGET_WORDS_BIGENDIAN</div> -<div>-#define NEED_BE_BSWAP 0</div> -<div>-#define NEED_LE_BSWAP 1</div> -<div>-#else</div> -<div>-#define NEED_BE_BSWAP 1</div> -<div>-#define NEED_LE_BSWAP 0</div> -<div>-#endif</div> -<div>-</div> -<div>-/*</div> -<div>- * Byte Swap Helper</div> -<div>- *</div> -<div>- * This should all dead code away depending on the build host and</div> -<div>- * access type.</div> -<div>- */</div> -<div>-</div> -<div>-static inline uint64_t handle_bswap(uint64_t val, MemOp op)</div> -<div>-{</div> -<div>- if ((memop_big_endian(op) && NEED_BE_BSWAP) ||</div> -<div>- (!memop_big_endian(op) && NEED_LE_BSWAP)) {</div> -<div>- switch (op & MO_SIZE) {</div> -<div>- case MO_8: return val;</div> -<div>- case MO_16: return bswap16(val);</div> -<div>- case MO_32: return bswap32(val);</div> -<div>- case MO_64: return bswap64(val);</div> -<div>- default:</div> -<div>- g_assert_not_reached();</div> -<div>- }</div> -<div>- } else {</div> -<div>- return val;</div> -<div>- }</div> -<div>-}</div> -<div>-</div> -<div> /*</div> -<div> * Load Helpers</div> -<div> *</div> -<div>@@ -1306,10 +1274,8 @@ load_helper(CPUArchState *env, target_ulong addr, TCGMemOpIdx oi,</div> -<div> }</div> -<div> }</div> -<div> </div> -<div>- /* FIXME: io_readx ignores MO_BSWAP. */</div> -<div>- res = io_readx(env, &env_tlb(env)->d[mmu_idx].iotlb[index],</div> -<div>- mmu_idx, addr, retaddr, access_type, op);</div> -<div>- return handle_bswap(res, op);</div> -<div>+ return io_readx(env, &env_tlb(env)->d[mmu_idx].iotlb[index],</div> -<div>+ mmu_idx, addr, retaddr, access_type, op);</div> -<div> }</div> -<div> </div> -<div> /* Handle slow unaligned access (it spans two pages or IO). */</div> -<div>@@ -1552,10 +1518,8 @@ store_helper(CPUArchState *env, target_ulong addr, uint64_t val,</div> -<div> }</div> -<div> }</div> -<div> </div> -<div>- /* FIXME: io_writex ignores MO_BSWAP. */</div> -<div> io_writex(env, &env_tlb(env)->d[mmu_idx].iotlb[index], mmu_idx,</div> -<div>- handle_bswap(val, op),</div> -<div>- addr, retaddr, op);</div> -<div>+ val, addr, retaddr, op);</div> -<div> return;</div> -<div> }</div> -<div> </div> -<div>diff --git a/hw/virtio/virtio-pci.c b/hw/virtio/virtio-pci.c</div> -<div>index 70eb161..f3fe6ca 100644</div> -<div>--- a/hw/virtio/virtio-pci.c</div> -<div>+++ b/hw/virtio/virtio-pci.c</div> -<div>@@ -542,16 +542,15 @@ void virtio_address_space_write(VirtIOPCIProxy *proxy, hwaddr addr,</div> -<div> val = pci_get_byte(buf);</div> -<div> break;</div> -<div> case 2:</div> -<div>- val = cpu_to_le16(pci_get_word(buf));</div> -<div>+ val = pci_get_word(buf);</div> -<div> break;</div> -<div> case 4:</div> -<div>- val = cpu_to_le32(pci_get_long(buf));</div> -<div>+ val = pci_get_long(buf);</div> -<div> break;</div> -<div> default:</div> -<div> /* As length is under guest control, handle illegal values. */</div> -<div> return;</div> -<div> }</div> -<div>- /* FIXME: memory_region_dispatch_write ignores MO_BSWAP. */</div> -<div> memory_region_dispatch_write(mr, addr, val, size_memop(len),</div> -<div> MEMTXATTRS_UNSPECIFIED);</div> -<div> }</div> -<div>@@ -576,7 +575,6 @@ virtio_address_space_read(VirtIOPCIProxy *proxy, hwaddr addr,</div> -<div> /* Make sure caller aligned buf properly */</div> -<div> assert(!(((uintptr_t)buf) & (len - 1)));</div> -<div> </div> -<div>- /* FIXME: memory_region_dispatch_read ignores MO_BSWAP. */</div> -<div> memory_region_dispatch_read(mr, addr, &val, size_memop(len),</div> -<div> MEMTXATTRS_UNSPECIFIED);</div> -<div> switch (len) {</div> -<div>@@ -584,10 +582,10 @@ virtio_address_space_read(VirtIOPCIProxy *proxy, hwaddr addr,</div> -<div> pci_set_byte(buf, val);</div> -<div> break;</div> -<div> case 2:</div> -<div>- pci_set_word(buf, le16_to_cpu(val));</div> -<div>+ pci_set_word(buf, val);</div> -<div> break;</div> -<div> case 4:</div> -<div>- pci_set_long(buf, le32_to_cpu(val));</div> -<div>+ pci_set_long(buf, val);</div> -<div> break;</div> -<div> default:</div> -<div> /* As length is under guest control, handle illegal values. */</div> -<div>diff --git a/memory.c b/memory.c</div> -<div>index 264c624..9d3c3a6 100644</div> -<div>--- a/memory.c</div> -<div>+++ b/memory.c</div> -<div>@@ -343,32 +343,23 @@ static void flatview_simplify(FlatView *view)</div> -<div> }</div> -<div> }</div> -<div> </div> -<div>-static bool memory_region_wrong_endianness(MemoryRegion *mr)</div> -<div>+static void adjust_endianness(MemoryRegion *mr, uint64_t *data, MemOp op)</div> -<div> {</div> -<div>-#ifdef TARGET_WORDS_BIGENDIAN</div> -<div>- return mr->ops->endianness == MO_LE;</div> -<div>-#else</div> -<div>- return mr->ops->endianness == MO_BE;</div> -<div>-#endif</div> -<div>-}</div> -<div>-</div> -<div>-static void adjust_endianness(MemoryRegion *mr, uint64_t *data, unsigned size)</div> -<div>-{</div> -<div>- if (memory_region_wrong_endianness(mr)) {</div> -<div>- switch (size) {</div> -<div>- case 1:</div> -<div>+ if ((op & MO_BSWAP) != mr->ops->endianness) {</div> -<div>+ switch (op & MO_SIZE) {</div> -<div>+ case MO_8:</div> -<div> break;</div> -<div>- case 2:</div> -<div>+ case MO_16:</div> -<div> *data = bswap16(*data);</div> -<div> break;</div> -<div>- case 4:</div> -<div>+ case MO_32:</div> -<div> *data = bswap32(*data);</div> -<div> break;</div> -<div>- case 8:</div> -<div>+ case MO_64:</div> -<div> *data = bswap64(*data);</div> -<div> break;</div> -<div> default:</div> -<div>- abort();</div> -<div>+ g_assert_not_reached();</div> -<div> }</div> -<div> }</div> -<div> }</div> -<div>@@ -1446,7 +1437,7 @@ MemTxResult memory_region_dispatch_read(MemoryRegion *mr,</div> -<div> }</div> -<div> </div> -<div> r = memory_region_dispatch_read1(mr, addr, pval, size, attrs);</div> -<div>- adjust_endianness(mr, pval, size);</div> -<div>+ adjust_endianness(mr, pval, op);</div> -<div> return r;</div> -<div> }</div> -<div> </div> -<div>@@ -1489,7 +1480,7 @@ MemTxResult memory_region_dispatch_write(MemoryRegion *mr,</div> -<div> return MEMTX_DECODE_ERROR;</div> -<div> }</div> -<div> </div> -<div>- adjust_endianness(mr, &data, size);</div> -<div>+ adjust_endianness(mr, &data, op);</div> -<div> </div> -<div> if ((!kvm_eventfds_enabled()) &&</div> -<div> memory_region_dispatch_write_eventfds(mr, addr, data, size, attrs)) {</div> -<div>@@ -2335,7 +2326,7 @@ void memory_region_add_eventfd(MemoryRegion *mr,</div> -<div> }</div> -<div> </div> -<div> if (size) {</div> -<div>- adjust_endianness(mr, &mrfd.data, size);</div> -<div>+ adjust_endianness(mr, &mrfd.data, size_memop(size));</div> -<div> }</div> -<div> memory_region_transaction_begin();</div> -<div> for (i = 0; i < mr->ioeventfd_nb; ++i) {</div> -<div>@@ -2370,7 +2361,7 @@ void memory_region_del_eventfd(MemoryRegion *mr,</div> -<div> unsigned i;</div> -<div> </div> -<div> if (size) {</div> -<div>- adjust_endianness(mr, &mrfd.data, size);</div> -<div>+ adjust_endianness(mr, &mrfd.data, size_memop(size));</div> -<div> }</div> -<div> memory_region_transaction_begin();</div> -<div> for (i = 0; i < mr->ioeventfd_nb; ++i) {</div> -<div>diff --git a/memory_ldst.inc.c b/memory_ldst.inc.c</div> -<div>index ff28b30..33868f7 100644</div> -<div>--- a/memory_ldst.inc.c</div> -<div>+++ b/memory_ldst.inc.c</div> -<div>@@ -37,17 +37,7 @@ static inline uint32_t glue(address_space_ldl_internal, SUFFIX)(ARG1_DECL,</div> -<div> release_lock |= prepare_mmio_access(mr);</div> -<div> </div> -<div> /* I/O case */</div> -<div>- /* FIXME: memory_region_dispatch_read ignores MO_BSWAP. */</div> -<div> r = memory_region_dispatch_read(mr, addr1, &val, MO_32 | endian, attrs);</div> -<div>-#if defined(TARGET_WORDS_BIGENDIAN)</div> -<div>- if (endian == MO_LE) {</div> -<div>- val = bswap32(val);</div> -<div>- }</div> -<div>-#else</div> -<div>- if (endian == MO_BE) {</div> -<div>- val = bswap32(val);</div> -<div>- }</div> -<div>-#endif</div> -<div> } else {</div> -<div> /* RAM case */</div> -<div> ptr = qemu_map_ram_ptr(mr->ram_block, addr1);</div> -<div>@@ -113,17 +103,7 @@ static inline uint64_t glue(address_space_ldq_internal, SUFFIX)(ARG1_DECL,</div> -<div> release_lock |= prepare_mmio_access(mr);</div> -<div> </div> -<div> /* I/O case */</div> -<div>- /* FIXME: memory_region_dispatch_read ignores MO_BSWAP. */</div> -<div> r = memory_region_dispatch_read(mr, addr1, &val, MO_64 | endian, attrs);</div> -<div>-#if defined(TARGET_WORDS_BIGENDIAN)</div> -<div>- if (endian == MO_LE) {</div> -<div>- val = bswap64(val);</div> -<div>- }</div> -<div>-#else</div> -<div>- if (endian == MO_BE) {</div> -<div>- val = bswap64(val);</div> -<div>- }</div> -<div>-#endif</div> -<div> } else {</div> -<div> /* RAM case */</div> -<div> ptr = qemu_map_ram_ptr(mr->ram_block, addr1);</div> -<div>@@ -223,17 +203,7 @@ static inline uint32_t glue(address_space_lduw_internal, SUFFIX)(ARG1_DECL,</div> -<div> release_lock |= prepare_mmio_access(mr);</div> -<div> </div> -<div> /* I/O case */</div> -<div>- /* FIXME: memory_region_dispatch_read ignores MO_BSWAP. */</div> -<div> r = memory_region_dispatch_read(mr, addr1, &val, MO_16 | endian, attrs);</div> -<div>-#if defined(TARGET_WORDS_BIGENDIAN)</div> -<div>- if (endian == MO_LE) {</div> -<div>- val = bswap16(val);</div> -<div>- }</div> -<div>-#else</div> -<div>- if (endian == MO_BE) {</div> -<div>- val = bswap16(val);</div> -<div>- }</div> -<div>-#endif</div> -<div> } else {</div> -<div> /* RAM case */</div> -<div> ptr = qemu_map_ram_ptr(mr->ram_block, addr1);</div> -<div>@@ -299,7 +269,6 @@ void glue(address_space_stl_notdirty, SUFFIX)(ARG1_DECL,</div> -<div> mr = TRANSLATE(addr, &addr1, &l, true, attrs);</div> -<div> if (l < 4 || !memory_access_is_direct(mr, true)) {</div> -<div> release_lock |= prepare_mmio_access(mr);</div> -<div>-</div> -<div> r = memory_region_dispatch_write(mr, addr1, val, MO_32 | MO_TE, attrs);</div> -<div> } else {</div> -<div> ptr = qemu_map_ram_ptr(mr->ram_block, addr1);</div> -<div>@@ -336,17 +305,6 @@ static inline void glue(address_space_stl_internal, SUFFIX)(ARG1_DECL,</div> -<div> mr = TRANSLATE(addr, &addr1, &l, true, attrs);</div> -<div> if (l < 4 || !memory_access_is_direct(mr, true)) {</div> -<div> release_lock |= prepare_mmio_access(mr);</div> -<div>-</div> -<div>-#if defined(TARGET_WORDS_BIGENDIAN)</div> -<div>- if (endian == MO_LE) {</div> -<div>- val = bswap32(val);</div> -<div>- }</div> -<div>-#else</div> -<div>- if (endian == MO_BE) {</div> -<div>- val = bswap32(val);</div> -<div>- }</div> -<div>-#endif</div> -<div>- /* FIXME: memory_region_dispatch_write ignores MO_BSWAP. */</div> -<div> r = memory_region_dispatch_write(mr, addr1, val, MO_32 | endian, attrs);</div> -<div> } else {</div> -<div> /* RAM case */</div> -<div>@@ -442,17 +400,6 @@ static inline void glue(address_space_stw_internal, SUFFIX)(ARG1_DECL,</div> -<div> mr = TRANSLATE(addr, &addr1, &l, true, attrs);</div> -<div> if (l < 2 || !memory_access_is_direct(mr, true)) {</div> -<div> release_lock |= prepare_mmio_access(mr);</div> -<div>-</div> -<div>-#if defined(TARGET_WORDS_BIGENDIAN)</div> -<div>- if (endian == MO_LE) {</div> -<div>- val = bswap16(val);</div> -<div>- }</div> -<div>-#else</div> -<div>- if (endian == MO_BE) {</div> -<div>- val = bswap16(val);</div> -<div>- }</div> -<div>-#endif</div> -<div>- /* FIXME: memory_region_dispatch_write ignores MO_BSWAP. */</div> -<div> r = memory_region_dispatch_write(mr, addr1, val, MO_16 | endian, attrs);</div> -<div> } else {</div> -<div> /* RAM case */</div> -<div>@@ -516,17 +463,6 @@ static void glue(address_space_stq_internal, SUFFIX)(ARG1_DECL,</div> -<div> mr = TRANSLATE(addr, &addr1, &l, true, attrs);</div> -<div> if (l < 8 || !memory_access_is_direct(mr, true)) {</div> -<div> release_lock |= prepare_mmio_access(mr);</div> -<div>-</div> -<div>-#if defined(TARGET_WORDS_BIGENDIAN)</div> -<div>- if (endian == MO_LE) {</div> -<div>- val = bswap64(val);</div> -<div>- }</div> -<div>-#else</div> -<div>- if (endian == MO_BE) {</div> -<div>- val = bswap64(val);</div> -<div>- }</div> -<div>-#endif</div> -<div>- /* FIXME: memory_region_dispatch_write ignores MO_BSWAP. */</div> -<div> r = memory_region_dispatch_write(mr, addr1, val, MO_64 | endian, attrs);</div> -<div> } else {</div> -<div> /* RAM case */</div> -<div>-- </div> -<div>1.8.3.1</div> -<div><br> -​<br> -</div> -<p><br> -</p> -</body> -</html> diff --git a/a/2.hdr b/a/2.hdr deleted file mode 100644 index e54d0ae..0000000 --- a/a/2.hdr +++ /dev/null @@ -1,2 +0,0 @@ -Content-Type: text/html; charset="iso-8859-1" -Content-Transfer-Encoding: quoted-printable diff --git a/a/content_digest b/N1/content_digest index 239fc8b..6f2b707 100644 --- a/a/content_digest +++ b/N1/content_digest @@ -1,92 +1,92 @@ "ref\045ec4924e0b34a3d9124e2db06af75b4@tpw09926dag18e.domain1.systemhost.net\0" "From\0<tony.nguyen@bt.com>\0" - "Subject\0[Qemu-riscv] [Qemu-devel] [PATCH v6 22/26] memory: Single byte swap along the I/O path\0" + "Subject\0[Qemu-devel] [PATCH v6 22/26] memory: Single byte swap along the I/O path\0" "Date\0Wed, 7 Aug 2019 08:34:00 +0000\0" "To\0<qemu-devel@nongnu.org>\0" - "Cc\0<frederic.konrad@adacore.com>" - <berto@igalia.com> - <qemu-block@nongnu.org> - <arikalo@wavecomp.com> - <pasic@linux.ibm.com> - <hpoussin@reactos.org> - <anthony.perard@citrix.com> - <xen-devel@lists.xenproject.org> - <lersek@redhat.com> - <jasowang@redhat.com> - <jiri@resnulli.us> - <ehabkost@redhat.com> - <b.galvani@gmail.com> - <eric.auger@redhat.com> - <alex.williamson@redhat.com> - <stefanha@redhat.com> - <jsnow@redhat.com> - <rth@twiddle.net> - <kwolf@redhat.com> - <andrew@aj.id.au> - <crwulff@gmail.com> - <laurent@vivier.eu> - <sundeep.lkml@gmail.com> - <michael@walle.cc> - <qemu-ppc@nongnu.org> - <kbastian@mail.uni-paderborn.de> - <imammedo@redhat.com> - <fam@euphon.net> - <peter.maydell@linaro.org> - <david@redhat.com> - <palmer@sifive.com> - <keith.busch@intel.com> - <jcmvbkbc@gmail.com> - <hare@suse.com> - <sstabellini@kernel.org> - <andrew.smirnov@gmail.com> - <deller@gmx.de> - <magnus.damm@gmail.com> - <atar4qemu@gmail.com> - <minyard@acm.org> - <sw@weilnetz.de> - <yuval.shaia@oracle.com> - <qemu-s390x@nongnu.org> - <qemu-arm@nongnu.org> - <jan.kiszka@web.de> - <clg@kaod.org> - <shorne@gmail.com> - <qemu-riscv@nongnu.org> - <i.mitsyanko@gmail.com> - <cohuck@redhat.com> - <philmd@redhat.com> - <amarkovic@wavecomp.com> - <peter.chubb@nicta.com.au> - <aurelien@aurel32.net> - <pburton@wavecomp.com> - <sagark@eecs.berkeley.edu> - <green@moxielogic.com> - <kraxel@redhat.com> - <edgar.iglesias@gmail.com> - <gxt@mprc.pku.edu.cn> - <robh@kernel.org> - <borntraeger@de.ibm.com> - <joel@jms.id.au> - <antonynpavlov@gmail.com> - <chouteau@adacore.com> - <Andrew.Baumann@microsoft.com> - <mreitz@redhat.com> - <walling@linux.ibm.com> - <dmitry.fleytman@gmail.com> - <mst@redhat.com> - <mark.cave-ayland@ilande.co.uk> - <jslaby@suse.cz> - <marex@denx.de> - <proljc@gmail.com> - <marcandre.lureau@redhat.com> - <alistair@alistair23.me> - <paul.durrant@citrix.com> - <david@gibson.dropbear.id.au> - <xiaoguangrong.eric@gmail.com> - <huth@tuxfamily.org> - <jcd@tribudubois.net> - <pbonzini@redhat.com> - " <stefanb@linux.ibm.com>\0" - "\01:1\0" + "Cc\0fam@euphon.net" + peter.maydell@linaro.org + walling@linux.ibm.com + cohuck@redhat.com + sagark@eecs.berkeley.edu + david@redhat.com + jasowang@redhat.com + palmer@sifive.com + mark.cave-ayland@ilande.co.uk + i.mitsyanko@gmail.com + keith.busch@intel.com + jcmvbkbc@gmail.com + frederic.konrad@adacore.com + dmitry.fleytman@gmail.com + kraxel@redhat.com + edgar.iglesias@gmail.com + gxt@mprc.pku.edu.cn + pburton@wavecomp.com + xiaoguangrong.eric@gmail.com + peter.chubb@nicta.com.au + philmd@redhat.com + robh@kernel.org + hare@suse.com + sstabellini@kernel.org + berto@igalia.com + chouteau@adacore.com + qemu-block@nongnu.org + arikalo@wavecomp.com + jslaby@suse.cz + deller@gmx.de + mst@redhat.com + magnus.damm@gmail.com + jcd@tribudubois.net + pasic@linux.ibm.com + borntraeger@de.ibm.com + mreitz@redhat.com + hpoussin@reactos.org + joel@jms.id.au + anthony.perard@citrix.com + xen-devel@lists.xenproject.org + david@gibson.dropbear.id.au + lersek@redhat.com + green@moxielogic.com + atar4qemu@gmail.com + antonynpavlov@gmail.com + marex@denx.de + jiri@resnulli.us + ehabkost@redhat.com + minyard@acm.org + qemu-s390x@nongnu.org + sw@weilnetz.de + alistair@alistair23.me + yuval.shaia@oracle.com + b.galvani@gmail.com + eric.auger@redhat.com + alex.williamson@redhat.com + qemu-arm@nongnu.org + jan.kiszka@web.de + clg@kaod.org + stefanha@redhat.com + marcandre.lureau@redhat.com + shorne@gmail.com + jsnow@redhat.com + rth@twiddle.net + kwolf@redhat.com + qemu-riscv@nongnu.org + proljc@gmail.com + pbonzini@redhat.com + andrew@aj.id.au + kbastian@mail.uni-paderborn.de + crwulff@gmail.com + laurent@vivier.eu + Andrew.Baumann@microsoft.com + sundeep.lkml@gmail.com + andrew.smirnov@gmail.com + michael@walle.cc + paul.durrant@citrix.com + qemu-ppc@nongnu.org + huth@tuxfamily.org + amarkovic@wavecomp.com + imammedo@redhat.com + aurelien@aurel32.net + " stefanb@linux.ibm.com\0" + "\00:1\0" "b\0" "Now that MemOp has been pushed down into the memory API, and\n" "callers are encoding endianness, we can collapse byte swaps\n" @@ -423,358 +423,5 @@ "1.8.3.1\n" "\n" ? - "\01:2\0" - "b\0" - "<html>\r\n" - "<head>\r\n" - "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=iso-8859-1\">\r\n" - "<style type=\"text/css\" style=\"display:none\"><!-- P { margin-top: 0px; margin-bottom: 0px; } .EmailQuote { margin-left: 1pt; padding-left: 4pt; border-left-width: 2px; border-left-style: solid; border-left-color: rgb(128, 0, 0); }--></style>\r\n" - "</head>\r\n" - "<body dir=\"ltr\" style=\"font-size:12pt;color:#000000;background-color:#FFFFFF;font-family:Calibri,Arial,Helvetica,sans-serif;\">\r\n" - "<p></p>\r\n" - "<div><span style=\"font-size: 12pt;\">Now that MemOp has been pushed down into the memory API, and</span><br>\r\n" - "</div>\r\n" - "<div>callers are encoding endianness, we can collapse byte swaps</div>\r\n" - "<div>along the I/O path into the accelerator and target independent</div>\r\n" - "<div>adjust_endianness.</div>\r\n" - "<div><br>\r\n" - "</div>\r\n" - "<div>Collapsing byte swaps along the I/O path enables additional endian</div>\r\n" - "<div>inversion logic, e.g. SPARC64 Invert Endian TTE bit, with redundant</div>\r\n" - "<div>byte swaps cancelling out.</div>\r\n" - "<div><br>\r\n" - "</div>\r\n" - "<div>Suggested-by: Richard Henderson <richard.henderson@linaro.org></div>\r\n" - "<div>Signed-off-by: Tony Nguyen <tony.nguyen@bt.com></div>\r\n" - "<div>---</div>\r\n" - "<div> accel/tcg/cputlb.c | 42 +++------------------------------</div>\r\n" - "<div> hw/virtio/virtio-pci.c | 10 ++++----</div>\r\n" - "<div> memory.c | 33 ++++++++++----------------</div>\r\n" - "<div> memory_ldst.inc.c | 64 --------------------------------------------------</div>\r\n" - "<div> 4 files changed, 19 insertions(+), 130 deletions(-)</div>\r\n" - "<div><br>\r\n" - "</div>\r\n" - "<div>diff --git a/accel/tcg/cputlb.c b/accel/tcg/cputlb.c</div>\r\n" - "<div>index 86d85cc..473b8e6 100644</div>\r\n" - "<div>--- a/accel/tcg/cputlb.c</div>\r\n" - "<div>+++ b/accel/tcg/cputlb.c</div>\r\n" - "<div>@@ -1200,38 +1200,6 @@ static void *atomic_mmu_lookup(CPUArchState *env, target_ulong addr,</div>\r\n" - "<div> cpu_loop_exit_atomic(env_cpu(env), retaddr);</div>\r\n" - "<div> }</div>\r\n" - "<div> </div>\r\n" - "<div>-#ifdef TARGET_WORDS_BIGENDIAN</div>\r\n" - "<div>-#define NEED_BE_BSWAP 0</div>\r\n" - "<div>-#define NEED_LE_BSWAP 1</div>\r\n" - "<div>-#else</div>\r\n" - "<div>-#define NEED_BE_BSWAP 1</div>\r\n" - "<div>-#define NEED_LE_BSWAP 0</div>\r\n" - "<div>-#endif</div>\r\n" - "<div>-</div>\r\n" - "<div>-/*</div>\r\n" - "<div>- * Byte Swap Helper</div>\r\n" - "<div>- *</div>\r\n" - "<div>- * This should all dead code away depending on the build host and</div>\r\n" - "<div>- * access type.</div>\r\n" - "<div>- */</div>\r\n" - "<div>-</div>\r\n" - "<div>-static inline uint64_t handle_bswap(uint64_t val, MemOp op)</div>\r\n" - "<div>-{</div>\r\n" - "<div>- if ((memop_big_endian(op) && NEED_BE_BSWAP) ||</div>\r\n" - "<div>- (!memop_big_endian(op) && NEED_LE_BSWAP)) {</div>\r\n" - "<div>- switch (op & MO_SIZE) {</div>\r\n" - "<div>- case MO_8: return val;</div>\r\n" - "<div>- case MO_16: return bswap16(val);</div>\r\n" - "<div>- case MO_32: return bswap32(val);</div>\r\n" - "<div>- case MO_64: return bswap64(val);</div>\r\n" - "<div>- default:</div>\r\n" - "<div>- g_assert_not_reached();</div>\r\n" - "<div>- }</div>\r\n" - "<div>- } else {</div>\r\n" - "<div>- return val;</div>\r\n" - "<div>- }</div>\r\n" - "<div>-}</div>\r\n" - "<div>-</div>\r\n" - "<div> /*</div>\r\n" - "<div> * Load Helpers</div>\r\n" - "<div> *</div>\r\n" - "<div>@@ -1306,10 +1274,8 @@ load_helper(CPUArchState *env, target_ulong addr, TCGMemOpIdx oi,</div>\r\n" - "<div> }</div>\r\n" - "<div> }</div>\r\n" - "<div> </div>\r\n" - "<div>- /* FIXME: io_readx ignores MO_BSWAP. */</div>\r\n" - "<div>- res = io_readx(env, &env_tlb(env)->d[mmu_idx].iotlb[index],</div>\r\n" - "<div>- mmu_idx, addr, retaddr, access_type, op);</div>\r\n" - "<div>- return handle_bswap(res, op);</div>\r\n" - "<div>+ return io_readx(env, &env_tlb(env)->d[mmu_idx].iotlb[index],</div>\r\n" - "<div>+ mmu_idx, addr, retaddr, access_type, op);</div>\r\n" - "<div> }</div>\r\n" - "<div> </div>\r\n" - "<div> /* Handle slow unaligned access (it spans two pages or IO). */</div>\r\n" - "<div>@@ -1552,10 +1518,8 @@ store_helper(CPUArchState *env, target_ulong addr, uint64_t val,</div>\r\n" - "<div> }</div>\r\n" - "<div> }</div>\r\n" - "<div> </div>\r\n" - "<div>- /* FIXME: io_writex ignores MO_BSWAP. */</div>\r\n" - "<div> io_writex(env, &env_tlb(env)->d[mmu_idx].iotlb[index], mmu_idx,</div>\r\n" - "<div>- handle_bswap(val, op),</div>\r\n" - "<div>- addr, retaddr, op);</div>\r\n" - "<div>+ val, addr, retaddr, op);</div>\r\n" - "<div> return;</div>\r\n" - "<div> }</div>\r\n" - "<div> </div>\r\n" - "<div>diff --git a/hw/virtio/virtio-pci.c b/hw/virtio/virtio-pci.c</div>\r\n" - "<div>index 70eb161..f3fe6ca 100644</div>\r\n" - "<div>--- a/hw/virtio/virtio-pci.c</div>\r\n" - "<div>+++ b/hw/virtio/virtio-pci.c</div>\r\n" - "<div>@@ -542,16 +542,15 @@ void virtio_address_space_write(VirtIOPCIProxy *proxy, hwaddr addr,</div>\r\n" - "<div> val = pci_get_byte(buf);</div>\r\n" - "<div> break;</div>\r\n" - "<div> case 2:</div>\r\n" - "<div>- val = cpu_to_le16(pci_get_word(buf));</div>\r\n" - "<div>+ val = pci_get_word(buf);</div>\r\n" - "<div> break;</div>\r\n" - "<div> case 4:</div>\r\n" - "<div>- val = cpu_to_le32(pci_get_long(buf));</div>\r\n" - "<div>+ val = pci_get_long(buf);</div>\r\n" - "<div> break;</div>\r\n" - "<div> default:</div>\r\n" - "<div> /* As length is under guest control, handle illegal values. */</div>\r\n" - "<div> return;</div>\r\n" - "<div> }</div>\r\n" - "<div>- /* FIXME: memory_region_dispatch_write ignores MO_BSWAP. */</div>\r\n" - "<div> memory_region_dispatch_write(mr, addr, val, size_memop(len),</div>\r\n" - "<div> MEMTXATTRS_UNSPECIFIED);</div>\r\n" - "<div> }</div>\r\n" - "<div>@@ -576,7 +575,6 @@ virtio_address_space_read(VirtIOPCIProxy *proxy, hwaddr addr,</div>\r\n" - "<div> /* Make sure caller aligned buf properly */</div>\r\n" - "<div> assert(!(((uintptr_t)buf) & (len - 1)));</div>\r\n" - "<div> </div>\r\n" - "<div>- /* FIXME: memory_region_dispatch_read ignores MO_BSWAP. */</div>\r\n" - "<div> memory_region_dispatch_read(mr, addr, &val, size_memop(len),</div>\r\n" - "<div> MEMTXATTRS_UNSPECIFIED);</div>\r\n" - "<div> switch (len) {</div>\r\n" - "<div>@@ -584,10 +582,10 @@ virtio_address_space_read(VirtIOPCIProxy *proxy, hwaddr addr,</div>\r\n" - "<div> pci_set_byte(buf, val);</div>\r\n" - "<div> break;</div>\r\n" - "<div> case 2:</div>\r\n" - "<div>- pci_set_word(buf, le16_to_cpu(val));</div>\r\n" - "<div>+ pci_set_word(buf, val);</div>\r\n" - "<div> break;</div>\r\n" - "<div> case 4:</div>\r\n" - "<div>- pci_set_long(buf, le32_to_cpu(val));</div>\r\n" - "<div>+ pci_set_long(buf, val);</div>\r\n" - "<div> break;</div>\r\n" - "<div> default:</div>\r\n" - "<div> /* As length is under guest control, handle illegal values. */</div>\r\n" - "<div>diff --git a/memory.c b/memory.c</div>\r\n" - "<div>index 264c624..9d3c3a6 100644</div>\r\n" - "<div>--- a/memory.c</div>\r\n" - "<div>+++ b/memory.c</div>\r\n" - "<div>@@ -343,32 +343,23 @@ static void flatview_simplify(FlatView *view)</div>\r\n" - "<div> }</div>\r\n" - "<div> }</div>\r\n" - "<div> </div>\r\n" - "<div>-static bool memory_region_wrong_endianness(MemoryRegion *mr)</div>\r\n" - "<div>+static void adjust_endianness(MemoryRegion *mr, uint64_t *data, MemOp op)</div>\r\n" - "<div> {</div>\r\n" - "<div>-#ifdef TARGET_WORDS_BIGENDIAN</div>\r\n" - "<div>- return mr->ops->endianness == MO_LE;</div>\r\n" - "<div>-#else</div>\r\n" - "<div>- return mr->ops->endianness == MO_BE;</div>\r\n" - "<div>-#endif</div>\r\n" - "<div>-}</div>\r\n" - "<div>-</div>\r\n" - "<div>-static void adjust_endianness(MemoryRegion *mr, uint64_t *data, unsigned size)</div>\r\n" - "<div>-{</div>\r\n" - "<div>- if (memory_region_wrong_endianness(mr)) {</div>\r\n" - "<div>- switch (size) {</div>\r\n" - "<div>- case 1:</div>\r\n" - "<div>+ if ((op & MO_BSWAP) != mr->ops->endianness) {</div>\r\n" - "<div>+ switch (op & MO_SIZE) {</div>\r\n" - "<div>+ case MO_8:</div>\r\n" - "<div> break;</div>\r\n" - "<div>- case 2:</div>\r\n" - "<div>+ case MO_16:</div>\r\n" - "<div> *data = bswap16(*data);</div>\r\n" - "<div> break;</div>\r\n" - "<div>- case 4:</div>\r\n" - "<div>+ case MO_32:</div>\r\n" - "<div> *data = bswap32(*data);</div>\r\n" - "<div> break;</div>\r\n" - "<div>- case 8:</div>\r\n" - "<div>+ case MO_64:</div>\r\n" - "<div> *data = bswap64(*data);</div>\r\n" - "<div> break;</div>\r\n" - "<div> default:</div>\r\n" - "<div>- abort();</div>\r\n" - "<div>+ g_assert_not_reached();</div>\r\n" - "<div> }</div>\r\n" - "<div> }</div>\r\n" - "<div> }</div>\r\n" - "<div>@@ -1446,7 +1437,7 @@ MemTxResult memory_region_dispatch_read(MemoryRegion *mr,</div>\r\n" - "<div> }</div>\r\n" - "<div> </div>\r\n" - "<div> r = memory_region_dispatch_read1(mr, addr, pval, size, attrs);</div>\r\n" - "<div>- adjust_endianness(mr, pval, size);</div>\r\n" - "<div>+ adjust_endianness(mr, pval, op);</div>\r\n" - "<div> return r;</div>\r\n" - "<div> }</div>\r\n" - "<div> </div>\r\n" - "<div>@@ -1489,7 +1480,7 @@ MemTxResult memory_region_dispatch_write(MemoryRegion *mr,</div>\r\n" - "<div> return MEMTX_DECODE_ERROR;</div>\r\n" - "<div> }</div>\r\n" - "<div> </div>\r\n" - "<div>- adjust_endianness(mr, &data, size);</div>\r\n" - "<div>+ adjust_endianness(mr, &data, op);</div>\r\n" - "<div> </div>\r\n" - "<div> if ((!kvm_eventfds_enabled()) &&</div>\r\n" - "<div> memory_region_dispatch_write_eventfds(mr, addr, data, size, attrs)) {</div>\r\n" - "<div>@@ -2335,7 +2326,7 @@ void memory_region_add_eventfd(MemoryRegion *mr,</div>\r\n" - "<div> }</div>\r\n" - "<div> </div>\r\n" - "<div> if (size) {</div>\r\n" - "<div>- adjust_endianness(mr, &mrfd.data, size);</div>\r\n" - "<div>+ adjust_endianness(mr, &mrfd.data, size_memop(size));</div>\r\n" - "<div> }</div>\r\n" - "<div> memory_region_transaction_begin();</div>\r\n" - "<div> for (i = 0; i < mr->ioeventfd_nb; ++i) {</div>\r\n" - "<div>@@ -2370,7 +2361,7 @@ void memory_region_del_eventfd(MemoryRegion *mr,</div>\r\n" - "<div> unsigned i;</div>\r\n" - "<div> </div>\r\n" - "<div> if (size) {</div>\r\n" - "<div>- adjust_endianness(mr, &mrfd.data, size);</div>\r\n" - "<div>+ adjust_endianness(mr, &mrfd.data, size_memop(size));</div>\r\n" - "<div> }</div>\r\n" - "<div> memory_region_transaction_begin();</div>\r\n" - "<div> for (i = 0; i < mr->ioeventfd_nb; ++i) {</div>\r\n" - "<div>diff --git a/memory_ldst.inc.c b/memory_ldst.inc.c</div>\r\n" - "<div>index ff28b30..33868f7 100644</div>\r\n" - "<div>--- a/memory_ldst.inc.c</div>\r\n" - "<div>+++ b/memory_ldst.inc.c</div>\r\n" - "<div>@@ -37,17 +37,7 @@ static inline uint32_t glue(address_space_ldl_internal, SUFFIX)(ARG1_DECL,</div>\r\n" - "<div> release_lock |= prepare_mmio_access(mr);</div>\r\n" - "<div> </div>\r\n" - "<div> /* I/O case */</div>\r\n" - "<div>- /* FIXME: memory_region_dispatch_read ignores MO_BSWAP. */</div>\r\n" - "<div> r = memory_region_dispatch_read(mr, addr1, &val, MO_32 | endian, attrs);</div>\r\n" - "<div>-#if defined(TARGET_WORDS_BIGENDIAN)</div>\r\n" - "<div>- if (endian == MO_LE) {</div>\r\n" - "<div>- val = bswap32(val);</div>\r\n" - "<div>- }</div>\r\n" - "<div>-#else</div>\r\n" - "<div>- if (endian == MO_BE) {</div>\r\n" - "<div>- val = bswap32(val);</div>\r\n" - "<div>- }</div>\r\n" - "<div>-#endif</div>\r\n" - "<div> } else {</div>\r\n" - "<div> /* RAM case */</div>\r\n" - "<div> ptr = qemu_map_ram_ptr(mr->ram_block, addr1);</div>\r\n" - "<div>@@ -113,17 +103,7 @@ static inline uint64_t glue(address_space_ldq_internal, SUFFIX)(ARG1_DECL,</div>\r\n" - "<div> release_lock |= prepare_mmio_access(mr);</div>\r\n" - "<div> </div>\r\n" - "<div> /* I/O case */</div>\r\n" - "<div>- /* FIXME: memory_region_dispatch_read ignores MO_BSWAP. */</div>\r\n" - "<div> r = memory_region_dispatch_read(mr, addr1, &val, MO_64 | endian, attrs);</div>\r\n" - "<div>-#if defined(TARGET_WORDS_BIGENDIAN)</div>\r\n" - "<div>- if (endian == MO_LE) {</div>\r\n" - "<div>- val = bswap64(val);</div>\r\n" - "<div>- }</div>\r\n" - "<div>-#else</div>\r\n" - "<div>- if (endian == MO_BE) {</div>\r\n" - "<div>- val = bswap64(val);</div>\r\n" - "<div>- }</div>\r\n" - "<div>-#endif</div>\r\n" - "<div> } else {</div>\r\n" - "<div> /* RAM case */</div>\r\n" - "<div> ptr = qemu_map_ram_ptr(mr->ram_block, addr1);</div>\r\n" - "<div>@@ -223,17 +203,7 @@ static inline uint32_t glue(address_space_lduw_internal, SUFFIX)(ARG1_DECL,</div>\r\n" - "<div> release_lock |= prepare_mmio_access(mr);</div>\r\n" - "<div> </div>\r\n" - "<div> /* I/O case */</div>\r\n" - "<div>- /* FIXME: memory_region_dispatch_read ignores MO_BSWAP. */</div>\r\n" - "<div> r = memory_region_dispatch_read(mr, addr1, &val, MO_16 | endian, attrs);</div>\r\n" - "<div>-#if defined(TARGET_WORDS_BIGENDIAN)</div>\r\n" - "<div>- if (endian == MO_LE) {</div>\r\n" - "<div>- val = bswap16(val);</div>\r\n" - "<div>- }</div>\r\n" - "<div>-#else</div>\r\n" - "<div>- if (endian == MO_BE) {</div>\r\n" - "<div>- val = bswap16(val);</div>\r\n" - "<div>- }</div>\r\n" - "<div>-#endif</div>\r\n" - "<div> } else {</div>\r\n" - "<div> /* RAM case */</div>\r\n" - "<div> ptr = qemu_map_ram_ptr(mr->ram_block, addr1);</div>\r\n" - "<div>@@ -299,7 +269,6 @@ void glue(address_space_stl_notdirty, SUFFIX)(ARG1_DECL,</div>\r\n" - "<div> mr = TRANSLATE(addr, &addr1, &l, true, attrs);</div>\r\n" - "<div> if (l < 4 || !memory_access_is_direct(mr, true)) {</div>\r\n" - "<div> release_lock |= prepare_mmio_access(mr);</div>\r\n" - "<div>-</div>\r\n" - "<div> r = memory_region_dispatch_write(mr, addr1, val, MO_32 | MO_TE, attrs);</div>\r\n" - "<div> } else {</div>\r\n" - "<div> ptr = qemu_map_ram_ptr(mr->ram_block, addr1);</div>\r\n" - "<div>@@ -336,17 +305,6 @@ static inline void glue(address_space_stl_internal, SUFFIX)(ARG1_DECL,</div>\r\n" - "<div> mr = TRANSLATE(addr, &addr1, &l, true, attrs);</div>\r\n" - "<div> if (l < 4 || !memory_access_is_direct(mr, true)) {</div>\r\n" - "<div> release_lock |= prepare_mmio_access(mr);</div>\r\n" - "<div>-</div>\r\n" - "<div>-#if defined(TARGET_WORDS_BIGENDIAN)</div>\r\n" - "<div>- if (endian == MO_LE) {</div>\r\n" - "<div>- val = bswap32(val);</div>\r\n" - "<div>- }</div>\r\n" - "<div>-#else</div>\r\n" - "<div>- if (endian == MO_BE) {</div>\r\n" - "<div>- val = bswap32(val);</div>\r\n" - "<div>- }</div>\r\n" - "<div>-#endif</div>\r\n" - "<div>- /* FIXME: memory_region_dispatch_write ignores MO_BSWAP. */</div>\r\n" - "<div> r = memory_region_dispatch_write(mr, addr1, val, MO_32 | endian, attrs);</div>\r\n" - "<div> } else {</div>\r\n" - "<div> /* RAM case */</div>\r\n" - "<div>@@ -442,17 +400,6 @@ static inline void glue(address_space_stw_internal, SUFFIX)(ARG1_DECL,</div>\r\n" - "<div> mr = TRANSLATE(addr, &addr1, &l, true, attrs);</div>\r\n" - "<div> if (l < 2 || !memory_access_is_direct(mr, true)) {</div>\r\n" - "<div> release_lock |= prepare_mmio_access(mr);</div>\r\n" - "<div>-</div>\r\n" - "<div>-#if defined(TARGET_WORDS_BIGENDIAN)</div>\r\n" - "<div>- if (endian == MO_LE) {</div>\r\n" - "<div>- val = bswap16(val);</div>\r\n" - "<div>- }</div>\r\n" - "<div>-#else</div>\r\n" - "<div>- if (endian == MO_BE) {</div>\r\n" - "<div>- val = bswap16(val);</div>\r\n" - "<div>- }</div>\r\n" - "<div>-#endif</div>\r\n" - "<div>- /* FIXME: memory_region_dispatch_write ignores MO_BSWAP. */</div>\r\n" - "<div> r = memory_region_dispatch_write(mr, addr1, val, MO_16 | endian, attrs);</div>\r\n" - "<div> } else {</div>\r\n" - "<div> /* RAM case */</div>\r\n" - "<div>@@ -516,17 +463,6 @@ static void glue(address_space_stq_internal, SUFFIX)(ARG1_DECL,</div>\r\n" - "<div> mr = TRANSLATE(addr, &addr1, &l, true, attrs);</div>\r\n" - "<div> if (l < 8 || !memory_access_is_direct(mr, true)) {</div>\r\n" - "<div> release_lock |= prepare_mmio_access(mr);</div>\r\n" - "<div>-</div>\r\n" - "<div>-#if defined(TARGET_WORDS_BIGENDIAN)</div>\r\n" - "<div>- if (endian == MO_LE) {</div>\r\n" - "<div>- val = bswap64(val);</div>\r\n" - "<div>- }</div>\r\n" - "<div>-#else</div>\r\n" - "<div>- if (endian == MO_BE) {</div>\r\n" - "<div>- val = bswap64(val);</div>\r\n" - "<div>- }</div>\r\n" - "<div>-#endif</div>\r\n" - "<div>- /* FIXME: memory_region_dispatch_write ignores MO_BSWAP. */</div>\r\n" - "<div> r = memory_region_dispatch_write(mr, addr1, val, MO_64 | endian, attrs);</div>\r\n" - "<div> } else {</div>\r\n" - "<div> /* RAM case */</div>\r\n" - "<div>-- </div>\r\n" - "<div>1.8.3.1</div>\r\n" - "<div><br>\r\n" - "​<br>\r\n" - "</div>\r\n" - "<p><br>\r\n" - "</p>\r\n" - "</body>\r\n" - "</html>\r\n" -04c11598aba5b92c14926adb07fc50a11de39e37f5f6423fea55af00a4d9c787 +7a839c7301d72b546df480f36da7cd562ac7f20739c6e2fbb92e62aa8dc26790
diff --git a/N2/1.1.hdr b/N2/1.1.hdr new file mode 100644 index 0000000..12686e4 --- /dev/null +++ b/N2/1.1.hdr @@ -0,0 +1,2 @@ +Content-Type: text/plain; charset="iso-8859-1" +Content-Transfer-Encoding: quoted-printable diff --git a/a/1.txt b/N2/1.1.txt similarity index 100% rename from a/1.txt rename to N2/1.1.txt diff --git a/a/2.bin b/N2/1.2.bin similarity index 100% rename from a/2.bin rename to N2/1.2.bin diff --git a/N2/1.2.hdr b/N2/1.2.hdr new file mode 100644 index 0000000..e54d0ae --- /dev/null +++ b/N2/1.2.hdr @@ -0,0 +1,2 @@ +Content-Type: text/html; charset="iso-8859-1" +Content-Transfer-Encoding: quoted-printable diff --git a/a/2.hdr b/N2/2.hdr index e54d0ae..5216513 100644 --- a/a/2.hdr +++ b/N2/2.hdr @@ -1,2 +1,4 @@ -Content-Type: text/html; charset="iso-8859-1" -Content-Transfer-Encoding: quoted-printable +Content-Type: text/plain; charset="utf-8" +MIME-Version: 1.0 +Content-Transfer-Encoding: base64 +Content-Disposition: inline diff --git a/N2/2.txt b/N2/2.txt new file mode 100644 index 0000000..d2ea9a6 --- /dev/null +++ b/N2/2.txt @@ -0,0 +1,4 @@ +_______________________________________________ +Xen-devel mailing list +Xen-devel@lists.xenproject.org +https://lists.xenproject.org/mailman/listinfo/xen-devel diff --git a/a/content_digest b/N2/content_digest index 239fc8b..e7398ec 100644 --- a/a/content_digest +++ b/N2/content_digest @@ -1,92 +1,92 @@ "ref\045ec4924e0b34a3d9124e2db06af75b4@tpw09926dag18e.domain1.systemhost.net\0" "From\0<tony.nguyen@bt.com>\0" - "Subject\0[Qemu-riscv] [Qemu-devel] [PATCH v6 22/26] memory: Single byte swap along the I/O path\0" + "Subject\0[Xen-devel] [Qemu-devel] [PATCH v6 22/26] memory: Single byte swap along the I/O path\0" "Date\0Wed, 7 Aug 2019 08:34:00 +0000\0" "To\0<qemu-devel@nongnu.org>\0" - "Cc\0<frederic.konrad@adacore.com>" - <berto@igalia.com> - <qemu-block@nongnu.org> - <arikalo@wavecomp.com> - <pasic@linux.ibm.com> - <hpoussin@reactos.org> - <anthony.perard@citrix.com> - <xen-devel@lists.xenproject.org> - <lersek@redhat.com> - <jasowang@redhat.com> - <jiri@resnulli.us> - <ehabkost@redhat.com> - <b.galvani@gmail.com> - <eric.auger@redhat.com> - <alex.williamson@redhat.com> - <stefanha@redhat.com> - <jsnow@redhat.com> - <rth@twiddle.net> - <kwolf@redhat.com> - <andrew@aj.id.au> - <crwulff@gmail.com> - <laurent@vivier.eu> - <sundeep.lkml@gmail.com> - <michael@walle.cc> - <qemu-ppc@nongnu.org> - <kbastian@mail.uni-paderborn.de> - <imammedo@redhat.com> - <fam@euphon.net> - <peter.maydell@linaro.org> - <david@redhat.com> - <palmer@sifive.com> - <keith.busch@intel.com> - <jcmvbkbc@gmail.com> - <hare@suse.com> - <sstabellini@kernel.org> - <andrew.smirnov@gmail.com> - <deller@gmx.de> - <magnus.damm@gmail.com> - <atar4qemu@gmail.com> - <minyard@acm.org> - <sw@weilnetz.de> - <yuval.shaia@oracle.com> - <qemu-s390x@nongnu.org> - <qemu-arm@nongnu.org> - <jan.kiszka@web.de> - <clg@kaod.org> - <shorne@gmail.com> - <qemu-riscv@nongnu.org> - <i.mitsyanko@gmail.com> - <cohuck@redhat.com> - <philmd@redhat.com> - <amarkovic@wavecomp.com> - <peter.chubb@nicta.com.au> - <aurelien@aurel32.net> - <pburton@wavecomp.com> - <sagark@eecs.berkeley.edu> - <green@moxielogic.com> - <kraxel@redhat.com> - <edgar.iglesias@gmail.com> - <gxt@mprc.pku.edu.cn> - <robh@kernel.org> - <borntraeger@de.ibm.com> - <joel@jms.id.au> - <antonynpavlov@gmail.com> - <chouteau@adacore.com> - <Andrew.Baumann@microsoft.com> - <mreitz@redhat.com> - <walling@linux.ibm.com> - <dmitry.fleytman@gmail.com> - <mst@redhat.com> - <mark.cave-ayland@ilande.co.uk> - <jslaby@suse.cz> - <marex@denx.de> - <proljc@gmail.com> - <marcandre.lureau@redhat.com> - <alistair@alistair23.me> - <paul.durrant@citrix.com> - <david@gibson.dropbear.id.au> - <xiaoguangrong.eric@gmail.com> - <huth@tuxfamily.org> - <jcd@tribudubois.net> - <pbonzini@redhat.com> - " <stefanb@linux.ibm.com>\0" - "\01:1\0" + "Cc\0fam@euphon.net" + peter.maydell@linaro.org + walling@linux.ibm.com + cohuck@redhat.com + sagark@eecs.berkeley.edu + david@redhat.com + jasowang@redhat.com + palmer@sifive.com + mark.cave-ayland@ilande.co.uk + i.mitsyanko@gmail.com + keith.busch@intel.com + jcmvbkbc@gmail.com + frederic.konrad@adacore.com + dmitry.fleytman@gmail.com + kraxel@redhat.com + edgar.iglesias@gmail.com + gxt@mprc.pku.edu.cn + pburton@wavecomp.com + xiaoguangrong.eric@gmail.com + peter.chubb@nicta.com.au + philmd@redhat.com + robh@kernel.org + hare@suse.com + sstabellini@kernel.org + berto@igalia.com + chouteau@adacore.com + qemu-block@nongnu.org + arikalo@wavecomp.com + jslaby@suse.cz + deller@gmx.de + mst@redhat.com + magnus.damm@gmail.com + jcd@tribudubois.net + pasic@linux.ibm.com + borntraeger@de.ibm.com + mreitz@redhat.com + hpoussin@reactos.org + joel@jms.id.au + anthony.perard@citrix.com + xen-devel@lists.xenproject.org + david@gibson.dropbear.id.au + lersek@redhat.com + green@moxielogic.com + atar4qemu@gmail.com + antonynpavlov@gmail.com + marex@denx.de + jiri@resnulli.us + ehabkost@redhat.com + minyard@acm.org + qemu-s390x@nongnu.org + sw@weilnetz.de + alistair@alistair23.me + yuval.shaia@oracle.com + b.galvani@gmail.com + eric.auger@redhat.com + alex.williamson@redhat.com + qemu-arm@nongnu.org + jan.kiszka@web.de + clg@kaod.org + stefanha@redhat.com + marcandre.lureau@redhat.com + shorne@gmail.com + jsnow@redhat.com + rth@twiddle.net + kwolf@redhat.com + qemu-riscv@nongnu.org + proljc@gmail.com + pbonzini@redhat.com + andrew@aj.id.au + kbastian@mail.uni-paderborn.de + crwulff@gmail.com + laurent@vivier.eu + Andrew.Baumann@microsoft.com + sundeep.lkml@gmail.com + andrew.smirnov@gmail.com + michael@walle.cc + paul.durrant@citrix.com + qemu-ppc@nongnu.org + huth@tuxfamily.org + amarkovic@wavecomp.com + imammedo@redhat.com + aurelien@aurel32.net + " stefanb@linux.ibm.com\0" + "\02:1.1\0" "b\0" "Now that MemOp has been pushed down into the memory API, and\n" "callers are encoding endianness, we can collapse byte swaps\n" @@ -423,7 +423,7 @@ "1.8.3.1\n" "\n" ? - "\01:2\0" + "\02:1.2\0" "b\0" "<html>\r\n" "<head>\r\n" @@ -776,5 +776,11 @@ "</p>\r\n" "</body>\r\n" "</html>\r\n" + "\01:2\0" + "b\0" + "_______________________________________________\n" + "Xen-devel mailing list\n" + "Xen-devel@lists.xenproject.org\n" + https://lists.xenproject.org/mailman/listinfo/xen-devel -04c11598aba5b92c14926adb07fc50a11de39e37f5f6423fea55af00a4d9c787 +53fad2692db6295dbe8af3da195cb47c280266bedd3e00673305cac1811499b1
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.