From nobody Sat May 10 07:44:16 2025 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=nutanix.com); dmarc=pass(p=none dis=none) header.from=nutanix.com ARC-Seal: i=2; a=rsa-sha256; t=1739976948; cv=pass; d=zohomail.com; s=zohoarc; b=fHk55J4CKKOOlN6gKy1n8sXZmb8bxQy9JMbf/cd64P0QGc/OZiEJG0WfIrbAcrE9u2V9NPNgFq6bE9Q4LYcYFNHyTcwhFQw8y8Rh+//yBeblF/jlf0PdmosZzotxLIFRxztbecvjmeGF7pJfRRf+aBKdasrwkhkb0/4HgPGbHcw= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1739976948; 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=CbYCxq57zE19zKX5mUO4iVNHgd4VV/+dCMgQHeUY/Js=; b=nC1lo+wEbUHQG1MLcvz8or8mw/oyOVtgpyg2BAyB5FLn6lQniHWhHVVUvB2xoaoJwVJL+mdfrZ7mWVZUKK54WKxMFg+RnW6p46WmO/O77E7Uz8vJnmz0h3rW3RVw24TrQi25vztlnftvAFYvQsGFE7dCnpXdY7aXuYA238aDL7E= 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=nutanix.com); dmarc=pass header.from=<john.levon@nutanix.com> (p=none dis=none) Return-Path: <qemu-devel-bounces+importer=patchew.org@nongnu.org> Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1739976948887280.5759997178619; Wed, 19 Feb 2025 06:55:48 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from <qemu-devel-bounces@nongnu.org>) id 1tklOx-0003Sh-GE; Wed, 19 Feb 2025 09:50:15 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from <john.levon@nutanix.com>) id 1tklOu-0003PS-VG; Wed, 19 Feb 2025 09:50:12 -0500 Received: from mx0a-002c1b01.pphosted.com ([148.163.151.68]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from <john.levon@nutanix.com>) id 1tklOs-0007V3-2G; Wed, 19 Feb 2025 09:50:12 -0500 Received: from pps.filterd (m0127839.ppops.net [127.0.0.1]) by mx0a-002c1b01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 51J9LnWr011251; Wed, 19 Feb 2025 06:50:07 -0800 Received: from nam10-dm6-obe.outbound.protection.outlook.com (mail-dm6nam10lp2044.outbound.protection.outlook.com [104.47.58.44]) by mx0a-002c1b01.pphosted.com (PPS) with ESMTPS id 44w4bdhxxr-2 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 19 Feb 2025 06:50:06 -0800 (PST) Received: from CH2PR02MB6760.namprd02.prod.outlook.com (2603:10b6:610:7f::9) by LV8PR02MB10096.namprd02.prod.outlook.com (2603:10b6:408:181::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8466.14; Wed, 19 Feb 2025 14:49:54 +0000 Received: from CH2PR02MB6760.namprd02.prod.outlook.com ([fe80::fd77:ea65:a159:ef51]) by CH2PR02MB6760.namprd02.prod.outlook.com ([fe80::fd77:ea65:a159:ef51%7]) with mapi id 15.20.8466.013; Wed, 19 Feb 2025 14:49:54 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nutanix.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s= proofpoint20171006; bh=CbYCxq57zE19zKX5mUO4iVNHgd4VV/+dCMgQHeUY/ Js=; b=vJpQ5MxpHNRXB5yRinqVGlSGdtEN6urn7dYMklgF4x/ub/OThW87osTZ/ CSbds7aAaT3RpcXSQ+Ihrrxpym0gv8/0pWYr5RU3p+PSSeo2YNEAzO6uz+eksX2O 7QQPxP+Zn418UTPYg+ovBGLLyaSBlGjO0bwLqTO3yvTyn/nFxfnKg0I4/El4qNiB 0/nydOc9x8KBl/oSofGQhVFXaCe2wmTreG15vM0deax8NQBGwHaTpUXe88ULt2/6 v7s6eYfVn7cgu5hyK2MtmUXlRiDEUPWxWdw/7XDq63wI9HSOaMM3Lb1r2q4S9vVa SOzSmfjA/ZKKM2NdB4btl09R2VZnQ== ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=FrmeCOoEU0qiDdomy9mluVjMDjlIbFcBMjLeQBNlimRVifGazUIzI6tatzfyC4e+C1rc2us7iBVca5/EZnH+NGUUqxl+m0buNGw3ayo8K6dGkHhX9g+k4/HWOSYxDWfUFmucwQgFfCtVk7axOdnnnE3qCelynQqXLDY6A8Nr3Fzhd4bAGCWXYGBXhlCJ95fVeJz0qElAG1OAiSsCd9oX1wRaCwhrONPQG3FPtV5ARH2EpBNu6wWRI3xcmZKNlItlGPCn6MoymM80KcHHeFnywv07Yfvfk7gzGj3TIlGHKYA+ic8g4exvkshKW2bpn29KhBTSxYD1XChyjNS7oA3Ihw== 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=CbYCxq57zE19zKX5mUO4iVNHgd4VV/+dCMgQHeUY/Js=; b=EDee0+WGUDOoutrjxQ/0lDniQPzwEnKmGl3Nfz8Ptb71ZLBH+W65HDtXXEhev2djkhb9MfHv4JwWTgLzF6M1quY+yuV3mxIXd4crjXF09i7pSXaAjwsRC9zYd8w6NEbyFK8NlkwxM71rdTruSZWSz8NaiwXbki3/zGzqw9X2EvRqqrXGdAl/PhihpOohy899H0bKz5UuSbCj7hQJjXvdMQ2q5g2p7W6uef5j1G8NPpzbDHr3pNUE6vxoORnJ5RfZKaGFvwrioM3cDAYPTJparzIZuDnKd9h/iCx3K7+f6SXwEXkCOa72fYzvignTFUxJqaXM6MprrP/y4Ke6Zn4Bfg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nutanix.com; dmarc=pass action=none header.from=nutanix.com; dkim=pass header.d=nutanix.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nutanix.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=CbYCxq57zE19zKX5mUO4iVNHgd4VV/+dCMgQHeUY/Js=; b=cFDMuwhFeKzMVW5pRdF3EiPwrfW4OUJoLZmoH/UW7Bi6XO6K2t9CLKPxP76GGzAphvKnHz/CrHJEJJoEnzIKqtniezmv+QsRZ8ftNoX9f4yj5qCz99hzMTjSlh/eU9U1KE8GvfuGwjFZ6fd20raPzd/a/n6hoE4dD7qeo0qkOWXcFIHC+BahvXssZxcyaaObjkv4llgSbGKOd5yAKbZEJh3UPcYSpL5SdQy3tI39bkP/PfBfGH1le7N1TyktqfWjTlKaureesTQFCLmLID3cAy6uRYsJM35RmcG3wF8b/htCFW9ZFj4F4OasvXldWIl1obAC+SHszEM9M0sMQBK9EQ== From: John Levon <john.levon@nutanix.com> To: qemu-devel@nongnu.org Cc: Jason Herne <jjherne@linux.ibm.com>, Thanos Makatos <thanos.makatos@nutanix.com>, Halil Pasic <pasic@linux.ibm.com>, =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= <berrange@redhat.com>, Eric Farman <farman@linux.ibm.com>, Tony Krowiak <akrowiak@linux.ibm.com>, Thomas Huth <thuth@redhat.com>, qemu-s390x@nongnu.org, Matthew Rosato <mjrosato@linux.ibm.com>, John Levon <john.levon@nutanix.com>, Paolo Bonzini <pbonzini@redhat.com>, =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= <marcandre.lureau@redhat.com>, Stefano Garzarella <sgarzare@redhat.com>, Alex Williamson <alex.williamson@redhat.com>, David Hildenbrand <david@redhat.com>, =?UTF-8?q?C=C3=A9dric=20Le=20Goater?= <clg@redhat.com>, Peter Xu <peterx@redhat.com>, =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= <philmd@linaro.org>, "Michael S. Tsirkin" <mst@redhat.com>, Jagannathan Raman <jag.raman@oracle.com>, John Johnson <john.g.johnson@oracle.com>, Elena Ufimtseva <elena.ufimtseva@oracle.com> Subject: [PATCH v8 13/28] vfio-user: connect vfio proxy to remote server Date: Wed, 19 Feb 2025 15:48:43 +0100 Message-Id: <20250219144858.266455-14-john.levon@nutanix.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250219144858.266455-1-john.levon@nutanix.com> References: <20250219144858.266455-1-john.levon@nutanix.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: AM0PR02CA0154.eurprd02.prod.outlook.com (2603:10a6:20b:28d::21) To CH2PR02MB6760.namprd02.prod.outlook.com (2603:10b6:610:7f::9) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CH2PR02MB6760:EE_|LV8PR02MB10096:EE_ X-MS-Office365-Filtering-Correlation-Id: 85357136-f640-4288-7f6e-08dd50f4ac06 x-proofpoint-crosstenant: true X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|7416014|1800799024|376014; X-Microsoft-Antispam-Message-Info: =?utf-8?B?NlVIVnJJUVZpVk9DRmo4eDNDT01FUnp1Z2ZkMFp3VmlXaHlkM0pBL2d5MWtR?= =?utf-8?B?Y0wyUGZlRVIvcTJ6WGZpMCtWNStMV3hLczdBYVlPY016T2RaZjk1c1NsQ25R?= =?utf-8?B?Z0dsbTZpYTlwQllIaGRJRmVWMTc2dDhzY3B5bkVuV2lqRHpBemdOTm5WL2Rq?= =?utf-8?B?R1RVd2YzV21icUEvMkJpWEJVYzZ5UXdKeU1TMHRPNGxtWVRZN3prNGVUbGY4?= =?utf-8?B?M0VrU0YrRHRoRWFXRFRObE1iekEyL0pmQkZ6WXNKVUhmeWwxN1ovajllSjMy?= =?utf-8?B?L2RzZytSeTMyTjVjMnBGa0xtcFBsRC9ycHczRlIxdWhtay9mVEs4R2JMbjlY?= =?utf-8?B?dDRyNS81TUhtb2hZZmNOMVcxQWs0T3FUYVRVUStTTWdhcjRPMm52a0w4YkhB?= =?utf-8?B?UHhSNFphSGVkQjN1a29MTUZJSE1yMUdGSDR3a2RZdUMzZDArbThlc0NuSVlm?= =?utf-8?B?bjB0eUczSXVrRlF6MXZJYjRlcEpZYnFSODVZb2lNc2tnaDFreHZhWVYyZW1H?= =?utf-8?B?V1FDMnYyZFl6dElZdSt6aGhib1c5aDhuNnJWbDk1OTZJS2VnazNqZmNxQXpI?= =?utf-8?B?b2NwTUd0SXhaSTVhaW8zcmVhenRLbXdQaTlmek9QK2tMT2NNK0JtOFI0VFZ3?= =?utf-8?B?aWk2ZEo5SDBDSU9OV2hsSVpseVpWVkZ4ako2RzZvMlEyc3lsRk1jTkdBWVFy?= =?utf-8?B?NlB1SG5CSkNtWFB1Nmhxc0RIY3dvc0dkbThYdjJvZVY3UlluZmtXYTdzdjUw?= =?utf-8?B?UU9GbnAwWjBJMS9uSnVCYmhHL2ZPTG9FWXY2K1paTlk0dkwxWmZOM0I5cmVt?= =?utf-8?B?d1ROWUVBZUtHZ09vK2h2dEluNzY3TTluRmFjWkw0bWZ0ai9lTVpBRWJBZ3VP?= =?utf-8?B?ZzIwUXA5T2pOL3NmZlBleDZBOWRjS1ZBc1BnOExTL0JUdEtJRWZIVUxKWk10?= =?utf-8?B?cWdzRDdLOFZCZlR2V01meG1tLy85MGVLOHlVYUxySWhuTkVUMzcyWGNPaTla?= =?utf-8?B?NkthQUV5RHI1Rkx5UGhjYzJ6anlOZ0VUMUw5cSsrcHZ2R0RkZHpkTkZmNkJF?= =?utf-8?B?NVF2WnE0Y1VlbDh0NW1KWkU3VVI4cVR3U1AxMjZ5dUx2aHA0Y1dlVFRBdTAy?= =?utf-8?B?dGZvMlRldDVkL1lEN2xGUU5ZbDVRbWVWajhkTjIwcCsxMFVwbTdqQzBSTThj?= =?utf-8?B?WFFRT2dWV2pDVDBBaXRwbjQ5MmVmWGhhMjg2Vmk5YU42REpObm9IUDdReHYx?= =?utf-8?B?QlhrMEZVWTJqL1h6cHZPU0J3VUpUSEgrL28rU21CbzA4WFI1MXBGMFF3aENQ?= =?utf-8?B?VFlSby9INVRoeFNjM1F2ME5TeVNqV3FTeHlDNEEwUDNUR1lWWVVDL2x2cjkr?= =?utf-8?B?MytuSXRDVzV2eTlkNXhNdEQwY0VRYlZjaEE2L3hUbXRhL2FPdXNiZS85UWdM?= =?utf-8?B?VjRnVUN2Q29NTzZMS3dJanlZWDkyamlORWVoYVV0N2phakpJN1l5OEFWY2p5?= =?utf-8?B?SzBTQksySERIWWdYVFdyU0RDZ1hGZ2M2Mm1FWURSbFhyMDh0Q29VR2pGK2k0?= =?utf-8?B?c0FNSnJmSXMxcGh5RGx3WXdpLzlYa1Q4N2lMa01iQ0xJZTBDZG53c29nSzRx?= =?utf-8?B?K0d5cWQyV3lmY1NONThuWWdJeDg2dEdFMWoydUlHOCtzOXpuYUs0WEdxR2Uz?= =?utf-8?B?eDlYODB5Z2JubDk3K1RRekpQdUpudUcrbTBjMkN2dVNQVFFCWUx4bDAreVF2?= =?utf-8?B?M0RVTlZGM0pMMFVsY05NeTNlK0h1NHZlKzJodEoweXNFcFR0VGlqYzdFb1VB?= =?utf-8?B?cEZPbU9wUHdCNkNpMEtzVzRrZXR0NlhVOCtwQ2NmVGtqczNYdjNRWlZQYVVP?= =?utf-8?Q?X8qw5IEaN+zgu?= X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:CH2PR02MB6760.namprd02.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(366016)(7416014)(1800799024)(376014); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?RERrTlBkRWZQbkhpNVo4ZmJJS1d4bTd3SFdhbFYvald0MEZ0dVhTQStoa3Vz?= =?utf-8?B?MWhIMTNVTkFsSkxsa2UvS3lZMHEyVVQ1eG41N1U4TkdEa1MzTTBxYlV2VFVD?= =?utf-8?B?UXVuWXZCVFBSczVGUmFEV2hGQXdFcTZHWndReUVjNkdWd2NNbmdRaTYxeXdm?= =?utf-8?B?QWVOWDdCZFg1bldTcysvd2dpYUJhR0hEYW9NY0c2RFNiMXBtR2ErdC9MY0NM?= =?utf-8?B?QUN6aGRwUHlIUDVaelFMbDZiWXBQR0tsRGVPMUVZK1Z0RmlaNTdmTG1NelZL?= =?utf-8?B?UTk5VGEwc3FYWmZlY1k4MVRFbjI5TlRuWnYzdHdIWm9YaEdSRDBKd3JObnha?= =?utf-8?B?Y1NTRzdDVm5uRkxGUWVhMGRSd0t6bWJmcWFZRnoyd29FeU5KMnhCYjJLMDAz?= =?utf-8?B?czJIdW9tRlVpUzhHVy9GejJlM0dqanZvTFZlOW1CZWJtTkowenoyR0FWRzJw?= =?utf-8?B?YmhSRFN2cGUzSlY0dm1PVDRPRmNoZWEvOXBEZ2EwUHhJblJVMmRHdjE1TkRT?= =?utf-8?B?amR5Ylp6cTUzS3RVY1I0VnVwWHRWbXRPV3FOK3g5UlM5MEpjbXVzOVIzcDFP?= =?utf-8?B?ODVaaGlTTXBNZU5wajN4dTlkQ1NneUxXYmc3VFFGR3l0M3BMbXV5ZzZ1Vkxq?= =?utf-8?B?NG9hMk1FeGtXR2dVNkJpUkNSeEUvblU1ckNkUW1RRVorREpvd3JWUm5yZGVs?= =?utf-8?B?MlYxdk9wNjVjVHNROTUxVEFEZlVOQnVPWVdSMzdpSUZpMkRpb1d1dVBaR2tT?= =?utf-8?B?RGUzTi9SaUpOQTZCb1JpNmJBZ2xybUpXSWlsNVFrNGs3Vnh0SGtaQ3BHc0dF?= =?utf-8?B?aTNXMWsyRXc5blVkekdGYlNCN2N2TzYyRVJoUzFnd2p3QWQ3MVZjdlFTZjhp?= =?utf-8?B?QnQ1d0hBN25iSzRhN0VBSCtwdTlFekJIZVhxOVhZUGl4QlFRZTJqUUl6ZkVj?= =?utf-8?B?UFpPazdRVW5pNnl2TER4bXMvVTBsMUhXdmZiQUU2M0FNY1pCb1ZaMElxTEVr?= =?utf-8?B?YXgrT3hoeHFhdkRrSUxvbFlZSHBxY2ZLekFlcTJwVkE3MDlZRWlLRkQ3ZlAy?= =?utf-8?B?YkR1TnB0SThOaUk0dkp1T3MwZDZjeDVJZFREWi84WVFDelFIOUd3QmRVeXlJ?= =?utf-8?B?dUVKN0Q1TkJ6Yi8wMTVjTTRzTk9KNVRDVnZZenBtRVZMTkwydTBER1ZLNng5?= =?utf-8?B?N1p5cmVYWW5PeGliWUREdDdwM3FZMlU4WjM3bnFaL2hWWjVLOFdEeU5MWnVY?= =?utf-8?B?V2NMRVJUQkpoaktTOCtMK1NoNWltaHZrSUpweEsvY3RoUVIzWGZSNVNTbnBt?= =?utf-8?B?NXduSWhWYTVNMkJhVmk3Z1lzR2NlVkQ5UnVVOU5SL2dUTG1NYWZmdUlyWlF3?= =?utf-8?B?L3k4b2ZYa3NKSkZKd091RUZYbHUvTnFDYVlvcW5MWi93d3A0MGtYSitkL3lQ?= =?utf-8?B?eGlZeVJCRDRjSmIrRlVvZ3pMSWwvQ3QvZDU3TlRlOHNHRk1TMXUzczI5Q0Ra?= =?utf-8?B?OXYycmluTWM2VmJORmhFY3A2RElMYkpmMzMreDZXNzNqWUhWN1piRVo0Sy84?= =?utf-8?B?QjFNd2JjTnpSaDE0dFR5S2RubWZaYXk3RUZENXRQZkxmS2llMnQ0a0dqSkZW?= =?utf-8?B?NTZOSHd0WkhpZGg0S28wVXY4Wm1HcGVrUjlMS0l2Z3dlRC9UUTRKRDNpdEpD?= =?utf-8?B?TVBIeTNyeUJHcFg1cFkxYVk4bHhGZmRMb3R5c3BhNXY5Zm4rblFMV1daNDh0?= =?utf-8?B?ZjhXZGtTbUFxTFpDeHhtTDNGdW8zS1lacjJ5UUk2Q09Idlo4aXZ3SEo4S1Jl?= =?utf-8?B?TWFxUHNmdUR3RmdjSXdTa05qbzNkTlUvMzN0MVk3V1ZXY2xKdGZZZjMvb05D?= =?utf-8?B?Q0cxUzRVVnhYNXV4WnlKcmxiQnZDTDBWaDVucEZ6QzZBZURKa2txY2lCMDMx?= =?utf-8?B?YUVkaDZVYTZsN2ZBU3dkRWJkei85WTVza2Q0REcwVkExTWtPYmRUREFSQWdo?= =?utf-8?B?UGYweUZNZ2hXVkJOZVZNaU1mVzRLSUliWUtUeU9sbjJvVGpKcmtXSDZ0R3Ns?= =?utf-8?B?VEN1ZWVVMTI0TVdjdmhLQjRmOXp1SzdzQ1MrL1c0cjFYWVZiVS96ME13WFpo?= =?utf-8?Q?DumT+TjC3aPBbZ2oSYjSfMSaU?= X-OriginatorOrg: nutanix.com X-MS-Exchange-CrossTenant-Network-Message-Id: 85357136-f640-4288-7f6e-08dd50f4ac06 X-MS-Exchange-CrossTenant-AuthSource: CH2PR02MB6760.namprd02.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 19 Feb 2025 14:49:54.6659 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: bb047546-786f-4de1-bd75-24e5b6f79043 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: l7HVAsugf9UkMmXKgC2JYcIkBKAyy5384pVMWqtI8nvH1u7pbz5WhM0TLQnQlLczfwQqgnshr7rNX6hPXPmHTQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: LV8PR02MB10096 X-Proofpoint-ORIG-GUID: Eyxtzb7HSPh2SmtgFrvH8s-oR1ALwBCL X-Proofpoint-GUID: Eyxtzb7HSPh2SmtgFrvH8s-oR1ALwBCL X-Authority-Analysis: v=2.4 cv=Fo7//3rq c=1 sm=1 tr=0 ts=67b5ef9e cx=c_pps a=di3315gfm3qlniCp1Rh91A==:117 a=wKuvFiaSGQ0qltdbU6+NXLB8nM8=:19 a=Ol13hO9ccFRV9qXi2t6ftBPywas=:19 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=T2h4t0Lz3GQA:10 a=0034W8JfsZAA:10 a=0kUYKlekyDsA:10 a=yPCof4ZbAAAA:8 a=64Cc0HZtAAAA:8 a=vhHEnE-nI2wpHcbFAcgA:9 a=3ZKOabzyN94A:10 a=QEXdDO2ut3YA:10 a=14NRyaPF5x3gF6G45PvQ:22 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1057,Hydra:6.0.680,FMLib:17.12.68.34 definitions=2025-02-19_06,2025-02-19_01,2024-11-22_01 X-Proofpoint-Spam-Reason: safe 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=lists.gnu.org; Received-SPF: pass client-ip=148.163.151.68; envelope-from=john.levon@nutanix.com; helo=mx0a-002c1b01.pphosted.com X-Spam_score_int: -29 X-Spam_score: -3.0 X-Spam_bar: --- X-Spam_report: (-3.0 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.191, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, 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-devel.nongnu.org> List-Unsubscribe: <https://lists.nongnu.org/mailman/options/qemu-devel>, <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>, <mailto:qemu-devel-request@nongnu.org?subject=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 @nutanix.com) X-ZM-MESSAGEID: 1739976949792019000 From: Jagannathan Raman <jag.raman@oracle.com> Introduce the vfio-user "proxy": this is the client code responsible for sending and receiving vfio-user messages across the control socket. The new files hw/vfio-user/common.[ch] contain some basic plumbing for managing the proxy; initialize the proxy during realization of the VFIOUserPCIDevice instance. Originally-by: John Johnson <john.g.johnson@oracle.com> Signed-off-by: Elena Ufimtseva <elena.ufimtseva@oracle.com> Signed-off-by: Jagannathan Raman <jag.raman@oracle.com> Signed-off-by: John Levon <john.levon@nutanix.com> --- hw/vfio-user/common.c | 171 ++++++++++++++++++++++++++++++++++ hw/vfio-user/common.h | 78 ++++++++++++++++ hw/vfio-user/meson.build | 1 + hw/vfio-user/pci.c | 18 ++++ include/hw/vfio/vfio-common.h | 2 + 5 files changed, 270 insertions(+) create mode 100644 hw/vfio-user/common.c create mode 100644 hw/vfio-user/common.h diff --git a/hw/vfio-user/common.c b/hw/vfio-user/common.c new file mode 100644 index 0000000000..e829abccec --- /dev/null +++ b/hw/vfio-user/common.c @@ -0,0 +1,171 @@ +/* + * vfio protocol over a UNIX socket. + * + * Copyright =C2=A9 2018, 2021 Oracle and/or its affiliates. + * + * This work is licensed under the terms of the GNU GPL, version 2 or late= r. + * See the COPYING file in the top-level directory. + * + */ + +#include "qemu/osdep.h" +#include <linux/vfio.h> +#include <sys/ioctl.h> + +#include "hw/hw.h" +#include "hw/vfio/vfio-common.h" +#include "io/channel.h" +#include "io/channel-socket.h" +#include "io/channel-util.h" +#include "qapi/error.h" +#include "qemu/error-report.h" +#include "qemu/lockable.h" +#include "qemu/sockets.h" +#include "system/iothread.h" + +#include "common.h" + +static IOThread *vfio_user_iothread; + +static void vfio_user_shutdown(VFIOUserProxy *proxy); + + +/* + * Functions called by main, CPU, or iothread threads + */ + +static void vfio_user_shutdown(VFIOUserProxy *proxy) +{ + qio_channel_shutdown(proxy->ioc, QIO_CHANNEL_SHUTDOWN_READ, NULL); + qio_channel_set_aio_fd_handler(proxy->ioc, proxy->ctx, NULL, + proxy->ctx, NULL, NULL); +} + +/* + * Functions only called by iothread + */ + +static void vfio_user_cb(void *opaque) +{ + VFIOUserProxy *proxy =3D opaque; + + QEMU_LOCK_GUARD(&proxy->lock); + + proxy->state =3D VFIO_PROXY_CLOSED; + qemu_cond_signal(&proxy->close_cv); +} + + +/* + * Functions called by main or CPU threads + */ + +static QLIST_HEAD(, VFIOUserProxy) vfio_user_sockets =3D + QLIST_HEAD_INITIALIZER(vfio_user_sockets); + +VFIOUserProxy *vfio_user_connect_dev(SocketAddress *addr, Error **errp) +{ + VFIOUserProxy *proxy; + QIOChannelSocket *sioc; + QIOChannel *ioc; + char *sockname; + + if (addr->type !=3D SOCKET_ADDRESS_TYPE_UNIX) { + error_setg(errp, "vfio_user_connect - bad address family"); + return NULL; + } + sockname =3D addr->u.q_unix.path; + + sioc =3D qio_channel_socket_new(); + ioc =3D QIO_CHANNEL(sioc); + if (qio_channel_socket_connect_sync(sioc, addr, errp)) { + object_unref(OBJECT(ioc)); + return NULL; + } + qio_channel_set_blocking(ioc, false, NULL); + + proxy =3D g_malloc0(sizeof(VFIOUserProxy)); + proxy->sockname =3D g_strdup_printf("unix:%s", sockname); + proxy->ioc =3D ioc; + proxy->flags =3D VFIO_PROXY_CLIENT; + proxy->state =3D VFIO_PROXY_CONNECTED; + + qemu_mutex_init(&proxy->lock); + qemu_cond_init(&proxy->close_cv); + + if (vfio_user_iothread =3D=3D NULL) { + vfio_user_iothread =3D iothread_create("VFIO user", errp); + } + + proxy->ctx =3D iothread_get_aio_context(vfio_user_iothread); + + QTAILQ_INIT(&proxy->outgoing); + QTAILQ_INIT(&proxy->incoming); + QTAILQ_INIT(&proxy->free); + QTAILQ_INIT(&proxy->pending); + QLIST_INSERT_HEAD(&vfio_user_sockets, proxy, next); + + return proxy; +} + +void vfio_user_disconnect(VFIOUserProxy *proxy) +{ + VFIOUserMsg *r1, *r2; + + qemu_mutex_lock(&proxy->lock); + + /* our side is quitting */ + if (proxy->state =3D=3D VFIO_PROXY_CONNECTED) { + vfio_user_shutdown(proxy); + if (!QTAILQ_EMPTY(&proxy->pending)) { + error_printf("vfio_user_disconnect: outstanding requests\n"); + } + } + object_unref(OBJECT(proxy->ioc)); + proxy->ioc =3D NULL; + + proxy->state =3D VFIO_PROXY_CLOSING; + QTAILQ_FOREACH_SAFE(r1, &proxy->outgoing, next, r2) { + qemu_cond_destroy(&r1->cv); + QTAILQ_REMOVE(&proxy->outgoing, r1, next); + g_free(r1); + } + QTAILQ_FOREACH_SAFE(r1, &proxy->incoming, next, r2) { + qemu_cond_destroy(&r1->cv); + QTAILQ_REMOVE(&proxy->incoming, r1, next); + g_free(r1); + } + QTAILQ_FOREACH_SAFE(r1, &proxy->pending, next, r2) { + qemu_cond_destroy(&r1->cv); + QTAILQ_REMOVE(&proxy->pending, r1, next); + g_free(r1); + } + QTAILQ_FOREACH_SAFE(r1, &proxy->free, next, r2) { + qemu_cond_destroy(&r1->cv); + QTAILQ_REMOVE(&proxy->free, r1, next); + g_free(r1); + } + + /* + * Make sure the iothread isn't blocking anywhere + * with a ref to this proxy by waiting for a BH + * handler to run after the proxy fd handlers were + * deleted above. + */ + aio_bh_schedule_oneshot(proxy->ctx, vfio_user_cb, proxy); + qemu_cond_wait(&proxy->close_cv, &proxy->lock); + + /* we now hold the only ref to proxy */ + qemu_mutex_unlock(&proxy->lock); + qemu_cond_destroy(&proxy->close_cv); + qemu_mutex_destroy(&proxy->lock); + + QLIST_REMOVE(proxy, next); + if (QLIST_EMPTY(&vfio_user_sockets)) { + iothread_destroy(vfio_user_iothread); + vfio_user_iothread =3D NULL; + } + + g_free(proxy->sockname); + g_free(proxy); +} diff --git a/hw/vfio-user/common.h b/hw/vfio-user/common.h new file mode 100644 index 0000000000..3529f03df9 --- /dev/null +++ b/hw/vfio-user/common.h @@ -0,0 +1,78 @@ +#ifndef VFIO_USER_COMMON_H +#define VFIO_USER_COMMON_H + +/* + * vfio protocol over a UNIX socket. + * + * Copyright =C2=A9 2018, 2021 Oracle and/or its affiliates. + * + * This work is licensed under the terms of the GNU GPL, version 2. See + * the COPYING file in the top-level directory. + * + */ + +typedef struct { + int send_fds; + int recv_fds; + int *fds; +} VFIOUserFDs; + +enum msg_type { + VFIO_MSG_NONE, + VFIO_MSG_ASYNC, + VFIO_MSG_WAIT, + VFIO_MSG_NOWAIT, + VFIO_MSG_REQ, +}; + +typedef struct VFIOUserMsg { + QTAILQ_ENTRY(VFIOUserMsg) next; + VFIOUserFDs *fds; + uint32_t rsize; + uint32_t id; + QemuCond cv; + bool complete; + enum msg_type type; +} VFIOUserMsg; + + +enum proxy_state { + VFIO_PROXY_CONNECTED =3D 1, + VFIO_PROXY_ERROR =3D 2, + VFIO_PROXY_CLOSING =3D 3, + VFIO_PROXY_CLOSED =3D 4, +}; + +typedef QTAILQ_HEAD(VFIOUserMsgQ, VFIOUserMsg) VFIOUserMsgQ; + +typedef struct VFIOUserProxy { + QLIST_ENTRY(VFIOUserProxy) next; + char *sockname; + struct QIOChannel *ioc; + void (*request)(void *opaque, VFIOUserMsg *msg); + void *req_arg; + int flags; + QemuCond close_cv; + AioContext *ctx; + QEMUBH *req_bh; + + /* + * above only changed when BQL is held + * below are protected by per-proxy lock + */ + QemuMutex lock; + VFIOUserMsgQ free; + VFIOUserMsgQ pending; + VFIOUserMsgQ incoming; + VFIOUserMsgQ outgoing; + VFIOUserMsg *last_nowait; + enum proxy_state state; +} VFIOUserProxy; + +/* VFIOProxy flags */ +#define VFIO_PROXY_CLIENT 0x1 + +VFIOUserProxy *vfio_user_connect_dev(SocketAddress *addr, Error **errp); +void vfio_user_disconnect(VFIOUserProxy *proxy); + +#endif /* VFIO_USER_COMMON_H */ diff --git a/hw/vfio-user/meson.build b/hw/vfio-user/meson.build index f1fee70c85..b89985c641 100644 --- a/hw/vfio-user/meson.build +++ b/hw/vfio-user/meson.build @@ -1,5 +1,6 @@ vfio_user_ss =3D ss.source_set() vfio_user_ss.add(files( + 'common.c', 'container.c', 'pci.c', )) diff --git a/hw/vfio-user/pci.c b/hw/vfio-user/pci.c index 6c85c60179..bfd9051524 100644 --- a/hw/vfio-user/pci.c +++ b/hw/vfio-user/pci.c @@ -19,6 +19,8 @@ #include "hw/qdev-properties.h" #include "hw/qdev-properties-system.h" #include "hw/vfio/pci.h" +#include "hw/vfio-user/common.h" +#include "hw/vfio-user/container.h" #include "qapi/error.h" #include "qobject/qdict.h" #include "qemu/error-report.h" @@ -59,6 +61,8 @@ static void vfio_user_pci_realize(PCIDevice *pdev, Error = **errp) VFIOPCIDevice *vdev =3D VFIO_PCI_BASE(pdev); VFIODevice *vbasedev =3D &vdev->vbasedev; AddressSpace *as; + SocketAddress addr; + VFIOUserProxy *proxy; =20 /* * TODO: make option parser understand SocketAddress @@ -71,6 +75,15 @@ static void vfio_user_pci_realize(PCIDevice *pdev, Error= **errp) return; } =20 + memset(&addr, 0, sizeof(addr)); + addr.type =3D SOCKET_ADDRESS_TYPE_UNIX; + addr.u.q_unix.path =3D udev->sock_name; + proxy =3D vfio_user_connect_dev(&addr, errp); + if (!proxy) { + return; + } + vbasedev->proxy =3D proxy; + vbasedev->name =3D g_strdup_printf("VFIO user <%s>", udev->sock_name); vbasedev->ops =3D &vfio_user_pci_ops; vbasedev->type =3D VFIO_DEVICE_TYPE_PCI; @@ -119,8 +132,13 @@ static void vfio_user_instance_init(Object *obj) static void vfio_user_instance_finalize(Object *obj) { VFIOPCIDevice *vdev =3D VFIO_PCI_BASE(obj); + VFIODevice *vbasedev =3D &vdev->vbasedev; =20 vfio_pci_put_device(vdev); + + if (vbasedev->proxy !=3D NULL) { + vfio_user_disconnect(vbasedev->proxy); + } } =20 static const Property vfio_user_pci_dev_properties[] =3D { diff --git a/include/hw/vfio/vfio-common.h b/include/hw/vfio/vfio-common.h index ee8e7f7c0d..699e8a9376 100644 --- a/include/hw/vfio/vfio-common.h +++ b/include/hw/vfio/vfio-common.h @@ -79,6 +79,7 @@ typedef struct VFIOMigration { } VFIOMigration; =20 struct VFIOGroup; +typedef struct VFIOUserProxy VFIOUserProxy; =20 /* MMU container sub-class for legacy vfio implementation. */ typedef struct VFIOContainer { @@ -155,6 +156,7 @@ typedef struct VFIODevice { IOMMUFDBackend *iommufd; VFIOIOASHwpt *hwpt; QLIST_ENTRY(VFIODevice) hwpt_next; + VFIOUserProxy *proxy; struct vfio_region_info **regions; } VFIODevice; =20 --=20 2.34.1