From nobody Tue Aug 25 13:45:46 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org ARC-Seal: i=1; a=rsa-sha256; t=1779486897; cv=none; d=zohomail.com; s=zohoarc; b=PjmiLpKveDUMhcFDXcL6AMrzld3DwZYeCUZaVEPSr92ocaZX1oDcxygWhQpxmAcwyXpqxpeXCcFee0snNENlffQ1XrmBHN6I1M2bobCFGux05AMLpalkkWPSa2XkXfo8MBBHs0XORHaba4GRQsZhNH29g9Ykv4i7AfAdQo/Xs1U= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1779486897; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=seM8IVLWBhYTrX3GZUvUZ24FIH4M18GTZgtuhhnGPOE=; b=dB9gt8b1d2mkkpMt+fYvvWMI4KMKwtAtxCBi0bxudmXWSOkeQa0rFTIHC2GofiGq4RqH7jn3A77X6YTcj7Sq4GXICjQLrmf3z1ZBnG3PnFBnvBOpAZXm2vt2bdBRKqa4dsQ0URhwAUphESCzmB1HOFwQq6w5H64fUx94EeLtnxg= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1779486897716780.4512308208956; Fri, 22 May 2026 14:54:57 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wQXnh-0007yW-3B; Fri, 22 May 2026 17:53:01 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wQXne-0007l8-JD; Fri, 22 May 2026 17:52:58 -0400 Received: from isrv.corpit.ru ([212.248.84.144]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wQXnc-0004tm-Lg; Fri, 22 May 2026 17:52:58 -0400 Received: from tsrv.corpit.ru (tsrv.tls.msk.ru [192.168.177.2]) by isrv.corpit.ru (Postfix) with ESMTP id AAC521AFB82; Sat, 23 May 2026 00:49:21 +0300 (MSK) Received: from think4mjt.tls.msk.ru (mjtthink.wg.tls.msk.ru [192.168.177.146]) by tsrv.corpit.ru (Postfix) with ESMTP id D3F093B71D1; Sat, 23 May 2026 00:49:25 +0300 (MSK) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=tls.msk.ru; s=202602; t=1779486561; bh=3gCp9P8lzOzWemcSgz9RLicv+lIT1NRhucqMZ2mW784=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=fxJQ/DW+Z6Od3r6eENr0oQvcO+Kl2fodVLZQB2xQWLchdkAgJ3P9maQ/FvdG6ig9I MODEnuzX0EFTPuEXtOFoqHNUO6KcXy3pHOFz8HnrjdGsIhcnGfNK5nha7q3i43jmAG Wb/gBoQpBOFTt7DY+YuzNMg4cfcZzQg3PEAYElZ024NxLq+MZE/YngxbBS5epYLAZW 0gfYP6Q4Yo9kYvjq5igBRU5upF5g1L+vkEd65FCMMpYukfH568yOqeJH7jhM+qadrT 9qZYwGEvv8lehHsnBMNcgRuw6Wc2K9xJqSM0z6V9QEVM4bptNfTO3g0+NZGf1rr8g0 PZgparDxxm5Mw== From: Michael Tokarev To: qemu-devel@nongnu.org Cc: qemu-stable@nongnu.org, Kevin Wolf , Michael Tokarev Subject: [Stable-10.2.3 140/149] ide: Clean up ide_trim_co_entry() to be idiomatic coroutine code Date: Sat, 23 May 2026 00:49:12 +0300 Message-ID: <20260522214923.807017-41-mjt@tls.msk.ru> X-Mailer: git-send-email 2.47.3 In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=212.248.84.144; envelope-from=mjt@tls.msk.ru; helo=isrv.corpit.ru X-Spam_score_int: -19 X-Spam_score: -2.0 X-Spam_bar: -- X-Spam_report: (-2.0 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, SPF_HELO_NONE=0.001, 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 List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @tls.msk.ru) X-ZM-MESSAGEID: 1779486900154154100 Content-Type: text/plain; charset="utf-8" From: Kevin Wolf The previous commit did a minimal conversion of the callback based state machine for TRIM to a coroutine in order to fix a bug. Refactor it to actually look like normal coroutine based code, which improves its readability. Signed-off-by: Kevin Wolf Message-ID: <20260421161132.99878-6-kwolf@redhat.com> Signed-off-by: Kevin Wolf (cherry picked from commit c1c71a7e167fdabaa9827d00c0be3aeafebdd921) Signed-off-by: Michael Tokarev diff --git a/hw/ide/core.c b/hw/ide/core.c index a2430f3a8e..c11d52d834 100644 --- a/hw/ide/core.c +++ b/hw/ide/core.c @@ -420,18 +420,15 @@ typedef struct TrimAIOCB { QEMUBH *bh; int ret; QEMUIOVector *qiov; - int i, j; + bool canceled; } TrimAIOCB; =20 static void trim_aio_cancel(BlockAIOCB *acb) { TrimAIOCB *iocb =3D container_of(acb, TrimAIOCB, common); =20 - /* Exit the loop so ide_issue_trim_cb will not continue */ - iocb->j =3D iocb->qiov->niov - 1; - iocb->i =3D (iocb->qiov->iov[iocb->j].iov_len / 8) - 1; - - iocb->ret =3D -ECANCELED; + /* Exit the loop so ide_trim_co_entry will not continue */ + iocb->canceled =3D true; } =20 static const AIOCBInfo trim_aiocb_info =3D { @@ -458,60 +455,55 @@ static void coroutine_fn ide_trim_co_entry(void *opaq= ue) { TrimAIOCB *iocb =3D opaque; IDEState *s =3D iocb->s; - int ret =3D 0; + int i, j; + int ret; =20 /* Paired with blk_end_request in ide_trim_bh_cb() */ blk_co_start_request(s->blk); =20 -loop: - if (iocb->i >=3D 0) { - if (ret >=3D 0) { - block_acct_done(blk_get_stats(s->blk), &s->acct); - } else { - block_acct_failed(blk_get_stats(s->blk), &s->acct); - } - } + for (j =3D 0; j < iocb->qiov->niov; j++) { + for (i =3D 0; i < iocb->qiov->iov[j].iov_len / 8; i++) { + uint64_t *buffer =3D iocb->qiov->iov[j].iov_base; =20 - if (ret >=3D 0) { - while (iocb->j < iocb->qiov->niov) { - int j =3D iocb->j; - while (++iocb->i < iocb->qiov->iov[j].iov_len / 8) { - int i =3D iocb->i; - uint64_t *buffer =3D iocb->qiov->iov[j].iov_base; + /* 6-byte LBA + 2-byte range per entry */ + uint64_t entry =3D le64_to_cpu(buffer[i]); + uint64_t sector =3D entry & 0x0000ffffffffffffULL; + uint16_t count =3D entry >> 48; =20 - /* 6-byte LBA + 2-byte range per entry */ - uint64_t entry =3D le64_to_cpu(buffer[i]); - uint64_t sector =3D entry & 0x0000ffffffffffffULL; - uint16_t count =3D entry >> 48; + if (count =3D=3D 0) { + continue; + } =20 - if (count =3D=3D 0) { - continue; - } + if (iocb->canceled) { + iocb->ret =3D -ECANCELED; + goto done; + } =20 - if (!ide_sect_range_ok(s, sector, count)) { - block_acct_invalid(blk_get_stats(s->blk), BLOCK_ACCT_U= NMAP); - iocb->ret =3D -EINVAL; - goto done; - } + if (!ide_sect_range_ok(s, sector, count)) { + block_acct_invalid(blk_get_stats(s->blk), BLOCK_ACCT_UNMAP= ); + iocb->ret =3D -EINVAL; + goto done; + } =20 - block_acct_start(blk_get_stats(s->blk), &s->acct, - count << BDRV_SECTOR_BITS, BLOCK_ACCT_UNM= AP); + block_acct_start(blk_get_stats(s->blk), &s->acct, + count << BDRV_SECTOR_BITS, BLOCK_ACCT_UNMAP); =20 - /* Got an entry! Submit and exit. */ - ret =3D blk_co_pdiscard(s->blk, - sector << BDRV_SECTOR_BITS, - count << BDRV_SECTOR_BITS, - BDRV_REQ_NO_QUEUE); - goto loop; + /* Got an entry! Submit and exit. */ + ret =3D blk_co_pdiscard(s->blk, + sector << BDRV_SECTOR_BITS, + count << BDRV_SECTOR_BITS, + BDRV_REQ_NO_QUEUE); + if (ret >=3D 0) { + block_acct_done(blk_get_stats(s->blk), &s->acct); + } else { + iocb->ret =3D ret; + block_acct_failed(blk_get_stats(s->blk), &s->acct); + goto done; } - - iocb->j++; - iocb->i =3D -1; } - } else { - iocb->ret =3D ret; } =20 + iocb->ret =3D 0; done: if (iocb->bh) { replay_bh_schedule_event(iocb->bh); @@ -533,8 +525,7 @@ BlockAIOCB *ide_issue_trim( &DEVICE(dev)->mem_reentrancy_guard); iocb->ret =3D 0; iocb->qiov =3D qiov; - iocb->i =3D -1; - iocb->j =3D 0; + iocb->canceled =3D false; =20 co =3D qemu_coroutine_create(ide_trim_co_entry, iocb); aio_co_enter(qemu_get_current_aio_context(), co); --=20 2.47.3