From nobody Sun Jul 26 12:36:02 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=pass (i=1 dmarc=pass fromdomain=nvidia.com); dmarc=pass(p=reject dis=none) header.from=nvidia.com ARC-Seal: i=2; a=rsa-sha256; t=1782205993; cv=pass; d=zohomail.com; s=zohoarc; b=Bc9K7JuHBmx/hkOgLjf7YJZbbiNCTPz4ZDFwZX/38xU4aYR/ukJLM2d39mt8f2rbe3tKYyxRpMSeXar5dMlfQUNwprUjQccTIYXGeUDZ7ST4+GnjaXkc36IbMCA/fJpcw7DN33yeoSH1IX1cjK+zp5bWNLKZhttyPQv3hJT5lFc= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1782205993; h=Content-Type: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=GPcdM9qLiI3IPX7hYc+YOwkUmvLBtgWe9HFPAPlU3T0=; b=XYuEVzM+qQn5YKggIGyU1+4nb4zgkv4rs5rYfKN9IpKGVMQXpoHP73LURpNXbK3ku/6/k4+UlrRSGnmH7996Z2kAHAF31UTZv/U/xO2Ag8sQcQ93jSSkd5AVqwb3MUr3kBgRNVYMCtyI+CiBj5SQHSgJVJv/KaVkIt5UcliG0vE= ARC-Authentication-Results: i=2; 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=pass (i=1 dmarc=pass fromdomain=nvidia.com); dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1782205993587350.5307161853958; Tue, 23 Jun 2026 02:13:13 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wbxBL-000428-7I; Tue, 23 Jun 2026 05:12:35 -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 1wbxBJ-00041e-D8; Tue, 23 Jun 2026 05:12:33 -0400 Received: from mail-southcentralusazlp170110003.outbound.protection.outlook.com ([2a01:111:f403:c10d::3] helo=SN4PR0501CU005.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wbxBG-0002uw-Qz; Tue, 23 Jun 2026 05:12:32 -0400 Received: from SJ0PR12MB8614.namprd12.prod.outlook.com (2603:10b6:a03:47d::17) by PH7PR12MB6905.namprd12.prod.outlook.com (2603:10b6:510:1b7::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.139.11; Tue, 23 Jun 2026 09:12:22 +0000 Received: from SJ0PR12MB8614.namprd12.prod.outlook.com ([fe80::fe0a:6e6a:fe60:a43b]) by SJ0PR12MB8614.namprd12.prod.outlook.com ([fe80::fe0a:6e6a:fe60:a43b%3]) with mapi id 15.21.0139.018; Tue, 23 Jun 2026 09:12:22 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=AWaKf+2ETr+4QyrC1TT2dyWyChzHoYAux0AL8RKIEsdQp896DvSgKBpHBmgis0HSVkHUOQMnSTPD9TOZI6IFhediqkGYRIR3BeNKkDIEXYXGrZnY43Li4WhW3QgrJemrsismIjKnbA8wLAsCNynF457ZzNrXillTQcewJjA6lYRrcGfXrQspSr+GgEdRBsRtpBLnqkexlVgdDVRNGBYTLHkP4+f7Ttj2XqpeQhX4oiC8qP4Zqar5Ulsq5/EgPEpfYxFg+A+mQlk76KUNRLRUPwbNCrCjyxCT7A/95AT2iRTPZTDBZjKVrWOuqUlGuWa5dP2IgbhiQaamxG1HXbiv3A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; 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; bh=GPcdM9qLiI3IPX7hYc+YOwkUmvLBtgWe9HFPAPlU3T0=; b=CLFdMT5MuxgK9hhiAcKcmPj56EIbNzeXE3/kP4XbZuV7PxEjx2548PeeIlrbxYLjU5tc8zfyqO7/oXqtr/dUj86gGb6ycgn/2z2wVJRjD3Fkx82YlGUy8D7F3tNoq6eaKi9b3PkcxsA99Gv6IlZFqaiLXpxbuE4jVZZfT4wS6PANse1U0YXzfpi0QXCfoQQps5NqbALJfzv+1gBrxyDkO0JBSEjq15w2ExignqblFIeVq0LKUt9wcW0Ps0TXW/f3zRl0Lp2uE4WbOL2CEGF2x9kS1e/MszLQtRLZCl16flDIzYXn8UY+T2vQQORXMVv/+mLqp9fQhjydm0qm7FO60g== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nvidia.com; dmarc=pass action=none header.from=nvidia.com; dkim=pass header.d=nvidia.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=GPcdM9qLiI3IPX7hYc+YOwkUmvLBtgWe9HFPAPlU3T0=; b=I/Wmt88IvcmVN4iEOVXT0DC7rVfQfVOyuO363CfIBMMhkNI1kvkbdTUR5Phr8ACS6BKZaUkL57tTeQNylOePbfQOmvRI45iJxa+fyBcNvdOsLhybQM3W9vIvLXNWgHDH7OnL2+778URh+ypSIvoZ/jjnMmpAFmkxjgnrgl2EWxoT65Vtl3dfXVeDe4VVg8Uvu9tSAhX6X0QsHuD2kFE/xbMGrucY7HhD0m1jiL+DsNqWxRIaw4dlLKAF8hkcjEWAZ4K/fI9iS2+5J1Zoz5hUwOIaLeaUmA7y0ARiXTGW1T0UPl/tPj6cexY1hSBitayd0Tr8dTwE3OrqJIIqvrtPdw== From: Shameer Kolothum Thodi To: Peter Maydell , "eric.auger@redhat.com" CC: "qemu-arm@nongnu.org" , "qemu-devel@nongnu.org" , Nicolin Chen , Nathan Chen , Matt Ochs , Jiandi An Subject: RE: [PATCH] hw/arm/smmuv3-accel: Fix veventq read returning true on EAGAIN/EINTR Thread-Topic: [PATCH] hw/arm/smmuv3-accel: Fix veventq read returning true on EAGAIN/EINTR Thread-Index: AQHdAuUxL4G8eWpLw0OopLlPZ5veS7ZLz8QAgAAELYCAAAYi0A== Date: Tue, 23 Jun 2026 09:12:22 +0000 Message-ID: References: <20260623075101.17770-1-skolothumtho@nvidia.com> <1105dfee-f1bc-4ba0-b8b7-0382c95463c2@redhat.com> In-Reply-To: Accept-Language: en-US, en-GB Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: SJ0PR12MB8614:EE_|PH7PR12MB6905:EE_ x-ms-office365-filtering-correlation-id: 28ea1383-759a-4e16-bdd9-08ded10788e6 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; ARA:13230040|1800799024|366016|376014|23010399003|38070700021|3023799007|4143699003|18002099003|22082099003|11063799006|56012099006; x-microsoft-antispam-message-info: r76RirPjqlUPp+v498By/HQ6BkrnDKJBY5d+YmFBuEOue9pi7jDi9t22mgSgiycpy66RtXf5v6FIHJa/LKzLFeZ2jEgSi8KjdMq7LL/zgaQWqLK+CFGRuhbKZYqyTTwX4ppfIisMRKlH8qVM2mRVkqKJgJVmrEiFugKcrsS6k6s9zr3hE9fwBEZhF4WsX0e/utF51HakHaAMffF+zM6HbssafierpgKNV/vTKxUmuTEEJPI5ygTKVfyqvakGHhnDiqOBJQN9gt16uQ4TiwTcsYMk1mNouSjwCOGGKTa3cR1/WcufAHuOE75JeUOU+7QtwE2n8S8Tax6l2ZuhjjJNj/jcuhD8AbsZceSTndEC6p0mC7pY/cIBRhs2EFupYLHDWFeOidzr98KN/IYOFVb6GV0KBK7bvCW0O1uGXJvBleTLpqwmdq6zmsvq9ICzJ2VBjx0AhS2YiYIvgjqjwUQnh6c7RizeWxQE1+nrrmH1Tr1YUCUNneJ1sTGUaLpMrCfoIRgtxuEVgjMO0XsNjJ6lhFXyfz7FFldelBUK2QPifGL0iuJUa6PLPyFv8JFXDqZxaz+Gm8E6ukSHrVLREseSIRRCfI31THYQEWVxhqTduqg/NIaSAEKsa0lSenuPfKrGcErI99iZN63gCi/i8RKAokcnxBzAk1GymS/FfN70ao67cP2XKhhYn0in77tQY6pgZbK1+pM0HD0ZV4l22UL44MDF/1iX82bbMIh3YCddHpI= x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:SJ0PR12MB8614.namprd12.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(1800799024)(366016)(376014)(23010399003)(38070700021)(3023799007)(4143699003)(18002099003)(22082099003)(11063799006)(56012099006); DIR:OUT; SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?RmplZ3RITU1vRHNxZURWa2F0RW04MDVoSXE3VFJOd1gxbi95dkJXcmNhdFJW?= =?utf-8?B?WWxqZGhKOEN0YnRBZzhEbHVsdmt6RWdCLzMvamVjZE95QjlhbERwY013NTVy?= =?utf-8?B?Zjd4UGcxdllUOUZCeXB1c2xDQVh0Y2VMYjAzcnVxS0V0U2dHWUU0S0ZxV0ZI?= =?utf-8?B?ZWlwdzJCeTYrRFpFMEthNXlDZm5uc1Fmc1E3NmhIUldubndoYmMxTmF1RnMr?= =?utf-8?B?R3VRWFo5ZzEyeVg2ZjRLelljWS9oa0QwMTNMMHFLWHhSekdVK0xYNzZrTmVu?= =?utf-8?B?cEJTbGFNdDI2YU96K1AwY0VUUnRMWldjTTJSTUl0azNGK2c2QjlwbEtWOEEz?= =?utf-8?B?QmVVeThyOHNaSXdSUWtaWjhqUkRnYU1IVWhmTUdLVUUzdXNHaTZvaE9yeTZh?= =?utf-8?B?RnpJR0NWR20zTlA3eEdXWTYxVldONWtJMEprUXR5aUdvejlNaDdTbm5LRERi?= =?utf-8?B?UU5PRkNWRnljdC9CVllKK2xvRlZzcE9RZVVzQWpvSThEQnhRSWZrMHAzNGdY?= =?utf-8?B?Q05PTVBlbm5FOS9mR1J3dDV4Rjdqdm9ySGQ4ZzNmMDA1NTBKbDVnS1JocTAw?= =?utf-8?B?QUtTYVlaOVFnRWtPOVdrbDc1dEpGWS9qeUpHY2ZDTjlpQ2MwZWVOajFsSmVZ?= =?utf-8?B?ZlFHM0kvcm1IR2R1VU1QWmV1Yk9VanFuQUxWbzVUSjZDRnJHZGY1MlVKSlVu?= =?utf-8?B?ekk1cTdidkxrQy94bytiQUtJOVBDczBtSlQzSmgrS1RzdS9mbUJuU2NvR1RQ?= =?utf-8?B?QitQMW1lcUNSQzdBTk5BVDFYYkpBcVA2RUNST24vRy9ERTU0VkprMzU2Qklw?= =?utf-8?B?K2FwelBySmZ6YkpZem1vdHh3SVFBUm9GbjVMMG9RRXR6NDZOemVZNUk2aC9E?= =?utf-8?B?NWh4ZlJRand4QjFuL1o4blFEWmpRaHZjUzF6MjZONDVsRkxkV3BSZlVsU1V0?= =?utf-8?B?TVZDTWxUWWNKbEZmZDZIZmpzZXl0MjRTN2RxMG1NbWVWUGpqNGhLRVYxNnIx?= =?utf-8?B?NUkvKzRNUko1UmdiK2R1bEJDdWJkSzVDWllhYXBVejhQVVZqUURHSzhZd0RJ?= =?utf-8?B?WXhDVXkwT05UcTFCOSt1SFpmMm1WMWRHQ3hwVStPMUhDV2p6Y3dzRlF6eHFl?= =?utf-8?B?QVloTEFBa2VyRWQwdnN2N0d3RHhBeXI0QjFlNzZIMGpZZmJUd0tjY1loTTht?= =?utf-8?B?MGtiWXVJT3pTQkZkVzQwOEhqTjJnT2VURElJYmdEamdYdVAvVFdKOG4zTmZP?= =?utf-8?B?d2JrSmUvMlJaYkxJdHVJeEY5cG1UbzVRZkZvUXpOZDk2NWxvZytUQzc0R3l6?= =?utf-8?B?R3paRjlkWWNZaFNyeUxqZ0xWUDdTWTQzTnAxOFo5UEgyaEpYb0pkTWRhYnps?= =?utf-8?B?SzNGRGp4aHZqcXNMaGhVS0x6b1V0VEk3TFRvNURidEVOVEpKT3hWQmlsKzNJ?= =?utf-8?B?TFI5TVVWRndvU1kwTk1rYUlCNElJZkROeitRb0xWQ0tSaExJamt2MDI5WitB?= =?utf-8?B?WUFnWUZMWEorTGJOKzFmN2FWazU0aUE2aEpvS1FPMnFjOHRlbHNDNk9uS3p2?= =?utf-8?B?Y0pTb2pkQWh6VkpxUXJPTENiL0dJYThsdlM1NFdrT0EyZVMvSVRRQXNqY0Mz?= =?utf-8?B?UUd1Qm1iZ3RpZEZOWHo4Yy91Z0thMlBiL3FrZEpidzlZdW1kUFlPd2VuTi8x?= =?utf-8?B?Wjk4S2U3bVI2OTJvT2R5d3FISXJma2Y1Vm1TQUROM1BLMU1MS1pSL1NxaTBT?= =?utf-8?B?ZngvMWE1dUFsNXN2RjB3cE1PK0VTam1wb0I2SFRObDM4MEtEWEFhUkZGaG1U?= =?utf-8?B?MG0zQ3BpOHh4dGdjaUlyTDRDVlBiZHV3M21Qd1BObU1rNjhyNGh0dU9VVlV4?= =?utf-8?B?UGNiQmVWZHI0MzYxSjZzUmNaY3h2OHR3VmFGM1BWczJIc1FiaTNUa3FPWnFE?= =?utf-8?B?a1Bsa3podUdqNHFTUXBTbE1vQnVIZGI3M2s0KzRMbUpVcStFT3RUNHpaM29U?= =?utf-8?B?TjA5Zm05cGRsRWtxQnRsajBBSHlqNmFaNDNzMGtjTHFHWm9odTB1dzdzeFFw?= =?utf-8?B?T0duMjJrZ0VvRUZDb1pETENUMEEwSjJ2MC9JUEdJSFlkem9qOVA3TWJwb21F?= =?utf-8?B?WC90bnpSSXBGZTQ3N3pyUVloU2srcEwydXVBY2JRUk1UTHBVR2ZiZmRVRjMv?= =?utf-8?B?YWZwQm82bEwrOGZSOGhpYzRJdjBjWW1USjR0VFN4WGN3NFIvVUVjUzJmQmE4?= =?utf-8?B?dXdtTnIyZ01vVU83ekNTZ01SaWJDUEZqbGhFM25aai9GTkIySng3RDhZN2lj?= =?utf-8?B?L1N5b00ydG1OR1FtYXl5eDlmM0ZTZGFWdFEyTTh2dTB5SmlHZEoxQT09?= Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: SJ0PR12MB8614.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 28ea1383-759a-4e16-bdd9-08ded10788e6 X-MS-Exchange-CrossTenant-originalarrivaltime: 23 Jun 2026 09:12:22.4735 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: 1cJY50yZmQw5JigB0X0eEEv7m46xnmrCikPVFESrzwpU3WYr8zrMCL4K7y6MMEiLgF9+CFZHd7OBf8UPT7LfMw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH7PR12MB6905 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: permerror client-ip=2a01:111:f403:c10d::3; envelope-from=skolothumtho@nvidia.com; helo=SN4PR0501CU005.outbound.protection.outlook.com X-Spam_score_int: -24 X-Spam_score: -2.5 X-Spam_bar: -- X-Spam_report: (-2.5 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.445, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, SPF_HELO_NONE=0.001, SPF_NONE=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 @Nvidia.com) X-ZM-MESSAGEID: 1782205995202158500 > -----Original Message----- > From: Peter Maydell > Sent: 23 June 2026 09:47 > To: eric.auger@redhat.com > Cc: Shameer Kolothum Thodi ; qemu- > arm@nongnu.org; qemu-devel@nongnu.org; Nicolin Chen > ; Nathan Chen ; Matt Ochs > ; Jiandi An > Subject: Re: [PATCH] hw/arm/smmuv3-accel: Fix veventq read returning true > on EAGAIN/EINTR >=20 > On Tue, 23 Jun 2026 at 09:32, Eric Auger wrote: ) > > > if (!smmuv3_accel_event_read_validate(veventq, > > > IOMMU_VEVENTQ_TYPE_TEGRA24= 1_CMDQV, > > > &buf, sizeof(buf), &local_= err)) { > > > - warn_report_err_once(local_err); > > > + if (local_err) { > > This is not aligned with the general policy. If a function taking an > > error handle fails (and returns false), it should set errp. > > Don't you have a way to initialize buf in smmuv3_accel_event_read() > > and only call smmuv3_propagate_event() if the hdr of vevnt is checked > valid? >=20 > I think fundamentally the function has three return states: > - success > - failure > - try again later >=20 > Probably the simplest thing is to not use a 'bool' for the return type but > instead something that has 3 values. Then you can set errp on the "failur= e" > case, and the caller can tell which of the three cases it is dealing with. Ok. How about this one below. I used int and documented ret types. Could switch to enum if that=E2=80=99s preferred. Please let me know. Thanks, Shameer diff --git a/hw/arm/smmuv3-accel.h b/hw/arm/smmuv3-accel.h index dd755c394d..ea11d513cc 100644 --- a/hw/arm/smmuv3-accel.h +++ b/hw/arm/smmuv3-accel.h @@ -97,8 +97,8 @@ bool smmuv3_accel_issue_inv_cmd(SMMUv3State *s, void *cmd= , SMMUDevice *sdev, Error **errp); void smmuv3_accel_idr_override(SMMUv3State *s); bool smmuv3_accel_alloc_veventq(SMMUv3State *s, Error **errp); -bool smmuv3_accel_event_read_validate(IOMMUFDVeventq *veventq, uint32_t ty= pe, - void *buf, size_t size, Error **errp= ); +int smmuv3_accel_event_read_validate(IOMMUFDVeventq *veventq, uint32_t typ= e, + void *buf, size_t size, Error **errp); void smmuv3_accel_reset(SMMUv3State *s); SMMUv3AccelCmdqvType smmuv3_accel_cmdqv_type(Object *obj); diff --git a/hw/arm/smmuv3-accel-stubs.c b/hw/arm/smmuv3-accel-stubs.c index 147ae06163..b8dd7e7b89 100644 --- a/hw/arm/smmuv3-accel-stubs.c +++ b/hw/arm/smmuv3-accel-stubs.c @@ -47,10 +47,10 @@ bool smmuv3_accel_alloc_veventq(SMMUv3State *s, Error *= *errp) return true; } -bool smmuv3_accel_event_read_validate(IOMMUFDVeventq *veventq, uint32_t ty= pe, - void *buf, size_t size, Error **errp) +int smmuv3_accel_event_read_validate(IOMMUFDVeventq *veventq, uint32_t typ= e, + void *buf, size_t size, Error **errp) { - return true; + return 0; } diff --git a/hw/arm/smmuv3-accel.c b/hw/arm/smmuv3-accel.c index 80900c2521..6df19f0e0e 100644 --- a/hw/arm/smmuv3-accel.c +++ b/hw/arm/smmuv3-accel.c @@ -440,8 +440,13 @@ bool smmuv3_accel_issue_inv_cmd(SMMUv3State *bs, void = *cmd, SMMUDevice *sdev, sizeof(Cmd), &entry_num, cmd, errp); } -bool smmuv3_accel_event_read_validate(IOMMUFDVeventq *veventq, uint32_t ty= pe, - void *buf, size_t size, Error **errp) +/* + * Returns 0 on success (buf is populated and valid). + * Returns 1 if the read should be retried (EAGAIN/EINTR). + * Returns -1 on error with @errp set. + */ +int smmuv3_accel_event_read_validate(IOMMUFDVeventq *veventq, uint32_t typ= e, + void *buf, size_t size, Error **errp) { uint32_t last_seq =3D veventq->last_event_seq; uint32_t id =3D veventq->veventq_id; @@ -451,22 +456,22 @@ bool smmuv3_accel_event_read_validate(IOMMUFDVeventq = *veventq, uint32_t type, bytes =3D read(veventq->veventq_fd, buf, size); if (bytes <=3D 0) { if (errno =3D=3D EAGAIN || errno =3D=3D EINTR) { - return true; + return 1; } error_setg(errp, "vEVENTQ(type %u id %u): read failed (%m)", type,= id); - return false; + return -1; } hdr =3D (struct iommufd_vevent_header *)buf; if (bytes =3D=3D sizeof(*hdr) && (hdr->flags & IOMMU_VEVENTQ_FLAG_LOST_EVENTS)) { error_setg(errp, "vEVENTQ(type %u id %u): overflowed", type, id); veventq->event_start =3D false; - return false; + return -1; } if (bytes < size) { error_setg(errp, "vEVENTQ(type %u id %u): short read(%zd/%zd bytes= )", type, id, bytes, size); - return false; + return -1; } /* Check sequence in hdr for lost events if any */ if (veventq->event_start && (hdr->sequence - last_seq !=3D 1)) { @@ -475,7 +480,7 @@ bool smmuv3_accel_event_read_validate(IOMMUFDVeventq *v= eventq, uint32_t type, } veventq->last_event_seq =3D hdr->sequence; veventq->event_start =3D true; - return true; + return 0; } static void smmuv3_accel_event_read(void *opaque) @@ -487,13 +492,18 @@ static void smmuv3_accel_event_read(void *opaque) struct iommu_vevent_arm_smmuv3 vevent; } buf; Error *local_err =3D NULL; + int ret; - if (!smmuv3_accel_event_read_validate(veventq, - IOMMU_VEVENTQ_TYPE_ARM_SMMUV3, &= buf, - sizeof(buf), &local_err)) { + ret =3D smmuv3_accel_event_read_validate(veventq, + IOMMU_VEVENTQ_TYPE_ARM_SMMUV3, = &buf, + sizeof(buf), &local_err); + if (ret < 0) { warn_report_err_once(local_err); return; } + if (ret > 0) { + return; /* EAGAIN/EINTR */ + } smmuv3_propagate_event(s, (Evt *)&buf.vevent); } diff --git a/hw/arm/tegra241-cmdqv.c b/hw/arm/tegra241-cmdqv.c index 29c488e0e4..7223aa9d1d 100644 --- a/hw/arm/tegra241-cmdqv.c +++ b/hw/arm/tegra241-cmdqv.c @@ -841,13 +841,18 @@ static void tegra241_cmdqv_event_read(void *opaque) struct iommu_vevent_tegra241_cmdqv vevent; } buf; Error *local_err =3D NULL; + int ret; - if (!smmuv3_accel_event_read_validate(veventq, - IOMMU_VEVENTQ_TYPE_TEGRA241_CMDQ= V, - &buf, sizeof(buf), &local_err)) { + ret =3D smmuv3_accel_event_read_validate(veventq, + IOMMU_VEVENTQ_TYPE_TEGRA241_CMD= QV, + &buf, sizeof(buf), &local_err); + if (ret < 0) { warn_report_err_once(local_err); return; } + if (ret > 0) { + return; /* EAGAIN/EINTR */ + } if (buf.vevent.lvcmdq_err_map[0] || buf.vevent.lvcmdq_err_map[1]) { cmdqv->vintf_cmdq_err_map[0] =3D --