From: Alexander Graf <agraf@suse.de>
To: qemu-ppc@nongnu.org
Cc: Kevin Wolf <kwolf@redhat.com>,
programmingkidx@gmail.com, mark.cave-ayland@ilande.co.uk,
qemu-devel@nongnu.org
Subject: [Qemu-devel] [PATCH 17/17] PPC: dbdma: Support more multi-issue DMA requests
Date: Mon, 1 Jul 2013 02:13:42 +0200 [thread overview]
Message-ID: <1372637622-50697-18-git-send-email-agraf@suse.de> (raw)
In-Reply-To: <1372637622-50697-1-git-send-email-agraf@suse.de>
A DMA request can happen for data that hasn't been completely been
provided by the IDE core yet. For example
- DBDMA request for 0x1000 bytes
- IDE request for 1 sector
- DBDMA wants to read 0x1000 bytes (8 sectors) from bdrv
- breakage
Instead, we should truncate our bdrv request to the maximum number
of sectors we're allowed to read at that given time. Once that transfer
is through, we will fall into our recently introduced waiting logic.
- DBDMA requests for 0x1000 bytes
- IDE request for 1 sector
- DBDMA wants to read MIN(0x1000, 1 * 512) bytes
- DBDMA finishes reading, indicates to IDE core that transfer is complete
- IDE request for 7 sectors
- DBDMA finishes the DMA
Reported-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
Signed-off-by: Alexander Graf <agraf@suse.de>
---
hw/ide/macio.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/hw/ide/macio.c b/hw/ide/macio.c
index 7ef089f..f9a7676 100644
--- a/hw/ide/macio.c
+++ b/hw/ide/macio.c
@@ -87,7 +87,7 @@ static void pmac_ide_atapi_transfer_cb(void *opaque, int ret)
s->io_buffer_index &= 0x7ff;
}
- s->io_buffer_size = io->len;
+ s->io_buffer_size = MIN(io->len, s->packet_transfer_size);
MACIO_DPRINTF("remainder: %d io->len: %d size: %d\n", io->remainder_len,
io->len, s->packet_transfer_size);
@@ -251,7 +251,7 @@ static void pmac_ide_transfer_cb(void *opaque, int ret)
/* launch next transfer */
s->io_buffer_index = 0;
- s->io_buffer_size = io->len;
+ s->io_buffer_size = MIN(io->len, s->nsector * 512);
/* handle unaligned accesses first, get them over with and only do the
remaining bulk transfer using our async DMA helpers */
--
1.8.1.4
next prev parent reply other threads:[~2013-07-01 0:13 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-07-01 0:13 [Qemu-devel] [PATCH 00/17] PPC: Mac OS X guest bringup v2 Alexander Graf
2013-07-01 0:13 ` [Qemu-devel] [PATCH 01/17] PPC: Mac: Fix guest exported tbfreq values Alexander Graf
2013-07-01 0:13 ` [Qemu-devel] [PATCH 02/17] PPC: g3beige: Move secondary IDE bus to mac-io Alexander Graf
2013-07-01 0:13 ` [Qemu-devel] [PATCH 03/17] PPC: Macio: Replace tabs with spaces Alexander Graf
2013-07-01 0:13 ` [Qemu-devel] [PATCH 04/17] PPC: dbdma: " Alexander Graf
2013-07-01 0:13 ` [Qemu-devel] [PATCH 05/17] PPC: Mac: Add debug prints in macio and dbdma code Alexander Graf
2013-07-01 0:13 ` [Qemu-devel] [PATCH 06/17] PPC: dbdma: Fix debug print Alexander Graf
2013-07-01 0:13 ` [Qemu-devel] [PATCH 07/17] PPC: dbdma: Allow new commands in RUN state Alexander Graf
2013-07-01 0:13 ` [Qemu-devel] [PATCH 08/17] PPC: dbdma: Move defines into header file Alexander Graf
2013-07-01 0:13 ` [Qemu-devel] [PATCH 09/17] PPC: dbdma: Introduce kick function Alexander Graf
2013-07-01 0:13 ` [Qemu-devel] [PATCH 10/17] PPC: dbdma: Move static bh variable to device struct Alexander Graf
2013-07-01 0:13 ` [Qemu-devel] [PATCH 11/17] PPC: dbdma: macio: Add DMA callback Alexander Graf
2013-07-01 0:13 ` [Qemu-devel] [PATCH 12/17] PPC: dbdma: Move processing to io Alexander Graf
2013-07-01 0:13 ` [Qemu-devel] [PATCH 13/17] PPC: dbdma: Wait for DMA until we have data Alexander Graf
2013-07-01 0:13 ` [Qemu-devel] [PATCH 14/17] PPC: dbdma: Support unaligned DMA access Alexander Graf
2013-07-17 9:09 ` Kevin Wolf
2013-07-01 0:13 ` [Qemu-devel] [PATCH 15/17] PPC: Add timer handler for newworld mac-io Alexander Graf
2013-07-01 0:13 ` Alexander Graf [this message]
2013-07-11 14:22 ` [Qemu-devel] [Qemu-ppc] [PATCH 00/17] PPC: Mac OS X guest bringup v2 Alexander Graf
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1372637622-50697-18-git-send-email-agraf@suse.de \
--to=agraf@suse.de \
--cc=kwolf@redhat.com \
--cc=mark.cave-ayland@ilande.co.uk \
--cc=programmingkidx@gmail.com \
--cc=qemu-devel@nongnu.org \
--cc=qemu-ppc@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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).