{"id":2234830,"url":"http://patchwork.ozlabs.org/api/1.2/patches/2234830/?format=json","web_url":"http://patchwork.ozlabs.org/project/qemu-devel/patch/20260508051619.3887383-2-kane_chen@aspeedtech.com/","project":{"id":14,"url":"http://patchwork.ozlabs.org/api/1.2/projects/14/?format=json","name":"QEMU Development","link_name":"qemu-devel","list_id":"qemu-devel.nongnu.org","list_email":"qemu-devel@nongnu.org","web_url":"","scm_url":"","webscm_url":"","list_archive_url":"","list_archive_url_format":"","commit_url_format":""},"msgid":"<20260508051619.3887383-2-kane_chen@aspeedtech.com>","list_archive_url":null,"date":"2026-05-08T05:16:22","name":"[v1,1/1] aspeed/hace: Fix mapped address may not be unmapped issue","commit_ref":null,"pull_url":null,"state":"new","archived":false,"hash":"7de8b24542d1cfa0f848c477b799a129fab35e93","submitter":{"id":92037,"url":"http://patchwork.ozlabs.org/api/1.2/people/92037/?format=json","name":"Kane Chen","email":"kane_chen@aspeedtech.com"},"delegate":null,"mbox":"http://patchwork.ozlabs.org/project/qemu-devel/patch/20260508051619.3887383-2-kane_chen@aspeedtech.com/mbox/","series":[{"id":503324,"url":"http://patchwork.ozlabs.org/api/1.2/series/503324/?format=json","web_url":"http://patchwork.ozlabs.org/project/qemu-devel/list/?series=503324","date":"2026-05-08T05:16:20","name":"aspeed/hace: Fix mapped address may not be unmapped issue","version":1,"mbox":"http://patchwork.ozlabs.org/series/503324/mbox/"}],"comments":"http://patchwork.ozlabs.org/api/patches/2234830/comments/","check":"pending","checks":"http://patchwork.ozlabs.org/api/patches/2234830/checks/","tags":{},"related":[],"headers":{"Return-Path":"<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>","X-Original-To":"incoming@patchwork.ozlabs.org","Delivered-To":"patchwork-incoming@legolas.ozlabs.org","Authentication-Results":["legolas.ozlabs.org;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=aspeedtech.com header.i=@aspeedtech.com\n header.a=rsa-sha256 header.s=selector1 header.b=jv3p2Xn6;\n\tdkim-atps=neutral","legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org\n (client-ip=209.51.188.17; helo=lists1p.gnu.org;\n envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org;\n receiver=patchwork.ozlabs.org)","dkim=none (message not signed)\n header.d=none;dmarc=none action=none header.from=aspeedtech.com;"],"Received":["from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17])\n\t(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4gBcng3mzwz1yK7\n\tfor <incoming@patchwork.ozlabs.org>; Fri, 08 May 2026 15:17:41 +1000 (AEST)","from localhost ([::1] helo=lists1p.gnu.org)\n\tby lists1p.gnu.org with esmtp (Exim 4.90_1)\n\t(envelope-from <qemu-devel-bounces@nongnu.org>)\n\tid 1wLDZm-0005Fg-CD; Fri, 08 May 2026 01:16:38 -0400","from eggs.gnu.org ([2001:470:142:3::10])\n by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)\n (Exim 4.90_1) (envelope-from <kane_chen@aspeedtech.com>)\n id 1wLDZk-0005F2-0M; Fri, 08 May 2026 01:16:36 -0400","from mail-japaneastazlp170120005.outbound.protection.outlook.com\n ([2a01:111:f403:c405::5] helo=TYPPR03CU001.outbound.protection.outlook.com)\n by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)\n (Exim 4.90_1) (envelope-from <kane_chen@aspeedtech.com>)\n id 1wLDZi-0007Tx-7v; Fri, 08 May 2026 01:16:35 -0400","from SI6PR06MB7631.apcprd06.prod.outlook.com (2603:1096:4:239::11)\n by PUZPR06MB5885.apcprd06.prod.outlook.com (2603:1096:301:110::13) with\n Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9891.19; Fri, 8 May\n 2026 05:16:22 +0000","from SI6PR06MB7631.apcprd06.prod.outlook.com\n ([fe80::afe5:a3f1:b435:e43c]) by SI6PR06MB7631.apcprd06.prod.outlook.com\n ([fe80::afe5:a3f1:b435:e43c%5]) with mapi id 15.20.9891.008; Fri, 8 May 2026\n 05:16:22 +0000"],"ARC-Seal":"i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;\n b=OXJpXK313Yk0zNc6dzOlgohfNwK60wMZr+oYhzcOhC7ESb8k0NWdnnGLkzELDdqAfQfq4uSXJsm1TLnitaczOEfjkKOHzh/zGzESiJUj+Jmfr8AkVVo7Y398lydnmqpv/5B4aY2xZwmvHj8S+2ZvljTixMHZcSX9qfQArYATUgdE/kFB9nhEpO8Aw1E5xBCzF7HmBFeD5nltd1QZ5F6HkpzKUnSQ4zRkxrmojJTTEmWWmzZGqUtIPr/1ZVWthTgsaEtuKDtCtPLBI8QLbqhQjgRq1bmDejDl1iEKDpGy6ZbLJ98hHmyjYlPKPI6Z8gWIGOKB+NPGlygvAxCSUPMkfQ==","ARC-Message-Signature":"i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;\n s=arcselector10001;\n h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1;\n bh=MwnyaB9KCNKfvq3dm/l9D36z+t8/GubQoGmaT/zXTEE=;\n b=IU0cnpl0okjV396kruk9T0/g50KSN20aYKQd1dY3jSuZ9KFz9dvz6H7ZgXgGFjZPv/oB9GE1hUEfH+iZ4W0lbgVeJSs9j3/z5Vs9GuNUhVcO0Kw2QLBIJF97yHlEbg2Ak+Ui96vx+8ziJeAsZTTmurtv4IyLR3yshqPgDQx7T9g+attmp5jREBFAqSZpqIe+CexNs2FFNMgCq5OsJ+l7SWvr/wUZx6TEJzqxiCZL2AT7VfOM1wlat2PZMgmo1ntR4Tso07RhY2hiKQMWPZ951A48UqtaSMPDcpFTCKjbsgMEiEp5lmgGLsRWKviXVffzLAL6MmNHDr/wdIZM0/Cqhg==","ARC-Authentication-Results":"i=1; mx.microsoft.com 1; spf=pass\n smtp.mailfrom=aspeedtech.com; dmarc=pass action=none\n header.from=aspeedtech.com; dkim=pass header.d=aspeedtech.com; arc=none","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed; d=aspeedtech.com;\n s=selector1;\n h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;\n bh=MwnyaB9KCNKfvq3dm/l9D36z+t8/GubQoGmaT/zXTEE=;\n b=jv3p2Xn6//HJKu2B5btMIKEK3ji+5ADiCaULHs24jIC/FcjLR47574m2vBKS0/qBp7EcKVZpvyvUzkTyHX05Imm2+DhiwdFdNv/bslXn4nlODersquIOZT2U/BjGUPOrfqOEjQ2D+oMVO6WiWjABDRRcPcMiQ4WNV5R22SiO3SE70jP+n+pjix8W688BEb5CQlYPBtuB8MWAUVB7LVFOMCihO1I7ZqPiRuQstFVCrjxZS0oCBqdOwQSE2VcvSD1aV2o46hVTpnagWf8KwQPiMVTflRZ6+UEWMd3F4NrWbW48tyUfzaIq2JsLb7R+RnH0hX4wikHW319Y+RXe8jTvHQ==","From":"Kane Chen <kane_chen@aspeedtech.com>","To":"=?iso-8859-1?q?C=E9dric_Le_Goater?= <clg@kaod.org>,\n Peter Maydell <peter.maydell@linaro.org>,\n Steven Lee <steven_lee@aspeedtech.com>, Troy Lee <leetroy@gmail.com>,\n Jamin Lin <jamin_lin@aspeedtech.com>,\n Andrew Jeffery <andrew@codeconstruct.com.au>, Joel Stanley <joel@jms.id.au>,\n \"open list:ASPEED BMCs\" <qemu-arm@nongnu.org>,\n \"open list:All patches CC here\" <qemu-devel@nongnu.org>","CC":"Troy Lee <troy_lee@aspeedtech.com>, Kane Chen <kane_chen@aspeedtech.com>","Subject":"[PATCH v1 1/1] aspeed/hace: Fix mapped address may not be unmapped\n issue","Thread-Topic":"[PATCH v1 1/1] aspeed/hace: Fix mapped address may not be\n unmapped issue","Thread-Index":"AQHc3qnPl3aK51F7Y0aXhHDUgxk26A==","Date":"Fri, 8 May 2026 05:16:22 +0000","Message-ID":"<20260508051619.3887383-2-kane_chen@aspeedtech.com>","References":"<20260508051619.3887383-1-kane_chen@aspeedtech.com>","In-Reply-To":"<20260508051619.3887383-1-kane_chen@aspeedtech.com>","Accept-Language":"zh-TW, en-US","Content-Language":"en-US","X-MS-Has-Attach":"","X-MS-TNEF-Correlator":"","authentication-results":["legolas.ozlabs.org;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=aspeedtech.com header.i=@aspeedtech.com\n header.a=rsa-sha256 header.s=selector1 header.b=jv3p2Xn6;\n\tdkim-atps=neutral","legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org\n (client-ip=209.51.188.17; helo=lists1p.gnu.org;\n envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org;\n receiver=patchwork.ozlabs.org)","dkim=none (message not signed)\n header.d=none;dmarc=none action=none header.from=aspeedtech.com;"],"x-ms-publictraffictype":"Email","x-ms-traffictypediagnostic":"SI6PR06MB7631:EE_|PUZPR06MB5885:EE_","x-ms-office365-filtering-correlation-id":"ed031fb7-a7ed-4dea-7b02-08deacc0f1d3","x-ms-exchange-senderadcheck":"1","x-ms-exchange-antispam-relay":"0","x-microsoft-antispam":"BCL:0;\n ARA:13230040|366016|376014|1800799024|56012099003|22082099003|18002099003|38070700021;","x-microsoft-antispam-message-info":"\n 4pQ2Nr2orAuBoYtRMq5Bd4H5bYCpGkD1cRFOoD7Z9/sV8hF0QRYspO7AGX+KZO3iSQu/m7360VQB8RV3VeGk3xF0Vyi5WMCROrTAvwdOSwoBX8H03fNp8wWqDaJWco9ab0uuD5vAmHjb1czQySOOjbBXt1AI3Gnj/BXNZK4srzc2zmkKAorNEvESzUK+O9wWbBqhbyhxaS16aIp9TPFDeQw22hOBrfvAXOOTutshjty5FYLIm5GysNhZ8/NBlDGGQ3nOI29U10gp3dR8JBxYvi8/v1BH2hO+car9vbbkucwYdSZoP5NYLv09xnyz42WCDR55ez0C3oTgIEJaW64kzf0OL1cD+vggFBvoxLjAbTViZy+mUsrqKVBFM624swZ20kEL14zLy6i7Qza+R45xkWawf00UPySWb+G6BfxBoxyG2bB39YfVfuyOYOyahnYeEXAGTfQpmQcZ1t61GI3oMTji9VKb/q9TCM/roqlbv2pL8aPVo3kBRHDZ/7QNVtWJS5oWI1WhYCc+bCB4xd/8r1PnoN666ngiQFP2RR+Kl0g8xVnCYo9tzKvjlYLBpr1t8E6Kd+bVIbj++8YTEmw/zzOXVC3HUuBbqDqWUfgzv+97wyUutyvwSKhpDKM/SCygP+lj+nhmx+Gvy1QKnqvjL9FhZwFCdo2fGx8JeXrQjRkatVP8C8mpvUW0X5ymtpZ8rJnmLgW1Rc1+0VzN7IHDrP1BBa+165p198egfIXvpecsH3RlwjYl9cVM2DZcjL1t","x-forefront-antispam-report":"CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:;\n IPV:NLI; SFV:NSPM; H:SI6PR06MB7631.apcprd06.prod.outlook.com; PTR:; CAT:NONE;\n SFS:(13230040)(366016)(376014)(1800799024)(56012099003)(22082099003)(18002099003)(38070700021);\n DIR:OUT; SFP:1102;","x-ms-exchange-antispam-messagedata-chunkcount":"1","x-ms-exchange-antispam-messagedata-0":"=?iso-8859-1?q?ShrXEzuFeG7ZYNpqxP3+22D?=\n\t=?iso-8859-1?q?IBXyNNA9NiULDGvf21bfPMKlTmFmcuEktcERpM19qg+LMOlTm9XQ3abTzanQ?=\n\t=?iso-8859-1?q?UcOYejFwMF6MBtc8b0dmi4dJlanOavsMSIjuusMjnFZRG0YHVricfnuUT2Qq?=\n\t=?iso-8859-1?q?NivC4kcYLquIu4/ojpq9w5f/TWFBQFzZHsLKFUhFCdZzh0cDbHZ+KH5iDHiG?=\n\t=?iso-8859-1?q?WZvpw3NTf4NcPFXqhHqavhtcPA51cpUrPOSVc3G7l/XXYyE/vVHjgVKDAqOE?=\n\t=?iso-8859-1?q?dLrZpPwPPmW3UTtEsir6nQT9Nm7Fm76xZe+XzjjUMF5g4eJVA5hUYZf3pc7I?=\n\t=?iso-8859-1?q?136z0uTVijsgIgtAvD9CbXnelW9yvtGcw4hznMt2kVVzPOzE9Lb+jC+5+S6e?=\n\t=?iso-8859-1?q?EjFwXnrmgQtG7C87oi+YL215VAP0P9jsgxw1gn0BHlGISVZjHEhN85AXGNA6?=\n\t=?iso-8859-1?q?82r1iK51DfyGkPgut7tnGyWYOJQ1Qh3XpKUYg9VyUL+M3yDFy7J//wRIrl5P?=\n\t=?iso-8859-1?q?tGD7/PbgiwAm6qni6ESN4Df/p695BdjPrDiKm9Q9bi0iF0pnTRd/Nmc/Cj35?=\n\t=?iso-8859-1?q?AQtaERHE5OxxpghBylSQ/GMGRzNud8oe+RhHnDM0SQSUuiBLkKv5jy/omoDm?=\n\t=?iso-8859-1?q?nnagnSjHlMb3DTuMrVirbl3sgVJ7aWd4T2TsfzOC/35MYrRnWrd6bhkPeC2t?=\n\t=?iso-8859-1?q?PWpzYZ3klRMp3JvXfwVUqczEAJmVTR+ub33y9bN6HWAmY0WhNzEeFW/m/m67?=\n\t=?iso-8859-1?q?5xbvJBWEdWBs7AVxyAOhFH5cItEGxZ8BeAoJxg0TR9hcdab7EqLoHaBs43jO?=\n\t=?iso-8859-1?q?HdCvsE7ZFQ0eAnApeTcmXkZS9O6diT8rgjRgnBjXLYNgikoo52xlAAWJi5kY?=\n\t=?iso-8859-1?q?LKhL/j5rPPREdXmAjF5o4yfI+2CIv/l5TcizZHaItU6KQVoB4gxkuwbGF6LF?=\n\t=?iso-8859-1?q?zO561pNrsi3KKKI/34FR8hTOkxFv3qR8KjK+86Cags3IsQS/Vn0GL3UdGlJM?=\n\t=?iso-8859-1?q?CuvhWee2EBNEGZTZmOAluX4X7ycOIjs3bz2PiJF/DmZzDtAMfGDuocWf0i7y?=\n\t=?iso-8859-1?q?cgBlbckdhZbZsQydwP6A+oztM+bDg5iSHGdcLMz9vhagNSz265KUKYqaRC3D?=\n\t=?iso-8859-1?q?mOKhmQ2IwUxBJqLvXLay7l+O5/s4uRdRjdz2a08b1vHLEqLIZ0bFgJ3UbCMr?=\n\t=?iso-8859-1?q?qKVllzIxpa2U4LTBx78FiAsoZRcrxjTngttoyy6t2jqP95TlxJUo3ae9/LY1?=\n\t=?iso-8859-1?q?wu5UWnRMIBMHG8AkRLz3SdwQHOgJvKEv15Rupwxeb0FPqpOEnxDBK23PBd5M?=\n\t=?iso-8859-1?q?hX+Y5YqWBq3XnWTYcUi+s40yoIRPO2AV1bv0glGUKMCJig96ZyG0Q/6s1epT?=\n\t=?iso-8859-1?q?WCBzmOjvOGroz9+BVGuZSd9RD1xT/H3IuLrJBSAXDi81UakhHT63gX6WX8hi?=\n\t=?iso-8859-1?q?gCFKMqwfIL11cpLruJg3zIdXFSw6Ge4t1RI1n6epbU7cHKFRYsefh00QO126?=\n\t=?iso-8859-1?q?vaOFl1KuC9/v2EYfIq5qXB7QTT78KLX8kLo+ncMrL/ScUU6kn5zp/oOZnCIz?=\n\t=?iso-8859-1?q?o6ktMbbDzGIzswzb2Ww6WcthBOqrk0gTCPNwuxmnnwzdh1cFoQ1yXDopCFnF?=\n\t=?iso-8859-1?q?cGSmpGLFSaspowzO8/4laKckKC7Qfj9dJUSe/7/ewAO5tMhLl80/XtPHcaGV?=\n\t=?iso-8859-1?q?6Wt6ioYqreiyQle9FPb0wHHmTqAn+L+66SuqA/Dr50ekxwr4vjqidh2KtnFl?=\n\t=?iso-8859-1?q?L0H/j2QqvZ0uzQ6vgcvLXlsWInlp6x7fYv6BXt06BUXhbWA=3D=3D?=","Content-Type":"text/plain; charset=\"iso-8859-1\"","Content-Transfer-Encoding":"quoted-printable","MIME-Version":"1.0","X-Exchange-RoutingPolicyChecked":"\n LA1pSEjwRvoW6IZ7FrJL7R70BNGhc5eyMQQP/V+0Sd0VLgqqRU5sVGJ4rX8bneREN2uP3w2+rg/O9p8rory7ZuNgKuQyLGSBz34edf+of+6NrRpzx/5PxlERRMmdxY6lalG1ZpSL3fUYwgu8pXR+r/+akpjxMbiDuRKSlkC0nnagPicV8RUTxB2ip8g/QBBEZOWtJlIppkRFoCskUzLRfYrmaAEQD0r6rlHXf2zNYc96ZC9gnoyQd0gRBpPQJ6lfHoNb6M+mEXEz76EB3wuckQiLQN0aRQRK+MAI+JzlkTsxGzemedWrPLW1AMnsq86/pR2L5rTk9TUKBLmLrH+cZQ==","X-OriginatorOrg":"aspeedtech.com","X-MS-Exchange-CrossTenant-AuthAs":"Internal","X-MS-Exchange-CrossTenant-AuthSource":"SI6PR06MB7631.apcprd06.prod.outlook.com","X-MS-Exchange-CrossTenant-Network-Message-Id":"\n ed031fb7-a7ed-4dea-7b02-08deacc0f1d3","X-MS-Exchange-CrossTenant-originalarrivaltime":"08 May 2026 05:16:22.3732 (UTC)","X-MS-Exchange-CrossTenant-fromentityheader":"Hosted","X-MS-Exchange-CrossTenant-id":"43d4aa98-e35b-4575-8939-080e90d5a249","X-MS-Exchange-CrossTenant-mailboxtype":"HOSTED","X-MS-Exchange-CrossTenant-userprincipalname":"\n tZWpkHuxvNN75SUHlnANyDrJSpQ1vrR4t6o7kGx+M/GwGR5X85O0h9EbYJ/2+TqiF90BaxFRqLy996oHsDHQ91GlPeI+/2/i2088QveQuy0=","X-MS-Exchange-Transport-CrossTenantHeadersStamped":"PUZPR06MB5885","Received-SPF":"pass client-ip=2a01:111:f403:c405::5;\n envelope-from=kane_chen@aspeedtech.com;\n helo=TYPPR03CU001.outbound.protection.outlook.com","X-Spam_score_int":"-20","X-Spam_score":"-2.1","X-Spam_bar":"--","X-Spam_report":"(-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1,\n DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1,\n RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_PASS=-0.001,\n SPF_PASS=-0.001 autolearn=ham autolearn_force=no","X-Spam_action":"no action","X-BeenThere":"qemu-devel@nongnu.org","X-Mailman-Version":"2.1.29","Precedence":"list","List-Id":"qemu development <qemu-devel.nongnu.org>","List-Unsubscribe":"<https://lists.nongnu.org/mailman/options/qemu-devel>,\n <mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>","List-Archive":"<https://lists.nongnu.org/archive/html/qemu-devel>","List-Post":"<mailto:qemu-devel@nongnu.org>","List-Help":"<mailto:qemu-devel-request@nongnu.org?subject=help>","List-Subscribe":"<https://lists.nongnu.org/mailman/listinfo/qemu-devel>,\n <mailto:qemu-devel-request@nongnu.org?subject=subscribe>","Errors-To":"qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org","Sender":"qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org"},"content":"In the do_hash_operation, the code may be returned earlier because\nhash_prepare_sg_iov or hash_prepare_direct_iov may return a failure.\nWhen this condition is happened, current code flow doesn't go through\nlater code segments. Finally, it causes the mapped address isn't\nunmapped properly.\n\nThis change is intended to unmap the mapped address if there is any\nerror is occurred. Thus, it could prevent a reasoure leak situation.\n\nSigned-off-by: Kane-Chen-AS <kane_chen@aspeedtech.com>\n---\n hw/misc/aspeed_hace.c | 63 ++++++++++++++++++++++++++++++-------------\n 1 file changed, 45 insertions(+), 18 deletions(-)","diff":"diff --git a/hw/misc/aspeed_hace.c b/hw/misc/aspeed_hace.c\nindex 0504d61cbf..a322905cb3 100644\n--- a/hw/misc/aspeed_hace.c\n+++ b/hw/misc/aspeed_hace.c\n@@ -218,8 +218,19 @@ static bool hash_accumulate_len(AspeedHACEState *s, hwaddr plen)\n     return true;\n }\n \n+static void hash_iov_unmap(AspeedHACEState *s, struct iovec *iov,\n+                           hwaddr *mapped_lens, int iov_count)\n+{\n+    for (; iov_count > 0; iov_count--) {\n+        address_space_unmap(&s->dram_as, iov[iov_count - 1].iov_base,\n+                            mapped_lens[iov_count - 1], false,\n+                            mapped_lens[iov_count - 1]);\n+    }\n+}\n+\n static int hash_prepare_direct_iov(AspeedHACEState *s, struct iovec *iov,\n-                                   bool acc_mode, bool *acc_final_request)\n+                                   bool acc_mode, bool *acc_final_request,\n+                                   hwaddr *mapped_lens)\n {\n     uint32_t total_msg_len;\n     uint32_t pad_offset;\n@@ -243,9 +254,11 @@ static int hash_prepare_direct_iov(AspeedHACEState *s, struct iovec *iov,\n \n     iov[0].iov_base = haddr;\n     iov_idx = 1;\n+    mapped_lens[0] = plen;\n \n     if (acc_mode) {\n         if (!hash_accumulate_len(s, plen)) {\n+            hash_iov_unmap(s, iov, mapped_lens, 1);\n             return -1;\n         }\n \n@@ -265,7 +278,8 @@ static int hash_prepare_direct_iov(AspeedHACEState *s, struct iovec *iov,\n }\n \n static int hash_prepare_sg_iov(AspeedHACEState *s, struct iovec *iov,\n-                               bool acc_mode, bool *acc_final_request)\n+                               bool acc_mode, bool *acc_final_request,\n+                               hwaddr *mapped_lens)\n {\n     uint32_t total_msg_len;\n     uint32_t pad_offset;\n@@ -275,6 +289,7 @@ static int hash_prepare_sg_iov(AspeedHACEState *s, struct iovec *iov,\n     int iov_idx;\n     hwaddr plen;\n     void *haddr;\n+    int iov_mapped = 0;\n \n     src = hash_get_source_addr(s);\n     for (iov_idx = 0; !(len & SG_LIST_LEN_LAST); iov_idx++) {\n@@ -282,7 +297,7 @@ static int hash_prepare_sg_iov(AspeedHACEState *s, struct iovec *iov,\n             qemu_log_mask(LOG_GUEST_ERROR,\n                           \"%s: Failed to set end of sg list marker\\n\",\n                           __func__);\n-            return -1;\n+            goto fail;\n         }\n \n         len = address_space_ldl_le(&s->dram_as, src,\n@@ -307,15 +322,17 @@ static int hash_prepare_sg_iov(AspeedHACEState *s, struct iovec *iov,\n                           \"%s: Unable to map address, sg_addr=0x%x, \"\n                           \"plen=0x%\" HWADDR_PRIx \"\\n\",\n                           __func__, sg_addr, plen);\n-            return -1;\n+            goto fail;\n         }\n \n         src += SG_LIST_ENTRY_SIZE;\n \n         iov[iov_idx].iov_base = haddr;\n+        iov_mapped = iov_idx + 1;\n+        mapped_lens[iov_idx] = plen;\n         if (acc_mode) {\n             if (!hash_accumulate_len(s, plen)) {\n-                return -1;\n+                goto fail;\n             }\n \n             if (has_padding(s, &iov[iov_idx], plen, &total_msg_len,\n@@ -332,6 +349,10 @@ static int hash_prepare_sg_iov(AspeedHACEState *s, struct iovec *iov,\n     }\n \n     return iov_idx;\n+\n+fail:\n+    hash_iov_unmap(s, iov, mapped_lens, iov_mapped);\n+    return -1;\n }\n \n static uint64_t hash_get_digest_addr(AspeedHACEState *s)\n@@ -350,6 +371,7 @@ static uint64_t hash_get_digest_addr(AspeedHACEState *s)\n static void hash_write_digest_and_unmap_iov(AspeedHACEState *s,\n                                             struct iovec *iov,\n                                             int iov_idx,\n+                                            hwaddr *mapped_lens,\n                                             uint8_t *digest_buf,\n                                             size_t digest_len)\n {\n@@ -369,15 +391,12 @@ static void hash_write_digest_and_unmap_iov(AspeedHACEState *s,\n         hace_hexdump(\"digest\", (char *)digest_buf, digest_len);\n     }\n \n-    for (; iov_idx > 0; iov_idx--) {\n-        address_space_unmap(&s->dram_as, iov[iov_idx - 1].iov_base,\n-                            iov[iov_idx - 1].iov_len, false,\n-                            iov[iov_idx - 1].iov_len);\n-    }\n+    hash_iov_unmap(s, iov, mapped_lens, iov_idx);\n }\n \n static void hash_execute_non_acc_mode(AspeedHACEState *s, int algo,\n-                                      struct iovec *iov, int iov_idx)\n+                                      struct iovec *iov, int iov_idx,\n+                                      hwaddr *mapped_lens)\n {\n     g_autofree uint8_t *digest_buf = NULL;\n     Error *local_err = NULL;\n@@ -389,15 +408,17 @@ static void hash_execute_non_acc_mode(AspeedHACEState *s, int algo,\n                       \"%s: qcrypto hash bytesv failed : %s\",\n                       __func__, error_get_pretty(local_err));\n         error_free(local_err);\n+        hash_iov_unmap(s, iov, mapped_lens, iov_idx);\n         return;\n     }\n \n-    hash_write_digest_and_unmap_iov(s, iov, iov_idx, digest_buf, digest_len);\n+    hash_write_digest_and_unmap_iov(s, iov, iov_idx, mapped_lens,\n+                                    digest_buf, digest_len);\n }\n \n static void hash_execute_acc_mode(AspeedHACEState *s, int algo,\n                                   struct iovec *iov, int iov_idx,\n-                                  bool final_request)\n+                                  bool final_request, hwaddr *mapped_lens)\n {\n     g_autofree uint8_t *digest_buf = NULL;\n     Error *local_err = NULL;\n@@ -411,6 +432,7 @@ static void hash_execute_acc_mode(AspeedHACEState *s, int algo,\n             qemu_log_mask(LOG_GUEST_ERROR, \"%s: qcrypto hash new failed : %s\",\n                           __func__, error_get_pretty(local_err));\n             error_free(local_err);\n+            hash_iov_unmap(s, iov, mapped_lens, iov_idx);\n             return;\n         }\n     }\n@@ -419,6 +441,7 @@ static void hash_execute_acc_mode(AspeedHACEState *s, int algo,\n         qemu_log_mask(LOG_GUEST_ERROR, \"%s: qcrypto hash updatev failed : %s\",\n                       __func__, error_get_pretty(local_err));\n         error_free(local_err);\n+        hash_iov_unmap(s, iov, mapped_lens, iov_idx);\n         return;\n     }\n \n@@ -438,22 +461,25 @@ static void hash_execute_acc_mode(AspeedHACEState *s, int algo,\n         s->total_req_len = 0;\n     }\n \n-    hash_write_digest_and_unmap_iov(s, iov, iov_idx, digest_buf, digest_len);\n+    hash_write_digest_and_unmap_iov(s, iov, iov_idx, mapped_lens,\n+                                    digest_buf, digest_len);\n }\n \n static void do_hash_operation(AspeedHACEState *s, int algo, bool sg_mode,\n                               bool acc_mode)\n {\n     QEMU_UNINITIALIZED struct iovec iov[ASPEED_HACE_MAX_SG];\n+    hwaddr mapped_lens[ASPEED_HACE_MAX_SG] = { 0 };\n     bool acc_final_request = false;\n     int iov_idx = -1;\n \n     /* Prepares the iov for hashing operations based on the selected mode */\n     if (sg_mode) {\n-        iov_idx = hash_prepare_sg_iov(s, iov, acc_mode, &acc_final_request);\n+        iov_idx = hash_prepare_sg_iov(s, iov, acc_mode, &acc_final_request,\n+                                      mapped_lens);\n     } else {\n         iov_idx = hash_prepare_direct_iov(s, iov, acc_mode,\n-                                          &acc_final_request);\n+                                          &acc_final_request, mapped_lens);\n     }\n \n     if (iov_idx <= 0) {\n@@ -468,9 +494,10 @@ static void do_hash_operation(AspeedHACEState *s, int algo, bool sg_mode,\n \n     /* Executes the hash operation */\n     if (acc_mode) {\n-        hash_execute_acc_mode(s, algo, iov, iov_idx, acc_final_request);\n+        hash_execute_acc_mode(s, algo, iov, iov_idx, acc_final_request,\n+                              mapped_lens);\n     } else {\n-        hash_execute_non_acc_mode(s, algo, iov, iov_idx);\n+        hash_execute_non_acc_mode(s, algo, iov, iov_idx, mapped_lens);\n     }\n }\n \n","prefixes":["v1","1/1"]}