From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:49969) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Ya5ei-0005Ca-Fw for qemu-devel@nongnu.org; Mon, 23 Mar 2015 12:56:52 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Ya5ed-00037N-Ic for qemu-devel@nongnu.org; Mon, 23 Mar 2015 12:56:48 -0400 Received: from mx1.redhat.com ([209.132.183.28]:50391) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Ya5ed-00037J-Ds for qemu-devel@nongnu.org; Mon, 23 Mar 2015 12:56:43 -0400 From: John Snow Date: Mon, 23 Mar 2015 12:56:37 -0400 Message-Id: <1427129798-21590-4-git-send-email-jsnow@redhat.com> In-Reply-To: <1427129798-21590-1-git-send-email-jsnow@redhat.com> References: <1427129798-21590-1-git-send-email-jsnow@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Subject: [Qemu-devel] [PATCH 3/4] ahci: Fix sglist offset manipulation for BE machines List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: peter.maydell@linaro.org, jsnow@redhat.com This does not bother DMA, because DMA generally transfers the entire SGList in one shot if it can. PIO, on the other hand, tries to transfer just one sector at a time, and will make multiple visits to the sglist to fetch memory addresses. Fix the memory address calculaton when we have an offset by moving the offset addition OUTSIDE of the le64_to_cpu calculation. Signed-off-by: John Snow Reviewed-by: Stefan Hajnoczi Tested-by: Andreas F=C3=A4rber Message-id: 1426811056-2202-4-git-send-email-jsnow@redhat.com --- hw/ide/ahci.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hw/ide/ahci.c b/hw/ide/ahci.c index e1ae36f..7a223be 100644 --- a/hw/ide/ahci.c +++ b/hw/ide/ahci.c @@ -799,7 +799,7 @@ static int ahci_populate_sglist(AHCIDevice *ad, QEMUS= GList *sglist, =20 qemu_sglist_init(sglist, qbus->parent, (sglist_alloc_hint - off_= idx), ad->hba->as); - qemu_sglist_add(sglist, le64_to_cpu(tbl[off_idx].addr + off_pos)= , + qemu_sglist_add(sglist, le64_to_cpu(tbl[off_idx].addr) + off_pos= , prdt_tbl_entry_size(&tbl[off_idx]) - off_pos); =20 for (i =3D off_idx + 1; i < sglist_alloc_hint; i++) { --=20 2.1.0