From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail.openvz.org (mail.openvz.org [69.168.225.77]) by lore.virtuozzo.com (Postfix) with ESMTPS id 996E680C1B for ; Fri, 23 Oct 2026 16:55:46 +0000 (UTC) Received: from mail.openvz.org (localhost [127.0.0.1]) by mail.openvz.org (8.14.4/8.14.4) with ESMTP id 69NGsY8q026396; Fri, 23 Oct 2026 19:54:35 +0300 DKIM-Filter: OpenDKIM Filter v2.11.0 mail.openvz.org 69NGsY8q026396 Authentication-Results: mail.openvz.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=virtuozzo.com header.i=@virtuozzo.com header.b="krmwXd1N" Received: from mail-yx1-f72.google.com (mail-yx1-f72.google.com [74.125.224.72]) by mail.openvz.org (8.14.4/8.14.4) with ESMTP id 69NGsWns026384 (version=TLSv1/SSLv3 cipher=AES128-GCM-SHA256 bits=128 verify=FAIL) for ; Fri, 23 Oct 2026 19:54:33 +0300 DKIM-Filter: OpenDKIM Filter v2.11.0 mail.openvz.org 69NGsWns026384 Received: by mail-yx1-f72.google.com with SMTP id 956f58d0204a3-67906c453b8so2131441d50.1 for ; Fri, 23 Oct 2026 09:54:33 -0700 (PDT) X-Gm-Message-State: AFq9FYKAbWkquQm3z3X/GBeJuGSuIC57xF1CgGO7ojUtCfD8XHgHYDmJ DEcG0bkmBxABAY22t5Fk9okjSUcHgXvyywdAeloHa8c1cEYT6sK9bnMKPFBZ3faJVqcWiFOjfE8 b+zB+SDAk10cWUISJuoSTrA2HfGigUl/uadVfJT2PRtOSp9r+wc1FEQ== X-Gm-Gg: AYBFou2U7RAnGovsK8SKDYS6f7aFDlUznl+ydkHB4yb9ubcoGAMT6iMEuvq3tICS/x6 rdRdVXRwLBukoiNLnZuA7QYOzLZV/oo6jE0QsXdU35MKlv8bRiYZMmwe4M/c2lHXsqUQv3IeyzC Z3UX+e4ROdJo/8atr9MRWbZCWwM9AWhGEIU/0bCSqSUtk+cVYKYR4MNEktJ5knorBB5lv14w9NW jEE36qbUspt6J08E/azJJWtHG7najmFUl0vZuurWt0NJZx7jOHKlreymqOr8wk6eDjzCozxoGFX 5gSHY3LnGSGpfz9Uo7If+secfIl8rajtee8ypOpPClUtnhS54erYyxUG8TOHYxiHTz0VmVzpdm/ rmm36w3AI07AMIRbH729G5J7wQTJ2QGqNQyRb+DN7rIsMWEIKu4MXBt+HOl6tEb04fqy1ALUmGW zT2a8Gjt7q/1bFn6OS8D5y2oiDNFzgI0v64e8= X-Received: by 2002:a05:690e:bc9:b0:679:8c43:a13d with SMTP id 956f58d0204a3-67a35a68c7amr2035763d50.4.1792774472092; Fri, 23 Oct 2026 09:54:32 -0700 (PDT) X-Received: by 2002:a05:690e:bc9:b0:679:8c43:a13d with SMTP id 956f58d0204a3-67a35a68c7amr2035746d50.4.1792774471559; Fri, 23 Oct 2026 09:54:31 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1792774471; cv=pass; d=google.com; s=arc-20260327; b=KuFIT7ZH3Or+tdW4FaECegN2UWd4U5VMF07vTDWtLe3GDEnNFZtlNaoge+SbIQSvOU JOEk2YI3/Ou0FEVgrBtEOsVjtphY7+oTwwJ7mGC+SFTyITuMknuNA8hDvmYKa3KqEzMr NlYEc9re2eMxWWbJLhujRYQtL4kdWtI4G8ihYP+rwKeX9v0kqBwniL5M2TMqHjmoQ37z rUTRr83KeVDYOO9YELty/n1FZn96c0qZFvL2w6KcTDJxuJohFukk+X8+4yAS4bUiaegC Jh7miEkQz7vQXt3bobphdmsVXw/aJVn+c7HemHTjKllrC0vJgdIll6XxAImqBJGmu0Kz Biag== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20260327; h=mime-version:content-transfer-encoding:references:in-reply-to :message-id:date:subject:cc:to:from:dkim-signature; bh=UA11PtYoaYDSFFWp5nvu/SCeIxmHEBwK+ZayQYPYqec=; fh=8YdFO6zjR+eqfzMi0DqCspkZA88UebC3pETRRIIt+go=; b=EXBtCx+74r6qsgrFWCbTLsN0QNDPjp0xoD3zKCUJXzsGYbZQQUEeSY1QsPF8yZM/yV aMMKlysOJCjj73hpJOZOEl07K3PKFibL/M6aWjTuFOdctQ05FjTgpmZoVo67oMpT5Rey F2GEY1pOCieyEbPxJLfqrtD7//HIyIzAtFQpYME166roHV4uiCSngPGniY10EsleK5qY 3WSu7DkUq771/pswT1DLvSvKidiAt1S6EPSE047gaDJeHDNznsHAQVG8bpEFnOJiwtNl MK7bxWyfuRVer7IUYm0Q52IK+SWaqVeZW9/aQQ0lkQwuIc/Cw9t05SCa9aCH8c09l7tx VimQ==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@virtuozzo.com header.s=selector2 header.b=krmwXd1N; arc=pass (i=1 spf=pass spfdomain=virtuozzo.com dkim=pass dkdomain=virtuozzo.com dmarc=pass fromdomain=virtuozzo.com); spf=pass (google.com: domain of andrey.drobyshev@virtuozzo.com designates 2a01:111:f403:c20a::7 as permitted sender) smtp.mailfrom=andrey.drobyshev@virtuozzo.com; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=virtuozzo.com Received: from PA4PR04CU001.outbound.protection.outlook.com (mail-francecentralazlp170130007.outbound.protection.outlook.com. [2a01:111:f403:c20a::7]) by mx.google.com with ESMTPS id 956f58d0204a3-67a42f2b1a2si247485d50.285.2026.10.23.09.54.28 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 23 Oct 2026 09:54:29 -0700 (PDT) Received-SPF: pass (google.com: domain of andrey.drobyshev@virtuozzo.com designates 2a01:111:f403:c20a::7 as permitted sender) client-ip=2a01:111:f403:c20a::7; Authentication-Results: mx.google.com; dkim=pass header.i=@virtuozzo.com header.s=selector2 header.b=krmwXd1N; arc=pass (i=1 spf=pass spfdomain=virtuozzo.com dkim=pass dkdomain=virtuozzo.com dmarc=pass fromdomain=virtuozzo.com); spf=pass (google.com: domain of andrey.drobyshev@virtuozzo.com designates 2a01:111:f403:c20a::7 as permitted sender) smtp.mailfrom=andrey.drobyshev@virtuozzo.com; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=virtuozzo.com ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=bH01NVxfxTxxr4hhQC9/UFDg9exbUDdlSXSqIBOw5fbzpcaWBPhayrCXce+QE92D5WgR4I00KZKctY2GjWPhDegu5v/rE1vtyqaDkuKW98p0GSa44AGR13mcqNzQ7RYh+JH6iqe8oqX45uZWGUup4BZ4spltYtl6iDyvDINVK0A52PHnxoUriuKDwXFZPvtWTGZy0DU1u+1jY8JGIg9w0dcudDyhq56jopYlEO0dle7Cd1GI/LFQbPrAsvKrz80T/oCSLTqsj57xu3QMa4uUjPdqJ4q6pBrMefUEN0tMah8tr156/OqBC1T9irgo6ms5PMYHlxFvt12WrF00UEh+sw== 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=UA11PtYoaYDSFFWp5nvu/SCeIxmHEBwK+ZayQYPYqec=; b=xGBSzHwVZAKqsABK3exbevWm9AT4X5FH8PgSrvRWc2dUu4ZmREyiO3k28eVu9ZLyCcQLcE28EOuPPNiTQkdBL6IZ9TVW+0xf/56wNUxEw4hebQ34/A8gSZyXh30aUf9UQEhlQDFkZZhJu3vfs1jX9KiBViiEXqwzemOSGAYLzPyu68fLEIk1wHw4yH/d+brL10xedbkFAIulfnD7R63c3VoQY2sVo53uqKcjXkMDljn7Ct7uo+/qmveaDYyIY8Glh8uxnirmhRtz2Fuyosvyu2hVj8/s0xbXE4HsC3IzPH2nwMZwDVoeXCDTUijwI8tvBExLsv4rXfzgtJACmQ/qtw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=virtuozzo.com; dmarc=pass action=none header.from=virtuozzo.com; dkim=pass header.d=virtuozzo.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=virtuozzo.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=UA11PtYoaYDSFFWp5nvu/SCeIxmHEBwK+ZayQYPYqec=; b=krmwXd1NNlKV193OyJ0buux9cuWxedAg55dFZNx8EX+EoWywLaD0urmi98fwFUkZatQ8PK8ADFtFSeWlaUPqPR8ezQGTFdshGw03/JpY8cK4F/1Tt9dG4atEPKTwPbQ+spdMY6BgQ7B2E1ecM2G5/Zy6u5OycGR6w1r9NcVCGsnVEZT4MrTKbyS6oOTMwPXS+1cfcfIs26rblcmrDszHcF1X5c1ODF4JtnnS4y0ie45zzJ04DUjAF3HLm6BExs8TVjlD0nErb64ayzeuoiT+4wVFTUSn8iXcN8A8+Ks+qm4+IywUO43aDzBOBz469XPz9SIHatqETcJNs4WdlBfVAQ== Authentication-Results: mx.microsoft.com 1; dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=virtuozzo.com; Received: from VI0PR08MB10656.eurprd08.prod.outlook.com (2603:10a6:800:20a::12) by AS8PR08MB7863.eurprd08.prod.outlook.com (2603:10a6:20b:52b::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.546.18; Fri, 23 Oct 2026 16:54:26 +0000 Received: from VI0PR08MB10656.eurprd08.prod.outlook.com ([fe80::4e37:b189:ddcd:3dd8]) by VI0PR08MB10656.eurprd08.prod.outlook.com ([fe80::4e37:b189:ddcd:3dd8%7]) with mapi id 15.21.0546.017; Fri, 23 Oct 2026 16:54:25 +0000 From: Andrey Drobyshev To: devel@openvz.org Date: Fri, 23 Oct 2026 19:53:41 +0300 Message-ID: <20261023165343.503945-4-andrey.drobyshev@virtuozzo.com> X-Mailer: git-send-email 2.47.1 In-Reply-To: <20261023165343.503945-1-andrey.drobyshev@virtuozzo.com> References: <20261023165343.503945-1-andrey.drobyshev@virtuozzo.com> X-ClientProxiedBy: VI1PR04CA0082.eurprd04.prod.outlook.com (2603:10a6:803:64::17) To VI0PR08MB10656.eurprd08.prod.outlook.com (2603:10a6:800:20a::12) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: VI0PR08MB10656:EE_|AS8PR08MB7863:EE_ X-MS-Office365-Filtering-Correlation-Id: 6d8050ac-b063-47ee-e032-08df31264657 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|1800799024|23010399003|52116014|376014|366016|10067099003|261022105027099003|261022075727099003|261009223027099003|261021123027099003|261021121427099003|38350700014|18002099003|22082099003|56012099006; X-Microsoft-Antispam-Message-Info: vCw91rCdSANXpzppxovXDtAii6T5VUwbj6TLpg3DerKsLnktz54bSmZfA9yxG6dm4s9UTymQSm5kkI5PLFNxxXii7S4GwMDh9Cn1/VQ296MehI0qQB9wTQrJu9jkHVwcro7xMZDSpuVt9SxNMbej4EZe0xK4HCB+ACtPqSkHFjuOkkuDwDtVG7KiSOLfXVxXkpUcZHtAbTiVxoNXidSVKccGmGgt0yyk+l/zJmvPCD/ihF9wtppcdMsKnz2dzuLosZmmoGEGXBWDT3Za8bJyJO1F15vgoqVfMW9+TeMZGUIc0GfDnBTe9tnpSL20IgNzJEPMhFuKUk3GagiaoHMQ7q6oKVT+dus9aUDFA5m/JVKThITYMVRDrGmrLxA/Z/o+rQCSupft04BfTnXbLhae7QawxeAGALBYfMD817fLQKfMdLHHlNr5Cv3LSNrDNzRtRhbjkylkisPTqRYI0cBxOkAyOpbkIkkRQU0uXJ9X+QBybCaB8R+4N3QArtRVxoNrEhElkh3fWXx0t1MHyZRG+Ida4omGffR15tT4Vu55Gs2jTa7Gxe8Q0/NfVMtodD40UYua97rE9hWkhQ8j73L7F3Ypj2X829yiq3oejfNUx2tCOguRMesui9B1Qrg5AJPXggSUUcj2CZSgesgoP2OkwiX3Tzy7uClmdKNQ2QkQ51M= X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:VI0PR08MB10656.eurprd08.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(1800799024)(23010399003)(52116014)(376014)(366016)(10067099003)(261022105027099003)(261022075727099003)(261009223027099003)(261021123027099003)(261021121427099003)(38350700014)(18002099003)(22082099003)(56012099006); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?QytYqPEhZxUeYbJZgY0W6ZCnouXLxlZR4BkkOx2U6Q1gJXV/450Z6qQasgKz?= =?us-ascii?Q?Bg2HhmNKNsSNJGxNz/+mFwpyaLrvGJHB0t62t/QHPgc/YMx3y6UfAyG4SVvt?= =?us-ascii?Q?Hh9m0UI6gSsTpsf0aud6LJvd20VOHIhxJZX3LQ4pGAllZJpuGVeGxpNPKNPk?= =?us-ascii?Q?HfxhCTJt/2mP7i7+fCHkNXl1JdkS/Z0ia5vOpYIWop8fFnzXMenCCddO9FS0?= =?us-ascii?Q?6UuXSAq11ls6WxlDqTciB8yVov2p2IrQiVELkdJpjN0G356sl+yBTRpH6coz?= =?us-ascii?Q?jSLEox9+Ke7TooFGK7lezReF/Y13GS0eFsAhJzQmxkD005Ra7aH+CNQ8+8KQ?= =?us-ascii?Q?HWi0Qx5tV/qb+JNzCYEudKlX6x8iE2HXHqZPHnKXNz1gdE84NsmUnS9iUI6k?= =?us-ascii?Q?5tibpuX6eVoA9BeNcrbFjDP8aYvTYFm+xfrvXJJHAyu+1zxQIBzh9ZIaSYGm?= =?us-ascii?Q?5mkx+LZpov4tPLwUdQubRyaTITv27B5Nidhtxtzl/kHM2F0/kfb2/psCYf4N?= =?us-ascii?Q?MsmhYv0BwnVLQ8ifS03OXPg2sznu8bPqIo1im2344XYC02TqQoPccU8/9Enn?= =?us-ascii?Q?EExYgmwMuj80GSPP0b8TKgiVHPpgumkNZjqckJEbLstXmwPTvFL8ORrMdEX4?= =?us-ascii?Q?r5q37KXWN5iIJyC3w9wV393+iecZzjuGed0jB6AljlrIkNhKVA/6dSANsPTQ?= =?us-ascii?Q?Xoj2eCjkK2xgPKmDhpy1bq6heuVFL/y5EJsrCx3sBWRGzsRm/eG2mIkKq5v/?= =?us-ascii?Q?5PGEnpUxsJnOCkW/DZcMqsoHd2hDZpsKGR9xfdqBC8oN14ie4Y8OEnkD78B6?= =?us-ascii?Q?49L0q44UXT54s+Hjff5pK4vLHVU4FKfyprMvAVcW5NxEuSk37i8W+pY+B1Ul?= =?us-ascii?Q?W1shXzFswxxjtmJDU+AW1J1cvLNHNEbMyL7d2Ga9nrpXmXDufejvxPf9c5dB?= =?us-ascii?Q?91dAjOCOKFCMhClljWfCt91LvHTBJMUOnV8XLXEKo6kl2XIbdS7lAVfExnmi?= =?us-ascii?Q?Hg0vMMbkIM2lYBLT/IxtyKWO8/aoJjdL/GAdNddy8YVeyG7P0r/qX+/s54u0?= =?us-ascii?Q?bvBuhKvTS0y8he1weJgciClDwq85/Lujr8skzFOuVF2jtFvW9fklS7j+/VQo?= =?us-ascii?Q?0xdpjEit4IJReuwNwXXyrpSAtau9dGVQQZypriWGq/+s37B8F9Z2nUpqtiN5?= =?us-ascii?Q?oXP6XkXKAZKhXyFLf/SHSW9MProFqw3BwJ68TXv922OwbHl++Zrex4yyMrtK?= =?us-ascii?Q?56D6lXRAhjnQkCcJeS1hdpD37smRCdCZpAFc2nIIDIEvQCxoRjDmMO6XOaOF?= =?us-ascii?Q?k/S0rchvQihvvv4koBsv9L+n8F1/cNEMH8ao3z5gDh+Ijgh3/Imeda0oXw6o?= =?us-ascii?Q?ZEgFJxe0tPhTNd8rYIWReygXd0zv5i0sVFnjKKDGT0DGghAlTsY2eyPrR9KA?= =?us-ascii?Q?tYef6KPoMAT56ki7tk9p5UKh9VLoZTlyhzMUIgo7rVglf27Er6Cu+lariBWU?= =?us-ascii?Q?ktxa+ywo9C+/1v6gsmm+ZtSLOwTKQN5j4Y329+nb09w84oB0k+vDJ2vfdIUj?= =?us-ascii?Q?QscjYGaiXSMmULYpVar1ViMYgdht0szUy6udEtaQQLyz3ibz0KWreTfAnEZ8?= =?us-ascii?Q?L72bTpUbfvDkXoLriOfS3CVd32h9SAsOYl0Y2tusgwrHosbhHIbPmp1sbm3u?= =?us-ascii?Q?VHAIIHgIhdNky5M5UAO3GQ3QFcDNYY63ANt1TBMoUpe0BK7ziDpnbDeivjq1?= =?us-ascii?Q?9ZWp+Q4QxmmRutp5aFsVkMrk1ghXAyU=3D?= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 6d8050ac-b063-47ee-e032-08df31264657 X-MS-Exchange-CrossTenant-AuthSource: VI0PR08MB10656.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Oct 2026 16:54:17.0717 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 0bc7f26d-0264-416e-a6fc-8352af79c58f X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: rBhNEu/cHJC2egHSD6fYphPuhKkrsLSNu7gdk0X26s7bjg6brE8Q1fD3i+NNXszehLg8CcWw/1z85wB8/2IitAfAsjjVeeSvfemqFfg5hVY= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS8PR08MB7863 X-OZ-Fwd: true Subject: [Devel] [PATCH hci-8.1 3/5] Revert "vfio/type1: revert "block on invalid vaddr"" X-BeenThere: devel@openvz.org X-Mailman-Version: 2.1.12 Precedence: list List-Id: OpenVZ development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sender: devel-bounces@openvz.org Errors-To: devel-bounces@openvz.org From: Anthony Yznaga This reverts commit da4f1c2e1c9cb2832b5a4de3472cd1cad63781b2. This is needed in order to re-enable support for using VFIO_UPDATE_VADDR with vfio mediated devices which is needed to fully support Live Update. Orabug: 35370252 Signed-off-by: Anthony Yznaga Reviewed-by: Steve Sistare https://virtuozzo.atlassian.net/browse/VSTOR-150595 (cherry picked from commit b1bfe0e165fd85657e530462da70bccb498256b2) --- drivers/vfio/vfio_iommu_type1.c | 94 +++++++++++++++++++++++++++++++-- 1 file changed, 89 insertions(+), 5 deletions(-) diff --git a/drivers/vfio/vfio_iommu_type1.c b/drivers/vfio/vfio_iommu_type1.c index b2d6c68fa79c..6193ff966667 100644 --- a/drivers/vfio/vfio_iommu_type1.c +++ b/drivers/vfio/vfio_iommu_type1.c @@ -73,6 +73,7 @@ struct vfio_iommu { unsigned int vaddr_invalid_count; uint64_t pgsize_bitmap; uint64_t num_non_pinned_groups; + wait_queue_head_t vaddr_wait; bool v2; bool dirty_page_tracking; bool container_open; @@ -153,6 +154,8 @@ struct vfio_regions { #define DIRTY_BITMAP_PAGES_MAX ((u64)INT_MAX) #define DIRTY_BITMAP_SIZE_MAX DIRTY_BITMAP_BYTES(DIRTY_BITMAP_PAGES_MAX) +#define WAITED 1 + static int put_pfn(unsigned long pfn, int prot); static struct vfio_iommu_group* @@ -669,6 +672,61 @@ static long vpfn_pages(struct vfio_dma *dma, return ret; } +static int vfio_wait(struct vfio_iommu *iommu) +{ + DEFINE_WAIT(wait); + + prepare_to_wait(&iommu->vaddr_wait, &wait, TASK_KILLABLE); + mutex_unlock(&iommu->lock); + schedule(); + mutex_lock(&iommu->lock); + finish_wait(&iommu->vaddr_wait, &wait); + if (kthread_should_stop() || !iommu->container_open || + fatal_signal_pending(current)) { + return -EFAULT; + } + return WAITED; +} + +/* + * Find dma struct and wait for its vaddr to be valid. iommu lock is dropped + * if the task waits, but is re-locked on return. Return result in *dma_p. + * Return 0 on success with no waiting, WAITED on success if waited, and -errno + * on error. + */ +static int vfio_find_dma_valid(struct vfio_iommu *iommu, dma_addr_t start, + size_t size, struct vfio_dma **dma_p) +{ + int ret = 0; + + do { + *dma_p = vfio_find_dma(iommu, start, size); + if (!*dma_p) + return -EINVAL; + else if (!(*dma_p)->vaddr_invalid) + return ret; + else + ret = vfio_wait(iommu); + } while (ret == WAITED); + + return ret; +} + +/* + * Wait for all vaddr in the dma_list to become valid. iommu lock is dropped + * if the task waits, but is re-locked on return. Return 0 on success with no + * waiting, WAITED on success if waited, and -errno on error. + */ +static int vfio_wait_all_valid(struct vfio_iommu *iommu) +{ + int ret = 0; + + while (iommu->vaddr_invalid_count && ret >= 0) + ret = vfio_wait(iommu); + + return ret; +} + /* * Attempt to pin pages. We really don't want to track all the pfns and * the iommu can only map chunks of consecutive pfns anyway, so get the @@ -904,6 +962,7 @@ static int vfio_iommu_type1_pin_pages(void *iommu_data, unsigned long remote_vaddr; struct vfio_dma *dma; bool do_accounting; + dma_addr_t iova; dma_addr_t iova_end; size_t iova_size; @@ -926,6 +985,22 @@ static int vfio_iommu_type1_pin_pages(void *iommu_data, goto pin_done; } + /* + * Wait for all necessary vaddr's to be valid so they can be used in + * the main loop without dropping the lock, to avoid racing vs unmap. + */ +again: + if (iommu->vaddr_invalid_count) { + for (i = 0; i < npage; i++) { + iova = user_iova + PAGE_SIZE * i; + ret = vfio_find_dma_valid(iommu, iova, PAGE_SIZE, &dma); + if (ret < 0) + goto pin_done; + if (ret == WAITED) + goto again; + } + } + /* Fail if no dma_umap notifier is registered */ if (list_empty(&iommu->device_list)) { ret = -EINVAL; @@ -941,7 +1016,6 @@ static int vfio_iommu_type1_pin_pages(void *iommu_data, for (i = 0; i < npage; i++) { unsigned long phys_pfn; - dma_addr_t iova; struct vfio_pfn *vpfn; iova = user_iova + PAGE_SIZE * i; @@ -1240,8 +1314,10 @@ static void vfio_remove_dma(struct vfio_iommu *iommu, struct vfio_dma *dma) put_task_struct(dma->task); mmdrop(dma->mm); vfio_dma_bitmap_free(dma); - if (dma->vaddr_invalid) + if (dma->vaddr_invalid) { iommu->vaddr_invalid_count--; + wake_up_all(&iommu->vaddr_wait); + } kfree(dma); iommu->dma_avail++; } @@ -1737,6 +1813,7 @@ static int vfio_dma_do_map(struct vfio_iommu *iommu, dma->vaddr = vaddr; dma->vaddr_invalid = false; iommu->vaddr_invalid_count--; + wake_up_all(&iommu->vaddr_wait); } goto out_unlock; } else if (dma) { @@ -1811,6 +1888,10 @@ static int vfio_iommu_replay(struct vfio_iommu *iommu, unsigned long limit = rlimit(RLIMIT_MEMLOCK) >> PAGE_SHIFT; int ret; + ret = vfio_wait_all_valid(iommu); + if (ret < 0) + return ret; + /* Arbitrarily pick the first domain in the list for lookups */ if (!list_empty(&iommu->domain_list)) d = list_first_entry(&iommu->domain_list, @@ -2650,6 +2731,7 @@ static void *vfio_iommu_type1_open(unsigned long arg) mutex_init(&iommu->lock); mutex_init(&iommu->device_list_lock); INIT_LIST_HEAD(&iommu->device_list); + init_waitqueue_head(&iommu->vaddr_wait); iommu->pgsize_bitmap = PAGE_MASK; INIT_LIST_HEAD(&iommu->emulated_iommu_groups); @@ -3148,12 +3230,13 @@ static int vfio_iommu_type1_dma_rw_chunk(struct vfio_iommu *iommu, struct vfio_dma *dma; bool kthread = current->mm == NULL; size_t offset; + int ret; *copied = 0; - dma = vfio_find_dma(iommu, user_iova, 1); - if (!dma) - return -EINVAL; + ret = vfio_find_dma_valid(iommu, user_iova, 1, &dma); + if (ret < 0) + return ret; if ((write && !(dma->prot & IOMMU_WRITE)) || !(dma->prot & IOMMU_READ)) @@ -3262,6 +3345,7 @@ static void vfio_iommu_type1_notify(void *iommu_data, mutex_lock(&iommu->lock); iommu->container_open = false; mutex_unlock(&iommu->lock); + wake_up_all(&iommu->vaddr_wait); } static const struct vfio_iommu_driver_ops vfio_iommu_driver_ops_type1 = { -- 2.47.1 _______________________________________________ Devel mailing list Devel@openvz.org https://lists.openvz.org/mailman/listinfo/devel