From nobody Sat May 4 19:45:18 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=citrix.com); dmarc=pass(p=reject dis=none) header.from=citrix.com ARC-Seal: i=2; a=rsa-sha256; t=1642412995; cv=pass; d=zohomail.com; s=zohoarc; b=KAbC78qpHKolU/6AUG4PaMtYgie8GMopcXpxFP3pkMKOQ4xEJx89f3M2SOWxoA5JhTMXDONz977ifTdweqam9VgdyFQBt1SRkh/yl7UsP7kGrAdKiMuQxJkueEGQ7D+cR3dgpx/Spc705Ab7hAV4y+66ob3RSoTN1Gw8jFmDznk= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1642412995; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=ayDbTDiZzC5P0TCfS6qraBUi+bw0MzhwKU7e6ofLrXs=; b=Qagpq0N5TpsRebU7GuJ88+r/y2Hy/Ad7cqLCKr13eC9mv9dee8GUJ2E7uSnFxp5Xyw+AAdBosVoXpg4L2QNVDKgmgyThpSDdHFG+458+vjqhiRxFIBQkbAxcPUBqzLrQjyymQ82gWDEVwe38VPAUd9yDi1CTv32BN+OYFShttyk= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=citrix.com); dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1642412995480124.17306457080383; Mon, 17 Jan 2022 01:49:55 -0800 (PST) Received: from list by lists.xenproject.org with outflank-mailman.258040.443909 (Exim 4.92) (envelope-from ) id 1n9OdU-0002yA-CN; Mon, 17 Jan 2022 09:49:12 +0000 Received: by outflank-mailman (output) from mailman id 258040.443909; Mon, 17 Jan 2022 09:49:12 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1n9OdU-0002y3-99; Mon, 17 Jan 2022 09:49:12 +0000 Received: by outflank-mailman (input) for mailman id 258040; Mon, 17 Jan 2022 09:49:10 +0000 Received: from se1-gles-sth1-in.inumbo.com ([159.253.27.254] helo=se1-gles-sth1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1n9OdS-0002gi-4E for xen-devel@lists.xenproject.org; Mon, 17 Jan 2022 09:49:10 +0000 Received: from esa1.hc3370-68.iphmx.com (esa1.hc3370-68.iphmx.com [216.71.145.142]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id b5a3a174-777a-11ec-9bbc-9dff3e4ee8c5; Mon, 17 Jan 2022 10:49:08 +0100 (CET) X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" X-Inumbo-ID: b5a3a174-777a-11ec-9bbc-9dff3e4ee8c5 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=citrix.com; s=securemail; t=1642412948; h=from:to:cc:subject:date:message-id:in-reply-to: references:content-transfer-encoding:mime-version; bh=Wz93ug/FPNJSgHXPaEs9gVh/zmqAvZ/KFxPj6vDe+ao=; b=c3eFca7SENnGcxUJl6mYnsnVdVag7f6rzADA1GQTyguJA4fw2SpWvRBQ CsuYpcBo6y8eKPrbHmGOT3WgY8JAWrHDLDjtXyi/UpZl+KNeAsauWnh96 Ffk13+rLL4NtZc57uHVCjd0k3SYHPvyCrTKV0tGeksdMJw2FZCpzZui2I 0=; Authentication-Results: esa1.hc3370-68.iphmx.com; dkim=pass (signature verified) header.i=@citrix.onmicrosoft.com IronPort-SDR: 5o9VWThEf+1PV3GDUJxGHRVgwlGC6ZpJGykn1vwhgo7MlQZ3CKrTnHeRvnBYyGQ8/YiNqg+vTM nKdobOkOIXBn/Be2hLblTfS9YBYkbYnEgDl0PxxDwAnILfeU34+Pb4qCw2ALsChwBYDdmQxeOb Wdl1yx8VYftfvsPc1GoDUHiTbcLGaOl+PEEIV3ngbn5Dfkp4KIxZFnG8KlU9qy8USGeoIxgR8i w3ekaaGO4tbwvTkcW2vzfSUSVlGYb6kCggp4+QLA/v3oz/oUcUs+AxJD2SJMaq086LLed0Xaak pleo2aqAoK/GR43hLY5zOcYG X-SBRS: 5.2 X-MesageID: 62542542 X-Ironport-Server: esa1.hc3370-68.iphmx.com X-Remote-IP: 162.221.156.83 X-Policy: $RELAYED IronPort-Data: A9a23:Fn8hC617YdHbhtP7WvbD5SN2kn2cJEfYwER7XKvMYLTBsI5bp2AHy zNLXWmHb/yJNGWnKt1zO4mz9hxTsZSAn4ViSgJrpC1hF35El5HIVI+TRqvS04J+DSFhoGZPt Zh2hgzodZhsJpPkS5PE3oHJ9RGQ74nRLlbHILOCanAZqTNMEn9700o6wrFh2+aEvPDia++zk YKqyyHgEAfNNw5cagr4PIra9XuDFNyr0N8plgRWicJj5TcypFFMZH4rHomjLmOQf2VhNrXSq 9Avbl2O1jixEx8FUrtJm1tgG6EAaua60QOm0hK6V0U+6/TrS+NbPqsTbZIhhUlrZzqhk+pbl +5Al5GJU11xLLXt2+IZcDB4KnQrVUFG0OevzXmXtMWSywvNcmf2wuUoB0YzVWEa0r8pWycUr 6VecW1TKEDY7w616OvTpu1EnMMsIdOtJIoCknph0SvYHbAtRpWrr6Diu4UFgG1t2pom8fD2V epFeQFxbzr6fV5dFX0RUrYAme2lvyyqG9FfgA3M/vdmi4TJ9yRz36LqK8H9YcGRSINemUPwj mDM8nn9AxoaHMeC0jfD+XWp7sffkCW+VI8MGbmQ8v9xnEbV1mEVEAcRV1awvb++kEHWc81bA 1wZ/Gwpt6dayaCwZoCjBVvi+ifC50NCHYoLewEn1O2T4qbuyVmiC0oJdyQbMM4+lYwwQR8D9 mbcyrsFGgdTmLGSTHuc8JKdojWzJTUZIAc+WMMUcecWy4K9+d9u13ojWv4mSffo1YOtRVkc1 hjT9HBm74j/m/LnwElSEbrvpzu37qbEQQcujuk8djL0t1gpDGJJimHB1LQ60RqiBNvDJrVil CJd8yR70AzoJcvX/MBqaL9cdIxFH97fbFXhbadHRvHNDQiF9X+5Zpx36zpjPkpvOctsUWa3P BWI5FMKtMMPYivCgUpLj2SZUZlCIU/IT4WNaxwpRoAWPsgZmPGvoUmCmnJ8L0iyyRNxwMnTy L+QcNq2DGZyNEiU5GHeegvp6pdynnpW7TqKHfjTlk37uZLDOiL9YepbYTOmM7BohIvZ8V692 4sOaKO3J+B3DbeWjt//q9BDdDjn7BETWPjLliCgXrXSfVo9RjBwUq+5LHFIU9UNopm5X9zgp xmVckRZ1ED+lTvALwCLYWpkc7ThQdB0qndTAMDmFQ/AN6ELbdn94aEBWYEweLV7puVvweQtF 6sOetmaA+QJQTPComxPYZ74pY1kVRKqmQPRYHb1PGlhJ8ZtF17T59vpXgrz7y1SXCC5gtQz/ u+73QTBTJtdGwk7VJTKaOiixk+atGQGnL4gRFPBJ9ReIR2+8IVjJyHroOUwJsUAdUfKyjeAj l7EChYEv+jd5YQy9YCR16yDqo6oFcp4H1ZbQDaHverna3GC8zP6k4FaUeuOcTTMb0/O+f2vN bdP0vXxEPwbh1IW4YByJKlmkPAl7Nz1qr4Ekgk9RCfXb06mA69LK2Wd2ZUdrbVEw7JUtFfkW k+L/dUGa7yFNNm8TQwULQshKO+CyesVin/Z6vFseBf24yp+/bymV0ROPkbT1HwBfeUtaI51k /08vMM26hCkjkt4O9mLuSlY6mCQIyFSSK4grJwbXNfmhwdDJouuunAA5vsaOK2yVug= IronPort-HdrOrdr: A9a23:dY0mHqsEvc3GeonfSLCBeGJ/7skC7oMji2hC6mlwRA09TyXGra +TdaUguSMc1gx9ZJhBo7G90KnpewK5yXcT2/hsAV7CZniahILMFu9fBOTZslvd8kHFh4xgPO JbAtND4b7LfClHZKTBkXCF+r8bqbHtmsDY5ts2jU0dNz2CA5sQkTuRYTzrdXGeKjM2YKbQQ/ Gnl7V6TnebCD8qR/X+IkNAc/nIptXNmp6jSRkaByQ/4A3LqT+z8rb1HzWRwx9bClp0sPof2F mAtza8yrSosvm9xBOZ/2jP765OkN+k7tdYHsSDhuUcNz2poAe1Y4ZKXaGEoVkO0auSwWdvtO OJjwYrPsx15X+UVmapoSH10w2l6zoq42+K8y7vvVLT5ejCAB4qActIgoxUNjHD7VA7gd162K VXm0qEqpt+F3r77WrAzumNcysvulu/oHIkn+JWpWdYS5EiZLhYqpFa1F9JEa0HADnx5OkcYa ZT5fnnlbZrmG6hHjPkVjEF+q3vYp1zJGbLfqE6gL3V79AM90oJinfxx6Qk7wA9HdwGOt15Dt //Q9dVfYd1P7srhJJGdZc8qPSMex7wqGr3QRqvyHTcZeg60iH22tbKCItc3pDeRHVP9up0pK j8 X-IronPort-AV: E=Sophos;i="5.88,295,1635220800"; d="scan'208";a="62542542" ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=MIXjQTnjJj8j+GsfBW6xiPZzMhIgTCW3uci0+7TtDmOa8qPT3UYU2q60pLBpI0pove6rwik6v+U2P9BLdKw5u45n2ncSmIhv52aZdq0DJdAfxEAGUkMRJKobZJs+aT1MJbysjEktQIDfpr030AUxrLeIhQ8bQWtgeitynUL0YtWFq9kBrIFE4AFC5ycxj/VCTQz6fqS6RnfnlcspYgzDDme3cb74Jtloo89KMuttNgEsIHhu6NN6G9WmAWgqjtjUiZZ6mxLcmDZXCtUJ3OcYuLIyAYPvf2nol3ldvHyafnBQZ+OXm18j7oQa4/Ffw8gOZITtxgv/oRbhRaKUCJhTgA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; 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=ayDbTDiZzC5P0TCfS6qraBUi+bw0MzhwKU7e6ofLrXs=; b=D+qY2k/FZ7zxsC0Y4ZZFgjN7bIfK6+pmEROzAVN34PEI0+lgAqnsJrI9PcHhgosOx73IX3tRQaxXwL5x1uLTmWM7T04BRH5PBEkBtW1hDZgoCkDCadyweBV2BXkLxVmLwOUH1ZWyszd4W6mYJVaEgn5JcjVDjqno43QNCfkrSuTPDd6fYueZrErR99ROuDxG27s0Iz814mxOllz0+1p6z6WhLyzQD3iJ05AECrxZckPVX1vy3XBeX+U0EpqhVZESJGy7aXhAA+iIOrrGihfQJCwswbLliAcyR5SgYMkqgM0OABw1AXlb+3L6TMnrzIGahN+3gNPm+ZpmybGNRUZdgw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com; dkim=pass header.d=citrix.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=citrix.onmicrosoft.com; s=selector2-citrix-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=ayDbTDiZzC5P0TCfS6qraBUi+bw0MzhwKU7e6ofLrXs=; b=iD8mrxCg93t1VYff/0r5r/GK5len+SNCT0/rZk0l+iVErgkyx9uSf8BCOZH0elTjYbT8MNL10yLXqw7HZxmUXHxnOS4d2b8nC8d9ZLdpnSFGo4puecm315C24/VJt0zuJkIZ43WdhWLq4VTtDPiOwtfuVRn86t5N2MgXwpZbjtU= From: Roger Pau Monne To: CC: Roger Pau Monne , Wei Liu , Anthony PERARD , Juergen Gross , Jan Beulich , Andrew Cooper Subject: [PATCH v6 01/12] libs/guest: move cpu policy related prototypes to xenguest.h Date: Mon, 17 Jan 2022 10:48:16 +0100 Message-ID: <20220117094827.16756-2-roger.pau@citrix.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220117094827.16756-1-roger.pau@citrix.com> References: <20220117094827.16756-1-roger.pau@citrix.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: MR2P264CA0165.FRAP264.PROD.OUTLOOK.COM (2603:10a6:501:1::28) To DS7PR03MB5608.namprd03.prod.outlook.com (2603:10b6:5:2c9::18) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 5763b145-3bf1-4090-9ad1-08d9d99e97b5 X-MS-TrafficTypeDiagnostic: DM6PR03MB4059:EE_ X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:5797; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: Q7Qzipl0O5gPq4KJDrHfXmHBGDt1W7QQKXw3v0DLYLa9LOUlTw4IgGXlDH9oJs2Ioo661hj1QJdRzXnndE8YpWL3fMJlcLZxEce3hImsmo0MWmOL51pQVefBNspuo0KHLXCnwIzE4MWrZapLtKUZI72/rtnPpt6iarZ8OwwVwHBuwvBZfBxXvbnAD7ZtSx4ifFneHljeb0F9Hj+LdG2Ci8F/QirwGFLhz2Fo8mUwjLudgSc5GYSSJoLzQAVdBV1RGuuXyFYmq/Z81tRFv0MWtT4jcpI+0OcoYOlrLmyAav+tMVqy6lLFLHYvu0dXZPpdZhO1GejTxUs2XjiqnxLHdiZ8Kz2IRlioTHLj3Oz70C0LjK9eJg3aWjOtA8uk+84smLwWukI262n3f/BhXw+Ck5IsizhiuNcLlPmvyWtopkivG2KcEaQmLg4Z4MZZxYlquCa4EMaUImDY1uvQuOCfxRlaWgBvFdQtfWftuTpYNdVwlLnUdIARpeHPrMxJkE8plEC5gkI48v5g018DO8wXnh7ZPF4Q1DKU+4OPHO7pQLouLCnlu3ZHSwCYaCZwO4I9x5gA6N5T+FJQp6W7W3t2J22IEOSqMi3uSLlAuq3LHATGRSstKDhX2WqN77izS8+B0cxwQqIQOPz4SyF/3TxP+Q== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DS7PR03MB5608.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(366004)(4326008)(107886003)(6512007)(8936002)(186003)(36756003)(6506007)(316002)(83380400001)(38100700002)(6486002)(26005)(6916009)(86362001)(6666004)(8676002)(54906003)(2616005)(82960400001)(2906002)(5660300002)(66946007)(66556008)(66476007)(1076003)(508600001);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?VkFMWTQ3THV4TWxqSDh0Q1d5MUlMSzFEMExGN2Uyc3d3ZmpvYXlVOGJieVNj?= =?utf-8?B?U09KMG50MTZ5ZmMzdlNZRlIxUHlqano2eU16U2pTLzBhTzJSdEI2OWxsN2cv?= =?utf-8?B?cG1iZTVGcWtBVFZTOG40UEJ6S2txSlowMzZlbTlzSWFSYnA3WTNoNENtZTNt?= =?utf-8?B?VjBiNktIakdlejJDUnc5QXZhTTZTQVpFU0xmQVFudmJoWDM5OUxicE9BUy9J?= =?utf-8?B?YU85UnVpVUxTMG5pME0wakMrUVpnTm1GRjZoU2RzUWlUL3pmc045NzlidTVO?= =?utf-8?B?Z0ErckE4WHRtajFNS29KOG1sdXZkTVpzQ2V4VndGaFJLenJBMGpTUWRRb0ZE?= =?utf-8?B?aTc4VW9zZHVhaHZCQkNkcnRQNVhUYnoxWG5yQWtEdlpvc2F4eU5MbmJpZFQ1?= =?utf-8?B?NnRhcW9BUHkxUklLZmZZSnUxMEJHQ0RkNXI0Y1hRVDZJN09jWXJGVThCeDNr?= =?utf-8?B?S0lPQVNza3lXczRPRklHRnpmTjRCZWFDa1c4RHdiYnZFcFYxSnNTOU1xNDBw?= =?utf-8?B?SGZMRW12b3JYa1RERDVESkRvWkRuTUt4SS9iV0R1cTQ2TVU2UjM4U2ExL0ZE?= =?utf-8?B?L1VNOUxXcEZ1Y0tQK2VsbFJrbFp4eC9Ma244NmJsdW12NmJPTEVGYkQzK2FF?= =?utf-8?B?ajhNdnNxMDhnSXgrMjBvcnFYeWZvL2NxZzFiVDdadytnaGRsbVFFNUd1OFR2?= =?utf-8?B?dEFza0VzVkwyZnl6RXBETlV1M1hKaCtVMWFqZC9tN1E1TGdJeGxtd2dFRWJ0?= =?utf-8?B?RkxDWFJpYmxnUFdXejlNekkrWlJwQjExV3lQNFhwRFJGd1A3dEROcTB1YXRR?= =?utf-8?B?MmI3cHdwT2NQZ2g3R3NJTHBVVG8vZS8vSUMrQjkyOUhQeFltWDRuc1RDczYw?= =?utf-8?B?TmpFVWpIQ1llbXNScWsyTW0rQmJ3TkdZc2JSUXZaejdmR1dWUG85WlY5RWNB?= =?utf-8?B?WXB3RWVJbGdHR2tPOWlhbVBJY2h5YUR3bDAyQmVWWUVaekxOL0tQRFlJMUI2?= =?utf-8?B?MW1DNnd5a29jU0pzUHEwSjNQNERacEExakVvNHlqUDc0TlRCc1FMNXhVV1h2?= =?utf-8?B?VFltMllTQkZGNWI3REIycjkwTTFXUnVTcXZ5M2R4QzJlamdXaGRtWS9oNEN2?= =?utf-8?B?QVFIZXlIbEtuYXIrS2VaclYwV0F3aUYxVTh2akplbVFNN2NTclU4S01KMmNk?= =?utf-8?B?RGtnRUNremVOQk0yNldlZm5SOXNtczBCQ0hmVktKUFpxWk5tMzZodEVTNTVF?= =?utf-8?B?QjB4M1hzZUFWUmpsRTlIRnZYbDBIQUxkVG1sS00vSWZiZXJkSnRDZ1B5TUJk?= =?utf-8?B?dmFYMGdxMllIU0t6RWd5Q0JBUlc2MDY1elU3OHFPWHVqbFJKTjVqUVhTdDVB?= =?utf-8?B?MGdQT2Z6OExzTzh4ZFNqRlRqRmNOQk1GbkgyeWc4VWxuS3BYend0ci9ITzBl?= =?utf-8?B?UmdkRm52aGNhNHBTZys5WVBCcEhDNUNVVlpXbU9DNldwd3d1ZjdkOTc0UG9w?= =?utf-8?B?OTk5UkowSTNYRzlHUG9YWXpaVFA5K1BsdFdTcG53VE1CZ1F5U0tqOUsvZ0l4?= =?utf-8?B?ZjJmVnlXVnhTa2l2VTQ3Y1NoOW5ETDBJckh0cUpnV0tnbGxNYnBUU0VXSmlr?= =?utf-8?B?OThjVDJJN3FuVmhUdjVVUTZzQTNNZytNYklIRktjK3Q4b1FYbWlNYVJxdlIw?= =?utf-8?B?ZjNjQ3BmNmlsUGp6NE56Mk44Y21DSUZBdDZwVVNpanJTWEhENXkySmh3UGdl?= =?utf-8?B?WFhqOTk5WVJ6VzJicHFaZU5wbkRGODBKcTBNSFcvK2xXbXNReHgzVHBPdzk1?= =?utf-8?B?ekt1TFRCVEpReFVyZnZkajZ3MnQ1UHRFSklKMWVIenkzbVZzQkM3ZElKOUZ0?= =?utf-8?B?YVZ3dmRPUHZyQk5YS3M0ZFJGcWtoS3lvbG4wZVBkN2E0RUNoMG8vRG85Zngv?= =?utf-8?B?UXpPNW5YN25LbnovNzJGVDBlTkl4V0YwYm9UY1YvQk5adjBsZnRvbFhyd3Nt?= =?utf-8?B?eFNWM3BsZXExSjFOWUdiUklIeFA5Nnl0MExYb2tQcXlETTR6TVcwZjljN3BN?= =?utf-8?B?MnJ6QnhTUFNVdFJvQTdiQVlsTERLK0tjeEQ2YW54WW84SFJ3NnpmMzkxclFB?= =?utf-8?B?RWFFVVdYelRJN08vVW54bWswSGJudVl6V3g2SXplM2k0Q0MxWmZWQmVNUUl2?= =?utf-8?Q?X393D6nRx7mVNPln0vqts9o=3D?= X-MS-Exchange-CrossTenant-Network-Message-Id: 5763b145-3bf1-4090-9ad1-08d9d99e97b5 X-MS-Exchange-CrossTenant-AuthSource: DS7PR03MB5608.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Jan 2022 09:49:02.4050 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 335836de-42ef-43a2-b145-348c2ee9ca5b X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 6AL6G03OVTkcKCfJJcQbJ2Upj8z8tMUD5Jsvj4RsTicwVVanQCLuaJjGbXs19c1joZD8ahBnzdN+MGI5TcsXoQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR03MB4059 X-OriginatorOrg: citrix.com X-ZohoMail-DKIM: pass (identity @citrix.com) X-ZM-MESSAGEID: 1642412997134100001 Do this before adding any more stuff to xg_cpuid_x86.c. The placement in xenctrl.h is wrong, as they are implemented by the xenguest library. Note that xg_cpuid_x86.c needs to include xg_private.h, and in turn also fix xg_private.h to include xc_bitops.h. The bitops definition of BITS_PER_LONG needs to be changed to not be an expression, so that xxhash.h can use it in a preprocessor if directive. As a result also modify xen-cpuid and the ocaml stubs to include xenguest.h. Reported-by: Andrew Cooper Signed-off-by: Roger Pau Monn=C3=A9 Acked-by: Andrew Cooper --- Changes since v1: - Include xenguest.h in ocaml stubs. - Change BITS_PER_LONG definition in xc_bitops.h. --- tools/include/xenctrl.h | 55 -------------------------------- tools/include/xenguest.h | 56 +++++++++++++++++++++++++++++++++ tools/libs/ctrl/xc_bitops.h | 6 +++- tools/libs/guest/xg_cpuid_x86.c | 1 - tools/libs/guest/xg_private.h | 1 + tools/misc/xen-cpuid.c | 1 + 6 files changed, 63 insertions(+), 57 deletions(-) diff --git a/tools/include/xenctrl.h b/tools/include/xenctrl.h index 07b96e6671..95bd5eca67 100644 --- a/tools/include/xenctrl.h +++ b/tools/include/xenctrl.h @@ -2528,61 +2528,6 @@ int xc_psr_get_domain_data(xc_interface *xch, uint32= _t domid, uint64_t *data); int xc_psr_get_hw_info(xc_interface *xch, uint32_t socket, xc_psr_feat_type type, xc_psr_hw_info *hw_info); - -typedef struct xc_cpu_policy xc_cpu_policy_t; - -/* Create and free a xc_cpu_policy object. */ -xc_cpu_policy_t *xc_cpu_policy_init(void); -void xc_cpu_policy_destroy(xc_cpu_policy_t *policy); - -/* Retrieve a system policy, or get/set a domains policy. */ -int xc_cpu_policy_get_system(xc_interface *xch, unsigned int policy_idx, - xc_cpu_policy_t *policy); -int xc_cpu_policy_get_domain(xc_interface *xch, uint32_t domid, - xc_cpu_policy_t *policy); -int xc_cpu_policy_set_domain(xc_interface *xch, uint32_t domid, - xc_cpu_policy_t *policy); - -/* Manipulate a policy via architectural representations. */ -int xc_cpu_policy_serialise(xc_interface *xch, const xc_cpu_policy_t *poli= cy, - xen_cpuid_leaf_t *leaves, uint32_t *nr_leaves, - xen_msr_entry_t *msrs, uint32_t *nr_msrs); -int xc_cpu_policy_update_cpuid(xc_interface *xch, xc_cpu_policy_t *policy, - const xen_cpuid_leaf_t *leaves, - uint32_t nr); -int xc_cpu_policy_update_msrs(xc_interface *xch, xc_cpu_policy_t *policy, - const xen_msr_entry_t *msrs, uint32_t nr); - -/* Compatibility calculations. */ -bool xc_cpu_policy_is_compatible(xc_interface *xch, xc_cpu_policy_t *host, - xc_cpu_policy_t *guest); - -int xc_get_cpu_levelling_caps(xc_interface *xch, uint32_t *caps); -int xc_get_cpu_featureset(xc_interface *xch, uint32_t index, - uint32_t *nr_features, uint32_t *featureset); - -int xc_cpu_policy_get_size(xc_interface *xch, uint32_t *nr_leaves, - uint32_t *nr_msrs); -int xc_set_domain_cpu_policy(xc_interface *xch, uint32_t domid, - uint32_t nr_leaves, xen_cpuid_leaf_t *leaves, - uint32_t nr_msrs, xen_msr_entry_t *msrs, - uint32_t *err_leaf_p, uint32_t *err_subleaf_p, - uint32_t *err_msr_p); - -uint32_t xc_get_cpu_featureset_size(void); - -enum xc_static_cpu_featuremask { - XC_FEATUREMASK_KNOWN, - XC_FEATUREMASK_SPECIAL, - XC_FEATUREMASK_PV_MAX, - XC_FEATUREMASK_PV_DEF, - XC_FEATUREMASK_HVM_SHADOW_MAX, - XC_FEATUREMASK_HVM_SHADOW_DEF, - XC_FEATUREMASK_HVM_HAP_MAX, - XC_FEATUREMASK_HVM_HAP_DEF, -}; -const uint32_t *xc_get_static_cpu_featuremask(enum xc_static_cpu_featurema= sk); - #endif =20 int xc_livepatch_upload(xc_interface *xch, diff --git a/tools/include/xenguest.h b/tools/include/xenguest.h index 61d0a82f48..e01f494b77 100644 --- a/tools/include/xenguest.h +++ b/tools/include/xenguest.h @@ -782,4 +782,60 @@ xen_pfn_t *xc_map_m2p(xc_interface *xch, unsigned long max_mfn, int prot, unsigned long *mfn0); + +#if defined(__i386__) || defined(__x86_64__) +typedef struct xc_cpu_policy xc_cpu_policy_t; + +/* Create and free a xc_cpu_policy object. */ +xc_cpu_policy_t *xc_cpu_policy_init(void); +void xc_cpu_policy_destroy(xc_cpu_policy_t *policy); + +/* Retrieve a system policy, or get/set a domains policy. */ +int xc_cpu_policy_get_system(xc_interface *xch, unsigned int policy_idx, + xc_cpu_policy_t *policy); +int xc_cpu_policy_get_domain(xc_interface *xch, uint32_t domid, + xc_cpu_policy_t *policy); +int xc_cpu_policy_set_domain(xc_interface *xch, uint32_t domid, + xc_cpu_policy_t *policy); + +/* Manipulate a policy via architectural representations. */ +int xc_cpu_policy_serialise(xc_interface *xch, const xc_cpu_policy_t *poli= cy, + xen_cpuid_leaf_t *leaves, uint32_t *nr_leaves, + xen_msr_entry_t *msrs, uint32_t *nr_msrs); +int xc_cpu_policy_update_cpuid(xc_interface *xch, xc_cpu_policy_t *policy, + const xen_cpuid_leaf_t *leaves, + uint32_t nr); +int xc_cpu_policy_update_msrs(xc_interface *xch, xc_cpu_policy_t *policy, + const xen_msr_entry_t *msrs, uint32_t nr); + +/* Compatibility calculations. */ +bool xc_cpu_policy_is_compatible(xc_interface *xch, xc_cpu_policy_t *host, + xc_cpu_policy_t *guest); + +int xc_get_cpu_levelling_caps(xc_interface *xch, uint32_t *caps); +int xc_get_cpu_featureset(xc_interface *xch, uint32_t index, + uint32_t *nr_features, uint32_t *featureset); + +int xc_cpu_policy_get_size(xc_interface *xch, uint32_t *nr_leaves, + uint32_t *nr_msrs); +int xc_set_domain_cpu_policy(xc_interface *xch, uint32_t domid, + uint32_t nr_leaves, xen_cpuid_leaf_t *leaves, + uint32_t nr_msrs, xen_msr_entry_t *msrs, + uint32_t *err_leaf_p, uint32_t *err_subleaf_p, + uint32_t *err_msr_p); + +uint32_t xc_get_cpu_featureset_size(void); + +enum xc_static_cpu_featuremask { + XC_FEATUREMASK_KNOWN, + XC_FEATUREMASK_SPECIAL, + XC_FEATUREMASK_PV_MAX, + XC_FEATUREMASK_PV_DEF, + XC_FEATUREMASK_HVM_SHADOW_MAX, + XC_FEATUREMASK_HVM_SHADOW_DEF, + XC_FEATUREMASK_HVM_HAP_MAX, + XC_FEATUREMASK_HVM_HAP_DEF, +}; +const uint32_t *xc_get_static_cpu_featuremask(enum xc_static_cpu_featurema= sk); +#endif /* __i386__ || __x86_64__ */ #endif /* XENGUEST_H */ diff --git a/tools/libs/ctrl/xc_bitops.h b/tools/libs/ctrl/xc_bitops.h index f0bac4a071..4a776dc3a5 100644 --- a/tools/libs/ctrl/xc_bitops.h +++ b/tools/libs/ctrl/xc_bitops.h @@ -6,7 +6,11 @@ #include #include =20 -#define BITS_PER_LONG (sizeof(unsigned long) * 8) +#ifdef __LP64__ +#define BITS_PER_LONG 64 +#else +#define BITS_PER_LONG 32 +#endif =20 #define BITMAP_ENTRY(_nr,_bmap) ((_bmap))[(_nr) / 8] #define BITMAP_SHIFT(_nr) ((_nr) % 8) diff --git a/tools/libs/guest/xg_cpuid_x86.c b/tools/libs/guest/xg_cpuid_x8= 6.c index 198892ebdf..b9e827ce7e 100644 --- a/tools/libs/guest/xg_cpuid_x86.c +++ b/tools/libs/guest/xg_cpuid_x86.c @@ -23,7 +23,6 @@ #include #include #include "xg_private.h" -#include "xc_bitops.h" #include #include =20 diff --git a/tools/libs/guest/xg_private.h b/tools/libs/guest/xg_private.h index 28441ee13f..09e24f1227 100644 --- a/tools/libs/guest/xg_private.h +++ b/tools/libs/guest/xg_private.h @@ -27,6 +27,7 @@ #include =20 #include "xc_private.h" +#include "xc_bitops.h" #include "xenguest.h" =20 #include diff --git a/tools/misc/xen-cpuid.c b/tools/misc/xen-cpuid.c index fb36cac07b..a3003245f1 100644 --- a/tools/misc/xen-cpuid.c +++ b/tools/misc/xen-cpuid.c @@ -8,6 +8,7 @@ #include =20 #include +#include =20 #include =20 --=20 2.34.1 From nobody Sat May 4 19:45:18 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=citrix.com); dmarc=pass(p=reject dis=none) header.from=citrix.com ARC-Seal: i=2; a=rsa-sha256; t=1642412995; cv=pass; d=zohomail.com; s=zohoarc; b=a8SLsAfGuJmB7F/S2qnqG1dKegb4OIXA0htqZvcZAuIMT43yVQ/09XZUM+Qi63xb9ShFsgOO/ePbMmOUuyz6lBtvezVkOQwVa7ZPbaR/H+OWuq5DTVQfnHNkapOXTU/EdvuCaBXtZI0gAb+cTmH9YcM6bs624VXnpYZtuxlTQuQ= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1642412995; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=c9+702mCtiIIBJRcU6EH6oz52cs5/19MUClB4O9/ed4=; b=LGmsrJYZ5ZHH+E1W99Luzg3VSKpxGK9bZtt5ObHQW3i5Z0TjemslwKLZ3QT49Jh2UfcYxEzDQtQ+ZHklsLhbEhOErJokRVjRtilw3p/VXexzK2TBlf8uccDTag5LOsi8IMV0P3pKgmo0dxDi+Ff4ASKHrBJ22Hw2uUTL28jZgrM= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=citrix.com); dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1642412995367799.084686163994; Mon, 17 Jan 2022 01:49:55 -0800 (PST) Received: from list by lists.xenproject.org with outflank-mailman.258041.443920 (Exim 4.92) (envelope-from ) id 1n9OdY-0003H6-Ki; Mon, 17 Jan 2022 09:49:16 +0000 Received: by outflank-mailman (output) from mailman id 258041.443920; Mon, 17 Jan 2022 09:49:16 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1n9OdY-0003Gu-HN; Mon, 17 Jan 2022 09:49:16 +0000 Received: by outflank-mailman (input) for mailman id 258041; Mon, 17 Jan 2022 09:49:14 +0000 Received: from se1-gles-sth1-in.inumbo.com ([159.253.27.254] helo=se1-gles-sth1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1n9OdW-0002gi-Ik for xen-devel@lists.xenproject.org; Mon, 17 Jan 2022 09:49:14 +0000 Received: from esa6.hc3370-68.iphmx.com (esa6.hc3370-68.iphmx.com [216.71.155.175]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id b8925665-777a-11ec-9bbc-9dff3e4ee8c5; Mon, 17 Jan 2022 10:49:12 +0100 (CET) X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" X-Inumbo-ID: b8925665-777a-11ec-9bbc-9dff3e4ee8c5 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=citrix.com; s=securemail; t=1642412953; h=from:to:cc:subject:date:message-id:in-reply-to: references:content-transfer-encoding:mime-version; bh=W5pxdwQqMysZPVE+sPNorSRWEA6/ol2TOm/u2VyLMiM=; b=Np9kP/aJQ49aHGYfid91nwt/UupFaA/dIzEJKItqR+sFXvM8PdJaN2el CP2KOipow1ufmSYr2iKBXfHHIy2sgGZAR4B5UALn7tUdduwEXTTSbE4Am VsH3xIb61Q/s3oYG/ohQ2zPdj7VgkGxuoAWuCoUWjcqAC0kYc7OWQTC2K c=; Authentication-Results: esa6.hc3370-68.iphmx.com; dkim=pass (signature verified) header.i=@citrix.onmicrosoft.com IronPort-SDR: qTlKfe1ZZ+AmLjb52rVQcOL0KTM852hOEC6EjY2odKymqeqOO41uHWEe/ZUEucL48bcDPEUZRw j+35wGL9ir49ia2Au4/hJmHrssuV4ir5p8OI3eYtH/SGDl9BIcrKyal3zEVWJ3eC+yyouKCj7n RvM7ALtT+cWkR3vEWSfZGTqZvF4l84Zx+HIkvUInDwLiPr+u/ooOMEi6zJQiuMMscQHd+1Vcvr bnJKi99rDA6GKbcQt8jChwX6BW7gG6rBgZDJ9TQPk+elTVEjLKl9leRKF/wpJlXCieAT6eQ57Q W5TUP+WXC5FPen7Do8RvEhcP X-SBRS: 5.2 X-MesageID: 62053269 X-Ironport-Server: esa6.hc3370-68.iphmx.com X-Remote-IP: 162.221.156.83 X-Policy: $RELAYED IronPort-Data: A9a23:H9oTDahkED1EycWIKtLdjsPIX161iBcKZh0ujC45NGQN5FlHY01je htvXTzQPfnfYWr2ct12btm2oxkE7JTRzoJrSgVkrykxRiob9cadCdqndUqhZCn6wu8v7a5EA 2fyTvGacajYm1eF/k/F3oAMKRCQ7InQLlbGILes1htZGEk0GE/NtTo5w7Rj2tcx3oDga++wk YiaT/P3aQfNNwFcagr424rbwP+4lK2v0N+wlgVWicFj5DcypVFMZH4sDfjZw0/DaptVBoaHq 9Prl9lVyI97EyAFUbtJmp6jGqEDryW70QKm0hK6UID66vROS7BbPg/W+5PwZG8O4whlkeydx /10iaDuFlwRDJbrlelHfRZlSRAvYodZreqvzXiX6aR/zmXDenrohf5vEFs3LcsT/eMf7WNmr KJCbmpXN1ba2rzwkOnTpupE36zPKOHxO4wSoDd4xCzxBvc6W5HTBa7N4Le02R9u3JgTRqyAN qL1bxJCZRf+cjJTO2wSM74Fpdypm0vNWT5H/Qf9Sa0fvDGIkV0ZPKLWGMXRUsyHQ4NShEnwj mDM8nn9AxoaHMeC0jfD+XWp7sffkCW+VI8MGbmQ8v9xnEbV1mEVEAcRV1awvb++kEHWZj5EA xVKoGx09/F0rRH1CImmN/GlnJKalicgZ4QPSNUI0yaAx/D67DvDNzlbZCEUPbTKq/QKbTAt0 1aImfbgCjpurKCZRBqhy1uEkd+hEXNLdDFfPEfoWSNAuoC++99r0nojW/46SPbt5uAZDw0c1 NxjQMIWo7wIxfAG2Kyglbwsq2L9/8OZJuLZC+i+Y45E0u+bTNP/D2BLwQKChRqlEGp/ZgPb1 JTjs5LPhN3i9bnXyESwrB8xNL+o/e2ZFzbXnERiGZIsnxz0pSL5Jt0Au2EieBk5WirhRdMPS BWO0e+2zMUCVEZGkIctO97hYyjU5fWI+SvZugD8MYMVP8kZmP6v9yByf0+At10BY2B3+ZzTz ayzKJ72ZV5DUPwP5GPvG481jOF3rghjmzK7bc2rnnyPjOvFDFbIGOhtDbd7Rr1jhIuevh7v+ spSX+PTjU03vBvWOHeHqOb+7DkicBAGOHwBg5cGKb7YfFs3QTFJ5j246epJRrGJVp99z4/g1 nq8RlVZ2Bz4g3jGIh+NcXdtdPXkWpMXkJ7xFXdE0Y+A1ydxbICxwr0YcpdrL7Ar+PY6lax/T uUfetXGCfNKE2yV9zMYZJj7jYpjaBX02l7eY3v7OGAyL8x6WgjE2t74ZQ+zpiMAOTW66Jklq Lq62wKFHZdaH1Z+DNzbYe6Exk+quSRPg/p7WkbFe4EBeEjl/IVwBTb2i/s7f5MFJRnZn2PI3 AeKGxYI4+LKptZtotXOgKmFqaavEvd/QRUGTzWKs+7uOHCDrGS5wIJGXOKZRhznVTv5qPe4e OFY7/DgK/lbzlxEhJVxTuRwxqUk6tqx+7IDllZ4HG/GZkiAA697JiXUxtFGs6BAy+MLuQayX U7TqNBWNa/QZZHgGV8VYgEkcv6CxbcfnTyLtaY5J0Dz5SlW+rubUBoNY0nQ2XIFdLYlYpk4x eoBudIN713tgxUnBd+KkyRI+jneNXcHSagm6skXDYKDZtDHEb2ejUgw0hPL3aw= IronPort-HdrOrdr: A9a23:jDc7aKuYXn2UWEX54HGTQA0y7skC7oMji2hC6mlwRA09TyXGra +TdaUguSMc1gx9ZJhBo7G90KnpewK5yXcT2/hsAV7CZniahILMFu9fBOTZslvd8kHFh4xgPO JbAtND4b7LfClHZKTBkXCF+r8bqbHtmsDY5ts2jU0dNz2CA5sQkTuRYTzrdXGeKjM2YKbQQ/ Gnl7V6TnebCD8qR/X+IkNAc/nIptXNmp6jSRkaByQ/4A3LqT+z8rb1HzWRwx9bClp0sPof2F mAtza8yrSosvm9xBOZ/2jP765OkN+k7tdYHsSDhuUcNz2poAe1Y4ZKXaGEoVkO0auSwWdvtO OJjwYrPsx15X+UVmapoSH10w2l6zoq42+K8y7vvVLT5ejCAB4qActIgoxUNjHD7VA7gd162K VXm0qEqpt+F3r77WrAzumNcysvulu/oHIkn+JWpWdYS5EiZLhYqpFa1F9JEa0HADnx5OkcYa ZT5fnnlbZrmG6hHjPkVjEF+q3vYp1zJGbLfqE6gL3V79AM90oJinfxx6Qk7wA9HdwGOt15Dt //Q9dVfYd1P7srhJJGdZc8qPSMex7wqGr3QRqvyHTcZeg60iH22tbKCItc3pDeRHVP9up0pK j8 X-IronPort-AV: E=Sophos;i="5.88,295,1635220800"; d="scan'208";a="62053269" ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=h4KPoWSOqJBCB/kkZi1NdQtkXoWgZ8vuSuNf16r93kuT3XAvxd1YmeKQOUzEsYEEBWQE0Mw+Q9tckjoRW64qyBtcEDPk2ASUHJe4zN6f8rlpwcMboAJm9GVneGoBFTiAOkKNV6aXg3kps+7RQH965NdqlaxPjZDzhuykWuZrOtl2LAEyz4gJFDkDmk8BCpINDg3AjQ9S+bZUD2KBtBk/yYB4yEPqntvi6cfpO1GpBCAn8DNR9fSPWf4Ti9Fyk6YbjfJjGxg3qDqS58Q30kjlNVVxoH9tAQTbdi5ra4I/a00wB1Fx8OqpUzScIy+Cja0woSzYW2hgS2WYGW9KIm7SMg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; 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=c9+702mCtiIIBJRcU6EH6oz52cs5/19MUClB4O9/ed4=; b=bxrEowCZoRYxAsqJwDSy68I3MvImUG1MKmV0ArGwtfJHWHHNT4Q3LjW9pEUMCpqq1alIlBE9PRjLQ00S56yOLJrvl90ZwPsXuODJmhqSx/l8GQ15JJ5BOblCytC0uuSXuq8JNtjIs5Movkxg8tpny/dwbjMbMumC3MQodMOKgkkuUzeFgGuDHeJA7BKBHflyq5589nDidWmQlvd2+d3ePgC2ZT8IUUu9u+owcwRFbqhtmI2dpjH0RYf6gF1WD4sGdutcwXrTLCb9GuPK/tp0KI/j0DPK6dNmvKUGoMO8E30NaAiFW1P6KxF/0CQEEHC67z1aG8rl1Cenj+liHKjYnw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com; dkim=pass header.d=citrix.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=citrix.onmicrosoft.com; s=selector2-citrix-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=c9+702mCtiIIBJRcU6EH6oz52cs5/19MUClB4O9/ed4=; b=V0To2AxthW6jvBr56Zs12RZsse6CR67bBESZbrY22Ltex0vh/2YLbuJKbkJxnpazOWFL8W061vKCbJUFMqN5OZGfBoDG5H+a2wGMhY/GBTBwOecBDAvxQKjCBhhkZ2PwaqRAf0C91tLaCo4DSGrHH7EgOISa5yIsADJhMtOdV+g= From: Roger Pau Monne To: CC: Roger Pau Monne , Jan Beulich , Andrew Cooper , Wei Liu , "Anthony PERARD" Subject: [PATCH v6 02/12] libx86: introduce helper to fetch cpuid leaf Date: Mon, 17 Jan 2022 10:48:17 +0100 Message-ID: <20220117094827.16756-3-roger.pau@citrix.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220117094827.16756-1-roger.pau@citrix.com> References: <20220117094827.16756-1-roger.pau@citrix.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: MR1P264CA0054.FRAP264.PROD.OUTLOOK.COM (2603:10a6:501:3e::7) To DS7PR03MB5608.namprd03.prod.outlook.com (2603:10b6:5:2c9::18) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 6c189451-aa07-4286-bd65-08d9d99e9b14 X-MS-TrafficTypeDiagnostic: DM6PR03MB4059:EE_ X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:530; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 1UJpmelXSNOopWx+o8MFio6VT2w92DyRyJ0Q9VUqOU9ue92edtHFF1KEYzu2gLcNTBKyM5C73vMZZf7ynR3xPUce1DPg+agrNwd967+O9BxgMbfLFIZ1kxFBc2ZpYc7eESf5BwEvkFtjtRwINC7NPTHypuej87cd9wOd2eTnT6VUwczL7+CzRsUj8JykWG5kFcg7DHCPImxR4zA6HrshS/Hl3AUVdDNzjsyrp7MBXv+DtzoDJSrNuKxuG8V7qSTAMvVOlWP9pAbOOaZkE2ewq+jxoUPb6QrVSGjc8b1hnQ+eMzaGdbpN1Qu/CJK5rAwLHOIS4Ry1lSlmIhfHt10iDJYyoxScWKMazPwYC3oqqSRz4dOs3udja86MnQM6G4kri5HvdVRRGE1k0A9o8gaUbuNnPIQt6yTOuSfoCO8auALkf7bRv9+Bs0CisY/ZbG6gEGKzv0ASFuVMcVGWE3yV3+sIp1j9wnVt+0vomi9FzACDmvqxs8VkwGluGiy5lMsN152mfeO13AcFaDDm+HX/fORZ55pQ2HNkPA+a9HhTkmAADHTsg8Gmjyq4lNc0/FF5pjKxvhnuBJYHRWYsCraLIPUY/moI3L3PPImTIi5qwsmzwm65j6inAUNhfAVkvuuZB5XaNgkup+w2xRDzzAcC4Q== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DS7PR03MB5608.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(366004)(4326008)(107886003)(6512007)(8936002)(186003)(36756003)(6506007)(316002)(83380400001)(38100700002)(6486002)(26005)(6916009)(86362001)(6666004)(8676002)(54906003)(2616005)(82960400001)(2906002)(5660300002)(66946007)(66556008)(66476007)(1076003)(508600001);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?OWF5Q0FPd2M1M3F2cTZwZlJYWjNCMTZKd2psL1hka1JweXlNWStOby9MR0FX?= =?utf-8?B?ZXJNM1NheHdmWmhhMkh5disyUnF1a2RIaFBINmNvbjFHNkZjRXlBL0kxdmVH?= =?utf-8?B?RUhCdkFLMDBYQ29td2ZhcGpQL2RJR3hGMWZXZVlycjBjdmd1YVRBSEVvaFdK?= =?utf-8?B?V3JSZUtYdkg2WW1HSm9Ec1MwbkhTRnVuS2FlNW1LUkNETjUzYzYzajhiZVJP?= =?utf-8?B?VDYzSU9UNWErck81TkRpTXpTYU5vZ2k0NTBhRWlCWmhiNjV5VmR3VFYraDQx?= =?utf-8?B?V0IzNG1XdHBKNitJeVl3TTJMRjk5bWFGNTdCS1YvTXhyYTByZWQ4ZW45ZFll?= =?utf-8?B?Z0JCVHRNOFhLVTQ0cWRUUi9JVUpYMVUwajVUNGlhQkJ5TUswU0RCYS9zRUNK?= =?utf-8?B?NzVxbUNhbWNGUXY3TWl3U29rQ2JmKzlGaXQ5bWpmcFRHNWxFSlA2ZW50Ny85?= =?utf-8?B?SG9UZFdPYmRQOUY0aXdJdFVFNXhxenppdWFNVFZKR3plSGpnazVTLzZlTGM1?= =?utf-8?B?VFA1WXVrc1JrNVl1N0lCVVVIdElzdzFhK2NMd1pRYnF5Uk0vcVo3WjVHQ2pJ?= =?utf-8?B?aVdxWU1sVFU5THY0dFNjSkRhTzkyNW9jRU5mVllmNGhJbHEyQnBMV1o3aVNY?= =?utf-8?B?bzNBV2IrNEI4N0JHd1RUN0FsVjZQRmdHUGc0NE5IUVZXSDBMeGFCZnZqcjJH?= =?utf-8?B?cHl4eng0ZDJsTVBPeFhtSlgwTmdsRW9NajlWTktXWm43Nnp1TXBUU1g0VXhB?= =?utf-8?B?OGFoYk1CRVZKMTYzam1tTjBTejkzYWNXTFJOOVRWSkMzT0szaG1xeFRScExD?= =?utf-8?B?d01EUlJUOWo1SUZJNCttWk9Va0d2dG5YQjFsM0MvNmRaQTRpS2xoRkg5NDli?= =?utf-8?B?aVhnRDZFRmdoaVlXb0ZJd284YjNzQlhwd1EycUN2d1VSRG44TG5Ia3E5eXM4?= =?utf-8?B?VEdnU05WN2NtZFRBditOTFdqdGt3Q2ZkN0lEVFVod1FhMVQzekZTZTdkNFJD?= =?utf-8?B?YUx2bXZ4Q01SNFFxbFcrUHI5M2dGbTRZZFRiaHFnRmVlMVFTMFpReUdEQS9G?= =?utf-8?B?dDBrOFZmczdiWlJlMW5YQ0c5YnhsUjk1QXhyVnQ2c0JrSjBNeXZkdzhFMVZF?= =?utf-8?B?TmxYZVJZZGtFTmQ2VlhSQi9odys0YnlJSllTdVM0SFl6bFpoNEpwaU9jRkNF?= =?utf-8?B?OHhGSWVUOElydDJlT3BBZDNIM01Pc0t6RjBvdU9Ga0xQTExsWVdpOTBVd2Z5?= =?utf-8?B?WDZaT09jbHNsSjlTZWRxNmpZRzRTR1gxUEdjMGtBNlJwNHNRRmsrNS9UUi94?= =?utf-8?B?QnVpaDhiWElLK2xub0xQU0xJUEZ1YjFyZHc4cVpGK3pNeHVSTitJNGJPdnVC?= =?utf-8?B?NWoyNVFqT2hvbDFRM2s5TVNSUnNpQ0NlV0RSdUhWOVFncVV5ajJ0Rnl4Vk5F?= =?utf-8?B?bEhYeHBSYmp1MXI5YnFhOFVCQTBCS3BtOStLWVRITVZOcG1iNjRydlovMXZ4?= =?utf-8?B?eXpveXVxL2RvcVU1TS9VazE1SC8rc1dmTUlNeVp0RCtEcGV1cUE4VmZabCt3?= =?utf-8?B?WFZwSlFBSjRXQVNIcmpVUG93VEFTQ25MWEJVTHRSZzJmVHgyYW9INThRakpN?= =?utf-8?B?OGkrcS9zRUNIVHU4YXQzMDFocmRhalVQTmRQSElqTnR0bUM3OVZtUGhsWHh6?= =?utf-8?B?VVllbzVKQk1vYmZrdEVLREorM296KzU3cThXUDFNeUg0NkFpTW9SUVE0QXU5?= =?utf-8?B?eVNJb1d2Ny9FMk5IWCsxQkRnWXByb3kyR1d3UVM5KzBCc1pYWk5BM2FhUnpO?= =?utf-8?B?WHpVWDVacUVWM2hmczdNeEVLUG0vUVFNS3FTeVpreEQ3RkVlek9nUnFUczhI?= =?utf-8?B?VDNYUHlaaTR1dWxFcmgxM3NueDROQlZmQWppbWl5SlMrYS81QXNNbW5zd2F3?= =?utf-8?B?OU84RE5SNU42NzFTb0d6akhkOUYxazRpRVhmYldXdkhVcGloNy9iSkozbEpJ?= =?utf-8?B?RE42b3J0SmxEdzZhOE54bUdMMU9CM0hSSmMzZTJwSXNJNU5HUGR2NjFlckVs?= =?utf-8?B?K0VOeUlSRXV2a1NnUU5ycTE5M0g3TDhwRXl6Qnp6UnQ5d3hyZzRMUm92enB3?= =?utf-8?B?UTdjaVgxYWdWTm51YkhuY2srWTRWRWx0cnZJRTVWRzZMN1VrMGlvZkJ6QVVV?= =?utf-8?Q?0L5qs7VXYidln6x7bO9EZbY=3D?= X-MS-Exchange-CrossTenant-Network-Message-Id: 6c189451-aa07-4286-bd65-08d9d99e9b14 X-MS-Exchange-CrossTenant-AuthSource: DS7PR03MB5608.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Jan 2022 09:49:08.0474 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 335836de-42ef-43a2-b145-348c2ee9ca5b X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: RmBtm/ciOMLALYZPD9xuCrAtQcwwktzCUxoKpHiGMAtVX7mZlXPpthxnpZTnm1cSrxwWWhH83JHdBAGQX3322A== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR03MB4059 X-OriginatorOrg: citrix.com X-ZohoMail-DKIM: pass (identity @citrix.com) X-ZM-MESSAGEID: 1642412997202100002 Introduce a helper based on the current Xen guest_cpuid code in order to fetch a cpuid leaf from a policy. The newly introduced function in cpuid.c should not be directly called and instead the provided x86_cpuid_get_leaf macro should be used that will properly deal with const and non-const inputs. Also add a test to check that the introduced helper doesn't go over the bounds of the policy. Note the code in x86_cpuid_copy_from_buffer is not switched to use the new function because of the boundary checks against the max fields of the policy, which might not be properly set at the point where x86_cpuid_copy_from_buffer get called, for example when filling an empty policy from scratch. Suggested-by: Andrew Cooper Signed-off-by: Roger Pau Monn=C3=A9 Reviewed-by: Jan Beulich --- Changes since v4: - Rename _x86_cpuid_get_leaf to x86_cpuid_get_leaf_const. Changes since v3: - New in this version. --- Regarding safety of the usage of array_access_nospec to obtain a pointer to an element of an array, there are already other instances of this usage, for example in viridian_time_wrmsr, so I would assume this is fine. --- tools/tests/cpu-policy/test-cpu-policy.c | 75 ++++++++++++++++++++++++ xen/arch/x86/cpuid.c | 55 +++-------------- xen/include/xen/lib/x86/cpuid.h | 19 ++++++ xen/lib/x86/cpuid.c | 52 ++++++++++++++++ 4 files changed, 153 insertions(+), 48 deletions(-) diff --git a/tools/tests/cpu-policy/test-cpu-policy.c b/tools/tests/cpu-pol= icy/test-cpu-policy.c index ed450a0997..3f777fc1fc 100644 --- a/tools/tests/cpu-policy/test-cpu-policy.c +++ b/tools/tests/cpu-policy/test-cpu-policy.c @@ -570,6 +570,80 @@ static void test_cpuid_out_of_range_clearing(void) } } =20 +static void test_cpuid_get_leaf_failure(void) +{ + static const struct test { + struct cpuid_policy p; + const char *name; + uint32_t leaf, subleaf; + } tests[] =3D { + /* Bound checking logic. */ + { + .name =3D "Basic max leaf >=3D array size", + .p =3D { + .basic.max_leaf =3D CPUID_GUEST_NR_BASIC, + }, + }, + { + .name =3D "Feature max leaf >=3D array size", + .p =3D { + .basic.max_leaf =3D CPUID_GUEST_NR_BASIC - 1, + .feat.max_subleaf =3D CPUID_GUEST_NR_FEAT, + }, + .leaf =3D 0x00000007, + }, + { + .name =3D "Extended max leaf >=3D array size", + .p =3D { + .extd.max_leaf =3D 0x80000000 + CPUID_GUEST_NR_EXTD, + }, + .leaf =3D 0x80000000, + }, + + { + .name =3D "Basic leaf >=3D max leaf", + .p =3D { + .basic.max_leaf =3D CPUID_GUEST_NR_BASIC - 1, + }, + .leaf =3D CPUID_GUEST_NR_BASIC, + }, + { + .name =3D "Feature leaf >=3D max leaf", + .p =3D { + .basic.max_leaf =3D CPUID_GUEST_NR_BASIC - 1, + .feat.max_subleaf =3D CPUID_GUEST_NR_FEAT - 1, + }, + .leaf =3D 0x00000007, + .subleaf =3D CPUID_GUEST_NR_FEAT, + }, + { + .name =3D "Extended leaf >=3D max leaf", + .p =3D { + .extd.max_leaf =3D 0x80000000 + CPUID_GUEST_NR_EXTD - 1, + }, + .leaf =3D 0x80000000 + CPUID_GUEST_NR_EXTD, + }, + }; + const struct cpuid_policy pc; + const struct cpuid_leaf *lc; + struct cpuid_policy p; + struct cpuid_leaf *l; + + /* Constness build test. */ + lc =3D x86_cpuid_get_leaf(&pc, 0, 0); + l =3D x86_cpuid_get_leaf(&p, 0, 0); + + printf("Testing CPUID get leaf bound checking:\n"); + + for ( size_t i =3D 0; i < ARRAY_SIZE(tests); ++i ) + { + const struct test *t =3D &tests[i]; + + if ( x86_cpuid_get_leaf(&t->p, t->leaf, t->subleaf) ) + fail(" Test %s get leaf fail\n", t->name); + } +} + static void test_is_compatible_success(void) { static struct test { @@ -685,6 +759,7 @@ int main(int argc, char **argv) test_cpuid_serialise_success(); test_cpuid_deserialise_failure(); test_cpuid_out_of_range_clearing(); + test_cpuid_get_leaf_failure(); =20 test_msr_serialise_success(); test_msr_deserialise_failure(); diff --git a/xen/arch/x86/cpuid.c b/xen/arch/x86/cpuid.c index b5af48324a..0407a54626 100644 --- a/xen/arch/x86/cpuid.c +++ b/xen/arch/x86/cpuid.c @@ -825,48 +825,16 @@ void guest_cpuid(const struct vcpu *v, uint32_t leaf, switch ( leaf ) { case 0 ... CPUID_GUEST_NR_BASIC - 1: - ASSERT(p->basic.max_leaf < ARRAY_SIZE(p->basic.raw)); - if ( leaf > min_t(uint32_t, p->basic.max_leaf, - ARRAY_SIZE(p->basic.raw) - 1) ) - return; - - switch ( leaf ) - { - case 0x4: - if ( subleaf >=3D ARRAY_SIZE(p->cache.raw) ) - return; - - *res =3D array_access_nospec(p->cache.raw, subleaf); - break; - - case 0x7: - ASSERT(p->feat.max_subleaf < ARRAY_SIZE(p->feat.raw)); - if ( subleaf > min_t(uint32_t, p->feat.max_subleaf, - ARRAY_SIZE(p->feat.raw) - 1) ) - return; - - *res =3D array_access_nospec(p->feat.raw, subleaf); - break; - - case 0xb: - if ( subleaf >=3D ARRAY_SIZE(p->topo.raw) ) - return; - - *res =3D array_access_nospec(p->topo.raw, subleaf); - break; - - case XSTATE_CPUID: - if ( !p->basic.xsave || subleaf >=3D ARRAY_SIZE(p->xstate.raw)= ) - return; + case 0x80000000 ... 0x80000000 + CPUID_GUEST_NR_EXTD - 1: + { + const struct cpuid_leaf *tmp =3D x86_cpuid_get_leaf(p, leaf, suble= af); =20 - *res =3D array_access_nospec(p->xstate.raw, subleaf); - break; + if ( !tmp ) + return; =20 - default: - *res =3D array_access_nospec(p->basic.raw, leaf); - break; - } + *res =3D *tmp; break; + } =20 case 0x40000000 ... 0x400000ff: if ( is_viridian_domain(d) ) @@ -881,15 +849,6 @@ void guest_cpuid(const struct vcpu *v, uint32_t leaf, case 0x40000100 ... 0x400001ff: return cpuid_hypervisor_leaves(v, leaf, subleaf, res); =20 - case 0x80000000 ... 0x80000000 + CPUID_GUEST_NR_EXTD - 1: - ASSERT((p->extd.max_leaf & 0xffff) < ARRAY_SIZE(p->extd.raw)); - if ( (leaf & 0xffff) > min_t(uint32_t, p->extd.max_leaf & 0xffff, - ARRAY_SIZE(p->extd.raw) - 1) ) - return; - - *res =3D array_access_nospec(p->extd.raw, leaf & 0xffff); - break; - default: return; } diff --git a/xen/include/xen/lib/x86/cpuid.h b/xen/include/xen/lib/x86/cpui= d.h index a4d254ea96..050cd4f9d1 100644 --- a/xen/include/xen/lib/x86/cpuid.h +++ b/xen/include/xen/lib/x86/cpuid.h @@ -431,6 +431,25 @@ int x86_cpuid_copy_from_buffer(struct cpuid_policy *po= licy, uint32_t nr_entries, uint32_t *err_leaf, uint32_t *err_subleaf); =20 +/** + * Get a cpuid leaf from a policy object. + * + * @param policy The cpuid_policy object. + * @param leaf The leaf index. + * @param subleaf The subleaf index. + * @returns a pointer to the requested leaf or NULL in case of error. + * + * The function will perform out of bound checks. Do not call this function + * directly and instead use x86_cpuid_get_leaf that will deal with both co= nst + * and non-const policies returning a pointer with constness matching that= of + * the input. + */ +const struct cpuid_leaf *x86_cpuid_get_leaf_const(const struct cpuid_polic= y *p, + uint32_t leaf, + uint32_t subleaf); +#define x86_cpuid_get_leaf(p, l, s) \ + ((__typeof__(&(p)->basic.raw[0]))x86_cpuid_get_leaf_const(p, l, s)) + #endif /* !XEN_LIB_X86_CPUID_H */ =20 /* diff --git a/xen/lib/x86/cpuid.c b/xen/lib/x86/cpuid.c index 8eb88314f5..924f882fc4 100644 --- a/xen/lib/x86/cpuid.c +++ b/xen/lib/x86/cpuid.c @@ -493,6 +493,58 @@ int x86_cpuid_copy_from_buffer(struct cpuid_policy *p, return -ERANGE; } =20 +const struct cpuid_leaf *x86_cpuid_get_leaf_const(const struct cpuid_polic= y *p, + uint32_t leaf, + uint32_t subleaf) +{ + switch ( leaf ) + { + case 0 ... CPUID_GUEST_NR_BASIC - 1: + if ( p->basic.max_leaf >=3D ARRAY_SIZE(p->basic.raw) || + leaf > p->basic.max_leaf ) + return NULL; + + switch ( leaf ) + { + case 0x4: + if ( subleaf >=3D ARRAY_SIZE(p->cache.raw) ) + return NULL; + + return &array_access_nospec(p->cache.raw, subleaf); + + case 0x7: + if ( p->feat.max_subleaf >=3D ARRAY_SIZE(p->feat.raw) || + subleaf > p->feat.max_subleaf ) + return NULL; + + return &array_access_nospec(p->feat.raw, subleaf); + + case 0xb: + if ( subleaf >=3D ARRAY_SIZE(p->topo.raw) ) + return NULL; + + return &array_access_nospec(p->topo.raw, subleaf); + + case 0xd: + if ( !p->basic.xsave || subleaf >=3D ARRAY_SIZE(p->xstate.raw)= ) + return NULL; + + return &array_access_nospec(p->xstate.raw, subleaf); + } + + return &array_access_nospec(p->basic.raw, leaf); + + case 0x80000000 ... 0x80000000 + CPUID_GUEST_NR_EXTD - 1: + if ( (p->extd.max_leaf & 0xffff) >=3D ARRAY_SIZE(p->extd.raw) || + leaf > p->extd.max_leaf ) + return NULL; + + return &array_access_nospec(p->extd.raw, leaf & 0xffff); + } + + return NULL; +} + /* * Local variables: * mode: C --=20 2.34.1 From nobody Sat May 4 19:45:18 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=citrix.com); dmarc=pass(p=reject dis=none) header.from=citrix.com ARC-Seal: i=2; a=rsa-sha256; t=1642412999; cv=pass; d=zohomail.com; s=zohoarc; b=GcISv19Gl5112DFQ1KmFitydUyX0l/XlMfGDGq6+zzdd5xR+MTdsfQCfzk9myHIksgWweM3KbOVnHrPoAgr7m84WoWiG2SqsoRrFHlaIlhdtr3sS/KyhI1+m5PxqxG5oDanobL5933D2s18xH5Y5ktEP86pzGqIOQvTD2Wtwnks= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1642412999; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=Ojngcjt1M2iDhn21AvZ+LOY3mmuCciu47e9GG4lJRbs=; b=kSi5es1n6oRAmhpcRArneEww2g1aq+f8a2cgho++BsfxvBrtvrj8u1ANh0LrIjiIXXp/UAOjePYLdxFJRl9Y4UKMPQz8rK8lAtgW2IkyxseL7B4Kb8KwzCZe7jKOJb5j2xRyJFwBOJfxpOx9je575cWHhf3hVbbuJwsZ8fxv/J8= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=citrix.com); dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1642412999798712.7587144832709; Mon, 17 Jan 2022 01:49:59 -0800 (PST) Received: from list by lists.xenproject.org with outflank-mailman.258043.443931 (Exim 4.92) (envelope-from ) id 1n9Ode-0003ed-2C; Mon, 17 Jan 2022 09:49:22 +0000 Received: by outflank-mailman (output) from mailman id 258043.443931; Mon, 17 Jan 2022 09:49:22 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1n9Odd-0003eV-V1; Mon, 17 Jan 2022 09:49:21 +0000 Received: by outflank-mailman (input) for mailman id 258043; Mon, 17 Jan 2022 09:49:20 +0000 Received: from se1-gles-flk1-in.inumbo.com ([94.247.172.50] helo=se1-gles-flk1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1n9Odc-0003a5-Ia for xen-devel@lists.xenproject.org; Mon, 17 Jan 2022 09:49:20 +0000 Received: from esa2.hc3370-68.iphmx.com (esa2.hc3370-68.iphmx.com [216.71.145.153]) by se1-gles-flk1.inumbo.com (Halon) with ESMTPS id bb8f65b2-777a-11ec-a115-11989b9578b4; Mon, 17 Jan 2022 10:49:17 +0100 (CET) X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" X-Inumbo-ID: bb8f65b2-777a-11ec-a115-11989b9578b4 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=citrix.com; s=securemail; t=1642412957; h=from:to:cc:subject:date:message-id:in-reply-to: references:content-transfer-encoding:mime-version; bh=A+Od6Bh7qsx7u4DTHy3nwSt/ug52iTXLpb6kGpq0i0I=; b=BbRf6ifAS68pK/sjlUfcbb/6DpVjZhFqL05Ey6J2BoGLB9Fl4B4Mk510 3DMKkb/kT5apZen83/AexSGq7Bw7MRhzWcJ5aMfSzt3Zr28s18P1YHyIH Ikh6FwVMYeaVS3kWh/30CgBNWfz+PXOUj1whBu/o8G/Jw9JNcx2LeJ3/8 M=; Authentication-Results: esa2.hc3370-68.iphmx.com; dkim=pass (signature verified) header.i=@citrix.onmicrosoft.com IronPort-SDR: vwd4nTW/xkcN7l6O6dhjK0P8Qiyd/rSZqNM7ztjEyiVzFGjzIG3oMXJX5aAUztNiotrRmESirR T0e68OrjoSOUGKXvDXBX3RzJegufO3mUuLzPy9dAvj1JhvjN+pMgQPxVIUOyS7WX13iSHfj38M TBkNuE8cxf+0oCdCovLd/BJ9GDtCKTbAnC9dko0yAy98UKUxr4tV/Z5mXqxhwjZQ6rSm5doY2r 809UYRmmFiaZjqksaEHAK5GWfnhm8pwxU9S4unAR/dUPx4VSEomSMh5lr31EVGcTmpoRBViTOm a/Mb/KdivlunER18BI8tzmD7 X-SBRS: 5.2 X-MesageID: 62138819 X-Ironport-Server: esa2.hc3370-68.iphmx.com X-Remote-IP: 162.221.156.83 X-Policy: $RELAYED IronPort-Data: A9a23:JE/FralCdVQuy5Fj/KsrGbzo5gxmIURdPkR7XQ2eYbSJt1+Wr1Gzt xIaWjyHaPbeYGr8KYh2OYvj9EpQ7JeAn95qT1A++yoxRSMWpZLJC+rCIxarNUt+DCFioGGLT Sk6QoOdRCzhZiaE/n9BClVlxJVF/fngqoDUUYYoAQgsA180IMsdoUg7wbRh29c32YHR7z6l4 rseneWOYDdJ5BYsWo4kw/rrRMRH5amaVJsw5zTSVNgT1LPsvyB94KE3fMldG0DQUIhMdtNWc s6YpF2PEsE1yD92Yj+tuu6TnkTn2dc+NyDW4pZdc/DKbhSvOkXee0v0XRYRQR4/ttmHozx+4 PhQrpbvaxxxB5yPlOcgaRoAI3tzZpQTrdcrIVDn2SCS50jPcn+qyPRyFkAme4Yf/46bA0kXq 6ZecmpUKEne2aTmm9pXScE17ignBNPsM44F/Glp0BnSDOo8QICFSKLPjTNd9Glq35seTa+PD yYfQT5lKyTlQRRRA3U0As4clcWylHjkfBQN/Tp5ooJoujOOnWSdyoPFMtXPfceRbd5IhUver WXDl0zmBjkKOdrZziCKmlq8i+mKkS7lVYY6ELyj6uUskFCV3nYUChAdSR28u/bRt6Klc4sBc QpOoHNo9PVsshzwJjXgY/GmiFOZpRRDecEIKtx55AKw8KmM01yUXVFRG1atd+canMMxQDUr0 HqAkNXoGSFjvdWpdJ6NyluHhWjsYHZIdAfucQdBFFJYuIe7/OnfmzqWFo47eJNZmOEZDt0ZL 9qiiCElz4segscQv0lQ1QCW2mn8znQlo+Nc2+k2Yo5Hxl4jDGJGT9bxgbQ+0RqmBNzDJrVml CJV8/VyFMhUUfmweNWlGY3h5o2B6fefKyH7ilVyBZQn/DnF0yf9IdoLvWEldBs1bJZsldrVj Kn74145CHh7ZirCUEOKS9jpV5RCIVbISLwJqcw4nvIRO8MsJWdrDQllZFKK3nCFraTfufpXB HtvSu71VSxyIf0+lFKeHr5BuZd2mHxW7T6NFPjTkkT2uZLDNSX9YepUbzOzghURsfnsTPP9q YgPbqNnCnx3DYXDX8Ug2dVCcgBRcylqXMCeRg4+XrfrHzeK0VoJUpf56bggZ5Zkj+JSkOLJ9 Wu6QUhW1Bz0gnivFOlAQikLhGrHUcktoHQlEzYrOFr0iXEvbZz2tPUUdoctfKlh/+tmlKYmQ /4AcsSGI/JOVjWYpGhNMcij9NRvJEaxmAaDHyu5ezxjLZRucBPEp43/dQz1+ShQUifu7Zkio 6et3x/wSIYYQ1gwF97fbf+ilgvjvXUUlO9ocVHPJ91fJBfl/IRwcnSjhf4rOcAcbx7Ew2LCh QqRBB4Zo8jLopM0r4aV1fzV8d/xHrInTERAHmTd4bKnDgXg/zKukd1aTeKFXTHBT2eoqq+sU vpYkqPnO/odkVcU74clS+R3zbgz7sfErqNBylg2B23CalmmB+8yInSC2sUT5KRByqUA5FmzU 0OLvNJbJa+IKIXuF1tIfFgpaeGK1Pc1nDjO7KtqfBWmtXEvpLfXA19POxSsiTBGKOonOYwo9 u4tpcoK5lHtkREtKNuH0nhZ+mnkwqbsiEn7WkX22LPWtzc= IronPort-HdrOrdr: A9a23:Jx8vaKqbtQOV6Z+zanlh480aV5uzL9V00zEX/kB9WHVpm5Oj+P xGzc526farslsssREb+OxpOMG7MBfhHPlOkPUs1NaZLXTbUQ6TQr2KgrGSpQEIdxeOlNK1kJ 0QCJSWa+eAfGSS7/yKmTVQeuxIqLLskNHKuQ6d9QYWcegDUdAf0+4TMHf9LqQZfngiOXJvf6 Dsmfav6gDQMkg/X4CePD0oTuLDr9rEmNbPZgMHPQcu7E2rgSmz4LD3PhCE1lNGOgk/jIsKwC zgqUjU96+ju/a0xlv10HLS1Y1fnJ/ExsFYDMKBp8AJInHHixquZq5mR7qe1QpF6t2H2RIPqp 3hsh0gN8N85zf4eXy0mwLk303a3DMn+xbZuCmlqEqmhfa8aCMxCsJHi44cWADe8VAcsNZ117 8O936FtrJMZCmw0hjV1pztbVVHh0C0qX0tnao4lHpES7YTb7dXsMg24F5VKpEdByj3gbpXX9 WGNPuspMq+TGnqLEww5gJUsZ6RtzUIb1u7q3E5y42oO2M8pgE986MarPZv6UvouqhND6Ws3N 60QZiAoos+OvP+XZgNdNvpfvHHeFAlOSi8SF56AW6XXZ3vaEi946Ie3t0OlZSXkdozvdwPpK g= X-IronPort-AV: E=Sophos;i="5.88,295,1635220800"; d="scan'208";a="62138819" ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=ZYsFJuqmSgbx7pNgIk1rnnw+P9/3yUA1KvXKDgt5o2RMR3ZpvOWQHcDcrqN9aMBBSNyJetI5GpwPKFurpmN8Y7cXDxErI1Eyjk4oVzRkf155bw+21MH+vUEcBvWhkREDotfhizukjPjfhBqFgybSHno5dyVViZGLlcVbUrxQ2mFTjdULRWlb16IWJy4TC+PX9x21oQGnJ8+7R3yGt5m2MGsgvCjYWoU2XhWbeNliquOkZuNuz4N0KVRx1+zxWWxQLz6EjPGGHPplwUVf4rXwVUDS6vOza2W9B1ROC8iVNSL4FFgu3npv1ByrgporIkjSpKz5Slm2gXmGt7a+mpvzKA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; 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=Ojngcjt1M2iDhn21AvZ+LOY3mmuCciu47e9GG4lJRbs=; b=C6oslnz5WWa5S/V2dagsREk/hlvqBB4+TQ/iZRHHZjykRB49vaJf35+0zZO5Pi1T6E03u7W8+jgUQMmMe4WeCUihAmTWvf8xPCV87/+9mA2smq7Hl5knvqwm8CjeeMNeGk0ss+QmRyTeGwXTKWGRs7FgMkF7icLkD87SqNMeIYqf9uIY3JYOMFck75EsZ+we37RnaXU0KqeRz/L1sEG4Ra4Bx4N5JuVrUtQo4b1JEhAPz50PUXCjn+fQgFgY/HfoHhoCjSw3l+VSaxBFJzoOGi/pkT3iF0mdMz/WnxMlK0acFbMlbdf1DYrijHg0f/Cq2D/82iTXOQjCWHl06/5ELQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com; dkim=pass header.d=citrix.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=citrix.onmicrosoft.com; s=selector2-citrix-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Ojngcjt1M2iDhn21AvZ+LOY3mmuCciu47e9GG4lJRbs=; b=Sftm+SavJd3M38DAGUKyfQMj6abKOuZPUSVGBgBpU0AJ+G9PojIo5F1EGoJ8WsvbqwX7rRNs496q6FRzmDbAHVbPT/oic/GfgD+J/sB7DvcCO/ZG9Q9stWmLg9XUVgff+KXLRxjcwBjNkW5P0eAb3ywQ4ZY451EFR8DgqE1qekc= From: Roger Pau Monne To: CC: Roger Pau Monne , Wei Liu , Anthony PERARD , Juergen Gross Subject: [PATCH v6 03/12] libs/guest: allow fetching a specific CPUID leaf from a cpu policy Date: Mon, 17 Jan 2022 10:48:18 +0100 Message-ID: <20220117094827.16756-4-roger.pau@citrix.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220117094827.16756-1-roger.pau@citrix.com> References: <20220117094827.16756-1-roger.pau@citrix.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: MR2P264CA0065.FRAP264.PROD.OUTLOOK.COM (2603:10a6:500:31::29) To DS7PR03MB5608.namprd03.prod.outlook.com (2603:10b6:5:2c9::18) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 7a7ca300-544c-43ae-002d-08d9d99e9e3b X-MS-TrafficTypeDiagnostic: DM6PR03MB4059:EE_ X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:7219; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: M5fSwRpv7bxINY5RwbR8IPOpKzu5ob9ZFk+prqfgCGabSCmKVBX5l0rA3sxBe73lP7+5e56evczOZosGxtYRrzrJ3MZ+pyQJ43KKETVCbxc9lxio16+ashU/4a3VPgWO65evjW6flXjtPCjAuwP4U8afwNn+RKnN4GiuI1L0awFIJILLRTxHG49HaEmfELzMbAKhHVd7uzyKCoKsmw15muVk/txAXCy147I9PamclVZrzugk0OJ+4zV8L7nXaXFqGl0OcUw/9BMzC1Dm9Mqvs6ZucpwiBLP3Z+3cFePjoir36iBWI6QqivzXqElzNqQi0DMGB1u8doJoEAcT9UKPnH4LIxJ0Pms2yJy3pOxLK4pEMtI+6EZMo9zz1xF22MfQC+9StFo1FdkXr5NcZIQPZ8roUocsJL43QDCw8LH/eFTe86M1ekZ1tv5p4643zd5y5E+tFDy3kHf7vF2YHBS1J13pIt+AKudysywi6xOKrqtjGOngB1acAv+5wbtYOQpZ0TjSG+7Fjh9/7tNCPvBLqnpop578cDu/ejtEdol3NoD4l2BqBEhqIoXLoZcYP+BcHynRZ9VuPas5ny0kOEeaNt7OHwfQZ9ZwKNavNF6xuAOJueDhc1gMoilW0nADq9P2jEPADXjGJKA+cGpDdD06DA== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DS7PR03MB5608.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(366004)(4326008)(6512007)(8936002)(186003)(36756003)(6506007)(316002)(83380400001)(38100700002)(6486002)(26005)(6916009)(86362001)(8676002)(54906003)(2616005)(82960400001)(2906002)(5660300002)(66946007)(66556008)(66476007)(1076003)(508600001);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?SCs4YmpwMnN4ZDBsNGVLTXFab0Y0TTU0amd5MWFYTG5OWUM4OUo2ZzExVm4y?= =?utf-8?B?MnRLOHUzVlR5c2pmRytoM2l0STB1U0czMmJ2QzZ0L3lVcnJQdjhRK200U20x?= =?utf-8?B?N1hVRzFVTUFKdXpjQnEwdEJIQWZ4YW9paEo4cllCNjloRUNWd1h0cUEvUHBs?= =?utf-8?B?N2V4MWN1Yk9PYW9rSkRqMGs2MWZFeWkxeDlQbjJQd29aSTdPTTBRZVh3NEhC?= =?utf-8?B?Wi9SdVZPaWI4R0ovVWpONWdkWXdUUU03bG1LL3BkQnpGT3QzanFLdEJaNHYy?= =?utf-8?B?SjVLZU11YUo0SDZxUi9vSXR3blQzZlczdVVNVExMNHQ5ejlBTTVoWVEzb0N5?= =?utf-8?B?TVZxR3Y1cGFXY3VRdUFmeVNVclF5Ny92RldrcDhaeXRudHBMb2h2OVhQWDh0?= =?utf-8?B?SlV3QmFXckVkSS9ScThJcWh5cjNKQW1naDc2YUNIKzNDdmlWaWxObURXZFU1?= =?utf-8?B?R0Jua1hNVWRtaWRpcjl6RlpCaFdFUGdYNU1pcUNlOTRHWjdaTlo4MFNwOHFQ?= =?utf-8?B?VWdaUzZvNHZTNTlXL2lmYm11VTB0cDkzTTlja0F0R3c4TEdOUW5BeU5GQ0Ju?= =?utf-8?B?eFdzNE80QVlNZzlQUkVQK0VaY0pDaWQwRzBXMW9YKzlqVXNoY2l4eTh3MlU1?= =?utf-8?B?WjErbElCendFR3pxV1JCSXpVU25mTGk5WVdMOWsrSm9iTjFTYVI2N2Q0NjdE?= =?utf-8?B?MEp5RHhJT0pZMG02Yk5zbmtxaFZGK0hXb1VRUGhJZzY5KzF3aFVxUW4zY20y?= =?utf-8?B?aERMd0xNSjJGSGJmUlBVYmZ2ZVpSbDY1UGUxcVpMeng3RWZDVjJWVVUwRmtP?= =?utf-8?B?ZXNFbzBOd3hOZk9ET056VWVHZURUYU94TzR1YzdXR2lZby9VRUs0VWpIRVds?= =?utf-8?B?enVhQ2Z5KzYvOWVJZEoxTzVRcmlyYjZGNHFrU3FDUDV4WTZwRGhMNWRFMUZ6?= =?utf-8?B?c3M4Q2laNVdhR05oL2lPdXBYeEpxSWVYcUROK04yaFRkOVo5MVd5bXBhcDAz?= =?utf-8?B?QVpJMVByOHVaUTZ5R1hDd1hGNlN1Q0cxeklvT1BobXRjZzdxSDVkVDhYc3pk?= =?utf-8?B?MC9YdlRtZlYrSVViZnZhRDFyTG50R1JLelpTZkNlY0JUSlBqU1J2VTVDMUpz?= =?utf-8?B?ZHRaN0FucHlrcXU4azFXbW4xeFkyenhQY3AvSEc2MWNSbjJnWExmYWVZYnlC?= =?utf-8?B?RmJTKzFteXVQL2pDY3hRN0lvZWpBTHVITEVxTjREaHhnZnRZTG5yTGVjWFJT?= =?utf-8?B?YkpYY3Q1VWVhY3JFWktudFRjb2tZcCtDeWZOZ0ZHcXJ3VTRSSXVqL2tBcHZJ?= =?utf-8?B?OEZsTkdleUtXeUJHOGw0Tk5Nd0ZEdVhTVnlWS0t6eGEzalI1RG1QZ2EzOFMz?= =?utf-8?B?WkhXaEIrUWhjWFUxTDVwa3RqZ2JIVnk1WDdUMkRFYWMwUTZtamlib2FZYmUy?= =?utf-8?B?MmwrUUNZc0ZwRUliWTZCWmVoZ1pDU1dQNytoVGZYSTU5L2NJV3Y3WDgxVWs0?= =?utf-8?B?K3NpdEtvV253QVliK2NFQmFCUGZISjV3Z2VjK1FIOU5xUjZIWSswT2Q0T1Vj?= =?utf-8?B?M3lpSzAyZVpNR3FPSUVUMElycHB0cEdadm5oQWtuOUsyUUdWUEE3Y1p0V2Jr?= =?utf-8?B?K2JDMUJ6Q0xTVnhwZHFSNjJqVlhvNTlzNDM0QjRlZFdrRVpaNG4wdTJJR1dJ?= =?utf-8?B?K1c0QlFpZXR6Mmw2dnd2dVhqQ2RTbjg2eWJtZ1hnWmhoK1pxN2ZNaUtDcDVy?= =?utf-8?B?eWdKQzdqcGxhZ1hTWkp5RzRWR3d2NEJqK1ZCU2VqQXR3Mzk2T1FRcHZEYk5D?= =?utf-8?B?WDQrblFFY0h1Rk1DRjFQUy93STZGYUlwd1NRUmdXUEZ6UDF6VDlrUVhhSzZR?= =?utf-8?B?MUNyNUozQ0JOd0tLM2xwMzR4WWs0LzU3NFYvcFRXZmN5eW00QjlKNmxkRVJi?= =?utf-8?B?L3M1bFlQRldCaDhMQlEwM2dGOFhFMitXTWFEck5SM25YZys1MHM0aTdia0F5?= =?utf-8?B?bndyaXJEbGZGaHF5QUJSbVNLK2xTbzU2SDNEV0NBbEJUYkg0Y0RISlphQzZO?= =?utf-8?B?elc3M3FieFhKMklsQnVaVi9uRzBqK2VKcWJ1ejMvNmJKNXo3b1NkOXI0dlNu?= =?utf-8?B?WjZmNW95QW8yN2NvSy96SWgxcThiQkErMzZJaVRDd2ZOaHNlcGdpcndDTGhR?= =?utf-8?Q?NeCitfXRHaVT553bDmk1fwg=3D?= X-MS-Exchange-CrossTenant-Network-Message-Id: 7a7ca300-544c-43ae-002d-08d9d99e9e3b X-MS-Exchange-CrossTenant-AuthSource: DS7PR03MB5608.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Jan 2022 09:49:13.3143 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 335836de-42ef-43a2-b145-348c2ee9ca5b X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: t1+gboB2oGuf3WQDEqcDho8u28YTiWtMnGr7tvM3qqsStvB3jvotyCOdZKmHMijEj2AMOmkO7W89kbw6AWUYiA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR03MB4059 X-OriginatorOrg: citrix.com X-ZohoMail-DKIM: pass (identity @citrix.com) X-ZM-MESSAGEID: 1642413002243100001 Introduce an interface that returns a specific leaf/subleaf from a cpu policy in xen_cpuid_leaf_t format. This is useful to callers can peek data from the opaque xc_cpu_policy_t type. No caller of the interface introduced on this patch. Signed-off-by: Roger Pau Monn=C3=A9 Reviewed-by: Jan Beulich --- Changes since v5: - Zero out parameter. Changes since v3: - Use x86_cpuid_get_leaf. Changes since v1: - Use find leaf. --- tools/include/xenguest.h | 3 +++ tools/libs/guest/xg_cpuid_x86.c | 25 +++++++++++++++++++++++++ 2 files changed, 28 insertions(+) diff --git a/tools/include/xenguest.h b/tools/include/xenguest.h index e01f494b77..0a6fd99306 100644 --- a/tools/include/xenguest.h +++ b/tools/include/xenguest.h @@ -807,6 +807,9 @@ int xc_cpu_policy_update_cpuid(xc_interface *xch, xc_cp= u_policy_t *policy, uint32_t nr); int xc_cpu_policy_update_msrs(xc_interface *xch, xc_cpu_policy_t *policy, const xen_msr_entry_t *msrs, uint32_t nr); +int xc_cpu_policy_get_cpuid(xc_interface *xch, const xc_cpu_policy_t *poli= cy, + uint32_t leaf, uint32_t subleaf, + xen_cpuid_leaf_t *out); =20 /* Compatibility calculations. */ bool xc_cpu_policy_is_compatible(xc_interface *xch, xc_cpu_policy_t *host, diff --git a/tools/libs/guest/xg_cpuid_x86.c b/tools/libs/guest/xg_cpuid_x8= 6.c index b9e827ce7e..aff4efe78d 100644 --- a/tools/libs/guest/xg_cpuid_x86.c +++ b/tools/libs/guest/xg_cpuid_x86.c @@ -855,6 +855,31 @@ int xc_cpu_policy_update_msrs(xc_interface *xch, xc_cp= u_policy_t *policy, return rc; } =20 +int xc_cpu_policy_get_cpuid(xc_interface *xch, const xc_cpu_policy_t *poli= cy, + uint32_t leaf, uint32_t subleaf, + xen_cpuid_leaf_t *out) +{ + const struct cpuid_leaf *tmp; + + *out =3D (xen_cpuid_leaf_t){}; + + tmp =3D x86_cpuid_get_leaf(&policy->cpuid, leaf, subleaf); + if ( !tmp ) + { + /* Unable to find a matching leaf. */ + errno =3D ENOENT; + return -1; + } + + out->leaf =3D leaf; + out->subleaf =3D subleaf; + out->a =3D tmp->a; + out->b =3D tmp->b; + out->c =3D tmp->c; + out->d =3D tmp->d; + return 0; +} + bool xc_cpu_policy_is_compatible(xc_interface *xch, xc_cpu_policy_t *host, xc_cpu_policy_t *guest) { --=20 2.34.1 From nobody Sat May 4 19:45:18 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=citrix.com); dmarc=pass(p=reject dis=none) header.from=citrix.com ARC-Seal: i=2; a=rsa-sha256; t=1642413003; cv=pass; d=zohomail.com; s=zohoarc; b=ix4CHOidcJ4/akmSGJghpDBeek9/lRZIyQDHuMlWxnPR4pScUJGVHwMaAErcc4J+jw+Lo3fY9EgBfF9npjsW0c4iS3GTS+ntVlA2vBuU8NX+zDPCPYLY6W/oZeXu7AmXIrGKFr6EkMaP/lETvuNNgFRNLTWjmnnrzRMaZJCj/ks= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1642413003; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=MQ4w732WigNqFyep8JcmK9zsMMm6uzHE9SmRsR9wkPA=; b=HzmVfyFXollAyev+F9FxR8g+F5J6899z4jSIA6jre5B/Xxjhpqv0SnQqBb8uYQd/IZRebvC2AXYyhVfL9JYZ3UOawfh2dsCIHWtnl0QnQTuzcyASG8eq/5djv1GbPlmq4gU7LSrSrVrhEvSUX35qKvmraywl21H7zSOO2w5N8sw= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=citrix.com); dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1642413003437357.55991389972473; Mon, 17 Jan 2022 01:50:03 -0800 (PST) Received: from list by lists.xenproject.org with outflank-mailman.258044.443941 (Exim 4.92) (envelope-from ) id 1n9Odj-00047h-BA; Mon, 17 Jan 2022 09:49:27 +0000 Received: by outflank-mailman (output) from mailman id 258044.443941; Mon, 17 Jan 2022 09:49:27 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1n9Odj-00047S-6u; Mon, 17 Jan 2022 09:49:27 +0000 Received: by outflank-mailman (input) for mailman id 258044; Mon, 17 Jan 2022 09:49:25 +0000 Received: from se1-gles-flk1-in.inumbo.com ([94.247.172.50] helo=se1-gles-flk1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1n9Odh-0003a5-6c for xen-devel@lists.xenproject.org; Mon, 17 Jan 2022 09:49:25 +0000 Received: from esa4.hc3370-68.iphmx.com (esa4.hc3370-68.iphmx.com [216.71.155.144]) by se1-gles-flk1.inumbo.com (Halon) with ESMTPS id bf3cd636-777a-11ec-a115-11989b9578b4; Mon, 17 Jan 2022 10:49:23 +0100 (CET) X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" X-Inumbo-ID: bf3cd636-777a-11ec-a115-11989b9578b4 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=citrix.com; s=securemail; t=1642412963; h=from:to:cc:subject:date:message-id:in-reply-to: references:content-transfer-encoding:mime-version; bh=vDeZNAfzjRCgFt8hGu55m0epQtOZNasdba7RtKoWkc4=; b=Peaz1VDE/CbAVVfdTmSrJIVZt/fLsIMxDKpD7mMEMRUIkk3I6kFNEggk xgb3ILVZCJ2kF8+Sq1qGs80xwG8vfvkmd61Hdop93EaC1I8q65gRP/CNO XpT08jOupL9lSEBD5xP9vqmVE/Um9THVUZ92qDl3V1+VuOxCnctXVAzea Y=; Authentication-Results: esa4.hc3370-68.iphmx.com; dkim=pass (signature verified) header.i=@citrix.onmicrosoft.com IronPort-SDR: LHh4JEJfGJpIDvJQ4mHWOOabhVQ4PisDz4BEA/cn0MyFydbQBPb0IWEyuwg2NaIEuwHTWlg6RT aUC+J3bikwrJXuzps0K62q/19MhiSMUvLHiHIyUZKqGY+dRIYrBS8BL1AjiHmExlNrWqgC1Iks wSiFaLpljVsR/ueUnorfqBVVgNHcDGdiCxFAnlSfh7cLEVSDbphj1ic0c0PWTrDCgeguZokbxf icjQncsl//wVP1tO1/qgZfZLjFowPcxJazfuZVUqp3iR/ATTyv7YXI+oZwRwv17lk2hdr1DfiC FR29K8EAIEZ72+WjyBORT1Wi X-SBRS: 5.2 X-MesageID: 64269527 X-Ironport-Server: esa4.hc3370-68.iphmx.com X-Remote-IP: 162.221.156.83 X-Policy: $RELAYED IronPort-Data: A9a23:6zQ8QazULh17qXEIhlZ6t+fWwSrEfRIJ4+MujC+fZmUNrF6WrkUFy 2UXDWyCOfmDNGr8fd8naIu+oBwC65eBx9FgTgRqpSAxQypGp/SeCIXCJC8cHc8zwu4v7q5Dx 59DAjUVBJlsFhcwnvopW1TYhSEUOZugH9IQM8aZfHAhLeNYYH1500g7wrdm2tcAbeWRWGthh /uj+6UzB3f9s9JEGjp8B3Wr8U4HUFza4Vv0j3RmDRx5lAa2e0o9VfrzEZqZPXrgKrS4K8bhL wr1IBNVyUuCl/slIovNfr8W6STmSJaKVeSFoiI+t6RPHnGuD8H9u0o2HKN0VKtZt9mGt/Ev4 850msWAdQgOJpb3xbwveTJRAT4raMWq+JefSZS+mcmazkmAeHrw2fR+SkoxOOX0+M4uXzsIr 6ZBbmlQMFbT3Ipaw5riIgVort4kI8TxepsWp1lrzC3DDOZgSpfGK0nPzYEEhmlh25oRdRrYT /QJMx8xaC7tWABoI3E0Aq8TzLe1pWaqJlW0r3rK/PFqsgA/1jdZz7zFINfTPNuQSq19nEyVu 2bH9GTRGQwBOZqUzj/t2mKhgKrDkD32XKoWFaak7bh6jVuL3GsRBRYKE1yhrpGEZlWWAowFb RZOo2x38PZ0pBfDosTBswOQgSCvpSczAupsHMoi0zrQkpj+yA+LGT1RJtJeU+AOuMgzTD0s8 1aGmdL1GDBi2IGopWKhGqS89m3rZ3VMRYMWTWpdFFZevYG/yG0mpkuXFo4LLUKjsjHi9dgcK RiupTN2ubgchNVjO06TrQGe2GLESnQko2cICuTrsoCNs1kRiG2NPdXABb3nARBodtzxor6p5 ilspiRmxLpSZaxhbQTUKAn3IJmn5uyeLBrXikN1Ep8q+lyFoiD/J9sNsGoueBs3Yq7onAMFh meJ5Gu9A7cJbROXgVJfOdrtW6zGM4C9fTgaahwkRoUXOcUgHON21CpveVSRzwjQfLsEyskC1 WOgWZ/0Vx4yUP0/pBLvHrt1+eJ1mkgWmD2CLbimn0XP+efPPxa9FOZaWGZim8hktstoVi2Pr YYGXyZLoj0CONDDjt7/qt9MfQtUfCliVfgbaaV/L4a+H+avI0l4Y9f5yrI9YY112aNTk+bD5 HamXUFEjlH4gBX6xc+iMxiPsZvjAsRyq2wVJyspMQr60nQve9/3vqwea4E2bf8s8+k6lax4S PwMesOhBPVTS2uYp2RBPMel9IEyJg62gQ+uPja+ZGRtdZBXWAGUqMTveRHi9XdSA3Pv59c+u bCpyijSXYEHG1Z5FM/TZf/2lwGxsHERlfhcRUzNJtUPKkzg/JIzc376j+MtItFKIhLGn2PI2 wGTCBYehO/Mv45qr4WZ2fHa99+kSrIsEFBbEm/X6aeNGRPbpmfzk5VdVOuofCzGUD+m8quVe ugIner3N+cKnQgWvtMkQapr1683+/Dmu6ReklZ/BHzOYlmmVuFgL32B0ZUdv6FB3OYE6w6/W 0bJ8dhGI7SZfsjiFQdJdgYia+2C09ASmyXTsqtpcBmruncv8erVS1hWMjmNlDdZfel8P44Sy Os8vNIbtl6kgR0wP9fa1i1Z+gxg9JDbv3nLYn3CPLLWtw== IronPort-HdrOrdr: A9a23:SAOUxa0m90BVA2mUqi1WqQqjBV5yeYIsimQD101hICG9Lfb2qy n+ppgmPEHP5Qr5OEtApTiBUJPwJU80kqQFm7X5XI3SJzUO3VHHEGgM1/qF/9SNIVydygc/79 YeT0EdMqyIMbESt6+Ti2PZYrUdKbG8gdyVbIzlvhBQpG9RGsRdB1ATMHfnLqQ6fngOObMJUL 6nouZXrTupfnoaKuy9G3k+RuDG4/nGjojvbxIqDwMurFDmt0Li1JfKVzyjmjsOWTJGxrkvtU DDjgzC/62m99W20AXV2WP/54lf3PHh1txALsqRjdV9EESlti+YIKBaH5GStjE8p++irH4sjd n3uh8le/9+7nvAF1vF1SfF6k3F6nID+nXiwViXjT/IusriXg83DMJHmMZwbgbZw1BIhqAx7I t7m0ai87ZHBxLJmyrwo/LSUQtxq0ayqX0+1cYOkn1kV5cEYrM5l/1TwKpsKuZPIMvG0vFnLA E3Z/uspMq+MGnqJUwxh1Mfj+BFBR8Ib1S7qktrgL3h79EZpgE686Ii/r1vop43zuNOd3B13Z W7Dk1WrsA/ciZvV9MEOA4ge7rBNoWfe2O7DIqtSW6XZ53vfUi97qLK3A== X-IronPort-AV: E=Sophos;i="5.88,295,1635220800"; d="scan'208";a="64269527" ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=eIe4jCzGQrUw8MIyG31vb7gSsQN66mh09Dx1BNNGSg/0NBnfC7qv/Mz8ZQUWF2w/x4+GRgQtRySorlgDfGqla72rh1MY0/+uG/UTWallejVwcRgjBWtotzQVo4+F85xAoDMaMNkFCh4kvee+ImQoWN3CRDe+AflhQ2m4gKWFlZeLuRLiVcnjnZLzZshLx/y/XQxwzdv4MAHkkDFt/7wnNs+vVWV8qo9Is2vsr1vJaWF7NB1LwEm6pYUGeEkCMOtMFb3E7ZxpbkFfx+4Vtk7yAMIAz+0rssjjPytvKhIPvkZJhNl4MhaEIquJstKOSef3w3/BPoFzdpP7eYhOAOTAUQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; 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=MQ4w732WigNqFyep8JcmK9zsMMm6uzHE9SmRsR9wkPA=; b=e/a4+YkbbsboMl5bZlUuujwGvzeMuEUqIytyA/cDP5tytR41rStr/dH+lvKnG7LfgeRGMHGHZ0RbaafRuNiX03ivmdCs6mlaDdH6uEjFT6kWUm2G4LDJo8XkBfW7e7hljHKtHqA2oK3KfAY1pVS4du8XqQSDRLvgy/7jLO8tC+eEJ8OLn+0q3Cth7lGoitl+g0WfXAHZoR1J86azoIZbwONDvl7KJIPIxf++fPTeBsuXoAAX6qDwbzOWIB44jCkkZQlJEfLkjb3wR2y1Dao48bJgbeXbUZ6qD6OGoJQSbPaxX8qUGhqhvpeaqrIUkkqOT0yFQL4J45+dd1/TGx8PuA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com; dkim=pass header.d=citrix.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=citrix.onmicrosoft.com; s=selector2-citrix-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=MQ4w732WigNqFyep8JcmK9zsMMm6uzHE9SmRsR9wkPA=; b=qswsX6/EBCB+y7PUFaAaD6X1LWa+DbVeUv5fFMkod7BqeL0No1icCtsIXkIL2ujGwGnHXJ64OVXxTpK75p3qrHBB2LEj8svvuRSrGPeGHcY/U0LiB1tvaQZFK3J9+00Mgd3Ef4yfZsfJ9MLAG2pNyJF4xlrrfC7EJKfQFEwHkRM= From: Roger Pau Monne To: CC: Roger Pau Monne , Jan Beulich , Andrew Cooper , Wei Liu , "Anthony PERARD" Subject: [PATCH v6 04/12] libx86: introduce helper to fetch msr entry Date: Mon, 17 Jan 2022 10:48:19 +0100 Message-ID: <20220117094827.16756-5-roger.pau@citrix.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220117094827.16756-1-roger.pau@citrix.com> References: <20220117094827.16756-1-roger.pau@citrix.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: MR2P264CA0113.FRAP264.PROD.OUTLOOK.COM (2603:10a6:500:33::29) To DS7PR03MB5608.namprd03.prod.outlook.com (2603:10b6:5:2c9::18) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 79fa31bf-a88f-43dd-613a-08d9d99ea15c X-MS-TrafficTypeDiagnostic: DM6PR03MB4059:EE_ X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:7219; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: ukEnZ2PmybNUijujuE+p/pcUYQvoYeAeW2jCJBbw36bRszinBlEwGiB0so8MvVl5+Vr3RPy8BTDQ5PZtgxR6Xyc6wJIe85nhQn0a1c0P72nGiolV9DytM1kPHSBZkPmycH3/lskUg6IcCzVYYbFvq0r2pzJzN2oA7Sp29df4MyGCMF1AtNORaqO9hhx4HdbY6BSZ1ZDr0u5krsUufhOAX1FbrSJvG2aoFoeKcl8ogS6YO2NhBZgRnoPK2VBYy5WEn/VTSByI0FFjIkovNoLxM0lujkBkN8i4dqTAiNwL6Q+7OU4APjFwrpHaFl0MNYpPaWb5IB1Re90HCtDEzycnNl7ijep7BjGKLazFR2tTT/iHRaOuDYQFz9acvhae1LRNFN/9uayD5gGudWJzr8DUVJFXmRsazNvLQQTWLzD4TiPdPgdjiyb+NmeJMA48xNuoSqAp/SK9YWILQ/Mt7rCrSa4Dxd/M6PNQBKylOf5NjEvFJWxmka81wIPyFJJyUE0dLFe6B32F+RYnGda9GV11lLJFSBDyAmM4SJnlU712zPV5Yj8PF/xz3CvMVBOx09a1eHS7dsm8L6RUkkqJXJr15Z+ATVXbkg32hQPmrfI2TeN4O781lxtCH9KyhKIFKJAoTZWw+OYqF231MM06zmGg3GzxvTfdnXD+xco98K9yIQYtz1jWI3evKCzMiWN46K3f4K+sA5Xah1fJLcEZMY95jw== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DS7PR03MB5608.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(366004)(4326008)(107886003)(6512007)(8936002)(186003)(36756003)(6506007)(316002)(83380400001)(38100700002)(6486002)(26005)(6916009)(86362001)(8676002)(54906003)(2616005)(82960400001)(2906002)(5660300002)(66946007)(66556008)(66476007)(1076003)(508600001)(309714004);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?QWpTeFhLSGdBSGFrRHNCN3E3azRXa25Ec1Nva0djSThHejhDaVRrVlZId0cx?= =?utf-8?B?V2JkL2thMXd3OUFjK3RQZU5GTDljRmNaQTFLU2hXQ1oxWS94Y2t3WmEvU2hE?= =?utf-8?B?cTVXcTdjWmFTS2FEQnRIRnpOU2Vtcmo0Q3U1YjVsK1BMR0VuQU5rMzBFK0Jt?= =?utf-8?B?Qlc0LzRjMWppbU52NVloMllobmJGRldaTlowYjh6UE80bExvOHBieDJZSVJU?= =?utf-8?B?RHV1ZVFqdDFHNGdQd3cvMTVXekdOSUNadzVaYW1EeGRkMndvM1kwZENrRjBm?= =?utf-8?B?eG1oRTZ3YnNrMmFzcWhabmhlQXFpdHV6d2pjelBGQVh6ZVBid0JFcmZpYTIw?= =?utf-8?B?MDJ4UmFpTlFYOHJpU201cysra0FrSnJ1K2FINGhTVDk5UVhPT2o4NForbXVR?= =?utf-8?B?UC9pZkUwNnd5M1JKekowWHc1MWdiMDB4UnFYaWt6UE4yWjFhd0puK3RpcmhY?= =?utf-8?B?by92UnRyWWM0RHZydVVHaDg1Q2JrT3dFd0RkUTJTUUNaL0JrRmpLNlBlcEY1?= =?utf-8?B?NklWSERZY3N5cXVLZWZqaEZDWnduWDZIeU5NcTg3OXBGblVhK1lGMno2NGFF?= =?utf-8?B?ZGJYZXJZN2g3Yi9taDVyUHhPUk5tbUI3Zks4aXBaNk9sK1I0c2JackljVUZu?= =?utf-8?B?bXZHYis5MitJZ1NVQmZyeUxlUVJobUJqa2xIbEtzdEVJc1owNkdWc0pCbnBZ?= =?utf-8?B?N0tXdzVwTW5qY2RJUmZBUmk3cXQ4OVVURTBUakJBWUdUeXpRUXNnc3NiVFUz?= =?utf-8?B?eExhMnIxc3JxUFlHcjlXYkQ3SmtyVklJcHJoeTQ5OW5VTkJjdnFEaFdMUFYr?= =?utf-8?B?WVBYYXUxL3NvQUdSL0M4R2R5bjVaZUQ1VjZ3WkE4WnZPZjUzSHc5STNnanVJ?= =?utf-8?B?bWRsSWhlb1RtejBpMHUwTFlnK1BmNldqOVB0QUxhd0sxeWxQWTZqTkkxLzdU?= =?utf-8?B?QmF5b0tnQkM3aFhhOUwwYzhmVXQrRlRKb0hxQzNhMTRZMGd6ckZJMGtWNEdi?= =?utf-8?B?dmx3Wjkxc3dwSEtzYUx0VnRSazZFSStqTG1nRjVrSHFhZnBHUTVaVHh5N3Q5?= =?utf-8?B?UGxURDcvMkZWcGcydzJ0Y05XQXBzOW5oR015NHJSTUdFNzFCMklmdzl2a3ox?= =?utf-8?B?ZnJoQ3BkQjRyLy9scnJGbDM3YkVZYTRRVmE3UTNMTmRIOGFLN2FOcHkwUytM?= =?utf-8?B?TDRYbm5NcjdpVXhmQUNUdUNpNVNwMlRaaVdKNk1PNnNFS2pXVHZkVHVlZW94?= =?utf-8?B?aVZ2UE9pQmZkYmNaYVdVZWEyY0xZOGNDdzZoeTVJQWFnbEM2OFd4dnFabzUr?= =?utf-8?B?VnBBd0FXaFd0SUp0Z0VtWktPSElRMDB4S0NLMU03Z1ArbzJUczlNWGZsR1lv?= =?utf-8?B?ZU5QYUQ4bHU1QVFPSkxvNmRWZVIvMEtRUkoyemd3M3Bad2JNa1VFMHQ2WFBa?= =?utf-8?B?Qy9kTGVKY1hFK1lEb3RZRm84ZnVJOWp4aXhwc2xnZVV0UEtKQ2lqWW9Dd3Nl?= =?utf-8?B?Z3pnSG1BbURkUGVSYzVMSmx1ZzZVcnpuNFpGQ1ZMcFBiU2dMK3h5TUx0TzN4?= =?utf-8?B?MGtLQXpQeWJRMTd6SGRvYVdpdGZXN2Y3UzhtVEk0SGo0L3JTdEMxNlJmMlJS?= =?utf-8?B?MTlEZllqWGp0Z1NxSDlHMnBXVk5rbklGMFBJSEROUG42VzFHTG9DWHhFd0lz?= =?utf-8?B?VmJRSzlWcnpzOHdBWUxxUlROVVdnOFZwaG5jWFg1K0hTSXk3SXY2RnpobCtx?= =?utf-8?B?WXY3c3hSQmZFRHZNQmMxSS9TdUpmdkVWT1dJVXNScHUwY0wrQjNOU2hQWnk3?= =?utf-8?B?QzFGdjArblhNWlBrYVY2ZTFJYzhVdk1hbXRqdXNBOUlqQ3M3OWlibU9qS2dP?= =?utf-8?B?bVptZG1oK2dodVFhY3FXTmd1dURmUWp5bkZBb3c4Skx3RjIwR0p3blN6MUd4?= =?utf-8?B?MWRnamJjN1VMR0RMVTVsdmxxNVlsNUhPV0pqWDEwaWtXMHJldUNIc1RMQkQx?= =?utf-8?B?UzhQNGlKemQ0SmwxSXpHQkh2UnhjNGk2M0xWRXJYUVZLYndtV0lkZDZweUgx?= =?utf-8?B?b1B4S09iM041SGl2YmdkWmp2b2hNRzJRdk94bC84Z04xanMwNjJvNnIrR2g2?= =?utf-8?B?VmJNNE5SOHhGMjBjdHBJeDJDcWZ5TE5JdE94MXJocWZndTlVdi81UDJrWFo0?= =?utf-8?Q?zxN87yrh0J24NZfk6T2w6S8=3D?= X-MS-Exchange-CrossTenant-Network-Message-Id: 79fa31bf-a88f-43dd-613a-08d9d99ea15c X-MS-Exchange-CrossTenant-AuthSource: DS7PR03MB5608.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Jan 2022 09:49:18.5663 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 335836de-42ef-43a2-b145-348c2ee9ca5b X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: /+b9ap6zaIDHB2rAAdUG3vaZKkYFhaXIDwd20m6ijhjnED4xAL4IhCeMN5peAPS1xMPIij46PVrm5pIXpRzCeA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR03MB4059 X-OriginatorOrg: citrix.com X-ZohoMail-DKIM: pass (identity @citrix.com) X-ZM-MESSAGEID: 1642413004430100001 Use such helper in order to replace the code in x86_msr_copy_from_buffer. Note the introduced helper should not be directly called and instead x86_msr_get_entry should be used that will properly deal with const and non-const inputs. Note this requires making the raw fields uint64_t so that it can accommodate the maximum size of MSRs values, and in turn removing the truncation tests. Suggested-by: Andrew Cooper Signed-off-by: Roger Pau Monn=C3=A9 --- Changes since v4: - Rename _x86_msr_get_entry to x86_msr_get_entry_const. - Add newline before endif. Changes since v3: - New in this version. --- tools/tests/cpu-policy/test-cpu-policy.c | 48 +++++++++++++++++++----- xen/include/xen/lib/x86/msr.h | 20 +++++++++- xen/lib/x86/msr.c | 41 ++++++++++---------- 3 files changed, 76 insertions(+), 33 deletions(-) diff --git a/tools/tests/cpu-policy/test-cpu-policy.c b/tools/tests/cpu-pol= icy/test-cpu-policy.c index 3f777fc1fc..686d7a886c 100644 --- a/tools/tests/cpu-policy/test-cpu-policy.c +++ b/tools/tests/cpu-policy/test-cpu-policy.c @@ -386,16 +386,6 @@ static void test_msr_deserialise_failure(void) .msr =3D { .idx =3D 0xce, .flags =3D 1 }, .rc =3D -EINVAL, }, - { - .name =3D "truncated val", - .msr =3D { .idx =3D 0xce, .val =3D ~0ull }, - .rc =3D -EOVERFLOW, - }, - { - .name =3D "truncated val", - .msr =3D { .idx =3D 0x10a, .val =3D ~0ull }, - .rc =3D -EOVERFLOW, - }, }; =20 printf("Testing MSR deserialise failure:\n"); @@ -644,6 +634,43 @@ static void test_cpuid_get_leaf_failure(void) } } =20 +static void test_msr_get_entry(void) +{ + static const struct test { + const char *name; + unsigned int idx; + bool success; + } tests[] =3D { + { + .name =3D "bad msr index", + .idx =3D -1, + }, + { + .name =3D "good msr index", + .idx =3D 0xce, + .success =3D true, + }, + }; + const struct msr_policy pc; + const uint64_t *ec; + struct msr_policy p; + uint64_t *e; + + /* Constness build test. */ + ec =3D x86_msr_get_entry(&pc, 0); + e =3D x86_msr_get_entry(&p, 0); + + printf("Testing MSR get leaf:\n"); + + for ( size_t i =3D 0; i < ARRAY_SIZE(tests); ++i ) + { + const struct test *t =3D &tests[i]; + + if ( !!x86_msr_get_entry(&pc, t->idx) !=3D t->success ) + fail(" Test %s failed\n", t->name); + } +} + static void test_is_compatible_success(void) { static struct test { @@ -763,6 +790,7 @@ int main(int argc, char **argv) =20 test_msr_serialise_success(); test_msr_deserialise_failure(); + test_msr_get_entry(); =20 test_is_compatible_success(); test_is_compatible_failure(); diff --git a/xen/include/xen/lib/x86/msr.h b/xen/include/xen/lib/x86/msr.h index 48ba4a59c0..4d84b7cf27 100644 --- a/xen/include/xen/lib/x86/msr.h +++ b/xen/include/xen/lib/x86/msr.h @@ -17,7 +17,7 @@ struct msr_policy * is dependent on real hardware support. */ union { - uint32_t raw; + uint64_t raw; struct { uint32_t :31; bool cpuid_faulting:1; @@ -32,7 +32,7 @@ struct msr_policy * fixed in hardware. */ union { - uint32_t raw; + uint64_t raw; struct { bool rdcl_no:1; bool ibrs_all:1; @@ -91,6 +91,22 @@ int x86_msr_copy_from_buffer(struct msr_policy *policy, const msr_entry_buffer_t msrs, uint32_t nr_en= tries, uint32_t *err_msr); =20 +/** + * Get a MSR entry from a policy object. + * + * @param policy The msr_policy object. + * @param idx The index. + * @returns a pointer to the requested leaf or NULL in case of error. + * + * Do not call this function directly and instead use x86_msr_get_entry th= at + * will deal with both const and non-const policies returning a pointer wi= th + * constness matching that of the input. + */ +const uint64_t *x86_msr_get_entry_const(const struct msr_policy *policy, + uint32_t idx); +#define x86_msr_get_entry(p, i) \ + ((__typeof__(&(p)->platform_info.raw))x86_msr_get_entry_const(p, i)) + #endif /* !XEN_LIB_X86_MSR_H */ =20 /* diff --git a/xen/lib/x86/msr.c b/xen/lib/x86/msr.c index 7d71e92a38..e9b337dd70 100644 --- a/xen/lib/x86/msr.c +++ b/xen/lib/x86/msr.c @@ -74,6 +74,8 @@ int x86_msr_copy_from_buffer(struct msr_policy *p, =20 for ( i =3D 0; i < nr_entries; i++ ) { + uint64_t *val; + if ( copy_from_buffer_offset(&data, msrs, i, 1) ) return -EFAULT; =20 @@ -83,31 +85,13 @@ int x86_msr_copy_from_buffer(struct msr_policy *p, goto err; } =20 - switch ( data.idx ) + val =3D x86_msr_get_entry(p, data.idx); + if ( !val ) { - /* - * Assign data.val to p->field, checking for truncation if the - * backing storage for field is smaller than uint64_t - */ -#define ASSIGN(field) \ -({ \ - if ( (typeof(p->field))data.val !=3D data.val ) \ - { \ - rc =3D -EOVERFLOW; \ - goto err; \ - } \ - p->field =3D data.val; \ -}) - - case MSR_INTEL_PLATFORM_INFO: ASSIGN(platform_info.raw); break; - case MSR_ARCH_CAPABILITIES: ASSIGN(arch_caps.raw); break; - -#undef ASSIGN - - default: rc =3D -ERANGE; goto err; } + *val =3D data.val; } =20 return 0; @@ -119,6 +103,21 @@ int x86_msr_copy_from_buffer(struct msr_policy *p, return rc; } =20 +const uint64_t *x86_msr_get_entry_const(const struct msr_policy *policy, + uint32_t idx) +{ + switch ( idx ) + { + case MSR_INTEL_PLATFORM_INFO: + return &policy->platform_info.raw; + + case MSR_ARCH_CAPABILITIES: + return &policy->arch_caps.raw; + } + + return NULL; +} + /* * Local variables: * mode: C --=20 2.34.1 From nobody Sat May 4 19:45:18 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=citrix.com); dmarc=pass(p=reject dis=none) header.from=citrix.com ARC-Seal: i=2; a=rsa-sha256; t=1642413006; cv=pass; d=zohomail.com; s=zohoarc; b=aoB3/RzY6n/AyhwHieo+gl1TNxjJW2hs9ojP4kqzKHbug4y+vD9ngn5dUGe7fYKdTk6VweWpGxBrO7Tbh68jvjZeZuin4/97NyKQv4Lj2fvTLNXDt7NQTXXg80GdLRRsTmW87LUmIoSgaK1iTQgNdl4U1eWdeB/7RbCzkv0IjJQ= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1642413006; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=ttKOShXOtJhXrlltWfsF3kLq+OT0ydsXDZqofm2TxBw=; b=kThx1h4sIkE3upLApc0ilxK0FH0bFFQGyyL++4ll4GDiG7EG6YHHH6tcYkSHD8/DPbaqzAVwcstuwya0lpY6NGSe5vfysWH6EsyVaeDYutzM/CroiLlvYaWQRcOUyK9b0pigu7TcO55UHTbnGWrN/og7KRhU6QerJ5J6BJtm31A= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=citrix.com); dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 164241300662184.71922796819933; Mon, 17 Jan 2022 01:50:06 -0800 (PST) Received: from list by lists.xenproject.org with outflank-mailman.258048.443953 (Exim 4.92) (envelope-from ) id 1n9Odm-0004Zt-Ry; Mon, 17 Jan 2022 09:49:30 +0000 Received: by outflank-mailman (output) from mailman id 258048.443953; Mon, 17 Jan 2022 09:49:30 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1n9Odm-0004Zi-OV; Mon, 17 Jan 2022 09:49:30 +0000 Received: by outflank-mailman (input) for mailman id 258048; Mon, 17 Jan 2022 09:49:30 +0000 Received: from se1-gles-flk1-in.inumbo.com ([94.247.172.50] helo=se1-gles-flk1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1n9Odl-0003a5-Nq for xen-devel@lists.xenproject.org; Mon, 17 Jan 2022 09:49:29 +0000 Received: from esa2.hc3370-68.iphmx.com (esa2.hc3370-68.iphmx.com [216.71.145.153]) by se1-gles-flk1.inumbo.com (Halon) with ESMTPS id c2566c26-777a-11ec-a115-11989b9578b4; Mon, 17 Jan 2022 10:49:28 +0100 (CET) X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" X-Inumbo-ID: c2566c26-777a-11ec-a115-11989b9578b4 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=citrix.com; s=securemail; t=1642412968; h=from:to:cc:subject:date:message-id:in-reply-to: references:content-transfer-encoding:mime-version; bh=i/Ieolt0RmTqqhBWhTbcDNrdVcfCOwY0R0xAyfxSaGQ=; b=QzRSGHWI1s9MusYo/5E94NV8Rez1NZ9bn0SXDHNvRWBOgi4+QS1wK4M+ PVbWfdw1PS9aPJ9r+ctLh8jkSkoih/YvyRNdO8fgsq3HFrNJcQH9fslgY 7uC838BKjQs1Olj+huNCv4RAevEzvT6ehnusJ6QsWFBCsTC/HYy7VzGKs A=; Authentication-Results: esa2.hc3370-68.iphmx.com; dkim=pass (signature verified) header.i=@citrix.onmicrosoft.com IronPort-SDR: 2PcGYcKNwyYdslBSXkvrUVRGF57rDCnaKOvJuYzwfFn3KGOIJA812/cD3TkNxJ4Xuz1p8M7FZ8 0TpewO7+2bz5W3kB7Vj3xLCXpesf0tLviJc1hGuoSKk9LxiXjAdFLTs86X3xZSqn7Zh5ZVXSrF U0cFU1Y7odF+uun3baEInsURHeh5O3CiTBBa0ursDtGj8ybjVFqjbjEQfPCO6HNahbvWtqHQwg ofBjAuyrsfLnMrzCuAQzPMMI1XBCHn7WwcNZTS+A92e/fStlM5mS7zRUpNWY7hP1dlCJ4Wo0Im gyDW13DBc+OSAPLx5c+WdfT/ X-SBRS: 5.2 X-MesageID: 62138835 X-Ironport-Server: esa2.hc3370-68.iphmx.com X-Remote-IP: 162.221.156.83 X-Policy: $RELAYED IronPort-Data: A9a23:LA4WQKOEqGZ1TnDvrR1CkMFynXyQoLVcMsEvi/4bfWQNrUom1zAEz WNNDWiAOa2IamH1etB+at++8BtXuJTdy99lHgto+SlhQUwRpJueD7x1DKtR0wB+jCHnZBg6h ynLQoCYdKjYdpJYz/uUGuCJQUNUjMlkfZKhTr6UUsxNbVU8En150Es8w7dRbrNA2rBVPSvc4 bsenOWHULOV82Yc3rU8sv/rRLtH5ZweiRtA1rAMTakjUGz2zhH5OKk3N6CpR0YUd6EPdgKMq 0Qv+5nilo/R109F5tpICd8XeGVSKlLZFVDmZna7x8FOK/WNz8A/+v9TCRYSVatYoySpjvdu7 OpAjJzzdQkPHbyLyek4TDANRkmSPYUekFPGCX22sMjVxEzaaXr8hf5pCSnaP6VBpLwxWzsXs 6VFdnZdNXhvhMrvqF6/YvNrick5atHiIasUu216zCGfBvEjKXzGa/uQvIQIjGxt7ixINd/4a sQdTGpeUBDncQFNKk8WVLM0ks790xETdBUH8QnI9MLb+VP7zgNr16P2GMHIYdHMTsJQ9m6Ho krW8mK/BQsVXPSPxDzA/n+yi+vnmSLgRJlUBLC+7uRtglCY2ioUEhJ+aLegiaDn0AjkAYsZc hFKvHp1xUQvyKC1ZsjdTjqnhEGJhx5fZ9R2MPx9uQyo1YOBtm51GVM4ZjJGbdUnsuo/Sjory kKFkrvVONB/jFGGYSnDr+nJ9FteLQBQdDZfPnFcEWPp9vG6+Nlr5i8jWOqPB0JcYjfdPTjri w6HoyEl71n4pZ5ajv7rlbwrbt/Fm3QocuLXzliNNo5GxlkgDGJAW2BOwQKBhRqnBNzIJmRtR FBex6CjABkmVPlhbhClTuQXB62O7P2YKjDailMHN8B/q272pi74LdwMvmEWyKJV3iAsI2KBj Kj741I52XOuFCHyMf8fj3yZVqzGMpQM5fy6D6uJP7Kik7B6dROd/TEGWKJj9zuFraTYqolmY c3zWZ/1VR4yUP07pBLrGbt1+eJ1l0gWmDOCLbimnk/P+efPOxaopUItbQHmghYRtv3U+W04M r93aqO39vmoeLavPXmMr99CdABiwLpSLcmelvG7v9Wre2JOMGogF+XQ0fUmfYlklL5SjeDG4 je2XUow9bY1rSavxdyiZi8xZbXxc4x4qH5nbyUgMUzxgyooYJq17bdZfJwyJOF1+OtmxP9yb v8EZ8TfXagfFmWZo2wQPcvnsYhvVBW3ngbSbSCrVycyIsx7TAvT9966Iga2rHsSDjC6vNcVq qG70l+JWoIKQglvVZ6EaP+mw16rk2IaneZ+AxnBLtVJIR2++4l2MS3hyPQwJphUexnEwzKb0 SeQAAsZ+raR89NkroGRiPnd/YmzEuZ4Ek5LJEXh7O67ZXvA426u4Y5cS+LULzrTY3z5pfe5b uJPwvCibPBexARWs5BxGqpAxL4l44e9vKdTywlpESmZb1mvDb88cHCK0dMW6/9Iz75d/wC3R liO6p9RPrDQYJHpF1sYJQwEaOWf1K5LxmmOvKpteEiqtjVq+LenUFlJO0jegSNQG7J5LYc5z Lpzo8UR8QG+1kInP9vuYvq4LIhQwqjsi5kai6w= IronPort-HdrOrdr: A9a23:Xozhz68HMgJy9vR3JVtuk+FAdb1zdoMgy1knxilNoENuHfBwxv rDoB1E73LJYVYqOU3Jmbi7Sc29qBTnhOJICOgqTMqftWzd1ldAQ7sSi7cKrweQeREWs9Qtrp uIEJIOeeEYb2IK9PoSiTPQe71LoKjlzEnrv5al854Ed3AVV0gK1XYfNu/0KDwSeOEQbqBJa6 Z0q/A37AaISDAyVICWF3MFV+/Mq5nik4/nWwcPA1oC5BOVhT2lxbbmG1zAty1uHg9n8PMHyy zoggb57qKsv7WSzQLd7Xba69BzlMH6wtVOKcSQgow+KynqiCyveIN9Mofy9gwdkaWK0hIHgd PMqxAvM4Ba7G7QRHi8pV/X1wzpwF8Vmgnf4G7dpUGmjd3yRTo8BcYEr5leaAHl500pu8w5+L 5X3kqC3qAnQy/orWDY3ZzlRhtqnk27rT4JiugIlUFSVoMYdft4sZEfxkVIC50NdRiKp7zPKN MeTP002cwmMm9zNxvizytSKZ2XLzgO9y69Mwk/Upf/6UkSoJh7p3Fos/D30E1wsK7VcKM0lN gsBJ4Y4I2mfvVmHZ6VO91xM/dfcla9OS4kEFjiaGgPR5t3c04klfbMkcAIDaeRCds18Kc= X-IronPort-AV: E=Sophos;i="5.88,295,1635220800"; d="scan'208";a="62138835" ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=LdsrO2He3AM7acPokpEdm+diZdtQH0OUtl2hg7FStwSoYqG1VrO78wHJ7f9d+KWWs87maC3HNcZS/XW/Mnww6HGAyYeMiS6t027RjfAS4LZ+a8rM/hwL4T4nZ2v3iepbV68cJVyuZ2Ukq+meZtxZP+nf2wriEY+iBsHuxtaj2IqDxvMi9ya9WYaqwQvfROjmngx9hRQDWLYmWfhLbNQ3AtHh6GV2tWXRiykKJibOb6+3x4Cj9uEOIQ5ZW5hzR2F1+UV69nmenX8TL1Lk9JoCNbQPY3ILKV2tjvKgPiZKIqpTnBv4lGL9hrxaGAHHIe0ZmPvF1jr9oLq0gwQUSTbGGg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; 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=ttKOShXOtJhXrlltWfsF3kLq+OT0ydsXDZqofm2TxBw=; b=W4CpENHRVPhg6RVyHOgq7kkviIiMJPAqAFdlxfXpuoL4g5B/IHwbo8iwLMvp8t195YluRciDhrkS7qShCqkbvAxKiFllBqpS68837pxkM3i+navzXjEbCE+Spm8OXbqQDiO4WZr+wwhuBS/C4R5onR/W5m2B0t5dc2xsiBLi61WrE0BYSCeCqUcFFpOcJPEDPZ7pQvIsL7DmR4d9y6NdlzMv6Ur65Y/G6nw5WNTfOf4iTZ8OyHwLmkXkNAlTuaPX17nxKgIJ71v1ZdJreTdecz18W5hvVvPhRhi5z7OPTL/07676rjvFHnNSuJv6ZwTzjSFo/B+0pGrq8fr8G6hGuQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com; dkim=pass header.d=citrix.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=citrix.onmicrosoft.com; s=selector2-citrix-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=ttKOShXOtJhXrlltWfsF3kLq+OT0ydsXDZqofm2TxBw=; b=seBIjSvI09pZe6SaI010dqGnCdZRIUhk8MqDDBXQDITusJdxmvBzNq2qPwim889clSLwkmSzntsxRrcNpWy/b+1Jtv9VDJahr/dnNOr0NE9z3q9CZNNsrTDjfXnLQg58jgDCJSuz0GmjfUPKmxUYidgMCSwDwgCvewQXoXF7uOw= From: Roger Pau Monne To: CC: Roger Pau Monne , Wei Liu , "Anthony PERARD" , Juergen Gross Subject: [PATCH v6 05/12] libs/guest: allow fetching a specific MSR entry from a cpu policy Date: Mon, 17 Jan 2022 10:48:20 +0100 Message-ID: <20220117094827.16756-6-roger.pau@citrix.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220117094827.16756-1-roger.pau@citrix.com> References: <20220117094827.16756-1-roger.pau@citrix.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: MR2P264CA0025.FRAP264.PROD.OUTLOOK.COM (2603:10a6:500::13) To DS7PR03MB5608.namprd03.prod.outlook.com (2603:10b6:5:2c9::18) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 25836d79-59b6-4bd4-613b-08d9d99ea457 X-MS-TrafficTypeDiagnostic: DM6PR03MB4059:EE_ X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:7219; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 7xsyYorgoLs+mDKoDidSQA9RePbHX74EQSpfxbOY7PrV32hoy1ephUbYsysN4d42YqM3MCKUU5s5McQbbVwMjDdBKa4bb9AxPPjoqjF1c0K4LbIpDLlCEXaOi44E0CZ/p/UEjcUUmStigIcyPg4cHYqzCysc8SIBy3IRQIVsj4makyf/EprY2hx3Vp+CmuI/d5rEYlrytZETnuMrI5nQ2gXk3d/08Z6fYhcb0DFFrLaQCW14B98NZH/rUJA6LwEPOniENUmLQP1niXOSaS09htVDWsKA+1CgxFj+pWbJw0+h6MUSZYiuC/CFr2KQGkqgVqIe/g7d4VtPclsEjaOGnPRcS+E97Lq8/sAjtUNeuGRLm5b1UsHCnBxaKSwfSIoOoZVuWspLwglNFqG8ZegWLdSoPN//qJtRSIA1OlbVxnIMhYuRCX4ofqgz3heWHPygTL194O3Je3T4MexBU+2M8raDN+pIe3rlTAigMflVmiRFI2BW4NptfMj0Iy+lqIIQqsjDAi74B9ZyvyIXshhieeTPpM0pj3JOIN+lIgkjq3pbNC1QJiTgo89YHIFcyH9LgImLIyZd8gMNsymdI0miipgMjwr8hUrvkpneUjeG9RaNpxYV+AlcS9/so4VJDzPQ+YTjOhARVwQgEWSTjDzg/Q== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DS7PR03MB5608.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(366004)(4326008)(6512007)(8936002)(186003)(36756003)(6506007)(316002)(83380400001)(38100700002)(6486002)(26005)(6916009)(86362001)(8676002)(54906003)(2616005)(82960400001)(2906002)(5660300002)(66946007)(66556008)(66476007)(1076003)(508600001);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?TFBNaFBWOFgvRm5wZ29BTEtIVlhpampnMHh2bzdWaEVmNkZOeTl4Y1lxaWps?= =?utf-8?B?RklTWG1JeWxTMjAyUXJzb0J5ejFLMUwzRjlZQVJ2dTdwYlo4ZmNLOGwyZmJP?= =?utf-8?B?TW8vdlBQUlFVMjlLL1VNK0pMSUwrbU51eWo2Y3A0R1FvSWRqY3BYTlUzWDgr?= =?utf-8?B?Wm8vamc3WnVxQjNHNzJrQjRSc1Nkb0tUNlI4a0U3VlhKUGlJWm05ak9jSmtu?= =?utf-8?B?dzNjNVRScDIrTEpxYVdNOGZXUGtORWhEMndzbnlPc3BnWEN1UllHYnFDUlN6?= =?utf-8?B?eEZHeWVmVEZIWm5xdGlpOWV3M3UrNHR5MCtSUnZaSE9DN1RMd3JSdDFqUnNY?= =?utf-8?B?enREbVpkNUpqemxpUmFqM3pCUEpQVGo0K0I2REVxYmRxMGZDZzluRG9WYW5Y?= =?utf-8?B?WHp0TFpIMVFHR0pKd2djdzhCNUFMdzRwSHV2aHA3SzRFRG5mWk1tcTNOdzJ5?= =?utf-8?B?VXlFZzdLbUhlS2pTYUU1L1RvV25GejhiR0NxM1E1RGEzcEF0dzA5OEtQZmZL?= =?utf-8?B?Qlc4MDRBVDZ6U3N6NUlGeGlHbnRReTBONWxSVmpVV25lKzMzQzlLM3phaCtJ?= =?utf-8?B?RHZDVDVEaEUyUmdGZUhBSmxIS3FUL0cxeHdDa3NUejBNVEEzWVdUWWZsZDNU?= =?utf-8?B?b0ZvV1o3eW1iV0Uyc2pycEJkMzlaL2ViWmVGSXd0VGVYemFuUzR6UWtTMGhN?= =?utf-8?B?ajFpa2xqaUZxdTFMeGw2UGxOWldLZSszcHV0YzRCQjNmRUo2SkY2ZzBWQ2ti?= =?utf-8?B?cWFRdXdFL1gyWkVGcW1mNmVvTER3YW1HbjVkZkdYYXM5MVBCa0IxUnJSNXBE?= =?utf-8?B?U1pobnRVaXc3T1VUSlk5NzdZRjhkRm5HVjJIY3VFejFKQnAreE1ZTGJMczZC?= =?utf-8?B?MCtMdXc1MWxDa05JSGhNeTlobzByclBjeDk5YzVmTThZMVBBWitvT2tvNm1z?= =?utf-8?B?ajZ5TXcvV3pBTG9FWDFralNncTJtZzB0bnhmVEdSc0VMOTBBMk4vY0FUTVYw?= =?utf-8?B?dDY4aGpLQlVtbUFhckE5dGpVdXNVazJXVzA3TExRQkZYeFNubVY5OGg1Sjcr?= =?utf-8?B?UzNYNjQrL2xRb3hOeTRHOUFMeG5jRkZCTGNKZFZZY3lSWFNUTEEyaHg1enlX?= =?utf-8?B?azIrNGw0RS9Qa0RrMEsrOTRnNDFpN0ExYzM1ZWhadldaRXI4ZHNPQmVXQ2o1?= =?utf-8?B?YU9BWTQvVFZaTUhSVnF0THVMRXA4WElDUFBGckIxMWtnQUQ4VHlzSWgwa2x3?= =?utf-8?B?b2dLdm14QjJFSVorRjVNUVRTVzNzTDdsdDc2WUY4SjloNkRZRVl1bEpmRXBP?= =?utf-8?B?WWRFb3NFcXZHTE1JcDdraXJPalMySDdPcENFam1XMTJoV21rcTNseEwyNnEx?= =?utf-8?B?aC9FVGJHL0hURmlBdXlqd2lkS2JIMWttQjd1bjNSdDVNS1JhUnd2bXhNdkJF?= =?utf-8?B?RWpld3c4MEFFbkwzbVF4TkVsd2pUWHFuTzRidCtlbTE1Q1JVQ2s5VmhXUkNE?= =?utf-8?B?UGVWcmhBUmZPY2Yzd3AxeEkwcVV5YkdhdllIQjZ5ak9sVzQxRWRhMHhON3ZP?= =?utf-8?B?Z2hNdTlrc1NFSHM5Y3c4ZFMrZWZJdFJwdmJYVEIxbUo5MWFLUXEyS2x3Qi9x?= =?utf-8?B?RGR4dDZ2RHBBN2Q2NTM4TkY1UUxQTWN2a3F0WnM4Qy9ESDhwVDZQbC9hL1U5?= =?utf-8?B?dWFQR1JJYjdUQzNpQ295c2RzdEkxaDY5MkhzS2VKeWVpTnJhYnJZTlJNMmUv?= =?utf-8?B?MHJ5UTRWeDNwemZCTTNac3dDNCttSy9nNXBiNmJCMXJKMVVkbEJyWVJ1eWtx?= =?utf-8?B?VFkvNDByMURLZnM4eW9ySmQ1NFlNb0RUYzFTWEpScTFJaVVjVkhqTWRtNFBv?= =?utf-8?B?QXkrV2xRVVd2VGRHVzFMQkVkWXhIS2F6bFlKM3M5MmZPeXN3aFRhTHYrUFFU?= =?utf-8?B?Y3F3NmZ2dU9TbXRvSk4xMTc2YjFJSFN2VVZxUGR5K2U3czdoV1h3UXBXbElj?= =?utf-8?B?Y0ppSklzRkIwa3d2RDdtdm5WZ3h6YktGU1VibmoxemdGM0hYZjJTR3Yxcjcz?= =?utf-8?B?NXZsS3ZqSUc0TkJJbGlBV3ZOVTRWcnZObE12cEttcWV4TVVTZkVkUkowdkV2?= =?utf-8?B?RTBuZ2NQb2E5ek5BRjk2UDFCNGdjc0Y3Yi9iTWpLZkNJaXl6M3hGZEhrNXhM?= =?utf-8?Q?5SyC2rz2JEEZvyrA1LsIQtk=3D?= X-MS-Exchange-CrossTenant-Network-Message-Id: 25836d79-59b6-4bd4-613b-08d9d99ea457 X-MS-Exchange-CrossTenant-AuthSource: DS7PR03MB5608.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Jan 2022 09:49:23.6603 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 335836de-42ef-43a2-b145-348c2ee9ca5b X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: qQKKh8YNcmyMqzYbkmHDwak55UR6b/L1JTbGVvZsktJ24uUIuQMnKixAExZF0wNtfXSinT1iZU4FK1+Scez1jw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR03MB4059 X-OriginatorOrg: citrix.com X-ZohoMail-DKIM: pass (identity @citrix.com) X-ZM-MESSAGEID: 1642413007171100001 Introduce an interface that returns a specific MSR entry from a cpu policy in xen_msr_entry_t format. This is useful to callers can peek data from the opaque xc_cpu_policy_t type. No caller of the interface introduced on this patch. Signed-off-by: Roger Pau Monn=C3=A9 Reviewed-by: Jan Beulich --- Changes since v3: - Use x86_msr_get_entry. Changes since v1: - Introduce a helper to perform a binary search of the MSR entries array. --- tools/include/xenguest.h | 2 ++ tools/libs/guest/xg_cpuid_x86.c | 20 ++++++++++++++++++++ 2 files changed, 22 insertions(+) diff --git a/tools/include/xenguest.h b/tools/include/xenguest.h index 0a6fd99306..2672fd043c 100644 --- a/tools/include/xenguest.h +++ b/tools/include/xenguest.h @@ -810,6 +810,8 @@ int xc_cpu_policy_update_msrs(xc_interface *xch, xc_cpu= _policy_t *policy, int xc_cpu_policy_get_cpuid(xc_interface *xch, const xc_cpu_policy_t *poli= cy, uint32_t leaf, uint32_t subleaf, xen_cpuid_leaf_t *out); +int xc_cpu_policy_get_msr(xc_interface *xch, const xc_cpu_policy_t *policy, + uint32_t msr, xen_msr_entry_t *out); =20 /* Compatibility calculations. */ bool xc_cpu_policy_is_compatible(xc_interface *xch, xc_cpu_policy_t *host, diff --git a/tools/libs/guest/xg_cpuid_x86.c b/tools/libs/guest/xg_cpuid_x8= 6.c index aff4efe78d..67981b1711 100644 --- a/tools/libs/guest/xg_cpuid_x86.c +++ b/tools/libs/guest/xg_cpuid_x86.c @@ -880,6 +880,26 @@ int xc_cpu_policy_get_cpuid(xc_interface *xch, const x= c_cpu_policy_t *policy, return 0; } =20 +int xc_cpu_policy_get_msr(xc_interface *xch, const xc_cpu_policy_t *policy, + uint32_t msr, xen_msr_entry_t *out) +{ + const uint64_t *val; + + *out =3D (xen_msr_entry_t){}; + + val =3D x86_msr_get_entry(&policy->msr, msr); + if ( !val ) + { + errno =3D ENOENT; + return -1; + } + + out->idx =3D msr; + out->val =3D *val; + + return 0; +} + bool xc_cpu_policy_is_compatible(xc_interface *xch, xc_cpu_policy_t *host, xc_cpu_policy_t *guest) { --=20 2.34.1 From nobody Sat May 4 19:45:18 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=citrix.com); dmarc=pass(p=reject dis=none) header.from=citrix.com ARC-Seal: i=2; a=rsa-sha256; t=1642413012; cv=pass; d=zohomail.com; s=zohoarc; b=KguVEtl4fQCsWP6btSa27HWqZozHEvq15g1Llvjtwg6d2+kJS/TKSUmqVW0BWgVPA+h6wCGS2ab6vCXpyw5sAvV+aVfcXNf5xuIEALAUnx6AI7RkZzCULBY9Gc3nET52K1X7DZWj8iwUHJYFPgMz6eyL8RkxC9lDy2pgiYeq2EA= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1642413012; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=cFYnv4t0Wef4nRu6jImjjppeuWl5RfgUPXEAxcSqT80=; b=MI2+RAnJmcfP8pO+Gd8Q7S8K5w4a6G59lskahMZoVKvl4Pm5tsjCtDqycKE6ChsL4thVZOiXsnmGtSkiVErrGcM0S9uTfjqQd5ehHv/x+qeOZXJkXuTbx+/TNk6ShFOo3cQ75UXX49un4I2fUBB3Vu2OjxRz5ncRX5R+SYngvU8= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=citrix.com); dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1642413012410652.9095091375923; Mon, 17 Jan 2022 01:50:12 -0800 (PST) Received: from list by lists.xenproject.org with outflank-mailman.258051.443964 (Exim 4.92) (envelope-from ) id 1n9Ods-00056r-7S; Mon, 17 Jan 2022 09:49:36 +0000 Received: by outflank-mailman (output) from mailman id 258051.443964; Mon, 17 Jan 2022 09:49:36 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1n9Ods-00056Z-3B; Mon, 17 Jan 2022 09:49:36 +0000 Received: by outflank-mailman (input) for mailman id 258051; Mon, 17 Jan 2022 09:49:35 +0000 Received: from se1-gles-flk1-in.inumbo.com ([94.247.172.50] helo=se1-gles-flk1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1n9Odr-0003a5-7u for xen-devel@lists.xenproject.org; Mon, 17 Jan 2022 09:49:35 +0000 Received: from esa3.hc3370-68.iphmx.com (esa3.hc3370-68.iphmx.com [216.71.145.155]) by se1-gles-flk1.inumbo.com (Halon) with ESMTPS id c516d209-777a-11ec-a115-11989b9578b4; Mon, 17 Jan 2022 10:49:33 +0100 (CET) X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" X-Inumbo-ID: c516d209-777a-11ec-a115-11989b9578b4 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=citrix.com; s=securemail; t=1642412973; h=from:to:cc:subject:date:message-id:in-reply-to: references:content-transfer-encoding:mime-version; bh=eVONsRSw0hM6kYuHZCuW/qeP6R5RsnCA7OOJoUtWPtM=; b=hikEAdke6STaGVZYabEFdGfgqxDGgQzx6dYzrDJduruhwHWJgKpzPv79 0Pdn+b39wlOsoOa7zlPrmHsb9j+nQLvPumAiF/JiS8sYQZpqDEzFaFTAX bYqP3Axc3eYCiHgHL4/LXZ6drcvz8JdUyYCEXTrTVswHQA1x+t8E9NKNg E=; Authentication-Results: esa3.hc3370-68.iphmx.com; dkim=pass (signature verified) header.i=@citrix.onmicrosoft.com IronPort-SDR: 7qHQzlt/Ii11qze0CWD93TdL234qqcewwzWkuESTdv9zyChvLFGu63M4ECBN/nTFeUl+LbB01D 7V40RZl7zSE98bixaV+6nCiMcCNQLqBOdX0cLlzou3ZIW7ZJAe6wX8WI8gQ2HcWE9Vj51CRgAY 5qwT3ITjfWd8Ci4nYkt1ziGb8brHI3RIXML492EGVsdXX16f0nftaHpa+eabxtizfmijCGnJ5G TMXBhXZEjNTfEN/BUQmch8zP56xD4pa39fZ9BQoCbYEObKVaK0maJwaPg3NyYpv63BywD+X+Mf XGISCvEPBjSicY7ch2yB6fcS X-SBRS: 5.2 X-MesageID: 62131514 X-Ironport-Server: esa3.hc3370-68.iphmx.com X-Remote-IP: 162.221.156.83 X-Policy: $RELAYED IronPort-Data: A9a23:+IiBLK+YQZ/Qd7nHUnLiDrUDZ3mTJUtcMsCJ2f8bNWPcYEJGY0x3y 2QXDz+FM6qLZzP2e4wjad6y8U8GusLWn4ViTVZvqC48E34SpcT7XtnIdU2Y0wF+jyHgoOCLy +1EN7Es+ehtFie0Si9AttENlFEkvU2ybuOU5NXsZ2YhFWeIdA970Ug5w7dg3dYx6TSEK1jlV e3a8pW31GCNg1aYAkpMg05UgEoy1BhakGpwUm0WPZinjneH/5UmJMt3yZWKB2n5WuFp8tuSH I4v+l0bElTxpH/BAvv9+lryn9ZjrrT6ZWBigVIOM0Sub4QrSoXfHc/XOdJFAXq7hQllkPhy+ MpMrKeJRD0SN6bUl/ZecR1/CD1haPguFL/veRBTsOSWxkzCNXDt3+9vHAc9OohwFuRfWD8Us 6ZCcXZUM07F17neLLGTE4GAguw5K8bmJsUHs2xIxjDFF/c2B5vERs0m4PcGhm5r350XQZ4yY eILYid3TBXDbyRsAXMSGo4hwaS5t0jGJmgwRFW9+vNsvjm7IBZK+LriKt3OYfSRWN5Y2E2fo wru4GDREhwcctuFxlKt4n+qw+PCgy7/cIYTD6GjsO5nhkWJwW4eAwFQUkG0ycRVkWbnBYgZc RZNvHNz8+5iryRHU+URQTW7kGGFpyUlVuBrGuYi5xPO6K7z+BqGUz1soiF6VPQqs8o/RDoP3 1CPns/0CTEHjIB5WU5x5Z/P82rsZHF9wXsqIHZdEFBbu4WLTJQb10qXFr5e/LiJYsoZ8N0a6 xSDt2AAiroalqbnPI3rrAmc01pASnUkJzPZBzk7vEr4tGuVh6b/PuREDGQ3C94adu51qXHb7 RA5dzC2trxmMH10vHXlrB8xNL+o/e2ZFzbXnERiGZIsnxz0pSL5Jt0Au2EieBk5WirhRdMPS BWO0e+2zMUCVEZGkIctO97hYyjU5fWI+SvZugD8MYMVP8kZmP6v9yByf0+At10BY2B3+ZzTz ayzKJ72ZV5DUPwP5GPvG481jOF3rghjmzK7bc2rnnyPjOvFDFbIGOhtDbd7Rr1jhE9yiF+Lo 4832grj40g3bdASlQGMoNFDdg5bfCFrbX00wuQOHtO+zsNdMDhJI9fawK87epwjmKJQl+zS+ Wq6VFMew1367UAr4y3TApy6QL+wD5t5s1whOikgYQSh13Q5ON7956YDbZonO7Ig8bU7n/JzS vAEfeSGA+hOFWubq2hMM8GlodwwbgmviCKPIzGhPGo1cal/SlGb4dTjZAbuqnUDV3Llqcskr rS8/QrHWp5fFR96BcPbZav3nVO8tHQQgsxoWE7MLoUBcUng6tEyeSfwkuU2M4cHLhCanmmW0 AOfABE5o+jRotBqrImV1P7c94rwSrlwBEtXGWXf/I2aDyiC8zrx25JEXcaJYSvZCDH+9pK9a LgH1Pr7KvAGwgpH6tIuD7ZxwKsizNLzvLsGnB98FXDGYln3WLNtJn6KgZtGuqFXn+ILvAK3X gSE+8VAOKXPM8TgSQZDKA0gZ+WF9PcVhjiNsqhlfBSkvHd6rOidTEFfHxiQkygMfrJ6PbQsz folpMNLuRe0jQAnM4regy1Zn4hWwqfsj0nzWkkmPbLW IronPort-HdrOrdr: A9a23:+N5qzq8j4qk/FFh/l0Buk+FAdb1zdoMgy1knxilNoENuHfBwxv rDoB1E73LJYVYqOU3Jmbi7Sc29qBTnhOJICOgqTMqftWzd1ldAQ7sSi7cKrweQeREWs9Qtrp uIEJIOeeEYb2IK9PoSiTPQe71LoKjlzEnrv5al854Ed3AVV0gK1XYfNu/0KDwSeOEQbqBJa6 Z0q/A37AaISDAyVICWF3MFV+/Mq5nik4/nWwcPA1oC5BOVhT2lxbbmG1zAty1uHg9n8PMHyy zoggb57qKsv7WSzQLd7Xba69BzlMH6wtVOKcSQgow+KynqiCyveIN9Mofy9gwdkaWK0hIHgd PMqxAvM4Ba7G7QRHi8pV/X1wzpwF8Vmgnf4G7dpUGmjd3yRTo8BcYEr5leaAHl500pu8w5+L 5X3kqC3qAnQy/orWDY3ZzlRhtqnk27rT4JiugIlUFSVoMYdft4sZEfxkVIC50NdRiKp7zPKN MeTP002cwmMm9zNxvizytSKZ2XLzgO9y69Mwk/Upf/6UkSoJh7p3Fos/D30E1wsK7VcKM0lN gsBJ4Y4I2mfvVmHZ6VO91xM/dfcla9OS4kEFjiaGgPR5t3c04klfbMkcAIDaeRCds18Kc= X-IronPort-AV: E=Sophos;i="5.88,295,1635220800"; d="scan'208";a="62131514" ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=L2FhsWEZVZCcOruOwcVZ8LMFvZtcgzAI/Fr6M4kIATCGrnB/BoeZ9yy0x6tge5+cdh+6P4NzFEPRwdaePLBLxm4yVLzdhj38sX+Hj1Cnb/HUHoj3O34sxqyxGMfxTvHt83GJ1YYxH2LN5mTOIXVg5UwBK6/ktRIXqdNQqPqSJFQIXyWcPHwJeaMCBGysTkbMzx2b+J3Oq5nj977XOoidsmEM2LGJYV6gQxOQjlwLnGH8l1vy9VeT/CKNOVcYmlYvifr420aqiVwQf9rAdWwDTBwflPWc1eXrGCkYG1R2cm1VIwcJwfz7+2daMs0opyK+5N5NAY0kGyEoB3P47M9QQQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; 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=cFYnv4t0Wef4nRu6jImjjppeuWl5RfgUPXEAxcSqT80=; b=bpReSdJiPvqaAKlHnqhJOUsJ1WwnFC33VOFnVnoxenpJwXjCCGx5cldMV3A2NsKg3nlteyDXaA+g4cMcPvkGPqdxWCOaRuTvR2Tn5IJuUeby6lqdqUwKRO02zWCKsFtipeBTQu0BkWV+nW01o7MluftEivWcSdQoi77dGf/8xyFo9HoU7X7SOIobUS8Q9XfJ7pZ8ioN8Ei9lv+Q28qpa+tGqMarXMytj65Ac5LmTSb0VJ6tDXUQRAQj4y7cSKYGcvXHBXs5oqbhIgD63aL3d90siLl0zKp4Pw+dXItLcBxzKLGkaNVjNoF4DHrvHc9ZL9B3UZZuu5XKrZ2TISlY9Ew== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com; dkim=pass header.d=citrix.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=citrix.onmicrosoft.com; s=selector2-citrix-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=cFYnv4t0Wef4nRu6jImjjppeuWl5RfgUPXEAxcSqT80=; b=q9inYwliNaH60OJhiHVfp48EbMV+Z7pNlva88B1iottH+6lIUt0P2SZ3ks6VMp+5E/TA7JwdLbQfzm2WL5N1NwKhr+bmq7cyl+p+0CypkuOYuyoKH9b8xNfEYwtugL/TOe+PJWSk7O9X8WT5ejjEQ5g8mb9FMsOoY4TPyAUIRXc= From: Roger Pau Monne To: CC: Roger Pau Monne , Wei Liu , Anthony PERARD , Juergen Gross Subject: [PATCH v6 06/12] libs/guest: make a cpu policy compatible with older Xen versions Date: Mon, 17 Jan 2022 10:48:21 +0100 Message-ID: <20220117094827.16756-7-roger.pau@citrix.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220117094827.16756-1-roger.pau@citrix.com> References: <20220117094827.16756-1-roger.pau@citrix.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: MR2P264CA0048.FRAP264.PROD.OUTLOOK.COM (2603:10a6:500::36) To DS7PR03MB5608.namprd03.prod.outlook.com (2603:10b6:5:2c9::18) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 0cd6b8d2-0b74-42b9-0352-08d9d99ea780 X-MS-TrafficTypeDiagnostic: DM6PR03MB4059:EE_ X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:3513; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: vLTFKxgK5QjXR4b+ancHUcdab0gwtDa9VhcpSCH8g9GQayELBAKh/7zC8e4FiVjbq/spCkdjTF8nSvE2gaWFxsNMRpBoAzobjdqmiJ5mtZz+8pVeCcfJJdOgerJNsn2pRQ62AsDdfWEEL4S1Sin3L5us6sihprSD/Xq1zJIJhXkQKF3I0dWz9nM4EI1Q8VRUq/nNOL7FvBzdDT6CLyRNdSa2I/FyW73MTP6D+bDaxqC+vUAW9/SdQKjnXbGEe3r/KRzxQWemE2zmwZiOP2+Q7ciyCqRbEiHlSIxveM+/XBgECp/Qbny312+tfRXJsBut0dxGHAqu8me9kqVmLeJbq67xaYllproDMIJbW4skrUAcou5MTZGNxBFX5/rSnCI16RwSOMVny5kxa0VgRFazweBJbcRlstNEw0oYU04X2l6QIdZxp57FMsgcQ3nkW+qfillw2qckmjA88uNcwcG3vgAvp14bawjI2nAW9pUj5RswbDw9D4/8cUKcgowl2sq9cIzMGJKAw6yaRwxqCrdwfFo+wdWTGSg4zA92+UnBSJbWvYnNhm4zN99QCLmBFFu9I/9mMWwKWnBbBDEfIc0m9BkTZdajHgfnP5b2dEpGF8J13KkJrS3gW+Y8UyRRgfWg3RZfT5BCo3m7fcTEbPaRfQ== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DS7PR03MB5608.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(366004)(4326008)(6512007)(8936002)(186003)(36756003)(6506007)(316002)(83380400001)(38100700002)(6486002)(26005)(6916009)(86362001)(6666004)(8676002)(54906003)(2616005)(82960400001)(2906002)(5660300002)(66946007)(66556008)(66476007)(1076003)(508600001);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?TldtSWJsSEVmUEN5ZW93Ukk4UmlRMXg5NGZKZnZRTlEzeFh6ditwNmNUVHVk?= =?utf-8?B?NVBPQi9yd1RSUCt0eFAzQ0Y4c2d0Vm1MZUVJeUF6OXA1cmdRVURMbmY0V3dt?= =?utf-8?B?NGppUFVXL2pPdlhybDRlTzdzSWltbGxZaXAvTlM2RVF2WVNydjdtZU1NUDVM?= =?utf-8?B?eFE3SUJwdGo4cnUyWWpOcE1rKzNES2FGSHB2b1MwQWtpSzVURXArRlBSMmRC?= =?utf-8?B?MjN1SmFTT29VVTJLbkwzbC82SnA3OFhXNDBlRW1xUXlpUk1Wb0t3b25TNW14?= =?utf-8?B?T05nem40OFp0TFd1cnQ1RGJNL1JBSjhXdTlhSzRESGI0L25OaEVRZXlvOXhr?= =?utf-8?B?YUN5cXozQnRES1YxZ3BhNGN6Nk03WWp5T0ZydTYzMXUyNFhRRG1JMWV2R282?= =?utf-8?B?M2pKWXltVEd3MkNMK1BlOTJIUDV1NzBTbmM0djc5QThpanNEK3l6QXF4V2d4?= =?utf-8?B?SUI4RU1PN0U2QkZZQmhXTUZpZ1dxOUVabG9QYTFrV2syRmFLb3RRQ3dROTJs?= =?utf-8?B?Nkk0SU9UcUp4dkd1WDBpWFN4bjFFOTN6alFQdHBCVFZ5REdwMTZ1MDZneEhE?= =?utf-8?B?YnVwTENUZWI1L2dBQlpuYmEyQTJ3NXJ5bVhTcS9ORTRteXJIRzZTL3hNR2p1?= =?utf-8?B?U09BK0habEZsK3E2L3V0TFp3S2NrU1pES1RQRTRHWHpwV2RlYk0wMUNkUjBr?= =?utf-8?B?YktoVnhST3kyTTZPcXBRUEJwRjJzdkFXa3dhOFR3Q2tZTFRvcDFVZCtMOWlN?= =?utf-8?B?ejhCb3NqK0RWMVhFV0d4bFhEaEQ5V1NvWFRVemg1R2lERVgwc0hxdVl5TnIx?= =?utf-8?B?aHhiUkl2em5EMzd0QU03V0k0QTJpdk5TeCtDRTd6VGZjMmV4TVp1Z2Z0NFJa?= =?utf-8?B?REhZUmJaS2l4UVUwbWFUcUpQUEoxVmhJWlJXaWl5WEwxY3RldzlUQVFUcng4?= =?utf-8?B?SzE5ajZYUCtVL1VOZnNJdjZ3aHB4SHRjRFRBYjlJTHZxQnZSdEhZRDdCbUY5?= =?utf-8?B?V2R0TWNUMDZBc2MzUFEyS2k2OHhhdSs1WDZnQUV5S01ZclYrcE1taFlOVEky?= =?utf-8?B?RWNneHVWb1JkVTR0dXNSTFhaR2ErcnlKZDdLenBmckZsdVlPNmFiZVVhMGJx?= =?utf-8?B?ZjgzTHE3cVBsUW9ST09MZTRHZHlYOHVUNENCUFZhS25CT0tucE9qK1p4NCtE?= =?utf-8?B?bHRkMlYvZXVyYk4zSFBLY1E3SlFPd1NQUGVRNVhnM1hMRldQTXhXYlpSRWpM?= =?utf-8?B?SXA1cUthNnFoWU5MVlRNcVpPK3BMTGU0L3lYeE5wUWRlWTY2cWV3NEVrUE55?= =?utf-8?B?YTlMN2VKQ2hOY2RaaGgxa0ZNc0JMR1hDRWNCMVkzUUlHWHl2L0dqbkg4MWw3?= =?utf-8?B?NFp3eHRZOHR5d1BnYTAyQlViZG81NmJtTkl1M0swK2tPbmE3N3QvU1NNYWRS?= =?utf-8?B?WjlFMjFFekU4MHJDVk4yekp6bXlDZnhkWXA2VkdINHk4aFVOK2RlMU5EOEdY?= =?utf-8?B?TFh5UHZsNSs2RjkvMUlVdnV2ZE1xNVNQclNuODdob2R1UGFrSW9nRjFFRlRI?= =?utf-8?B?NUhoLzJ0eG16aXphOWJYaHlHdUM4amhiSzJUdDNQU0JJRFFhWEdta1piYVFZ?= =?utf-8?B?WkFyZEs2enhISmRGeTZKeTY4K2RxcWViSGE4THVMSDNETy9sb1IwMnRFR2gr?= =?utf-8?B?ZkxrUWt3YkpacFJVcy91VGhjSmw2YW1IK2J5Ty82QU1XbXJBN0xHK0VOWDdi?= =?utf-8?B?SzQ0QzVrN0EwczZ3bXRVN1FJQityTUo3ekJBcnpSa1RnTTRTWXdnNTcxeDBm?= =?utf-8?B?NDhQYzI2bU8wcVcveWQ3MDEyQytCbXBWRzd2OE9jSExxSXBBU0JxTTBjNXBK?= =?utf-8?B?WGFjZFg1ckozVkZORi9jeFlsM3VpSjNQWFNTTjZaOUV2MzVxYmw3aEo1anda?= =?utf-8?B?MGJoaytISVc2SW9XOHBLdk1XbFJnYkZIWGtlL0RwcDErTzBaK3VPN1EyZEJT?= =?utf-8?B?K3FBSFFHREVGVGRjSnFYWWZ5RWpTWVBWNDgwZFBsRDVLYVVNNHdUUCtHb0Np?= =?utf-8?B?REhuQ2llMjgrcktHUVg5TDhlQWpoYkVUcytkNytlUTZ3VCtjajAwUHZRZ2cr?= =?utf-8?B?MDFpemNpM1FIenNHMURmWlU0OVk2M3k1RUluUGFaTzgwL0s2NUxIQXo4eWRV?= =?utf-8?Q?GkiZrBbo3pXMiSMSbTfzLnM=3D?= X-MS-Exchange-CrossTenant-Network-Message-Id: 0cd6b8d2-0b74-42b9-0352-08d9d99ea780 X-MS-Exchange-CrossTenant-AuthSource: DS7PR03MB5608.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Jan 2022 09:49:28.8818 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 335836de-42ef-43a2-b145-348c2ee9ca5b X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: nCPhTdOBDyy2ALw6YmrF3aNHpHHkwmmz5Nkp+HMzM2+UYawVlaLA6mz4ufJ2PTAXC40VhmN5kZYrueVtJGAQaA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR03MB4059 X-OriginatorOrg: citrix.com X-ZohoMail-DKIM: pass (identity @citrix.com) X-ZM-MESSAGEID: 1642413014212100001 Older Xen versions used to expose some CPUID bits which are no longer exposed by default. In order to keep a compatible behavior with guests migrated from versions of Xen that don't encode the CPUID data on the migration stream introduce a function that sets the same bits as older Xen versions. This is pulled out from xc_cpuid_apply_policy which already has this logic present. No functional change intended. Signed-off-by: Roger Pau Monn=C3=A9 --- Changes since v3: - Rename function to xc_cpu_policy_make_compat_4_12. Changes since v1: - Move comments and explicitly mention pre-4.13 Xen. --- tools/include/xenguest.h | 4 +++ tools/libs/guest/xg_cpuid_x86.c | 62 ++++++++++++++++++++++++--------- 2 files changed, 49 insertions(+), 17 deletions(-) diff --git a/tools/include/xenguest.h b/tools/include/xenguest.h index 2672fd043c..281454dc60 100644 --- a/tools/include/xenguest.h +++ b/tools/include/xenguest.h @@ -817,6 +817,10 @@ int xc_cpu_policy_get_msr(xc_interface *xch, const xc_= cpu_policy_t *policy, bool xc_cpu_policy_is_compatible(xc_interface *xch, xc_cpu_policy_t *host, xc_cpu_policy_t *guest); =20 +/* Make a policy compatible with pre-4.13 Xen versions. */ +int xc_cpu_policy_make_compat_4_12(xc_interface *xch, xc_cpu_policy_t *pol= icy, + bool hvm); + int xc_get_cpu_levelling_caps(xc_interface *xch, uint32_t *caps); int xc_get_cpu_featureset(xc_interface *xch, uint32_t index, uint32_t *nr_features, uint32_t *featureset); diff --git a/tools/libs/guest/xg_cpuid_x86.c b/tools/libs/guest/xg_cpuid_x8= 6.c index 67981b1711..f1115ad480 100644 --- a/tools/libs/guest/xg_cpuid_x86.c +++ b/tools/libs/guest/xg_cpuid_x86.c @@ -432,6 +432,7 @@ int xc_cpuid_apply_policy(xc_interface *xch, uint32_t d= omid, bool restore, unsigned int i, nr_leaves, nr_msrs; xen_cpuid_leaf_t *leaves =3D NULL; struct cpuid_policy *p =3D NULL; + struct xc_cpu_policy policy =3D { }; uint32_t err_leaf =3D -1, err_subleaf =3D -1, err_msr =3D -1; uint32_t host_featureset[FEATURESET_NR_ENTRIES] =3D {}; uint32_t len =3D ARRAY_SIZE(host_featureset); @@ -496,23 +497,9 @@ int xc_cpuid_apply_policy(xc_interface *xch, uint32_t = domid, bool restore, =20 if ( restore ) { - /* - * Account for feature which have been disabled by default since X= en 4.13, - * so migrated-in VM's don't risk seeing features disappearing. - */ - p->basic.rdrand =3D test_bit(X86_FEATURE_RDRAND, host_featureset); - p->feat.hle =3D test_bit(X86_FEATURE_HLE, host_featureset); - p->feat.rtm =3D test_bit(X86_FEATURE_RTM, host_featureset); - - if ( di.hvm ) - { - p->feat.mpx =3D test_bit(X86_FEATURE_MPX, host_featureset); - } - - /* Clamp maximum leaves to the ones supported on 4.12. */ - p->basic.max_leaf =3D min(p->basic.max_leaf, 0xdu); - p->feat.max_subleaf =3D 0; - p->extd.max_leaf =3D min(p->extd.max_leaf, 0x8000001c); + policy.cpuid =3D *p; + xc_cpu_policy_make_compat_4_12(xch, &policy, di.hvm); + *p =3D policy.cpuid; } =20 if ( featureset ) @@ -918,3 +905,44 @@ bool xc_cpu_policy_is_compatible(xc_interface *xch, xc= _cpu_policy_t *host, =20 return false; } + +int xc_cpu_policy_make_compat_4_12(xc_interface *xch, xc_cpu_policy_t *pol= icy, + bool hvm) +{ + xc_cpu_policy_t *host; + int rc; + + host =3D xc_cpu_policy_init(); + if ( !host ) + { + errno =3D ENOMEM; + return -1; + } + + rc =3D xc_cpu_policy_get_system(xch, XEN_SYSCTL_cpu_policy_host, host); + if ( rc ) + { + ERROR("Failed to get host policy"); + goto out; + } + + /* + * Account for features which have been disabled by default since Xen = 4.13, + * so migrated-in VM's don't risk seeing features disappearing. + */ + policy->cpuid.basic.rdrand =3D host->cpuid.basic.rdrand; + policy->cpuid.feat.hle =3D host->cpuid.feat.hle; + policy->cpuid.feat.rtm =3D host->cpuid.feat.rtm; + + if ( hvm ) + policy->cpuid.feat.mpx =3D host->cpuid.feat.mpx; + + /* Clamp maximum leaves to the ones supported on pre-4.13. */ + policy->cpuid.basic.max_leaf =3D min(policy->cpuid.basic.max_leaf, 0xd= u); + policy->cpuid.feat.max_subleaf =3D 0; + policy->cpuid.extd.max_leaf =3D min(policy->cpuid.extd.max_leaf, 0x800= 0001c); + + out: + xc_cpu_policy_destroy(host); + return rc; +} --=20 2.34.1 From nobody Sat May 4 19:45:18 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=citrix.com); dmarc=pass(p=reject dis=none) header.from=citrix.com ARC-Seal: i=2; a=rsa-sha256; t=1642413021; cv=pass; d=zohomail.com; s=zohoarc; b=fOMPkvHqLOLvomfwnUvsNA8MOrTc1nf8GHf36g1ekBv62QypPu/rouLnbzHsEelx2t7Pm+zLkME4SkV5+J7Ndl/Vx0tHzKpOBOXgZtxyNtr2FiItHxu98nSxI9UxKYUGgUiIOTtE2gi3DZF5CKkR3vazYpBC2b0rwH6AUHOzJRI= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1642413021; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=VXlOuhvnx6XapUkjewvNTicZOL1G6NXO7zwA2fIJdPM=; b=YrlTXDuqoiunyHLV3B/P1VDV7+kED8YYjNrErssKKcB6l0O2OoqVnKfEj4Z9jfm9PDJUwyIlhZO45lvuVFFt9tQUQYW6dCBFyy7u84HnA/l20ZtCTAHSuic3fwKxUPcag74BvBNXLpAI4KuQIvPUCl+xSs3pQPXPWIpMW1sB+SI= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=citrix.com); dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1642413021101662.6830227101933; Mon, 17 Jan 2022 01:50:21 -0800 (PST) Received: from list by lists.xenproject.org with outflank-mailman.258054.443975 (Exim 4.92) (envelope-from ) id 1n9Ody-0005iv-Ls; Mon, 17 Jan 2022 09:49:42 +0000 Received: by outflank-mailman (output) from mailman id 258054.443975; Mon, 17 Jan 2022 09:49:42 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1n9Ody-0005ii-Hw; Mon, 17 Jan 2022 09:49:42 +0000 Received: by outflank-mailman (input) for mailman id 258054; Mon, 17 Jan 2022 09:49:41 +0000 Received: from se1-gles-flk1-in.inumbo.com ([94.247.172.50] helo=se1-gles-flk1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1n9Odx-0003a5-2D for xen-devel@lists.xenproject.org; Mon, 17 Jan 2022 09:49:41 +0000 Received: from esa5.hc3370-68.iphmx.com (esa5.hc3370-68.iphmx.com [216.71.155.168]) by se1-gles-flk1.inumbo.com (Halon) with ESMTPS id c8eab3d8-777a-11ec-a115-11989b9578b4; Mon, 17 Jan 2022 10:49:39 +0100 (CET) X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" X-Inumbo-ID: c8eab3d8-777a-11ec-a115-11989b9578b4 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=citrix.com; s=securemail; t=1642412979; h=from:to:cc:subject:date:message-id:in-reply-to: references:content-transfer-encoding:mime-version; bh=QLpgwnHtHqhSieNVxCla2oAfDWQ+1Xdr+4mwhUPQ5WY=; b=ciGKO6ThWEChDHi3tJfYjGnHkuop75CJzPDW0OfclZ6kynEfdmlJ2a78 nKn9sLAitPrR7mmMZ0+YmE0pJH47+C4G6zzQ9fa9mDvgvn+i2yxQARU+T R3m+0CrA2fvANUp72j7ZR+4vU2KioKChNz8MHTogF7z7a71bv8r0ReLLO I=; Authentication-Results: esa5.hc3370-68.iphmx.com; dkim=pass (signature verified) header.i=@citrix.onmicrosoft.com IronPort-SDR: xiHqYWZFEvbjXhbma/2zhsPh8+lngKUIkt5ea/YRt9ro8cnu0eHDXpIguNrPZvkCDVSGb1Dk1J 3T80P1g46gTd9TK+hstUIcJ5EaxUeZl4XI+kht7Yjlos3Wc3DyZutykdpaLjnnw5ZHvMqDEVzO 8ruzfGjklFniDRsmQURnuQAPYGYLq1LpveO9zNFxIsWVXVJuh0qdkAtLY4JSABwu1+/ELIuYSF MqF30XupnXZJj6lTWxstYoBinCjM4+34zpqaJ64PEi82WHaqEp6X7I6iHykh2dA375l/vjCUNr 225Si05BkwW0G40VlCF/beE5 X-SBRS: 5.2 X-MesageID: 61616920 X-Ironport-Server: esa5.hc3370-68.iphmx.com X-Remote-IP: 162.221.156.83 X-Policy: $RELAYED IronPort-Data: A9a23:OIPvsqIPgE1MddaAFE+RNpIlxSXFcZb7ZxGr2PjKsXjdYENS0DAGx 2YYUTiEM/3YZ2X1e4x/PYy28xlU6sWEzdA1SFBlqX01Q3x08seUXt7xwmUcns+xwm8vaGo9s q3yv/GZdJhcokcxIn5BC5C5xZVG/fjgqoHUVaiUakideSc+EH170Us6xLZg6mJVqYPR7z2l6 IuaT/L3YDdJ6xYsWo7Dw/vewP/HlK2aVAIw5jTSV9gS1LPtvyB94KYkDbOwNxPFrrx8RYZWc QphIIaRpQs19z91Yj+sfy2SnkciGtY+NiDW4pZatjTLbrGvaUXe345iXMfwZ3u7hB2ZtdJL6 NJtl6CvbidxBPHKneEZckdXRnQW0a1uoNcrIFC6uM2XiUbHb2Ht07NlC0Re0Y8wo7gtRzsUr LpBdW5LPkvra+GemdpXTsF2gcsuNo/zNZ43sXB81zDJS/0hRPgvRo2UvIEBgmZq3qiiG97OJ M0oNxR2TSjabiZAEQtJJaw+sN6n0yyXnzpw9wvO+PtfD3Lo5A5+yr/2K/LOZ8eHA85Smy6wu Wbu72n/RBYAO7S32TeDt36hmOLLtSf6Q54JUq218OZwh1+ezXBVDwcZPWZXutHg1BT4AYgGb RVJpGx+9sDe6XBHUPHtdR+CgHmknCIDfPoIKbE87QSJ6/TbtlPx6nc/chZNb9kvtckTTDMs1 0OUk96BOQGDoIF5WlrGqO7K8Gra1Tw9aDZbOHRaFVdtD8zL+dlr1nryosBf/LlZZzEfMRX52 Hi0oSc3nN3/ZuZbhvzgrTgrb99Bz6UlrzLZBC2KBApJDSsjPeZJgrBED3CBt56sy67DHzG8U IAswZT20Qz3JcjleNaxaOsMBqq1wP2OLSfRh1Vid7F4qWj3oCPzJtAMvG8uTKuMDiriUWW0C KM0kVkAjKK/wVPwNfMnC25PI5lCIVfc+STNCamPM4smjmlZfw6b5iB+DXN8LEi2+HXAZZoXY M/BGe71VC5yIf0+kFKeGrlBuZd2mHFW7T6DFPjTkkX8uZLDNSH9dFvwGAbUBgzPxPna8Fy9H hc2H5bi9iizp8WlM3aHqtBCfAlaRZX5bLivw/Fqmie4ClMOMEkqCuPLwKNnfIpgnq9PkfzP8 G37UUhdoGcTT1WeQelTQnw8Or7pQ7hlqnc3YX4lMVqygiBxaoez9qYPMZAweOB/puBkyPd1S dgDetmBXasTGmiWpWxFYMmvtpFmeTSqmRmKY3ivbg8gcsMyXAfO4NLlIFfirXFcEiqtuMIii LS8zQeHE4EbTgFvAZ+OOvKixl+8p1YHn+d2UxeaK9VfYhy0ooNrNzbwnrk8JMRVcUfPwT6T1 gC3BxYEpLaS/99poYeR3a3d9tWnCepzGEZeDlL317fuOHmI5HenzK9BTP2MIWLXWlTr9fjwf u5S1fz9bqEKxQ4Yr4pmHr935qsi/N+z9aRCxwFpEXiXPVSmDrRsfiuP0cVV7/Afw7ZYvU29W 16V+8kcMrKMYZu3HFkULQsjT+KCyfBLxWWCsaVreB33tH1t4b6KcUROJB3d2iVSIYx8PJ4h3 ep86tUd7Bayi0ZyP9uL5syOG79g8pDUv30bi6wn IronPort-HdrOrdr: A9a23:xz/lNq441NZ2M/vZlQPXwVCBI+orL9Y04lQ7vn2ZFiY7TiXIra yTdaoguCMc6AxxZJkh8erwXJVoJkmsiaKdgLNhQItKOTOJhILGFvAF0WKP+UyDJ8S6zJ8n6U 4CSdkONDSTNykCsS+S2mDReLxBsbq6GeKT9J3jJh9WPH9XgspbnmBE42igYyhLrF4sP+tHKH PQ3LsNmxOQPVAsKuirDHgMWObO4/XNiZLdeBYDQzoq8hOHgz+E4KPzV0Hw5GZSbxp/hZMZtU TVmQ3w4auu99m91x/nzmfWq7BbgsHoxNdvDNGFzuIVNjLvoAC1Y5kJYczJgBkF5MWUrHo6mt jFpBkte+x19nPqZ2mw5SDg3gHxuQxenUPK+Bu9uz/OsMb5TDU1B45qnoRCaCbU7EImoZVVzL 9L93jxjesYMTrw2ADGo/TYXRBjkUS55VA4l/QIsnBZWYwCLJdMsI0k+l9PGptoJlO01GkeKp gvMCjg3ocUTbvDBEqp/FWHgebcEkjbJy32A3Tr4aeuon1rdHMQ9Tpu+CVQpAZFyHsHceg22w 3zCNUdqFh/dL5nUUtDPpZyfSLOMB20ffvtChPaHb21LtBOB5ryw6SHlYndotvaP6A18A== X-IronPort-AV: E=Sophos;i="5.88,295,1635220800"; d="scan'208";a="61616920" ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=d0sZ0V98kprUswP+XkqBqKgwV7PUsfY8cas4LENLnfqVrmnMreMQru4T1sAvlgGwHks1EFvsoSoXdaOareEkCuZKwFrCx64iehfdbhZ/gcAb9F4KSLF8CaJqgaXZrh+npEc+wdD/kSLHuWIaDytbodxDJbqRcyffoYRzjfe/Nz3abFy/Pr1J+4UTqsKUEJ3tkimV2lHpXH3hlTZdTB8n9Jo6mYSzlXSKO0FK2WODy8/ZqLYwKpNjO4xAJQjiI1IVBO8z0sxTkeEPYczWGPuAspZqIPNzY2JK3CwzVMe5tV7iQodXs8IIsZg7MPRq+I4wMzK/UlWak3jYEEHM4KJWuA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; 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=VXlOuhvnx6XapUkjewvNTicZOL1G6NXO7zwA2fIJdPM=; b=DO4qwJjjDAwt/cdIzuRvjrNvxGtrRBtWYiLJXTlRZzc+8j+oYeGjVJDeVcyZvlejew+F4xow8mjnNo4Pt30I+JailBrHl3GF32OYB5VO9Ge5/ZanHVRUAAjGG4rmX5P9g3oKPsSSWFo/FsQByf1eL1cVwUaZTygubL0JDFFSpn2PzjVMUDaAnuXOdeBQgNM9pbHiydh0LcKT72RaAiezgjQxnjdQxD2lKkTXxcyxCpFr5cHjE1ppTehHc/L/hDQqtGgMKMEukknjOos0c30ULAliOxXisZ099uaGjVISIEvBNvb7egUo+cyQBNVx8BSVSMoyFNTA560oEEl4ffC9Iw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com; dkim=pass header.d=citrix.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=citrix.onmicrosoft.com; s=selector2-citrix-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=VXlOuhvnx6XapUkjewvNTicZOL1G6NXO7zwA2fIJdPM=; b=ZDqWLfRatoSLpwDnIqhzXLb69csK2KgidI+vG03VvEH2umCtlVGVZeRDUHQ69HNUv88ypx+0SFnT+Do8Y1RFXk34yqfZqiXJY+u2oIMjvoiM2D5gd3v12WDKGudFcungPpQm29mkXIK+I/qft63128rBd/J3l7b5z3RZ+baB6xg= From: Roger Pau Monne To: CC: Roger Pau Monne , Wei Liu , "Anthony PERARD" , Juergen Gross Subject: [PATCH v6 07/12] libs/guest: introduce helper set cpu topology in cpu policy Date: Mon, 17 Jan 2022 10:48:22 +0100 Message-ID: <20220117094827.16756-8-roger.pau@citrix.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220117094827.16756-1-roger.pau@citrix.com> References: <20220117094827.16756-1-roger.pau@citrix.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: MR2P264CA0164.FRAP264.PROD.OUTLOOK.COM (2603:10a6:501:1::27) To DS7PR03MB5608.namprd03.prod.outlook.com (2603:10b6:5:2c9::18) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: a91cf014-e294-4d78-371e-08d9d99eaad3 X-MS-TrafficTypeDiagnostic: DM6PR03MB4059:EE_ X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:1169; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: vcBzUtWwU8oHGbf9mLaZZvpqUGpyfUuV9fAYg/FVp3rOlFHKeE+2AxLsf9QKR74aTx14wxYR+5yNXpW4DwO42T+SpgIgpz24qKMyHa+IcIfxSRlwAQwitet/raK/Tzb9dBx0guUa81dYy30HZOxziaIyWTUJ7g4RCfsaVCcvINmnwrwEQbzHeqINsncX4MvLJAHTqgMoDafIawm1JsgQadJdk/PNoLXVhJ1SSlEumtbaIrk+PghM9dMKV8q0JQsdyEPMH+1wum9ueOy8rkFp1GSrThfj85CjmzRHr0SOx1cwkFXVgxGVnQRv/OvDc3Y7993pKIUmHldl5Lv/wrNugrrv7s5B4o3xJFB8A+kv/t+3syAkpgH32uBQhkCbS+lXHQlHU3YH1vYtflQSl10cSGEV4zEigfy+lV6nBngIi2UoyE4Mu6nANyfSXDuNGuE4FyLDFNHM80gh0MNw/PPhsqQ+XRD7d8ZbHptFkMW66/MRAaGPg+Asu2YGHBgLDAx3a4xAK8tp4FN9SzApVir5zdPaJDCBN6WXGUoT3w8ZSEmn5ReyVNlcVnBxkfatsEz9qVKTa6mdQS9p4cAu8wLQw2X8stF5iyieyijC7fB+Ijg2ck9zaQJDMH854pfDGEgw+td7UFT/K9vmBfwYrnwL6g== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DS7PR03MB5608.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(366004)(4326008)(6512007)(8936002)(186003)(36756003)(6506007)(316002)(83380400001)(38100700002)(6486002)(26005)(6916009)(86362001)(6666004)(8676002)(54906003)(2616005)(82960400001)(2906002)(5660300002)(66946007)(66556008)(66476007)(1076003)(508600001);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?U0lKeDhiUURRdmlPSFdjZTJmR2p0aHFXeWlyT1orK1pZTkNob2pvdCtrNXRQ?= =?utf-8?B?bWRPbHdzbDhxZGtxNnIxRGsxdHo3MGdWdFV5M0l1cHZ6b0ExK1R6RHFMbDZr?= =?utf-8?B?dDFGTGNnaDdRa0lEUUZNWFlFZFVNdW91SlE1a0Q0MllNWmNBcnk1Y0NTS2hn?= =?utf-8?B?cHVIaHlXdGprcWZYcmhUTW9PWTZ3eWNIK1FTTTFjWDNPVjVEVnVtbS9tUXd0?= =?utf-8?B?azN1eWQ2ZXYwTnFwcVJGTngzckQwczNrWVhhaVRJOG5JT2pUVzZVMzFuNEc3?= =?utf-8?B?ZDRML3lnNGdSaTB2ZkFzeTh1a3hmZUNpRExtY2FERjF6MzhNS3N4SUtXMjdp?= =?utf-8?B?Y0d0UnhBeHk3UElsQmJPd0ZtZkRieTI5TU5EanozR1ZaQU9IMm4rSFFmczc3?= =?utf-8?B?RGdKQ3pjd2JLaWNKWHRLNTNDQU0yZ2RoNEF3d3J2YVJuc3ErelhLbzc0OUlL?= =?utf-8?B?Y09yb2wwUTFMV0h6RmpIY0NYK0l6bjNsK0ZYdWFaK1ArRXdxL2VmUUhjcDQv?= =?utf-8?B?ZlNacG9MdWtnYWhTSjFleWhWc256UVlXQm5NNWp5OHRCN0doNThqUm5kbHpr?= =?utf-8?B?QWlTRlB2SlZJdGZvc1BhMlprem8rWStEaWprNW5Da0l5bXQ5c05ycEIyalo4?= =?utf-8?B?bkVwL3hjSis5N2NuUnp3ajZkY0hKZEJvV2czNzluZ25DbWZjcHpBMnNGWnBC?= =?utf-8?B?NkQvYWdVb2hZWDV3c00vYWJlNTNwendxakVRU1hXSXl0Wmp0TFRPU0dRdlNo?= =?utf-8?B?YncxYjhIbHJHN1doeHVOLzBlSWNlY2ErVmlzVW9RSVdEQWVlaW5GdmVWbVBZ?= =?utf-8?B?azlYOCs1SzhYbWRWb3ZxZUxZT3UvWWlHZE1QSlFtTXErTHFmYVl3Q3UvUlFX?= =?utf-8?B?THpzcFpONHllcHZwdkE1eFlSQVFsYjlqOW52bXprMEFXUGF0NVZ6eDFqMTAz?= =?utf-8?B?cXdKWEo0SC91WkgxMUhZRUhFaVlBT2JDclZ3a1JKcmFLUHZ1K3J2ODlvN0Z6?= =?utf-8?B?cDcyNmJQZ3ordVUvMDJET05INDVZUWJJMk1GellqdUpJMTFZTkhXVXN6SW1O?= =?utf-8?B?MnhHWEdYQm8zbVVHeVBsTllCVzJJbCtSTmYzVUp1NWtXT1lCbHVqQ3VBMS9i?= =?utf-8?B?cFVVSGdsYXBCRkQvYnMwdVkzSHB6WGRtbWFidExjWHNVVDhzVFd6OW84Vk1L?= =?utf-8?B?TnlYcjdURjU5NXRrbThrcW1IVFE0Z0xqS1VMR3h1Rzg3aDFPVmtYWUg2a0dR?= =?utf-8?B?SUhMNEtocy8zOHlXU1JVNXZTZzVEbnExOHlLNUd3eFliMmhkeGErVjVQM21G?= =?utf-8?B?d0RkZ1p1ckFOZ01PaHJUd2FmcllQTWRqd0c5TGtLb005c0VFMnlUWkM1WEdR?= =?utf-8?B?cERiMHVFQTFRc0Rta3hvUnlCSzZaQlcwdDMzTllTaEtoQjdqQTVSYzU4Z1By?= =?utf-8?B?UWg4dkYxRkdkTk4zdzhSV1NiNE5kcHFrdUFjeE9wZVpFWDUxMG9qNGlXZHgv?= =?utf-8?B?alV0ZEZ2N1FrU1J1MUE2RjQ3V2IyY00veHA1dnQ2T1hkL0d4NG5jZjRCbXk2?= =?utf-8?B?ZVFxVmp4TTJVbVFhRE9ONlVBa29wR0U1RmtDbmgwNXFNR2UvaTU5LzZPN3Fw?= =?utf-8?B?MW1NcE92VnhOVWlhM2ZpMURZR0dpWmZpWEcycXh6NUEvanNwaE1OMWtkeHU0?= =?utf-8?B?ZTRYWEVFSGlTNDBwa1QrN1ZXTHpaU1B5bkFYcHJSQ2UrMzk4Ni95ZUNSV0dm?= =?utf-8?B?NElRdEVjRFY5U0taQkhudTFkb0lSZUtNcXdxUWltRWh2S1hYQ0I5TVZTSE16?= =?utf-8?B?MkNaMklJMlBvZEgrV2xXdGl3b2NXZksrVDVMSmNZWFc0U2JiZmJWVFNBb1BO?= =?utf-8?B?MW5DYnROTE1jVEVIWU14bVF0ckI1Slp6T25IcU1lVkRzemJKejBWWnVYOUdX?= =?utf-8?B?dm15SHc1L1o3UWh4Y0FUSU93WHh6VThuMUxSczVXTTZJS3pkNmJHd1VhNHAr?= =?utf-8?B?RXlEeVBHaTgwd3VWNVhYdGF4N0FDbkdDZ1lHODRhVU9neWFpVUUzZUlRQTNq?= =?utf-8?B?K3NFTGRhUVpMWCt3MFhYZUxpTS94VFMwK1ZwQVp6elVqdTV3QzJYMStFQ0Z2?= =?utf-8?B?QUdBbk52bDM1U1R4ZTNCZnVQVnp2N3FKcjFSZ0VhQUhaS1RERHFWUnlGa1Nv?= =?utf-8?Q?nhLRNXfew2Ju3HasG+YDV/o=3D?= X-MS-Exchange-CrossTenant-Network-Message-Id: a91cf014-e294-4d78-371e-08d9d99eaad3 X-MS-Exchange-CrossTenant-AuthSource: DS7PR03MB5608.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Jan 2022 09:49:34.4446 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 335836de-42ef-43a2-b145-348c2ee9ca5b X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: ZSSP3fXsamVAqMAdq0Wa7uBfHgSXbGfpgr1BEdw0nfN13hZYc6/CgQR8Bguf4vj2GN04bBuL4kQ1Dnh5JZDeUw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR03MB4059 X-OriginatorOrg: citrix.com X-ZohoMail-DKIM: pass (identity @citrix.com) X-ZM-MESSAGEID: 1642413023688100001 This logic is pulled out from xc_cpuid_apply_policy and placed into a separate helper. Note the legacy part of the introduced function, as long term Xen will require a proper topology setter function capable of expressing a more diverse set of topologies. No functional change intended. Signed-off-by: Roger Pau Monn=C3=A9 --- Changes since v5: - Keep using the host featureset. - Fix copied comment typo. Changes since v4: - s/xc_cpu_policy_topology/xc_cpu_policy_legacy_topology/ --- tools/include/xenguest.h | 4 + tools/libs/guest/xg_cpuid_x86.c | 182 +++++++++++++++++--------------- 2 files changed, 101 insertions(+), 85 deletions(-) diff --git a/tools/include/xenguest.h b/tools/include/xenguest.h index 281454dc60..bea02cb542 100644 --- a/tools/include/xenguest.h +++ b/tools/include/xenguest.h @@ -821,6 +821,10 @@ bool xc_cpu_policy_is_compatible(xc_interface *xch, xc= _cpu_policy_t *host, int xc_cpu_policy_make_compat_4_12(xc_interface *xch, xc_cpu_policy_t *pol= icy, bool hvm); =20 +/* Setup the legacy policy topology. */ +int xc_cpu_policy_legacy_topology(xc_interface *xch, xc_cpu_policy_t *poli= cy, + bool hvm); + int xc_get_cpu_levelling_caps(xc_interface *xch, uint32_t *caps); int xc_get_cpu_featureset(xc_interface *xch, uint32_t index, uint32_t *nr_features, uint32_t *featureset); diff --git a/tools/libs/guest/xg_cpuid_x86.c b/tools/libs/guest/xg_cpuid_x8= 6.c index f1115ad480..e7ae133d8d 100644 --- a/tools/libs/guest/xg_cpuid_x86.c +++ b/tools/libs/guest/xg_cpuid_x86.c @@ -429,13 +429,11 @@ int xc_cpuid_apply_policy(xc_interface *xch, uint32_t= domid, bool restore, { int rc; xc_dominfo_t di; - unsigned int i, nr_leaves, nr_msrs; + unsigned int nr_leaves, nr_msrs; xen_cpuid_leaf_t *leaves =3D NULL; struct cpuid_policy *p =3D NULL; struct xc_cpu_policy policy =3D { }; uint32_t err_leaf =3D -1, err_subleaf =3D -1, err_msr =3D -1; - uint32_t host_featureset[FEATURESET_NR_ENTRIES] =3D {}; - uint32_t len =3D ARRAY_SIZE(host_featureset); =20 if ( xc_domain_getinfo(xch, domid, 1, &di) !=3D 1 || di.domid !=3D domid ) @@ -458,22 +456,6 @@ int xc_cpuid_apply_policy(xc_interface *xch, uint32_t = domid, bool restore, (p =3D calloc(1, sizeof(*p))) =3D=3D NULL ) goto out; =20 - /* Get the host policy. */ - rc =3D xc_get_cpu_featureset(xch, XEN_SYSCTL_cpu_featureset_host, - &len, host_featureset); - if ( rc ) - { - /* Tolerate "buffer too small", as we've got the bits we need. */ - if ( errno =3D=3D ENOBUFS ) - rc =3D 0; - else - { - PERROR("Failed to obtain host featureset"); - rc =3D -errno; - goto out; - } - } - /* Get the domain's default policy. */ nr_msrs =3D 0; rc =3D get_system_cpu_policy(xch, di.hvm ? XEN_SYSCTL_cpu_policy_hvm_d= efault @@ -557,72 +539,11 @@ int xc_cpuid_apply_policy(xc_interface *xch, uint32_t= domid, bool restore, } } =20 - if ( !di.hvm ) - { - /* - * On hardware without CPUID Faulting, PV guests see real topology. - * As a consequence, they also need to see the host htt/cmp fields. - */ - p->basic.htt =3D test_bit(X86_FEATURE_HTT, host_featureset); - p->extd.cmp_legacy =3D test_bit(X86_FEATURE_CMP_LEGACY, host_featu= reset); - } - else - { - /* - * Topology for HVM guests is entirely controlled by Xen. For now= , we - * hardcode APIC_ID =3D vcpu_id * 2 to give the illusion of no SMT. - */ - p->basic.htt =3D true; - p->extd.cmp_legacy =3D false; - - /* - * Leaf 1 EBX[23:16] is Maximum Logical Processors Per Package. - * Update to reflect vLAPIC_ID =3D vCPU_ID * 2, but make sure to a= void - * overflow. - */ - if ( !p->basic.lppp ) - p->basic.lppp =3D 2; - else if ( !(p->basic.lppp & 0x80) ) - p->basic.lppp *=3D 2; - - switch ( p->x86_vendor ) - { - case X86_VENDOR_INTEL: - for ( i =3D 0; (p->cache.subleaf[i].type && - i < ARRAY_SIZE(p->cache.raw)); ++i ) - { - p->cache.subleaf[i].cores_per_package =3D - (p->cache.subleaf[i].cores_per_package << 1) | 1; - p->cache.subleaf[i].threads_per_cache =3D 0; - } - break; - - case X86_VENDOR_AMD: - case X86_VENDOR_HYGON: - /* - * Leaf 0x80000008 ECX[15:12] is ApicIdCoreSize. - * Leaf 0x80000008 ECX[7:0] is NumberOfCores (minus one). - * Update to reflect vLAPIC_ID =3D vCPU_ID * 2. But avoid - * - overflow, - * - going out of sync with leaf 1 EBX[23:16], - * - incrementing ApicIdCoreSize when it's zero (which changes= the - * meaning of bits 7:0). - * - * UPDATE: I addition to avoiding overflow, some - * proprietary operating systems have trouble with - * apic_id_size values greater than 7. Limit the value to - * 7 for now. - */ - if ( p->extd.nc < 0x7f ) - { - if ( p->extd.apic_id_size !=3D 0 && p->extd.apic_id_size <= 0x7 ) - p->extd.apic_id_size++; - - p->extd.nc =3D (p->extd.nc << 1) | 1; - } - break; - } - } + policy.cpuid =3D *p; + rc =3D xc_cpu_policy_legacy_topology(xch, &policy, di.hvm); + if ( rc ) + goto out; + *p =3D policy.cpuid; =20 rc =3D x86_cpuid_copy_to_buffer(p, leaves, &nr_leaves); if ( rc ) @@ -946,3 +867,94 @@ int xc_cpu_policy_make_compat_4_12(xc_interface *xch, = xc_cpu_policy_t *policy, xc_cpu_policy_destroy(host); return rc; } + +int xc_cpu_policy_legacy_topology(xc_interface *xch, xc_cpu_policy_t *poli= cy, + bool hvm) +{ + if ( !hvm ) + { + uint32_t host_featureset[FEATURESET_NR_ENTRIES] =3D {}; + uint32_t len =3D ARRAY_SIZE(host_featureset); + int rc; + + /* Get the host policy. */ + rc =3D xc_get_cpu_featureset(xch, XEN_SYSCTL_cpu_featureset_host, + &len, host_featureset); + if ( rc && errno !=3D ENOBUFS ) + { + /* Tolerate "buffer too small", as we've got the bits we need.= */ + ERROR("Failed to obtain host featureset"); + return rc; + } + + /* + * On hardware without CPUID Faulting, PV guests see real topology. + * As a consequence, they also need to see the host htt/cmp fields. + */ + policy->cpuid.basic.htt =3D test_bit(X86_FEATURE_HTT, host_feature= set); + policy->cpuid.extd.cmp_legacy =3D test_bit(X86_FEATURE_CMP_LEGACY, + host_featureset); + } + else + { + unsigned int i; + + /* + * Topology for HVM guests is entirely controlled by Xen. For now= , we + * hardcode APIC_ID =3D vcpu_id * 2 to give the illusion of no SMT. + */ + policy->cpuid.basic.htt =3D true; + policy->cpuid.extd.cmp_legacy =3D false; + + /* + * Leaf 1 EBX[23:16] is Maximum Logical Processors Per Package. + * Update to reflect vLAPIC_ID =3D vCPU_ID * 2, but make sure to a= void + * overflow. + */ + if ( !policy->cpuid.basic.lppp ) + policy->cpuid.basic.lppp =3D 2; + else if ( !(policy->cpuid.basic.lppp & 0x80) ) + policy->cpuid.basic.lppp *=3D 2; + + switch ( policy->cpuid.x86_vendor ) + { + case X86_VENDOR_INTEL: + for ( i =3D 0; (policy->cpuid.cache.subleaf[i].type && + i < ARRAY_SIZE(policy->cpuid.cache.raw)); ++i ) + { + policy->cpuid.cache.subleaf[i].cores_per_package =3D + (policy->cpuid.cache.subleaf[i].cores_per_package << 1) = | 1; + policy->cpuid.cache.subleaf[i].threads_per_cache =3D 0; + } + break; + + case X86_VENDOR_AMD: + case X86_VENDOR_HYGON: + /* + * Leaf 0x80000008 ECX[15:12] is ApicIdCoreSize. + * Leaf 0x80000008 ECX[7:0] is NumberOfCores (minus one). + * Update to reflect vLAPIC_ID =3D vCPU_ID * 2. But avoid + * - overflow, + * - going out of sync with leaf 1 EBX[23:16], + * - incrementing ApicIdCoreSize when it's zero (which changes= the + * meaning of bits 7:0). + * + * UPDATE: In addition to avoiding overflow, some + * proprietary operating systems have trouble with + * apic_id_size values greater than 7. Limit the value to + * 7 for now. + */ + if ( policy->cpuid.extd.nc < 0x7f ) + { + if ( policy->cpuid.extd.apic_id_size !=3D 0 && + policy->cpuid.extd.apic_id_size < 0x7 ) + policy->cpuid.extd.apic_id_size++; + + policy->cpuid.extd.nc =3D (policy->cpuid.extd.nc << 1) | 1; + } + break; + } + } + + return 0; +} --=20 2.34.1 From nobody Sat May 4 19:45:18 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=citrix.com); dmarc=pass(p=reject dis=none) header.from=citrix.com ARC-Seal: i=2; a=rsa-sha256; t=1642413444; cv=pass; d=zohomail.com; s=zohoarc; b=LkbsPb2rBejbiTXOdBN5ruO/UwRpu5IZZvtwrQo6cLrcB31ro98L41OB6+ysMvcUl7U6Q/A3fqPECSOemNL+jMuPDyfYCyfYnFLdM0/rLmeap4ywPTZb4s38eevCQNgglZOvrnowqofFUn4FO+0cluHet/dOrNfktvWOAuUp18s= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1642413444; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=CNUn5uJ+65mTyyLibJ5FdU7ew52MqXiRBT0tuNTGnXM=; b=MaJyuyOWbY31tPmDSim+nwtYfl9ZpTmAgWFMQo7ZD2PEMxWzo+Fo7FJYRODsr1CCGvMGZKusiZ+ph/0v6ejeol+6FEfxrCKkyl5iiK29xLv8Io1x67UayUG+Vqt78IZ/yiv8S/QH0ba7o8BJ51ud+jIKsfEna/V6atpwV5sRQqo= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=citrix.com); dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1642413444658631.364252656538; Mon, 17 Jan 2022 01:57:24 -0800 (PST) Received: from list by lists.xenproject.org with outflank-mailman.258063.443991 (Exim 4.92) (envelope-from ) id 1n9Ol1-000053-2V; Mon, 17 Jan 2022 09:56:59 +0000 Received: by outflank-mailman (output) from mailman id 258063.443991; Mon, 17 Jan 2022 09:56:59 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1n9Ol0-0008VM-Qv; Mon, 17 Jan 2022 09:56:58 +0000 Received: by outflank-mailman (input) for mailman id 258063; Mon, 17 Jan 2022 09:56:57 +0000 Received: from se1-gles-flk1-in.inumbo.com ([94.247.172.50] helo=se1-gles-flk1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1n9Oe3-0003a5-Id for xen-devel@lists.xenproject.org; Mon, 17 Jan 2022 09:49:47 +0000 Received: from esa5.hc3370-68.iphmx.com (esa5.hc3370-68.iphmx.com [216.71.155.168]) by se1-gles-flk1.inumbo.com (Halon) with ESMTPS id cd0b6592-777a-11ec-a115-11989b9578b4; Mon, 17 Jan 2022 10:49:45 +0100 (CET) X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" X-Inumbo-ID: cd0b6592-777a-11ec-a115-11989b9578b4 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=citrix.com; s=securemail; t=1642412985; h=from:to:cc:subject:date:message-id:in-reply-to: references:content-transfer-encoding:mime-version; bh=/O0U0KNImtCyb3JWdKQDPPV0OmQCunJL/NG5QQraSW4=; b=IlbFVL5zwezmMYEor9OEeHKMNlcGSmlFVsy3kUuA9b9By3Az310po0uc DnTCgMSPvVFZxu0a1ZyiJ5TdvFEZbikm7lPyQlRaknMp/raAiDL+qURJh UCfHs2DdxGbPKGocOAidY1cY2jcbE9mkiQvi2Lqy5xJyp+elb9vRYF/Lt Q=; Authentication-Results: esa5.hc3370-68.iphmx.com; dkim=pass (signature verified) header.i=@citrix.onmicrosoft.com IronPort-SDR: u1J2EPNJlQfj3cu5rxHMjyn/AX29nv9qxAeoGWL9V9BiXuUO2+0ZBWo33QoWGls8M9gpx444Zs H1nmnwv9Y5N6/O3UNaHfKz4jVKDqKmVhBkytmIKZQ3G+asIVURXnZb4PpxMS+q+ilKMzn662IH Vnf9DJwHWLILqlZUdLdnVX0PCpfzudQOG3B3vtL44CRE/b/yUuCbLfnCTJ2a0ieqWLnxPfQ+QW jgdO+H6APPOnQdC7NIeURFf+OWLsUroQcsPlOJiNvt0LuPcJEJk4v4Fo31X61UrlZn9YwX29Ru +umK8Deg3pB37UikveFEnfX5 X-SBRS: 5.2 X-MesageID: 61616927 X-Ironport-Server: esa5.hc3370-68.iphmx.com X-Remote-IP: 162.221.156.83 X-Policy: $RELAYED IronPort-Data: A9a23:hnXimqmcp44B8KjsBMLNPgjo5gxmIURdPkR7XQ2eYbSJt1+Wr1Gzt xIfUW2EM/bfYWCgfdl2Pt++/UgH7ZHXmIIwGlBvpX82QyMWpZLJC+rCIxarNUt+DCFioGGLT Sk6QoOdRCzhZiaE/n9BClVlxJVF/fngqoDUUYYoAQgsA180IMsdoUg7wbRh29c32YHR7z6l4 rseneWOYDdJ5BYsWo4kw/rrRMRH5amaVJsw5zTSVNgT1LPsvyB94KE3fMldG0DQUIhMdtNWc s6YpF2PEsE1yD92Yj+tuu6TnkTn2dc+NyDW4pZdc/DKbhSvOkXee0v0XRYRQR4/ttmHozx+4 PFkq7yKTiMMBPTRncsUTUB1ITBSLYQTrdcrIVDn2SCS50jPcn+qyPRyFkAme4Yf/46bA0kXq 6ZecmpUKEne2aTmm9pXScE17ignBNPsM44F/Glp0BnSDOo8QICFSKLPjTNd9Glp2JkQTKyBD yYfQQJTTiScUxdkAGZNA5RuwOCruGi4LgQN/Tp5ooJoujOOnWSdyoPFMtXPfceRbd5IhUver WXDl0zmBjkKOdrZziCKmlq8i+mKkS7lVYY6ELyj6uUskFCV3nYUChAdSR28u/bRt6Klc4sBc QpOoHNo9PVsshzwJjXgY/GmiFqtoD4mXP51KbQn7S6E1PP50Re1FkFRG1atd+canMMxQDUr0 HqAkNXoGSFjvdWpdJ6NyluHhWjsYHZIdAfucQdBFFJYuIe7/OnfmzqWFo47eJNZmOEZDt0ZL 9qiiCElz4segscQv0lQ1QCW2mn8znQlo+Nc2+k2Yo5Hxl4jDGJGT9bxgbQ+0RqmBNzDJrVml CJV8/VyFMhUUfmweNWlGY3h5o2B6fefKyH7ilVyBZQn/DnF0yf9IdoLvWEldBs1bJZsldrVj Kn74145CHh7ZirCUEOKS9jpV5RCIVbISLwJqcw4nvIRO8MsJWdrDQllZFKK3nCFraTfufpXB HtvSu71VSxyIf0+lFKeHr5BuZd2mHxW7T6NFPjTkkT2uZLDNSX9YepUbzOzghURsfnsTPP9q YgPbqNnCnx3DYXDX8Ug2dVCcgBRcylqXMCeRg4+XrfrHzeK0VoJUpf56bggZ5Zkj+JSkOLJ9 Wu6QUhW1Bz0gnivFOlAQiwLhGrHUcktoHQlEzYrOFr0iXEvbZz2tPUUdoctfKlh/+tmlKYmQ /4AcsSGI/JOVjWYpGhNMcij9NRvJEaxmAaDHyu5ezxjLZRucBPEp43/dQz1+ShQUifu7Zkio 6et3x/wSIYYQ1gwF97fbf+ilgvjvXUUlO9ocVHPJ91fJBfl/IRwcnSjhf4rOcAcbx7Ew2LCh QqRBB4Zo8jLopM0r4aV1fzV8d/xHrInTERAHmTd4bKnDgXg/zKukd1aTeKFXTHBT2eoqq+sU vpYkqPnO/odkVcU74clS+R3zbgz7sfErqNBylg2B23CalmmB+8yInSC2sUT5KRByqUA5FmzU 0OLvNJbJa+IKIXuF1tIfFgpaeGK1Pc1nDjO7KtqfBWmtXEvpLfXA19POxSsiTBGKOonOYwo9 u4tpcoK5lHtkREtKNuH0nhZ+mnkwqbsiEn7WkX22LPWtzc= IronPort-HdrOrdr: A9a23:OY3P0K8JASlhKpBgPCBuk+FAdb1zdoMgy1knxilNoENuHfBwxv rDoB1E73LJYVYqOU3Jmbi7Sc29qBTnhOJICOgqTMqftWzd1ldAQ7sSi7cKrweQeREWs9Qtrp uIEJIOeeEYb2IK9PoSiTPQe71LoKjlzEnrv5al854Ed3AVV0gK1XYfNu/0KDwSeOEQbqBJa6 Z0q/A37AaISDAyVICWF3MFV+/Mq5nik4/nWwcPA1oC5BOVhT2lxbbmG1zAty1uHg9n8PMHyy zoggb57qKsv7WSzQLd7Xba69BzlMH6wtVOKcSQgow+KynqiCyveIN9Mofy9gwdkaWK0hIHgd PMqxAvM4Ba7G7QRHi8pV/X1wzpwF8Vmgnf4G7dpUGmjd3yRTo8BcYEr5leaAHl500pu8w5+L 5X3kqC3qAnQy/orWDY3ZzlRhtqnk27rT4JiugIlUFSVoMYdft4sZEfxkVIC50NdRiKp7zPKN MeTP002cwmMm9zNxvizytSKZ2XLzgO9y69Mwk/Upf/6UkSoJh7p3Fos/D30E1wsK7VcKM0lN gsBJ4Y4I2mfvVmHZ6VO91xM/dfcla9OS4kEFjiaGgPR5t3c04klfbMkcAIDaeRCds18Kc= X-IronPort-AV: E=Sophos;i="5.88,295,1635220800"; d="scan'208";a="61616927" ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=lODJahyR+Gh0vjD0yVnQx+fnm5t7iOrjEqSJ6uxlkXtQgK+Jg7/KjFtVtAH6hTXAkDEpSa+P1+WbNRrpGmOTwSGyMWRX4nC+CLocYEoGSzUgRlqumrOsAQPJ4sjwmp0jlA9YoJznyZaRyXjM8Mz6ykq2UPSHX3G4gJgFWsTDifdo1Qc/gsS+b3SdywJbYXUIy1p6NrokfEgpPqnFiZ9nK/wL/LMYgoKKy/KJAajs2arZn4H7ZhGFEBOkf9oeCpaE4nnsGbOQJkB4biPu4agiBiRj24OPw6aUarfB3QJ3mx46hwnSzNGsbni0hj1jQuAgyOEEp/LQu1+G5mQBnisrkw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; 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=CNUn5uJ+65mTyyLibJ5FdU7ew52MqXiRBT0tuNTGnXM=; b=ZXaYsRUKTtpkgTq9pUEaIanWJod6r5Wmi2VvO3Bsfp8YHvYD9C4kbLAUIgACxMkm6sGptvEZLMdJYJl7g1raA4IYJe1S0EtU/sTBRYj8zBlc/JqR80pjrTths+2v2XS1VSS/8xk6lVuAYjLh4K6XtiSgyrEjXc1iIc+dtpZe+RRlBFy2oWXYvhaWy9KmFxZfGKa76sdMy1I4cyqQMQ2Q3SEoQVtvNGy8al8xTfJ/E8vAJvrjtIgOzl88qWCRyaU/fTVexFOW5BtNW42OP6nam8PY7/QOiQYvCrIQlJmgTli0kuwtucp7Vath+Bpj/V6/MmaxhXOovOTE6ssBE25/5A== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com; dkim=pass header.d=citrix.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=citrix.onmicrosoft.com; s=selector2-citrix-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=CNUn5uJ+65mTyyLibJ5FdU7ew52MqXiRBT0tuNTGnXM=; b=Wq1Mv8AkiHNeo+05+C1grTceFGXGL19JfQxfy4/PEjafdtumMQlXczDtK4lJ7DAh152HUj0SnwExaaOtUzobDQOkLPA46p1baecWNDhBDZa9PIVjhoqymveyZcyDu875PzvpVRKerbLHUYGxj8ltbc8eRpzxgmOS+RxZS2QPT/A= From: Roger Pau Monne To: CC: Roger Pau Monne , Wei Liu , "Anthony PERARD" , Juergen Gross Subject: [PATCH v6 08/12] libs/guest: rework xc_cpuid_xend_policy Date: Mon, 17 Jan 2022 10:48:23 +0100 Message-ID: <20220117094827.16756-9-roger.pau@citrix.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220117094827.16756-1-roger.pau@citrix.com> References: <20220117094827.16756-1-roger.pau@citrix.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: MR2P264CA0145.FRAP264.PROD.OUTLOOK.COM (2603:10a6:501:1::8) To DS7PR03MB5608.namprd03.prod.outlook.com (2603:10b6:5:2c9::18) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: f2007200-2d9c-451a-86bb-08d9d99eaeaf X-MS-TrafficTypeDiagnostic: DM6PR03MB4059:EE_ X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:65; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: q2QVtYbJTn+7nbwqbLQ26H8V4mtQNSZ5V9uB5Rxx1Z1ULlRIehMmuFGseTimFGisRK5mnGSdRVsu4Lp8+DV2Z0V5MxADkzFXKvZ0wxYce6qh8yMDSMwKdZGLgRHFYw/NNIY8SBhgePONyOXUzbPlW1wXZAnS7ZJWAIl4Huhix8cttK3GReD9qdaCgXuYo70Nz27Bp5flSOX2Eh1kNBn0dwrNfgSe3H2hIZ/bEZxErgp5Zwu2+4UfQyzD1Lz7QC4ryxLU0It2ZBJwzxvN0AiNNvp9VdDQoAsJyfY0JhcTvW9D0tgyTBa9Wig5Ieo6/fuj44fvhEfaWyZ4o3llD7GoLQj4VOARWeCOtUv8uuyD4TkIwj77wpnXGQks4mUfhXC90qacVfPxGxLBoklkfMY1vNilJx6+WiPLyDZlwQuDedoRcyVHzK4TQWXggpjyp/6RLZTY9lNHmmugtcgCjVbExP3kUzywiSzhq8hHeOLYgo55s8oorNr0qJpeZrZY8D6kJz7YfbehycrAmIeYFImWCCwrt6mqGkhIIxzbD684K5zyA0S25WqNLvVsVxWswFxDSB9L1AEiYkr/3D261ce2MIBfGH2tcxMGQjf6DdKKZipYUW9eWibVoNlxo3SHkEYD+o68MtFKa65PGBHahIY82A== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DS7PR03MB5608.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(366004)(4326008)(6512007)(8936002)(186003)(36756003)(6506007)(316002)(83380400001)(38100700002)(6486002)(26005)(6916009)(86362001)(6666004)(8676002)(54906003)(2616005)(82960400001)(2906002)(5660300002)(66946007)(66556008)(66476007)(1076003)(508600001);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?cEdsWWF3NUxlRUhRY2tsNGFzVE5aT1pIQ3BtVUdPNFZod1ZTYS9wb25uLzZI?= =?utf-8?B?Q0hRdzVKelYwNFVJREtCNnNoeDhjUnliNFdnTU1EWmFrQWF0Ukl6cHdtbjgr?= =?utf-8?B?VWI5SEJJUzhiZkhyTmtkNXVEREE3b2Noek1MN1p5NVorZ3NqWStETm9CTmly?= =?utf-8?B?V3ZsMVhqNW5WamI3b3FpdGpnZDNrbFB1ZVBwNDdUcUVLLzRWajdDdnBDK0pT?= =?utf-8?B?N2cySXQ0VHU2eXE2OFI2b0V0S3VSNjhXMFFGWjJ3L3dadzFyZHR6ZWJtZG9Y?= =?utf-8?B?RFZ5eXhOdlVPdGt3WThlUm5mV09Vazh6RGxOajhWaG04TnZ0ZU5KYmd0V2Zr?= =?utf-8?B?ZjlQU1NFdXZ5QmQ3VmNmTVE0OUp4L1YrYVUvdnFyM2ROOGhPVDVKS2tkak5k?= =?utf-8?B?TGx3K3JnMmJ1bnYvci9nR3pTMk5xUkFqQmlDMVl1YTlRK0k1Q2d5R3VFN1A2?= =?utf-8?B?VHdxZDh4dDJzdkJRaGo3VHJSQ2NQaTEyS3o5Zk11bkFtYnB3KzBwbGMyNGVR?= =?utf-8?B?ZmZqMzBEemg4YmtrcW1oQTQ0ciswTzR2NW13ZWtqSDdvWTRRa05xYVI4a3Zr?= =?utf-8?B?RUM5ZWJWRGs3SlJrKzFhWFEzZ3pJc29idDQ3c0F1Q3pXaG9KRzlZY0dDZ3Nm?= =?utf-8?B?UThhOTMzY3AveVZzTGtHR3VXZUplMndFeDlZMDFmdkIvQ1lGYms1QWF5eVNF?= =?utf-8?B?eDI2cEcxaGljNlRZWU9jSXYvcWJGWktGRURRR3IweGEwMGJkTlJyUDYwK2FL?= =?utf-8?B?VCt2dHk3RmZ4UW83Q0FWbk9rREpjekpnNFVINHI2eFpmaldpTzlET3BPUEc3?= =?utf-8?B?eDlmUUVhbzZpMEttMTdZVW1wRk1SRkladURpM3hNUVFxaElwSy9QVDVNbHZq?= =?utf-8?B?RjFvaVpaZlZUZGtrK244WkxFR3pwQnMxeFJMWWVlelgrMGkvbXBXK2JOblVn?= =?utf-8?B?WFd3UmpKaW45SEFSdFdBRDFrSm9meElka1R6bjNlSmNMM0pPZWVLbytDWTI0?= =?utf-8?B?SUN1VU8xYXhjeVozV285NXc3anJKMkx1MzVjMnVUSDBQQXNoNHdOTnhHZUU4?= =?utf-8?B?T2V4d0VYSzZJSXhNanl2MkRBZEduSUhYT2JQL3RTVWtVNHQ2alZMUUJET2hG?= =?utf-8?B?aC9IbWo0cTlGRmFCa2RvRTBNTnBiUXMzQUpRQ3lhMEk1eERNYzFsUDVseVFM?= =?utf-8?B?cjhNM3dOTFV4SlRVOHkrczlpaE5DcU1QaXBPQUd4dG54Wkx4b2xIVm1XaXcv?= =?utf-8?B?U3lCR0FhaWNzV2lhQ1dtTEQzU3A3VmhqTHRWcUJpdjdKOWoyaUZPWTlNdFcz?= =?utf-8?B?cTg3Ukt1K1JuM0FCNldmTnlyRFM1YXR2MGoyOTY3RlN0S0V0TjViQWNqRVRH?= =?utf-8?B?N0lFbW5IZGJ6b0w4ZFY2amlQUTBhVmdDeDNJTXhWeTlXSWFSNnFCeFJBWXpV?= =?utf-8?B?Wm51V1ppdHh4WVM4MXdGMFY4RUVFSHpaMitlSm5vZUp5VXlsMENBQmtTUmVt?= =?utf-8?B?dlhwRWRXWVhGL0c3OG5UWExQWWwxOHAzQnJOZmZHTWd1MW5yWUJkRStZenhJ?= =?utf-8?B?UlZlSFdtNWpLeEltY3BCUEVhamt5eTRubmdqMENmUThwamxpWjVvSGZ3bnBI?= =?utf-8?B?ZEdONjNPWU9yN1EwMktabHFnOXUyalNlTWJUS2xOZGlOSlArTkdZME1qUzla?= =?utf-8?B?Sms5NHNUVVZZL21RL0RHVC96UnlReTRmMk9iNmhNc2h0SFRoT2NycVVEVVRR?= =?utf-8?B?RlErZ2lKQWVuYU5SWkhEZ3I4YmcxU3RwWWFZVUczY0hhSkVpRUx5blhseUc5?= =?utf-8?B?K0JmRVNSVjYvM3RhVGt0QlpqNjVEeEh1NHQ0ZXZLeWMwUm0zRThFR3BiZGZ6?= =?utf-8?B?cFo1Rzk0VEU0NUI3MjVBVTIzT0dwYmRVNWVHWEdibTVZTVFGSGYrTzdBRDM4?= =?utf-8?B?R2hJakdHYkd4QXVIK1F5a1dyMElrMnpGTmJaNHlIem1zUmt6N0EzVGkrcGdJ?= =?utf-8?B?TWx0bEgwU1gvSkh6R293c2dEZ09keC9uYTl2dnVQL2VOZXpRMEZScWtneUhC?= =?utf-8?B?SDZ2cFNRUy96SHJyMmlaUllrRnFGVEhLWkRsRXNuWEUvS1dvRVRlK3Z6MmlE?= =?utf-8?B?UE44WWhveDJsTEZHS0NwL2J3N0VsbUlsdjVhdzE3TG1Yb01xK1dUVDBMNjdk?= =?utf-8?Q?0ghM7CFv64AuBAbRLjS6/n8=3D?= X-MS-Exchange-CrossTenant-Network-Message-Id: f2007200-2d9c-451a-86bb-08d9d99eaeaf X-MS-Exchange-CrossTenant-AuthSource: DS7PR03MB5608.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Jan 2022 09:49:40.9372 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 335836de-42ef-43a2-b145-348c2ee9ca5b X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: +e9K2tszI6YKcoB0XUwtCprNHzNNnsYKpWIfrXlg4jqqH52eEFNXWgWTVgivsurBq7R3U510fU7cjjvTZ9IKXg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR03MB4059 X-OriginatorOrg: citrix.com X-ZohoMail-DKIM: pass (identity @citrix.com) X-ZM-MESSAGEID: 1642413445282100005 Rename xc_cpuid_xend_policy to xc_cpu_policy_apply_cpuid and make it public. Modify the function internally to use the new xc_cpu_policy_* set of functions. Also don't apply the passed policy to a domain directly, and instead modify the provided xc_cpu_policy_t. The caller will be responsible of applying the modified cpu policy to the domain. Note that further patches will end up removing this function, as the callers should have the necessary helpers to modify an xc_cpu_policy_t themselves. The find_leaf helper and related comparison function is also removed, as it's no longer needed to search for cpuid leafs as finding the matching leaves is now done using xc_cpu_policy_get_cpuid. No functional change intended. Signed-off-by: Roger Pau Monn=C3=A9 --- Changes since v3: - Drop find_leaf and comparison helper. --- tools/include/xenguest.h | 4 + tools/libs/guest/xg_cpuid_x86.c | 200 +++++++++++++------------------- 2 files changed, 83 insertions(+), 121 deletions(-) diff --git a/tools/include/xenguest.h b/tools/include/xenguest.h index bea02cb542..9912116a51 100644 --- a/tools/include/xenguest.h +++ b/tools/include/xenguest.h @@ -825,6 +825,10 @@ int xc_cpu_policy_make_compat_4_12(xc_interface *xch, = xc_cpu_policy_t *policy, int xc_cpu_policy_legacy_topology(xc_interface *xch, xc_cpu_policy_t *poli= cy, bool hvm); =20 +/* Apply an xc_xend_cpuid object to the policy. */ +int xc_cpu_policy_apply_cpuid(xc_interface *xch, xc_cpu_policy_t *policy, + const struct xc_xend_cpuid *cpuid, bool hvm); + int xc_get_cpu_levelling_caps(xc_interface *xch, uint32_t *caps); int xc_get_cpu_featureset(xc_interface *xch, uint32_t index, uint32_t *nr_features, uint32_t *featureset); diff --git a/tools/libs/guest/xg_cpuid_x86.c b/tools/libs/guest/xg_cpuid_x8= 6.c index e7ae133d8d..9060a2f763 100644 --- a/tools/libs/guest/xg_cpuid_x86.c +++ b/tools/libs/guest/xg_cpuid_x86.c @@ -254,144 +254,107 @@ int xc_set_domain_cpu_policy(xc_interface *xch, uin= t32_t domid, return ret; } =20 -static int compare_leaves(const void *l, const void *r) -{ - const xen_cpuid_leaf_t *lhs =3D l; - const xen_cpuid_leaf_t *rhs =3D r; - - if ( lhs->leaf !=3D rhs->leaf ) - return lhs->leaf < rhs->leaf ? -1 : 1; - - if ( lhs->subleaf !=3D rhs->subleaf ) - return lhs->subleaf < rhs->subleaf ? -1 : 1; - - return 0; -} - -static xen_cpuid_leaf_t *find_leaf( - xen_cpuid_leaf_t *leaves, unsigned int nr_leaves, - const struct xc_xend_cpuid *xend) -{ - const xen_cpuid_leaf_t key =3D { xend->leaf, xend->subleaf }; - - return bsearch(&key, leaves, nr_leaves, sizeof(*leaves), compare_leave= s); -} - -static int xc_cpuid_xend_policy( - xc_interface *xch, uint32_t domid, const struct xc_xend_cpuid *xend) +int xc_cpu_policy_apply_cpuid(xc_interface *xch, xc_cpu_policy_t *policy, + const struct xc_xend_cpuid *cpuid, bool hvm) { int rc; - xc_dominfo_t di; - unsigned int nr_leaves, nr_msrs; - uint32_t err_leaf =3D -1, err_subleaf =3D -1, err_msr =3D -1; - /* - * Three full policies. The host, default for the domain type, - * and domain current. - */ - xen_cpuid_leaf_t *host =3D NULL, *def =3D NULL, *cur =3D NULL; - unsigned int nr_host, nr_def, nr_cur; + xc_cpu_policy_t *host =3D NULL, *def =3D NULL; =20 - if ( xc_domain_getinfo(xch, domid, 1, &di) !=3D 1 || - di.domid !=3D domid ) - { - ERROR("Failed to obtain d%d info", domid); - rc =3D -ESRCH; - goto fail; - } - - rc =3D xc_cpu_policy_get_size(xch, &nr_leaves, &nr_msrs); - if ( rc ) - { - PERROR("Failed to obtain policy info size"); - rc =3D -errno; - goto fail; - } - - rc =3D -ENOMEM; - if ( (host =3D calloc(nr_leaves, sizeof(*host))) =3D=3D NULL || - (def =3D calloc(nr_leaves, sizeof(*def))) =3D=3D NULL || - (cur =3D calloc(nr_leaves, sizeof(*cur))) =3D=3D NULL ) - { - ERROR("Unable to allocate memory for %u CPUID leaves", nr_leaves); - goto fail; - } - - /* Get the domain's current policy. */ - nr_msrs =3D 0; - nr_cur =3D nr_leaves; - rc =3D get_domain_cpu_policy(xch, domid, &nr_cur, cur, &nr_msrs, NULL); - if ( rc ) + host =3D xc_cpu_policy_init(); + def =3D xc_cpu_policy_init(); + if ( !host || !def ) { - PERROR("Failed to obtain d%d current policy", domid); - rc =3D -errno; - goto fail; + PERROR("Failed to init policies"); + rc =3D -ENOMEM; + goto out; } =20 /* Get the domain type's default policy. */ - nr_msrs =3D 0; - nr_def =3D nr_leaves; - rc =3D get_system_cpu_policy(xch, di.hvm ? XEN_SYSCTL_cpu_policy_hvm_d= efault + rc =3D xc_cpu_policy_get_system(xch, hvm ? XEN_SYSCTL_cpu_policy_hvm_d= efault : XEN_SYSCTL_cpu_policy_pv_defa= ult, - &nr_def, def, &nr_msrs, NULL); + def); if ( rc ) { - PERROR("Failed to obtain %s def policy", di.hvm ? "hvm" : "pv"); - rc =3D -errno; - goto fail; + PERROR("Failed to obtain %s def policy", hvm ? "hvm" : "pv"); + goto out; } =20 /* Get the host policy. */ - nr_msrs =3D 0; - nr_host =3D nr_leaves; - rc =3D get_system_cpu_policy(xch, XEN_SYSCTL_cpu_policy_host, - &nr_host, host, &nr_msrs, NULL); + rc =3D xc_cpu_policy_get_system(xch, XEN_SYSCTL_cpu_policy_host, host); if ( rc ) { PERROR("Failed to obtain host policy"); - rc =3D -errno; - goto fail; + goto out; } =20 rc =3D -EINVAL; - for ( ; xend->leaf !=3D XEN_CPUID_INPUT_UNUSED; ++xend ) + for ( ; cpuid->leaf !=3D XEN_CPUID_INPUT_UNUSED; ++cpuid ) { - xen_cpuid_leaf_t *cur_leaf =3D find_leaf(cur, nr_cur, xend); - const xen_cpuid_leaf_t *def_leaf =3D find_leaf(def, nr_def, xend); - const xen_cpuid_leaf_t *host_leaf =3D find_leaf(host, nr_host, xen= d); + xen_cpuid_leaf_t cur_leaf; + xen_cpuid_leaf_t def_leaf; + xen_cpuid_leaf_t host_leaf; =20 - if ( cur_leaf =3D=3D NULL || def_leaf =3D=3D NULL || host_leaf =3D= =3D NULL ) + rc =3D xc_cpu_policy_get_cpuid(xch, policy, cpuid->leaf, cpuid->su= bleaf, + &cur_leaf); + if ( rc ) + { + ERROR("Failed to get current policy leaf %#x subleaf %#x", + cpuid->leaf, cpuid->subleaf); + goto out; + } + rc =3D xc_cpu_policy_get_cpuid(xch, def, cpuid->leaf, cpuid->suble= af, + &def_leaf); + if ( rc ) + { + ERROR("Failed to get def policy leaf %#x subleaf %#x", + cpuid->leaf, cpuid->subleaf); + goto out; + } + rc =3D xc_cpu_policy_get_cpuid(xch, host, cpuid->leaf, cpuid->subl= eaf, + &host_leaf); + if ( rc ) { - ERROR("Missing leaf %#x, subleaf %#x", xend->leaf, xend->suble= af); - goto fail; + ERROR("Failed to get host policy leaf %#x subleaf %#x", + cpuid->leaf, cpuid->subleaf); + goto out; } =20 - for ( unsigned int i =3D 0; i < ARRAY_SIZE(xend->policy); i++ ) + for ( unsigned int i =3D 0; i < ARRAY_SIZE(cpuid->policy); i++ ) { - uint32_t *cur_reg =3D &cur_leaf->a + i; - const uint32_t *def_reg =3D &def_leaf->a + i; - const uint32_t *host_reg =3D &host_leaf->a + i; + uint32_t *cur_reg =3D &cur_leaf.a + i; + const uint32_t *def_reg =3D &def_leaf.a + i; + const uint32_t *host_reg =3D &host_leaf.a + i; =20 - if ( xend->policy[i] =3D=3D NULL ) + if ( cpuid->policy[i] =3D=3D NULL ) continue; =20 for ( unsigned int j =3D 0; j < 32; j++ ) { bool val; =20 - if ( xend->policy[i][j] =3D=3D '1' ) + switch ( cpuid->policy[i][j] ) + { + case '1': val =3D true; - else if ( xend->policy[i][j] =3D=3D '0' ) + break; + + case '0': val =3D false; - else if ( xend->policy[i][j] =3D=3D 'x' ) + break; + + case 'x': val =3D test_bit(31 - j, def_reg); - else if ( xend->policy[i][j] =3D=3D 'k' || - xend->policy[i][j] =3D=3D 's' ) + break; + + case 'k': + case 's': val =3D test_bit(31 - j, host_reg); - else - { + break; + + default: ERROR("Bad character '%c' in policy[%d] string '%s'", - xend->policy[i][j], i, xend->policy[i]); - goto fail; + cpuid->policy[i][j], i, cpuid->policy[i]); + goto out; } =20 clear_bit(31 - j, cur_reg); @@ -399,25 +362,19 @@ static int xc_cpuid_xend_policy( set_bit(31 - j, cur_reg); } } - } =20 - /* Feed the transformed currrent policy back up to Xen. */ - rc =3D xc_set_domain_cpu_policy(xch, domid, nr_cur, cur, 0, NULL, - &err_leaf, &err_subleaf, &err_msr); - if ( rc ) - { - PERROR("Failed to set d%d's policy (err leaf %#x, subleaf %#x, msr= %#x)", - domid, err_leaf, err_subleaf, err_msr); - rc =3D -errno; - goto fail; + rc =3D xc_cpu_policy_update_cpuid(xch, policy, &cur_leaf, 1); + if ( rc ) + { + PERROR("Failed to set policy leaf %#x subleaf %#x", + cpuid->leaf, cpuid->subleaf); + goto out; + } } =20 - /* Success! */ - - fail: - free(cur); - free(def); - free(host); + out: + xc_cpu_policy_destroy(def); + xc_cpu_policy_destroy(host); =20 return rc; } @@ -425,7 +382,7 @@ static int xc_cpuid_xend_policy( int xc_cpuid_apply_policy(xc_interface *xch, uint32_t domid, bool restore, const uint32_t *featureset, unsigned int nr_feat= ures, bool pae, bool itsc, bool nested_virt, - const struct xc_xend_cpuid *xend) + const struct xc_xend_cpuid *cpuid) { int rc; xc_dominfo_t di; @@ -545,6 +502,10 @@ int xc_cpuid_apply_policy(xc_interface *xch, uint32_t = domid, bool restore, goto out; *p =3D policy.cpuid; =20 + rc =3D xc_cpu_policy_apply_cpuid(xch, &policy, cpuid, di.hvm); + if ( rc ) + goto out; + rc =3D x86_cpuid_copy_to_buffer(p, leaves, &nr_leaves); if ( rc ) { @@ -562,9 +523,6 @@ int xc_cpuid_apply_policy(xc_interface *xch, uint32_t d= omid, bool restore, goto out; } =20 - if ( xend && (rc =3D xc_cpuid_xend_policy(xch, domid, xend)) ) - goto out; - rc =3D 0; =20 out: --=20 2.34.1 From nobody Sat May 4 19:45:18 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=citrix.com); dmarc=pass(p=reject dis=none) header.from=citrix.com ARC-Seal: i=2; a=rsa-sha256; t=1642413443; cv=pass; d=zohomail.com; s=zohoarc; b=f+wZrU6zRsUVGe8DDJ1LuSJ1htDNJbe1g3M4mwl8a84s2xhQs6sKwO/cMl94U4px0eGQLEChDpyjpw22BTw60mRHh8HpZvEKW8z4hA8WOfQNtCv0TdKwVarEigG9Ml5pnj6pA5MgJ05yqfQGV6dnO+FeKA4sDjWuzPSJOZ1/Ca0= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1642413443; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=BvVyJPcTpNqTGKTTNLfJR3VNJZ2GihJ2r9YUvS7z6lk=; b=A15RcXFbFuUieS1/prCO4MBSZOdZZdeKp7j8bdKJpq1/PK+y0DYLARYHrYqfdUBRyibfFEHuHkdb0kyde+Q0siIZ9YU2wzYW8sf5etLuYHsL7HjjZW2mAM1nFZiMcFOVpCOqGNxv48FMGYZyVcdHfMsM9diqi16U3btlalOzhjM= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=citrix.com); dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1642413443712962.8451468297665; Mon, 17 Jan 2022 01:57:23 -0800 (PST) Received: from list by lists.xenproject.org with outflank-mailman.258067.444005 (Exim 4.92) (envelope-from ) id 1n9Ol1-0000F2-TO; Mon, 17 Jan 2022 09:56:59 +0000 Received: by outflank-mailman (output) from mailman id 258067.444005; Mon, 17 Jan 2022 09:56:59 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1n9Ol1-0000DK-GT; Mon, 17 Jan 2022 09:56:59 +0000 Received: by outflank-mailman (input) for mailman id 258067; Mon, 17 Jan 2022 09:56:58 +0000 Received: from se1-gles-sth1-in.inumbo.com ([159.253.27.254] helo=se1-gles-sth1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1n9Oe7-0002gi-Eg for xen-devel@lists.xenproject.org; Mon, 17 Jan 2022 09:49:51 +0000 Received: from esa6.hc3370-68.iphmx.com (esa6.hc3370-68.iphmx.com [216.71.155.175]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id cf1df7a9-777a-11ec-9bbc-9dff3e4ee8c5; Mon, 17 Jan 2022 10:49:50 +0100 (CET) X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" X-Inumbo-ID: cf1df7a9-777a-11ec-9bbc-9dff3e4ee8c5 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=citrix.com; s=securemail; t=1642412990; h=from:to:cc:subject:date:message-id:in-reply-to: references:content-transfer-encoding:mime-version; bh=GlovccLDToYwCvRVLd9sQIK0IeyVPStg1EO7D40y/DI=; b=PYywJCgfU+mao9KXaBxse5Eznf6M20/9B0NCXZQDUZX+E4U76FsoR1bS cuNa3V3DXlVRhFLgv6AoUQ7xtmkOWaiPFF8Gdt6Qq2TgNsSImh5d5Yz0q fjolDAfgEGL8On/v+nIprordspOwgUSKK3zuJAoBoY2Z0GDm6fDzTKdnQ I=; Authentication-Results: esa6.hc3370-68.iphmx.com; dkim=pass (signature verified) header.i=@citrix.onmicrosoft.com IronPort-SDR: qe64F4JRAwsG+7eT08XLyZDMYBBkZ3TBFwCMQwOoWQxnF+L1x+VtvTYnoOu0mqTGn5m6P7DgbA Wds4jgYFA32PZZ9PEatOAwgJkZ4nksnU2SpmWeZuLmmabUDYpyG0oIV2j2yT/V8ZTagMsFKi9U 0DuHGej5QmedBi6x7puT/MUXfP4TQP/lPeWi7APtECwlHXfmpuGzk+z/uho+0tDuoYdxenSWCM kASlH1c2Ej7x6X02thYV2LWgPLXB/4p0lxBtwZvm8BUiiNvzvMQLofNlwYqCZxmYazGiqwjzAw ugEsxs2Csz9FP8H+13KVRoIi X-SBRS: 5.2 X-MesageID: 62053317 X-Ironport-Server: esa6.hc3370-68.iphmx.com X-Remote-IP: 162.221.156.83 X-Policy: $RELAYED IronPort-Data: A9a23:VvuFjK/tU2+o9UhPk1t6DrUDcHmTJUtcMsCJ2f8bNWPcYEJGY0x3z 2UfDTrTPPqCY2akeN8lb4vj8RwP6sSHyYRmGgs4/ns8E34SpcT7XtnIdU2Y0wF+jyHgoOCLy +1EN7Es+ehtFie0Si9AttENlFEkvU2ybuOU5NXsZ2YhFWeIdA970Ug5w7dg3dYx6TSEK1jlV e3a8pW31GCNg1aYAkpMg05UgEoy1BhakGpwUm0WPZinjneH/5UmJMt3yZWKB2n5WuFp8tuSH I4v+l0bElTxpH/BAvv9+lryn9ZjrrT6ZWBigVIOM0Sub4QrSoXfHc/XOdJFAXq7hQllkPhJ8 foX9rrsdT0UZPKPmvoAWjtqHCxxaPguFL/veRBTsOSWxkzCNXDt3+9vHAc9OohwFuRfWD8Us 6ZCcXZUM07F17neLLGTE4GAguw5K8bmJsUHs2xIxjDFF/c2B5vERs0m4PcGhm9t3ZsXQp4yY eIHVDo2TQmZYicIK3oeBqM6gL72pV3gJmgwRFW9+vNsvjm7IBZK+LriKt3OYfSRWN5Y2E2fo wru/W70HxUbP9y30iee/zSngeqntTP2XsceGaO18tZugUaP3SoDBRsOT1y5rPKlzEmkVLp3N Eg86ico668o+ySWosLVBkPi5iTe51hFBoQWQ7ZSBByxJrT82z+2XCsiEgJ7VYZ5980oWDUI5 FCEkIa8bdBwi4G9RXWY/7aSiDq9PykJMGMPDRM5oRs5D8rL+99q0E+WJjp3OOvs14CuR2msq 9yfhHFm3+17sCId60msEbkraRqIr4OBcAM67x6/somNvlIgP97Ni2BFBDHmARd8wGSxEwPpU JsswZH2AAUy4XelznblrAIlRuDB2hp9GGeA6WOD5rF4n9hXx1atfJpL/BZ1L1pzP8APdFfBO RGP41gMtMQDYCf0Pcebhr5d7exwkMAM8vy/B5jpgidmOMAtJGdrAgkzDaJv44wduBd1yvxuU XtqWc2tEWwbGcxaIMmeHI8gPUsQ7nlmnwv7HMmjpzz+iOb2TCPLFd8tbQXfBshkvPLsiFiEq L53aprVoyizpcWjOEE7B6ZJcwBTRZX6bLirw/FqmhmreVs5SDp/Wq6IkdvMueVNxsxoqwsBx VnkMmdww1vjn3zXbwKMb3FocrT0Wphj63k8OEQR0ZyAghDPuK6js/UScYUZZ74i+LAxxPJ4V aBdKc6BHu5OWnLM/DFENcvxq4lrdRKKgwOSPnX6PGhjLsA4HwGZqMX5egbP9TUVCnblv8UJv LD9hBjQRoAORlo+AZ+OOu6v1V64oVMUhPl2AxnTOtBWdUi1qNpqJiX9g+UZOcYJLRmflDKW2 xzPWUUTpPXXop9z+97M3PjWo4CsGup4P0xbA2iEsurmaXiEpjKumNYSXvyJcDbRUHLP1J+jP egFnevhNPAnnUpRt9YuGbhc0q9jtcDkoKVXz1o4ESyTPUirEL5pPlKPwdJL6v9W3rZctAa7B hCP991dNenbMc/pCgdMdg8sb+DF3vAIgDjCq/8yJRyitiNw+bOGV2RUPgWN13MBfOckbtt9z LdzotMS5iy+lgEuY4SPgS1j/miRKmANDvc8vZYADY630gcmxzmuu3AH5vMaNH1XV+hxDw== IronPort-HdrOrdr: A9a23:GmKyZqMvxRC0b8BcT1n155DYdb4zR+YMi2TDiHofdfUFSKClfp 6V8cjztSWUtN4QMEtQ/exoX5PwPU80lKQFnLX5WI3NYOCIghrPEGgP1/qB/9SkIVyEygc/79 YQT0EdMqyIMbESt6+Ti2PZYrUdKZu8gdqVbI/lvglQpGpRGsZdBmlCe2Om+hocfng4OXN1Lu vW2uN34x6bPVgHZMWyAXcIG8DFut3wjZrjJToLHQQu5gWihS6hrOeSKWnU4j4uFxd0hZsy+2 nMlAL0oo2lrvGA0xfZk0ve9Y5fltfNwsZKQOaMls8WADPxjRvAXvUqZ5Sy+BQO5M2/4lcjl9 fB5z8mIsRI8nvUOlq4pBP8sjOQpgoG2jvH8xu1kHHjqcv2SHYREMxan79UdRPf9g4JoMx8+L gj5RPWi7NnSTf72Ajt7dnBUB9n0mCup2A5rOIVh3tDFaMDdb5qq5AF9k89KuZOIMvD0vFmLA BSNrCe2B4PGmnqLUwx/1MfjOBEZ05DXytvGSM5y4moOzs/pgEP86JX/r1aop46zuNPd3Bz3Z WxDk1ZrsA/ciYoV9MOOA54e7rONoXse2OEDIvAGyWuKEk4U0i93qIfpo9Fo92XRA== X-IronPort-AV: E=Sophos;i="5.88,295,1635220800"; d="scan'208";a="62053317" ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Dt+s23475bN6HFOOwEEMWv/89+WpGsQ68zzMa1TWjI5ztPhYcjWuYvj5hdLUrWHL1r7G/g7Uzh1dnhA3c6Fg0Mh0lpj5X2rIvk4JzNjYy0xet7ETHFZKdBAxTAaZxWz9J6R60qmx1chhPhsnXuRwvYDnRMOy2fw2IKeQpSgyBAFd9L+U6IGlflAutg36z5CCVkL8KJW10mI4+7IEaH/A57tHvAM41Y0cY8ZEkArwvqFhmx4zupBObxfxpHlUDVg3HvlFxWxNukFlI5F5UWfqnFU7qZ9yaxcGAXYnv3hXz4aVAMKHsqzquQfbQkjI4pXsMvnvOIaVkNpE6iP8iEkzbQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; 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=BvVyJPcTpNqTGKTTNLfJR3VNJZ2GihJ2r9YUvS7z6lk=; b=fqmpdUxJZoXQw7SIC+51Y1OcaSWYDDOitrgtQWqFyGL1g6eNBb6R2zyMAIMIpe/pETRryX5CU5+1UK1z/lPo6c9KCQVeBFJEzupEZ4khMEnu3OY/1FNFIlIfh7pi9VRVc8rZfWev0zvBfm21HZZeXdJP0oHO1Qk2k6coei181iX7+QlaxRk5znFTWc1/pzuCwbKmIotPv+bad/gqLlNP0WViB4FZG+DRLKPFpn+avHs0VblIwzuwOGzNIn90YX0/0Q0LTbOhtZfNg2rwEBnzEYcZD0/y7DOKqQjCx/FZUfaD3Emda/8EamcP6zvfwWYkUsP8nKP5ppHso+wfLks/fw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com; dkim=pass header.d=citrix.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=citrix.onmicrosoft.com; s=selector2-citrix-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=BvVyJPcTpNqTGKTTNLfJR3VNJZ2GihJ2r9YUvS7z6lk=; b=cvUHwlM3puKkR7++jtndfhuXDPkVTIUnS2k4pjRbARa5BtdkoZnacqo872ilq8GvK73++7IW1WE5NEbtzLMyqSuvctySP3To3qirURVi28FpXyw/F8MhHyKy47nLIrk4wUdnGtiE5E0RI+D45Cxl00iDZrXuP9rKdRzzr4+23oc= From: Roger Pau Monne To: CC: Roger Pau Monne , Wei Liu , Anthony PERARD , Juergen Gross , Jan Beulich Subject: [PATCH v6 09/12] libs/guest: apply a featureset into a cpu policy Date: Mon, 17 Jan 2022 10:48:24 +0100 Message-ID: <20220117094827.16756-10-roger.pau@citrix.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220117094827.16756-1-roger.pau@citrix.com> References: <20220117094827.16756-1-roger.pau@citrix.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: MR2P264CA0159.FRAP264.PROD.OUTLOOK.COM (2603:10a6:501:1::22) To DS7PR03MB5608.namprd03.prod.outlook.com (2603:10b6:5:2c9::18) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 47315bec-4ad8-422c-bf4b-08d9d99eb1dc X-MS-TrafficTypeDiagnostic: DM6PR03MB4059:EE_ X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:7219; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: CXOEFki770rVzKQbVs9FRWgOMlmozhoAU/n/ugTw3QFXoj26kCI8cG1sx4cPQtK2y7s2/qUu4RDGsPJbKN3PcKFe5/33ehspgUYzxUiHGUWWL2jytWbJ1eGbNKK1IGjfHhwqdn/GKkAdgxZbDM3piYibtuZ/q1MpoZ5cIRGPu2uCvHEP/DHNjAeaGEV6ZV0aipQTMC7oDsOW1lBDE/Pb+cYQv1PEzuBKg9utAXkE+v4o31capd0I4ZeXdisLTnt/K5nUrHyG9H+MOPBgwvDKJcn8w47AGxMi5hNNfbiHTLVRqqeH1AGre1Gi+yQtfKW2DeLV7W0AxnnwtmrPG7PT8q3kT9BivW6d2dM8DRBoA9bAUVTDst6TI3h57BboUu49DG/KnOUxMWa2rPOcgmnk11JMUPZFhs7RXpGZ3RpGF/Em8GnQtdwMDN0Diq6yZj5Z8wQ8DsUpsoAHYIlMzEHzJGaBP4frwfijzDmAqq3ajpnYWIu3qs96bm6oGRUdTe/25Fa+sADAfjjoCq7Nzq+dqn7FZiP6Y1eJZz+HjaCnS4TucTgDV19u4xJZVZi32km3qwZmzXbCcUbRXEeVLQKm7I5dt96EgPAPdoa0ZFpTV+2IH3RJQ9lVla+g2pgRN5GoWuzfcP2XqFeyFC8/g+DV1Q== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DS7PR03MB5608.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(366004)(4326008)(6512007)(8936002)(186003)(36756003)(6506007)(316002)(83380400001)(38100700002)(6486002)(26005)(6916009)(86362001)(6666004)(8676002)(54906003)(2616005)(82960400001)(2906002)(5660300002)(66946007)(66556008)(66476007)(1076003)(508600001);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?WjYxNStJbTE4UEdISTNjblA0TkJWN0pSZGZ5MURYbEkyOFhhck1pSnM4U2hF?= =?utf-8?B?aXBhMStmdEx4MDZrUmFFaTVGOUhlRjVHUkRSRkhrWHRrd3VWOEVzUWZaR2Fp?= =?utf-8?B?aW5LamU2V200dEhsSzVJT0FTVURybm9Ja0sxTWpaTDEzejhFVk9HOVB0VmVa?= =?utf-8?B?bGVKdDJlVThUcEVmUVN6a0p3SHUvSnRsNFdQQzBDdFI4U0VUNnlBYkRaTUlT?= =?utf-8?B?SXhMaWZOcEJWL0JFSjFhbHh2QnJFa2xDVnFmWC9NMTNaNVlPVTEwU0F2REpz?= =?utf-8?B?U2oycnNZb1ZJd1hZdjhzNHNZZEh0WXR2b3E5cSs4U0tLdUhCcVNJQk9uWWt3?= =?utf-8?B?TWdORkp2MEZnYmZJanNFcUZiTmtPcE00MUhCeGdSWngzKzZMU3pyVVpxZkx0?= =?utf-8?B?QWJGK2JycmttczBDeG1PbFI0VXNtRWIvdk1zdWRCMU1xd0QxMklwdjlwMEZk?= =?utf-8?B?Qmo4Y29jZitSaFJtZXhNdWJSTFhjclBMcHFwR3VLQUVsY2lOSXRMS0xFa2M3?= =?utf-8?B?YUsyVWdWSkhuZTI2Z3NxenJqTzlwS2V6VHJpR09tdGRWbTRRRHFpYWRHU2hq?= =?utf-8?B?OWRvK1hXSlVSZDRnWnpIWGNqdFg4aWZEcHdjdytKMW43TGxXTzMxYURvVnRZ?= =?utf-8?B?dldJaFBvejhoVVR3MktmVzF5Tnh0QWo4R1BkYW92TG5CeFNXZmFpK2VzN3hJ?= =?utf-8?B?TExteW5ycEJtelpFVDBKRVpkUWlEUnFCMUlQTmFiUWJBczl3aUlYUmd5ZmxT?= =?utf-8?B?MFlwaytJTktZQ1gwVThXa0t0NU1RWllOdDlWVnI0NE1XMHA5bUZhT1kyZWlu?= =?utf-8?B?cGdxY21uckdUdFNvcTVnL2hnOVpVNmlEWW5sZGNpYlJSWnBKZGp4R2hBOHpK?= =?utf-8?B?L1JBU3VYeUVuSjYwZDBxVWRwaVdsdWJFQzdoaXcyYlpoN2E5Mit4Zi9RZzMw?= =?utf-8?B?eVRhWkozbEdLSkk5YUtYcy9wRnFRUW9pZjhnSlo5SDFjNXZoK0FuMUtEYlRC?= =?utf-8?B?Z1phV3dJZE4vZTUvdG5YYk9WdnR5ZFFEdU52ZmR3REdMc01qZUJoRzY1WHlr?= =?utf-8?B?bEsxc1BOYkhHTnBFVVZYWEpQRDZDcUFIUHhmVWFzKzQ2YTNSN0F1NC80dUlR?= =?utf-8?B?WjFyRk9JdGV3b2JEN05hc293RUw4UXZGcGNweHQ2UXRHd1F6Q0NkZzdMVkdr?= =?utf-8?B?TTQ1cUFMZnZZeERMcmR6dnFJeGhxaTN4b0ZRK1RIYVZMcTRicHFqZEJEbmdk?= =?utf-8?B?NE1iUytNL2dUVFhGd2hpRkxFR25rSDFEb25xa3Z0ZS9oZkU4MFlwTXU2VTRj?= =?utf-8?B?MTJXbHhwTTdFTytyZWphaWJSZnFFdFlNU3FybDB3R2JwUXhOV2V1U3ZwNzh5?= =?utf-8?B?Ukx6WGptMVVKM3RBYUd5K1BxN3RUS1J2RjNQTnVHZmRLVTh5RnM3Z1VDMzU0?= =?utf-8?B?bTB5YXRpUU9XR0FIR3F3T0k5aWVEMXdaUjFQaWhGOEoydkU0RW1sZXFmaklI?= =?utf-8?B?b2JNdmYzSm1iSUFmT2h1bDNiM25rVjloY2h0SlA4WUxZYjFCTFZpNFdQTTdt?= =?utf-8?B?aXFyM1NuWm5LR09PanQ2K0tndGhoZ2FCdTc2d0pEb2g1cHFlOTVlV0ZrUjJn?= =?utf-8?B?WDV1RS9nQTVlTklZZFAzUXV3dk85N3BDRXMzYmUxRmRHWkdvRGNnS0tGdjFG?= =?utf-8?B?RWVCNGV0WVkzY1ZKdUVMQzRoeDhXNnlKbk43Q3U5aEdRSXk5YnZBbXgyK1dj?= =?utf-8?B?anlRejVWcGh5ekx3ZVFzYis3bHlrZ29JRXZyeW1rWlhRUkEvMkxRTTJlUngr?= =?utf-8?B?RitMZ0pld3F5bTBxOWFIVVEyQXZkbDZZY3VQQ0pXNUtzUis0ODJxWWxyZVAw?= =?utf-8?B?U3hxKy9DZ2Vuc2RmN0ZGMzNzeHQ0Y1lVOFhCeEI2OHVoemlZaUR3endOMjJ4?= =?utf-8?B?VkZXQUsvVVltNno5VUtnYjFHM0lEME9ESVNZN3EzMUNQdEVnMkErdTQwc0h0?= =?utf-8?B?bDNmWG16NGNBeVJ0cVIzQ2tVOGVDS2dPTVZraXFacXVmMGU5UEE1SnpGc2Er?= =?utf-8?B?bVRnY3NEQ0xzY0IrUlRCOVk3aENjQktGTTFHSGk1cDNhZFBhOFlmdnA3U2pw?= =?utf-8?B?SzhGUkk3NVJkOHBNTEdNemNvS2hCb1NQditqdUxMdEN0bVZvaDNVdllDVjhK?= =?utf-8?Q?IjHheRf8yXPFwGhMjqUaRyU=3D?= X-MS-Exchange-CrossTenant-Network-Message-Id: 47315bec-4ad8-422c-bf4b-08d9d99eb1dc X-MS-Exchange-CrossTenant-AuthSource: DS7PR03MB5608.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Jan 2022 09:49:46.2511 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 335836de-42ef-43a2-b145-348c2ee9ca5b X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 6gYmjf8TERdOjaKOred6IFIrHfDSp98QEjuM4ms7reLRGUaOcPi5kUyJUTPZIzr39Aq9Z92y/+dAK8q3b8Pn+A== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR03MB4059 X-OriginatorOrg: citrix.com X-ZohoMail-DKIM: pass (identity @citrix.com) X-ZM-MESSAGEID: 1642413445107100001 Pull out the code from xc_cpuid_apply_policy that applies a featureset to a cpu policy and place it on it's own standalone function that's part of the public interface. No functional change intended. Signed-off-by: Roger Pau Monn=C3=A9 Reviewed-by: Jan Beulich --- tools/include/xenguest.h | 5 ++ tools/libs/guest/xg_cpuid_x86.c | 95 ++++++++++++++++++++------------- 2 files changed, 62 insertions(+), 38 deletions(-) diff --git a/tools/include/xenguest.h b/tools/include/xenguest.h index 9912116a51..8f05d8aa66 100644 --- a/tools/include/xenguest.h +++ b/tools/include/xenguest.h @@ -829,6 +829,11 @@ int xc_cpu_policy_legacy_topology(xc_interface *xch, x= c_cpu_policy_t *policy, int xc_cpu_policy_apply_cpuid(xc_interface *xch, xc_cpu_policy_t *policy, const struct xc_xend_cpuid *cpuid, bool hvm); =20 +/* Apply a featureset to the policy. */ +int xc_cpu_policy_apply_featureset(xc_interface *xch, xc_cpu_policy_t *pol= icy, + const uint32_t *featureset, + unsigned int nr_features); + int xc_get_cpu_levelling_caps(xc_interface *xch, uint32_t *caps); int xc_get_cpu_featureset(xc_interface *xch, uint32_t index, uint32_t *nr_features, uint32_t *featureset); diff --git a/tools/libs/guest/xg_cpuid_x86.c b/tools/libs/guest/xg_cpuid_x8= 6.c index 9060a2f763..cf202671ed 100644 --- a/tools/libs/guest/xg_cpuid_x86.c +++ b/tools/libs/guest/xg_cpuid_x86.c @@ -443,46 +443,15 @@ int xc_cpuid_apply_policy(xc_interface *xch, uint32_t= domid, bool restore, =20 if ( featureset ) { - uint32_t disabled_features[FEATURESET_NR_ENTRIES], - feat[FEATURESET_NR_ENTRIES] =3D {}; - static const uint32_t deep_features[] =3D INIT_DEEP_FEATURES; - unsigned int i, b; - - /* - * The user supplied featureset may be shorter or longer than - * FEATURESET_NR_ENTRIES. Shorter is fine, and we will zero-exten= d. - * Longer is fine, so long as it only padded with zeros. - */ - unsigned int user_len =3D min(FEATURESET_NR_ENTRIES + 0u, nr_featu= res); - - /* Check for truncated set bits. */ - rc =3D -EOPNOTSUPP; - for ( i =3D user_len; i < nr_features; ++i ) - if ( featureset[i] !=3D 0 ) - goto out; - - memcpy(feat, featureset, sizeof(*featureset) * user_len); - - /* Disable deep dependencies of disabled features. */ - for ( i =3D 0; i < ARRAY_SIZE(disabled_features); ++i ) - disabled_features[i] =3D ~feat[i] & deep_features[i]; - - for ( b =3D 0; b < sizeof(disabled_features) * CHAR_BIT; ++b ) + policy.cpuid =3D *p; + rc =3D xc_cpu_policy_apply_featureset(xch, &policy, featureset, + nr_features); + if ( rc ) { - const uint32_t *dfs; - - if ( !test_bit(b, disabled_features) || - !(dfs =3D x86_cpuid_lookup_deep_deps(b)) ) - continue; - - for ( i =3D 0; i < ARRAY_SIZE(disabled_features); ++i ) - { - feat[i] &=3D ~dfs[i]; - disabled_features[i] &=3D ~dfs[i]; - } + ERROR("Failed to apply featureset to policy"); + goto out; } - - cpuid_featureset_to_policy(feat, p); + *p =3D policy.cpuid; } else { @@ -916,3 +885,53 @@ int xc_cpu_policy_legacy_topology(xc_interface *xch, x= c_cpu_policy_t *policy, =20 return 0; } + +int xc_cpu_policy_apply_featureset(xc_interface *xch, xc_cpu_policy_t *pol= icy, + const uint32_t *featureset, + unsigned int nr_features) +{ + uint32_t disabled_features[FEATURESET_NR_ENTRIES], + feat[FEATURESET_NR_ENTRIES] =3D {}; + static const uint32_t deep_features[] =3D INIT_DEEP_FEATURES; + unsigned int i, b; + + /* + * The user supplied featureset may be shorter or longer than + * FEATURESET_NR_ENTRIES. Shorter is fine, and we will zero-extend. + * Longer is fine, so long as it only padded with zeros. + */ + unsigned int user_len =3D min(FEATURESET_NR_ENTRIES + 0u, nr_features); + + /* Check for truncated set bits. */ + for ( i =3D user_len; i < nr_features; ++i ) + if ( featureset[i] !=3D 0 ) + { + errno =3D EOPNOTSUPP; + return -1; + } + + memcpy(feat, featureset, sizeof(*featureset) * user_len); + + /* Disable deep dependencies of disabled features. */ + for ( i =3D 0; i < ARRAY_SIZE(disabled_features); ++i ) + disabled_features[i] =3D ~feat[i] & deep_features[i]; + + for ( b =3D 0; b < sizeof(disabled_features) * CHAR_BIT; ++b ) + { + const uint32_t *dfs; + + if ( !test_bit(b, disabled_features) || + !(dfs =3D x86_cpuid_lookup_deep_deps(b)) ) + continue; + + for ( i =3D 0; i < ARRAY_SIZE(disabled_features); ++i ) + { + feat[i] &=3D ~dfs[i]; + disabled_features[i] &=3D ~dfs[i]; + } + } + + cpuid_featureset_to_policy(feat, &policy->cpuid); + + return 0; +} --=20 2.34.1 From nobody Sat May 4 19:45:18 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=citrix.com); dmarc=pass(p=reject dis=none) header.from=citrix.com ARC-Seal: i=2; a=rsa-sha256; t=1642413444; cv=pass; d=zohomail.com; s=zohoarc; b=VZZGKXXEVrqCm/gnEWsLFptAZkubbqGuZphWDENSL1Db0IsM/3Ao5vnv2BrbJNO0oh1s6np6Yy3R2Ih3s3hNB+JI/DhyybI6TPn/F0/naXH+0IG36ldGfKIGD1B865Wafe1AbCXUMsCCuZ4x1k932F6mitTmLoGqvHkFoCInMCo= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1642413444; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=shER43YyyQhVY1X+UAZxNkhxrqoglUfGVvwMDWcCp04=; b=fwweem7hAPImj1ZdDIRx6nEk/eiUXnvmIq9eTtFsJpwChJ9h44s/GMtoJbhkcjm5V9zHvSo8CktTFnlh6E9nBbkMQYJy4Wfv8zx0n5zWV2LKHx5MapXgMBVcgphbUjFmfcvD9Pw1D5h78rmOqhjJI6ULb/XFl9aHdo0ovekLaGY= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=citrix.com); dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 164241344431458.04203109498974; Mon, 17 Jan 2022 01:57:24 -0800 (PST) Received: from list by lists.xenproject.org with outflank-mailman.258070.444012 (Exim 4.92) (envelope-from ) id 1n9Ol2-0000TN-DK; Mon, 17 Jan 2022 09:57:00 +0000 Received: by outflank-mailman (output) from mailman id 258070.444012; Mon, 17 Jan 2022 09:57:00 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1n9Ol2-0000P1-5V; Mon, 17 Jan 2022 09:57:00 +0000 Received: by outflank-mailman (input) for mailman id 258070; Mon, 17 Jan 2022 09:56:58 +0000 Received: from se1-gles-sth1-in.inumbo.com ([159.253.27.254] helo=se1-gles-sth1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1n9OeE-0002gi-Fw for xen-devel@lists.xenproject.org; Mon, 17 Jan 2022 09:49:58 +0000 Received: from esa1.hc3370-68.iphmx.com (esa1.hc3370-68.iphmx.com [216.71.145.142]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id d2f2e699-777a-11ec-9bbc-9dff3e4ee8c5; Mon, 17 Jan 2022 10:49:56 +0100 (CET) X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" X-Inumbo-ID: d2f2e699-777a-11ec-9bbc-9dff3e4ee8c5 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=citrix.com; s=securemail; t=1642412997; h=from:to:cc:subject:date:message-id:in-reply-to: references:content-transfer-encoding:mime-version; bh=iovEghoT8JMLNPfTSfeZnMsLNMaTz3gRKDzMAmf3b44=; b=JXlT2Hr61rO3Jjq5pD5roZOC2fsqsiB7LEmLP9RL25DO7k5ESEocRvbP FO0SNf+vCz2rsqi/8MckECv9DQhHGY1ozyVFsPLb+gWnwoXjGg7Uk9WGL viomIEpUd+EHgImG3L2F8BT3kCxSCoO6jql8++xfUs14OeMx9w9x3s2Pm o=; Authentication-Results: esa1.hc3370-68.iphmx.com; dkim=pass (signature verified) header.i=@citrix.onmicrosoft.com IronPort-SDR: c+EvjqZ+33Mg1IUHfX7m11tJ9MgoCmqFsFThOf5WD70CQwfqZWU0gvSEdjnPaZHkIMhP8Ixi/A SNiVKWuM98ngHH5NcfDBy0vCYSPHaPuOGouRFBhx5eJC80Fc5ryRUHAbW0FaZZGT7kbOO7jEwe Q4MOVXaIvV0oQL7OCT+7z9+fXHqnFRUiV+egja/h2RTIcY0fbcdMAZjDGNaqiMPtFHZSkfl3PT R006NDmG6JcZzBcUyT9eyB5jV4Ezr5iP+uVV1y400ZdLLWVLb9eEgWFjVj+22xNee1wLIVOY/i wOQvoTpGD4yVokRYCbx8TU/t X-SBRS: 5.2 X-MesageID: 62542586 X-Ironport-Server: esa1.hc3370-68.iphmx.com X-Remote-IP: 162.221.156.83 X-Policy: $RELAYED IronPort-Data: A9a23:K27g9KDKlt3H1hVW/87kw5YqxClBgxIJ4kV8jS/XYbTApDx00WQBn TdMCDiHb/nYNzHxe9lzOty+pkgO7JfVx9NnQQY4rX1jcSlH+JHPbTi7wuYcHM8wwunrFh8PA xA2M4GYRCwMo/u1Si6FatANl1ElvU2zbue6WL6s1hxZH1c+En940E07wobVv6Yz6TSHK1LV0 T/Ni5W31G+Ng1aY5UpNtspvADs21BjDkGtwUm4WPJinj3eH/5UhN7oNJLnZEpfNatI88thW5 Qr05OrREmvxp3/BAz4++1rxWhVirrX6ZWBihpfKMkQLb9crSiEai84G2PQghUh/u3aLv9Nxm ex26t/paDoOIqfglO0TekwNe81+FfUuFL7vJHG+tYqYzlHccmuqyPJrZK00FdRGoKAtWzgIr KFGbmBWBvyAr7veLLaTUO5ji95lNMD2FIgepmth3XfSCvNOrZXrHf+XuYUFjGlYasZmJNT+e M0jaBxUVhnJQEIRMWYaMNU6tbL97pX4W2IB8w/EzUYt2EDRwxZ2y6PFK8fOd5qBQsA9tlmcj nLL+SL+GB5yHMySz3+J/2yhgsfLnDjnQ8QCGbug7PlojVaPgGsJB3UruUCT+KfjzBTkApQGd hJSqnFGQbUOGFKDfpr/fx648Ue/4V1Feud3D+cW5AiD4/+Bi+qGPVQsQjlEYd0gkcY5Qz02y 1OE9+/U6SxTXK69EizEqOrNxd+mEW1MdDJZO3dYJecQy4C7+Nlbs/7Zcjp0/EdZZPXRECq4/ T2FpTNWa1473Z9SjPXTEbwqbluRSnn1ouwdu1+/soGNtFoRiGuZi2qAswKzARFodtfxc7V5l CJY8/VyFchXZX13qASDQf8WAJai7OufPTvXjDZHRsd9rW/wqyXzIdwOsFmSwXuF1O5eJFcFh 2eJ6GtsCGJ7ZiP2PcebnarsYyjV8UQQPYu8Da2FBja/SpNwaBWG7ElTib24hAjQfLwXufhnY /+zKJ/0ZV5DUPgP5GfoG481jOF6rghjlTK7bc2qlHyPjOvBDEN5vJ9YajNimMhjsvPdyOgUm v4CX/a3J+J3C7yhMnKJoN9KfTjn7xETXPjLliCeTcbaSiJOE2A9Ef7Bh7Qnfo1uhaNOkenUu Hq6XydlJJDX3BUr8C2GNSJubq3BR5F6oS5pNCAgJw/wiXMifZyu/OEUcJ5uJesr8+lqzPhVS fgZeprfXqQTG2qfozlNP4PgqIFCdQiwgV7cNSSSfzViLYVrQBbE+4G4c1K3pjUOFCe+qeA3v 6akilHAWZMGSgk7VJTWZfujwkmfp38YnO4uDULELsMKIBfn8ZRwKjy3hfgyepleJRLGzzqc9 gCXHRZH+rWd/95rqIHE3PnWoZ2oHu1yGlthM1PatbvmZzPH+meDwJNbVLradz7qS26pqr6pY v9Yzq+gPaRfzkpKqYd1D51i0bk6u4n0v7ZfwwlpQCfLYlCsBu8yK3WKx5AS5KhEx7sfsgqqQ EOfvNJdPOzRas/iFVcQIisjb/iCiq5IymWDs6xtLRWo/jJz8ZqGTV5WbkuFhyFqJbdoNJ8on LU6s8kM5g3j0hcnP75qVMyPG7hg+pDYb5gaiw== IronPort-HdrOrdr: A9a23:ISg/LKtKfoFOlLKpDsTE8ZrE7skC7oMji2hC6mlwRA09TyXGra +TdaUguSMc1gx9ZJhBo7G90KnpewK5yXcT2/hsAV7CZniahILMFu9fBOTZslvd8kHFh4xgPO JbAtND4b7LfClHZKTBkXCF+r8bqbHtmsDY5ts2jU0dNz2CA5sQkTuRYTzrdXGeKjM2YKbQQ/ Gnl7V6TnebCD8qR/X+IkNAc/nIptXNmp6jSRkaByQ/4A3LqT+z8rb1HzWRwx9bClp0sPof2F mAtza8yrSosvm9xBOZ/2jP765OkN+k7tdYHsSDhuUcNz2poAe1Y4ZKXaGEoVkO0auSwWdvtO OJjwYrPsx15X+UVmapoSH10w2l6zoq42+K8y7vvVLT5ejCAB4qActIgoxUNjHD7VA7gd162K VXm0qEqpt+F3r77WrAzumNcysvulu/oHIkn+JWpWdYS5EiZLhYqpFa1F9JEa0HADnx5OkcYa ZT5fnnlbZrmG6hHjPkVjEF+q3vYp1zJGbLfqE6gL3V79AM90oJinfxx6Qk7wA9HdwGOt15Dt //Q9dVfYd1P7srhJJGdZc8qPSMex7wqGr3QRqvyHTcZeg60iH22tbKCItc3pDeRHVP9up0pK j8 X-IronPort-AV: E=Sophos;i="5.88,295,1635220800"; d="scan'208";a="62542586" ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=MNT8wusQLtp43BQGFdgTAwo+po0kJ1XEnzfKai/tQ2fcI5QFT2JepKHHqnp/XMz+H+sfR0PSmoOOCVcqOjgQpz4kakpewOddeHgNqk5NBHbzg6cbot0wlaieeC7cCYZ4v4BZGoxSfZjTgiDOnKIw8gBZKU+EpFK7Ax+BNmZARZeaLzMpEQihkTSzZplrD85H1P3OOZihnjF190oMxiqtX77drZpYP/LxPO6pTIrTP+XvwmtcqKkMRo93NydpITalS5NEq5MMbQuoem0djie8rs6ClZDXdRNa/LryJ9C46DpQdCUmwm+cActj41a7jXWhTlUXHGBSkKV0UC7tWMalsw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; 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=shER43YyyQhVY1X+UAZxNkhxrqoglUfGVvwMDWcCp04=; b=Jo08DoCb/0OFTML/Bl3nS+suJuPBKc/ca/jelzQ+WAZCwsxmEYNj9/4Sh8tEQ8JjZCCPU3QjI5f0anqsf0I1RaDTb9cBNJ0+rIayOWmLswZ5KXukylwzxomMifrkmbxtz31h/HG6B4MOXEmpWdwvuMItNOerJnKLrCLghDal1SjtUp8wHwGgRDcC3tXpfSgiqzeTxwXXtIZqmGlrCWJWPJ8A0FDJpQfRqH4Psvm6gEkhFXd41I+neG7vDA+4ZFFAkjZRTPl0Q7SPzNNgRexBWFnz6D4+qpF5bZPjeC1uo/r/0v4z96safIkYGkUf5rRP54yYQzAj8adBpseQVfMcxA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com; dkim=pass header.d=citrix.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=citrix.onmicrosoft.com; s=selector2-citrix-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=shER43YyyQhVY1X+UAZxNkhxrqoglUfGVvwMDWcCp04=; b=jDmOJnJLJOUYSg20nN3jm2L4O1Eo20XQMkxJkFI7R2CiC58VxGs/ccQAFiOYf4RZ88MxWFdHFyUUWDZ+53c4BWUBjoMz9BKKvO1we3z+icy8Zb4bxEELYAlGtCkZg6Bp+aq2OBI1kWVb+GdJ8+UDsLoAXXJlpmtqP4lydvgm08E= From: Roger Pau Monne To: CC: Roger Pau Monne , Wei Liu , Anthony PERARD , Juergen Gross Subject: [PATCH v6 10/12] libs/{light,guest}: implement xc_cpuid_apply_policy in libxl Date: Mon, 17 Jan 2022 10:48:25 +0100 Message-ID: <20220117094827.16756-11-roger.pau@citrix.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220117094827.16756-1-roger.pau@citrix.com> References: <20220117094827.16756-1-roger.pau@citrix.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: MRXP264CA0046.FRAP264.PROD.OUTLOOK.COM (2603:10a6:500:14::34) To DS7PR03MB5608.namprd03.prod.outlook.com (2603:10b6:5:2c9::18) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 7bd941d9-348c-4f84-e34b-08d9d99eb55e X-MS-TrafficTypeDiagnostic: DM6PR03MB4059:EE_ X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:177; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: kIFx5Q8y1vlnUikXENkXiERWHcGKA5+YneZYJBfh3jMKwlNMt8NXKGLRuSeva7B4FWIEXgmTJINgHDTex8BBUvxduVqkAa0TOuALC3EkTO2MUBD/C+GNhynOJGD6i65TqzdW0moTA4mUg4d33Tb1ugwarveSEIurrgKCrK4s9i//tVtxQPRLbaX37bMo2VvT3LtT4Rk4Q526dDjm7pWd5xg+E9otjt1sHnfceNVHbkeX7W3EIgzRFCAZeM8P80Lof3PU2YZ8OA5laTsAOynNuUFBlNq71BIEBCFgmQGWAcaFx82627BQ15bowySqBiY9jDvZcXZzHhnDPJyRUYkdALTubzhcPKAum8hr92vieVL3jyq4LVqJiLXYxP6/pMhGf3rIMPzfRiF55QKgC4cXOYK2cbgGHS+gkwy4zrJjGrXZoCaefd27XR4lEZiEI5leqDiC7hxkhMOZ3o/xrxNgpQLU/5uKARnueSS6EkIeLwSBJAdw/lw+Q5OrnCN+7DhsdY4LcQ+CwA8vQvivvuAiNlQ4cugxaO7kLg3Ms6pHLMVQtzs+3U+MXMFqHlbtcNpSR6DI9blHN8QT7dWpKLjDzfdnqbiD+zEoL72yw9US8w1JKU6s7bCOBSggNrxo/wagd2LpSvHXVQI6MVSoC9WXXQ== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DS7PR03MB5608.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(366004)(4326008)(6512007)(8936002)(186003)(36756003)(6506007)(316002)(83380400001)(38100700002)(6486002)(26005)(6916009)(86362001)(6666004)(8676002)(54906003)(2616005)(82960400001)(2906002)(5660300002)(66946007)(66556008)(66476007)(1076003)(508600001);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?T05EUXdHMFRDTXdqUzZjSU54M1FtMXRYSWpvaGdoWXNjWnFuc1JyOHdNN2Zx?= =?utf-8?B?dThlK2xhenhxeHM1R2ROeDlyU21GUlB5M1pVTHNsdG9Fa2p0ejdhK0JhZldq?= =?utf-8?B?ZytrN1pJNFd3NHdtYlQ1UEErOE94Q1pWR3RkZElJZFc4TTBFRkVIOXJjQ0VJ?= =?utf-8?B?UjI0TzR5bFNhNE5tYnB2NUtJYUxjNXdNdjlRdFU5S0hGUThLN0JsVlFKcWpJ?= =?utf-8?B?UEx5NWFDQTZORlA4enhHNlhCZi9NK1RNVVd2K0pSajJORElEd2w5OE5INGFt?= =?utf-8?B?d1VCVUhLcDQ4ZHNpYVJ4Y1ZhdzZzWFkxWDYyOGdadUtReHE3RFBNTkhIWnl3?= =?utf-8?B?eHAreTF3ZENBakJ6N0ZJMU1IYmZqQmc2MHBoVDlpVktwK0ZEaGFDZ1ZXMW0z?= =?utf-8?B?QVNPTmJFbzdvbzFWZEVCN0ROL3paTWZ4eGZDQnViWjljTkprbWVRbThlbXdN?= =?utf-8?B?MTEvemR2M1lTdzlWSDdldjNnOHZoQ25ISHZNcVF2SE1oQ2c0cFYxenZmbXhM?= =?utf-8?B?TkgvZklTSGg3cG85aCtsaDlDSU1ZVGlxTmNtM2M3cnlKcnNEK0F3dFpFN2p5?= =?utf-8?B?dEQ3ZXBkOTFUdWErR24zNlZ4S1lWU0g2S3o2dWVCcWVDSGpZWThXMUdwWGJq?= =?utf-8?B?a0gxdTg5ZEtIWWR3RVVxaCtkdFl5Y0VyV1hsaWFVd3lMSmR0eTlaUm9PUWxo?= =?utf-8?B?cUFpbExkUjVYQXhtWXRPWUpsT0RaUXVJZGFqTHBIMk1RR2t4cDZ4SEdDNWY1?= =?utf-8?B?a01NanFGNjZqV1NsU1dpdGswMy8vWHI0T085aHlFMTR5RmVuRHplUGR2K25V?= =?utf-8?B?VEZJUFF2bU41Sm5iTDBmOE01UTRiN3A4eEZFTVBRSkQ4MFZlV2NEckduTHBl?= =?utf-8?B?M3JQcnd6L1EzRjRkYlBIakNXRTBkS0RHM1RjM3hUNytkWlRjNVlqdHIvcUh1?= =?utf-8?B?NXNoeGdOQ2M2UndFK0tqbW80d1NNK3JWd0VCMkJhK29XZGNBMzloRTk5MHB2?= =?utf-8?B?YWVveFJ1dDhDWTBJRkQxakxwL0NoQ203VTdWV281OTJrMC9yejZQQmhUMVVT?= =?utf-8?B?dzFHZDlsVWRvSWo4VjFnZGEycC9FVC9kMTlwbTVoSEtNaEpUTkFDVm9WYmp1?= =?utf-8?B?VENPWVJ5cUN2SkpoUThHQ1NQVWQ4c3djYUZ6eTllem1DQkFpNjcyVkFRYms2?= =?utf-8?B?MFcwTVJFUWNmVFQyS0Z0SjJuSkhMKzBpZFlTSDgwS0JPYVlsUFpLYlBEUjhk?= =?utf-8?B?RHFwaGQ2andlV0lkRXYxSEtWQ3FpaEZQYzNIcFE5MWlsMHF4VWpLcjZHK0dk?= =?utf-8?B?VmYzYm8vYUVabEVYVEVXekwwZCt5UUo0TERqWmVXRWUvZ003clJCS2FUSWwv?= =?utf-8?B?cnQraHl4N0VVZTBIay9qbVJYYUpQRGJpbCtDMkxUR01zM1lwUEJTSFNDK3lH?= =?utf-8?B?VWJTK1I5UC90dWxadTZRNW5oRlo3K1ZpVCtQcWM0ZWVRYXFHMFlpYkdESzdl?= =?utf-8?B?M2Z3WmgwdmUrdWNhVWQzMkZWejJucFhONEl2U0djay94TGtNbDROZUpPZEJ2?= =?utf-8?B?enRMQU5uRWFDSThoVk9Dd0VRM3NTYlljNnl4VHc5RlUvV0ZxZzBhSmpIOGNH?= =?utf-8?B?Q0h4dVBENnV0R2tZQlJweDZKd0FQaTZGejRHMldja1VPWDZBcTZvMEhNekRz?= =?utf-8?B?VmlMYk1kMUxjUmMwWktwOXV1OS9NOUJiZmZDM1F3TjM4RVBvUVg4M1RCZTJa?= =?utf-8?B?R2ZtdnhUZ0ZNSDFBN1pmQktoM2Z2R3FkNXliRXNXd2Yzb2liZ1MxK2ZuRjZH?= =?utf-8?B?ZloxZGtjTXBtNjUySkt5UXc5a3hMdWpoTVZabEVEYWFXeGlTWDl1N3RkOXpP?= =?utf-8?B?Mmh1V3JWS2cyTmx0NmsyWXh5VG4zelZDNXRkc24wMXNIcWo0ZGRyQTZnd3JP?= =?utf-8?B?R0pLOGdWcHA3SlhQcWFocnFWTEpmNDZ2ZlYzejFiZ1dpZFIrS1pkQTI3Ykc3?= =?utf-8?B?QUUzQUV4ZGZSQkhWM1RnNWN5RStWaHdBYTFaMFN1bEpPcHh6ZVdHd1ROV0Fu?= =?utf-8?B?UkdML3NKVXVRNUNmYnlpQ21ZdUN4b0F2U0w0OWw2WFV1NXNVdUFpa1pDaVJ4?= =?utf-8?B?Rkc1NS92cWZxdHdvVDFCQ3ViTXJ3b01XR0VzK2xOUVFQc3ZSZm5YOXdqWUpM?= =?utf-8?Q?cs3ZwZACUgv7Yg7qIJMyh+M=3D?= X-MS-Exchange-CrossTenant-Network-Message-Id: 7bd941d9-348c-4f84-e34b-08d9d99eb55e X-MS-Exchange-CrossTenant-AuthSource: DS7PR03MB5608.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Jan 2022 09:49:52.1371 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 335836de-42ef-43a2-b145-348c2ee9ca5b X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: YbGN4/qe2SsjS6e/JCjX0dCZ7Lj6sqNJNPFD7jbZBat6VyrDKew2ZYglBUB7Kc9/MO5IhnNkQERxrjpvwco8pw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR03MB4059 X-OriginatorOrg: citrix.com X-ZohoMail-DKIM: pass (identity @citrix.com) X-ZM-MESSAGEID: 1642413445226100003 With the addition of the xc_cpu_policy_* now libxl can have better control over the cpu policy, this allows removing the xc_cpuid_apply_policy function and instead coding the required bits by libxl in libxl__cpuid_legacy directly. Remove xc_cpuid_apply_policy. Signed-off-by: Roger Pau Monn=C3=A9 Reviewed-by: Anthony PERARD --- Changes since v4: - Correctly account for PVH guests being HVM in libxl__cpuid_legacy. - PAE option is only available to HVM guests (_not_ including PVH). Changes since v2: - Use 'r' for libxc return values. - Fix comment about making a cpu policy compatible. - Use LOG*D macros. --- tools/include/xenctrl.h | 18 ----- tools/libs/guest/xg_cpuid_x86.c | 122 -------------------------------- tools/libs/light/libxl_cpuid.c | 92 ++++++++++++++++++++++-- 3 files changed, 86 insertions(+), 146 deletions(-) diff --git a/tools/include/xenctrl.h b/tools/include/xenctrl.h index 95bd5eca67..745d67c970 100644 --- a/tools/include/xenctrl.h +++ b/tools/include/xenctrl.h @@ -1829,24 +1829,6 @@ struct xc_xend_cpuid { char *policy[4]; }; =20 -/* - * Make adjustments to the CPUID settings for a domain. - * - * This path is used in two cases. First, for fresh boots of the domain, = and - * secondly for migrate-in/restore of pre-4.14 guests (where CPUID data was - * missing from the stream). The @restore parameter distinguishes these - * cases, and the generated policy must be compatible with a 4.13. - * - * Either pass a full new @featureset (and @nr_features), or adjust indivi= dual - * features (@pae, @itsc, @nested_virt). - * - * Then (optionally) apply legacy XEND overrides (@xend) to the result. - */ -int xc_cpuid_apply_policy(xc_interface *xch, - uint32_t domid, bool restore, - const uint32_t *featureset, - unsigned int nr_features, bool pae, bool itsc, - bool nested_virt, const struct xc_xend_cpuid *xe= nd); int xc_mca_op(xc_interface *xch, struct xen_mc *mc); int xc_mca_op_inject_v2(xc_interface *xch, unsigned int flags, xc_cpumap_t cpumap, unsigned int nr_cpus); diff --git a/tools/libs/guest/xg_cpuid_x86.c b/tools/libs/guest/xg_cpuid_x8= 6.c index cf202671ed..974549c0db 100644 --- a/tools/libs/guest/xg_cpuid_x86.c +++ b/tools/libs/guest/xg_cpuid_x86.c @@ -379,128 +379,6 @@ int xc_cpu_policy_apply_cpuid(xc_interface *xch, xc_c= pu_policy_t *policy, return rc; } =20 -int xc_cpuid_apply_policy(xc_interface *xch, uint32_t domid, bool restore, - const uint32_t *featureset, unsigned int nr_feat= ures, - bool pae, bool itsc, bool nested_virt, - const struct xc_xend_cpuid *cpuid) -{ - int rc; - xc_dominfo_t di; - unsigned int nr_leaves, nr_msrs; - xen_cpuid_leaf_t *leaves =3D NULL; - struct cpuid_policy *p =3D NULL; - struct xc_cpu_policy policy =3D { }; - uint32_t err_leaf =3D -1, err_subleaf =3D -1, err_msr =3D -1; - - if ( xc_domain_getinfo(xch, domid, 1, &di) !=3D 1 || - di.domid !=3D domid ) - { - ERROR("Failed to obtain d%d info", domid); - rc =3D -ESRCH; - goto out; - } - - rc =3D xc_cpu_policy_get_size(xch, &nr_leaves, &nr_msrs); - if ( rc ) - { - PERROR("Failed to obtain policy info size"); - rc =3D -errno; - goto out; - } - - rc =3D -ENOMEM; - if ( (leaves =3D calloc(nr_leaves, sizeof(*leaves))) =3D=3D NULL || - (p =3D calloc(1, sizeof(*p))) =3D=3D NULL ) - goto out; - - /* Get the domain's default policy. */ - nr_msrs =3D 0; - rc =3D get_system_cpu_policy(xch, di.hvm ? XEN_SYSCTL_cpu_policy_hvm_d= efault - : XEN_SYSCTL_cpu_policy_pv_defa= ult, - &nr_leaves, leaves, &nr_msrs, NULL); - if ( rc ) - { - PERROR("Failed to obtain %s default policy", di.hvm ? "hvm" : "pv"= ); - rc =3D -errno; - goto out; - } - - rc =3D x86_cpuid_copy_from_buffer(p, leaves, nr_leaves, - &err_leaf, &err_subleaf); - if ( rc ) - { - ERROR("Failed to deserialise CPUID (err leaf %#x, subleaf %#x) (%d= =3D %s)", - err_leaf, err_subleaf, -rc, strerror(-rc)); - goto out; - } - - if ( restore ) - { - policy.cpuid =3D *p; - xc_cpu_policy_make_compat_4_12(xch, &policy, di.hvm); - *p =3D policy.cpuid; - } - - if ( featureset ) - { - policy.cpuid =3D *p; - rc =3D xc_cpu_policy_apply_featureset(xch, &policy, featureset, - nr_features); - if ( rc ) - { - ERROR("Failed to apply featureset to policy"); - goto out; - } - *p =3D policy.cpuid; - } - else - { - p->extd.itsc =3D itsc; - - if ( di.hvm ) - { - p->basic.pae =3D pae; - p->basic.vmx =3D nested_virt; - p->extd.svm =3D nested_virt; - } - } - - policy.cpuid =3D *p; - rc =3D xc_cpu_policy_legacy_topology(xch, &policy, di.hvm); - if ( rc ) - goto out; - *p =3D policy.cpuid; - - rc =3D xc_cpu_policy_apply_cpuid(xch, &policy, cpuid, di.hvm); - if ( rc ) - goto out; - - rc =3D x86_cpuid_copy_to_buffer(p, leaves, &nr_leaves); - if ( rc ) - { - ERROR("Failed to serialise CPUID (%d =3D %s)", -rc, strerror(-rc)); - goto out; - } - - rc =3D xc_set_domain_cpu_policy(xch, domid, nr_leaves, leaves, 0, NULL, - &err_leaf, &err_subleaf, &err_msr); - if ( rc ) - { - PERROR("Failed to set d%d's policy (err leaf %#x, subleaf %#x, msr= %#x)", - domid, err_leaf, err_subleaf, err_msr); - rc =3D -errno; - goto out; - } - - rc =3D 0; - -out: - free(p); - free(leaves); - - return rc; -} - xc_cpu_policy_t *xc_cpu_policy_init(void) { return calloc(1, sizeof(struct xc_cpu_policy)); diff --git a/tools/libs/light/libxl_cpuid.c b/tools/libs/light/libxl_cpuid.c index e1acf6648d..7dcdb35a4c 100644 --- a/tools/libs/light/libxl_cpuid.c +++ b/tools/libs/light/libxl_cpuid.c @@ -441,9 +441,11 @@ int libxl__cpuid_legacy(libxl_ctx *ctx, uint32_t domid= , bool restore, libxl_domain_build_info *info) { GC_INIT(ctx); + xc_cpu_policy_t *policy =3D NULL; + bool hvm =3D info->type !=3D LIBXL_DOMAIN_TYPE_PV; bool pae =3D true; bool itsc; - int r; + int r, rc =3D 0; =20 /* * Gross hack. Using libxl_defbool_val() here causes libvirt to crash= in @@ -454,6 +456,41 @@ int libxl__cpuid_legacy(libxl_ctx *ctx, uint32_t domid= , bool restore, */ bool nested_virt =3D info->nested_hvm.val > 0; =20 + policy =3D xc_cpu_policy_init(); + if (!policy) { + LOGED(ERROR, domid, "Failed to init CPU policy"); + rc =3D ERROR_FAIL; + goto out; + } + + r =3D xc_cpu_policy_get_domain(ctx->xch, domid, policy); + if (r) { + LOGED(ERROR, domid, "Failed to fetch domain CPU policy"); + rc =3D ERROR_FAIL; + goto out; + } + + if (restore) { + /* + * Make sure the policy is compatible with pre Xen 4.13. Note that + * newer Xen versions will pass policy data on the restore stream,= so + * any adjustments done here will be superseded. + */ + r =3D xc_cpu_policy_make_compat_4_12(ctx->xch, policy, hvm); + if (r) { + LOGED(ERROR, domid, "Failed to setup compatible CPU policy"); + rc =3D ERROR_FAIL; + goto out; + } + } + + r =3D xc_cpu_policy_legacy_topology(ctx->xch, policy, hvm); + if (r) { + LOGED(ERROR, domid, "Failed to setup CPU policy topology"); + rc =3D ERROR_FAIL; + goto out; + } + /* * For PV guests, PAE is Xen-controlled (it is the 'p' that differenti= ates * the xen-3.0-x86_32 and xen-3.0-x86_32p ABIs). It is mandatory as X= en @@ -466,6 +503,13 @@ int libxl__cpuid_legacy(libxl_ctx *ctx, uint32_t domid= , bool restore, */ if (info->type =3D=3D LIBXL_DOMAIN_TYPE_HVM) pae =3D libxl_defbool_val(info->u.hvm.pae); + rc =3D libxl_cpuid_parse_config(&info->cpuid, GCSPRINTF("pae=3D%d", pa= e)); + if (rc) { + LOGD(ERROR, domid, "Failed to set PAE CPUID flag"); + rc =3D ERROR_FAIL; + goto out; + } + =20 /* * Advertising Invariant TSC to a guest means that the TSC frequency w= on't @@ -481,14 +525,50 @@ int libxl__cpuid_legacy(libxl_ctx *ctx, uint32_t domi= d, bool restore, */ itsc =3D (libxl_defbool_val(info->disable_migrate) || info->tsc_mode =3D=3D LIBXL_TSC_MODE_ALWAYS_EMULATE); + rc =3D libxl_cpuid_parse_config(&info->cpuid, GCSPRINTF("invtsc=3D%d",= itsc)); + if (rc) { + LOGD(ERROR, domid, "Failed to set Invariant TSC CPUID flag"); + rc =3D ERROR_FAIL; + goto out; + } =20 - r =3D xc_cpuid_apply_policy(ctx->xch, domid, restore, NULL, 0, - pae, itsc, nested_virt, info->cpuid); - if (r) - LOGEVD(ERROR, -r, domid, "Failed to apply CPUID policy"); + /* Set Nested virt CPUID bits for HVM. */ + if (hvm) { + rc =3D libxl_cpuid_parse_config(&info->cpuid, GCSPRINTF("vmx=3D%d", + nested_virt)= ); + if (rc) { + LOGD(ERROR, domid, "Failed to set VMX CPUID flag"); + rc =3D ERROR_FAIL; + goto out; + } + + rc =3D libxl_cpuid_parse_config(&info->cpuid, GCSPRINTF("svm=3D%d", + nested_virt)= ); + if (rc) { + LOGD(ERROR, domid, "Failed to set SVM CPUID flag"); + rc =3D ERROR_FAIL; + goto out; + } + } + + /* Apply the bits from info->cpuid if any. */ + r =3D xc_cpu_policy_apply_cpuid(ctx->xch, policy, info->cpuid, hvm); + if (r) { + LOGEVD(ERROR, domid, -r, "Failed to apply CPUID changes"); + rc =3D ERROR_FAIL; + goto out; + } + + r =3D xc_cpu_policy_set_domain(ctx->xch, domid, policy); + if (r) { + LOGED(ERROR, domid, "Failed to set domain CPUID policy"); + rc =3D ERROR_FAIL; + } =20 + out: + xc_cpu_policy_destroy(policy); GC_FREE; - return r ? ERROR_FAIL : 0; + return rc; } =20 static const char *input_names[2] =3D { "leaf", "subleaf" }; --=20 2.34.1 From nobody Sat May 4 19:45:18 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=citrix.com); dmarc=pass(p=reject dis=none) header.from=citrix.com ARC-Seal: i=2; a=rsa-sha256; t=1642413444; cv=pass; d=zohomail.com; s=zohoarc; b=ez6x/o1YV2NBu2as3qL74Nq5bDnJ3tJ7mgdGPgh+0i4lNJgwNGKTt3AhVp2Z70CRAu37bhaE4hdG9RbXHCrn+/sk4gLCwsuIh/qaLLxnqYemJlhv9UHgCi9ffJTvqP/fJ4f7rG4TdwkzTrjGb4GJeuLiWFIh4vnP4ImjxH6RyNk= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1642413444; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=g+CVOtJHKY5btvqsgPmIHyF5mBuPcqGVSNvPsYPwWz0=; b=Rt08f+Iyf8XcDVpyNdE5L7Moewyb1g6sLt18tBd89TJdbkaNLrLRckFnekWdkDKIfob4dkW2WNLCn6iNMNgDsYbH5NAIS3IsJz/7qCCrdezY9un7R2UbJjOC5jQT9+XycBKi76QfDb9EHWihBb4pSmkJBd0o3mSo6Fu3AgK5/qA= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=citrix.com); dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1642413444894724.6020783108148; Mon, 17 Jan 2022 01:57:24 -0800 (PST) Received: from list by lists.xenproject.org with outflank-mailman.258064.443998 (Exim 4.92) (envelope-from ) id 1n9Ol1-00009l-EO; Mon, 17 Jan 2022 09:56:59 +0000 Received: by outflank-mailman (output) from mailman id 258064.443998; Mon, 17 Jan 2022 09:56:59 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1n9Ol1-00006m-5S; Mon, 17 Jan 2022 09:56:59 +0000 Received: by outflank-mailman (input) for mailman id 258064; Mon, 17 Jan 2022 09:56:57 +0000 Received: from se1-gles-flk1-in.inumbo.com ([94.247.172.50] helo=se1-gles-flk1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1n9OeK-0003a5-W7 for xen-devel@lists.xenproject.org; Mon, 17 Jan 2022 09:50:05 +0000 Received: from esa2.hc3370-68.iphmx.com (esa2.hc3370-68.iphmx.com [216.71.145.153]) by se1-gles-flk1.inumbo.com (Halon) with ESMTPS id d65bf9bc-777a-11ec-a115-11989b9578b4; Mon, 17 Jan 2022 10:50:02 +0100 (CET) X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" X-Inumbo-ID: d65bf9bc-777a-11ec-a115-11989b9578b4 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=citrix.com; s=securemail; t=1642413002; h=from:to:cc:subject:date:message-id:in-reply-to: references:content-transfer-encoding:mime-version; bh=hkQ2AWUnU776/5v7x7o+GfYEYjuYGTJaTIjvyxCIHGk=; b=Wv7cXjPCll1xeGfqJc9CX1f+iYZBRljiO/1+rvP4KtSmA3yz9hNAZmiB 6E5+jyKy2/+TQTm2TNdcUwzm0OBYeuE6sYqHBaXK4QheY06gRiBb5idUA YWJ28Bq7Lq3KjLiXujcZp8+siBeBeQHlOst/GN6008djGv7Y8bXG725Tz 0=; Authentication-Results: esa2.hc3370-68.iphmx.com; dkim=pass (signature verified) header.i=@citrix.onmicrosoft.com IronPort-SDR: 8nKOM2fLz4GgF6gh0go48lyr4jQ/s9FLLnaeltdEyjuGCWtBcNefo0vCmkZhBsg+UjniTAGpnn 2UIThhsQElTmlhvA12M5CkIdIuv/0F0xjMhn7pZdI7UA/9/GdTVkfxTc1Dvl/NrKBC99cQMS8D h+haq6+1WAv/9kGvVcuPOXNqBCSbd7Ulk4ORxEVYJI1BBrxpS3WNf9XbmFtDckWmD2ZvQAsuiE 97ztbd8LDgqMdpISV9jzMK6KCMuaLKJUDovZ4WGscjoSrVxyizooTUgHEG2DCYZ36H+9HyxnJ9 yJdI6c5mcrOgN8RKg2Rapnv1 X-SBRS: 5.2 X-MesageID: 62138868 X-Ironport-Server: esa2.hc3370-68.iphmx.com X-Remote-IP: 162.221.156.83 X-Policy: $RELAYED IronPort-Data: A9a23:0ZRm7a8BZFmFX9A4vwZPDrUDZ3mTJUtcMsCJ2f8bNWPcYEJGY0x3z TEaXm6GPKmCNjP3e4xxYYjnphxVusXQn4RmGQZurik8E34SpcT7XtnIdU2Y0wF+jyHgoOCLy +1EN7Es+ehtFie0Si9AttENlFEkvU2ybuOU5NXsZ2YhFWeIdA970Ug5w7dg3dYx6TSEK1jlV e3a8pW31GCNg1aYAkpMg05UgEoy1BhakGpwUm0WPZinjneH/5UmJMt3yZWKB2n5WuFp8tuSH I4v+l0bElTxpH/BAvv9+lryn9ZjrrT6ZWBigVIOM0Sub4QrSoXfHc/XOdJFAXq7hQllkPhJy tNJnpLuFjsmEYj1itsBQjljER9HaPguFL/veRBTsOSWxkzCNXDt3+9vHAc9OohwFuRfWD8Us 6ZCcXZUM07F17neLLGTE4GAguw5K8bmJsUHs2xIxjDFF/c2B5vERs0m4PcGhm5r1pAQTZ4yY eI5d2ZqQizsbCR0J3hMAZUVgNewhHfWJmgwRFW9+vNsvjm7IBZK+LriKt3OYfSRWN5Y2E2fo wru4GDREhwcctuFxlKt4n+qw+PCgy7/cIYTD6GjsO5nhkWJwW4eAwFQUkG0ycRVkWbnBYgZc RZNvHNz8+5iryRHU+URQTWAoniAlRBCBOZfPMgD+j6R24rv4TigUz1soiF6VPQqs8o/RDoP3 1CPns/0CTEHjIB5WU5x5Z/P82rsZHF9wXsqIHZdEFBbu4WLTJQb10qXFr5e/LiJYsoZ8N0a6 xSDt2AAiroalqbnPI3rrAmc01pASnUkJzPZBzk7vEr4tGuVh6b/PuREDGQ3C94adu51qXHb7 RA5dzC2trxmMH10vHXlrB8xNL+o/e2ZFzbXnERiGZIsnxz0pSL5Jt0Au2EieBk5WirhRdMPS BWO0e+2zMUCVEZGkIctO97hYyjU5fWI+SvZugD8MYMVP8kZmP6v9yByf0+At10BY2B3+ZzTz ayzKJ72ZV5DUPwP5GPvG481jOF3rghjmzK7bc2rnnyPjOvFDFbIGOhtDbd7Rr1jhE9yiF+Lo 4832grj40g3bdASlQGMoNFDdg5bfCFrbX00wuQOHtO+zsNdMDhJI9fawK87epwjmKJQl+zS+ Wq6VFMew1367UAr4y3TApy6QL+wD5t5s1whOikgYQSh13Q5ON7956YDbZonO7Ig8bU7n/JzS vAEfeSGA+hOFWubq2hMM8GlodwwbgmviCKPIzGhPGo1cal/SlGb4dTjZAbuqnUDV3Llqcskr rS8/QrHWp5fFR96BcPbZav3nVO8tHQQgsxoWE7MLoUBcUng6tEyeSfwkuU2M4cHLhCanmmW0 AOfABE5o+jRotBqrImV1P7c94rwSrlwBEtXGWXf/I2aDyiC8zrx25JEXcaJYSvZCDH+9pK9a LgH1Pr7KvAGwgpH6tIuD7ZxwKsizNLzvLsGnB98FXDGYln3WLNtJn6KgZtGuqFXn+ILvAK3X gSE+8VAOKXPM8TgSQZDKA0gZ+WF9PcVhjiNsqhlfBSkvHd6rOidTEFfHxiQkygMfrJ6PbQsz folpMNLuRe0jQAnM4regy1Zn4hWwqfsj0nzWkkmPbLW IronPort-HdrOrdr: A9a23:pLDbSK9c1sy4KeeGgbpuk+FAdb1zdoMgy1knxilNoENuHfBwxv rDoB1E73LJYVYqOU3Jmbi7Sc29qBTnhOJICOgqTMqftWzd1ldAQ7sSi7cKrweQeREWs9Qtrp uIEJIOeeEYb2IK9PoSiTPQe71LoKjlzEnrv5al854Ed3AVV0gK1XYfNu/0KDwSeOEQbqBJa6 Z0q/A37AaISDAyVICWF3MFV+/Mq5nik4/nWwcPA1oC5BOVhT2lxbbmG1zAty1uHg9n8PMHyy zoggb57qKsv7WSzQLd7Xba69BzlMH6wtVOKcSQgow+KynqiCyveIN9Mofy9gwdkaWK0hIHgd PMqxAvM4Ba7G7QRHi8pV/X1wzpwF8Vmgnf4G7dpUGmjd3yRTo8BcYEr5leaAHl500pu8w5+L 5X3kqC3qAnQy/orWDY3ZzlRhtqnk27rT4JiugIlUFSVoMYdft4sZEfxkVIC50NdRiKp7zPKN MeTP002cwmMm9zNxvizytSKZ2XLzgO9y69Mwk/Upf/6UkSoJh7p3Fos/D30E1wsK7VcKM0lN gsBJ4Y4I2mfvVmHZ6VO91xM/dfcla9OS4kEFjiaGgPR5t3c04klfbMkcAIDaeRCds18Kc= X-IronPort-AV: E=Sophos;i="5.88,295,1635220800"; d="scan'208";a="62138868" ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=GhUXSSwaGlF2vMz2FYg86dHzCuLgWQKX43iLx8w/Q7IDeKe1jPrdyLYJ0uJYQmSth2vozFxuW4HerFufNIsIHAbD06n/0oeww7+Yg/Di1fpHG3GtUoBqKktQyEIcTut26DHvRHUaJO52h6aP6+Oown67XU3e8meQN6fL98FYyfnV/aXdCvgsSD8mrIIAkiwqg4zSkyPxdSt4oJWw5dFVZgGu8Ib/rwIEMEpc0pmGAvmdQUeK7MhfkzN4CmyHRhVo0e6N6gdt9YAhrfOS5Be2MmgpJn5iymXCFMA5uNTVAuUaezhQ2voVX1PqlKypR1PIaf+C4fJ6KOPCy2ubnO6kKQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; 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=g+CVOtJHKY5btvqsgPmIHyF5mBuPcqGVSNvPsYPwWz0=; b=b1K/H04hu4zHCgGo5r9AucvJDiibSCAFolEMHg5ZTQd2tmmd2O+iIOm+ShptoP8qaMZ+nJXSiQy9iNQszYm+siEUjP/eHrA6N0wTrgUM6DcVxpdp4kGrPrgX0KfP0XBkz5Y+9Up2Atf5iFBUW+18/WQuophHh6q7RfDjsn7XHjtCzociZRUiC1ILrjI0DfFz1BFoRD5ovQ1Uhdv8aZZM+IW3rzKCLcZyy4YSuwbAe1fS5W0BkdpnV7PF31fhC1dTj/Ds+CcwCM6GCg5xTJVCzKGoX+qbkQSoSrKOp5uEdLn/UXgIZsV95yfGD2gXhcX+fkxmSSPCezRZzrbaUxeLcg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com; dkim=pass header.d=citrix.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=citrix.onmicrosoft.com; s=selector2-citrix-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=g+CVOtJHKY5btvqsgPmIHyF5mBuPcqGVSNvPsYPwWz0=; b=g/gG4jW680+HU6UujuY8WRAn+1T9ycVdpxm+GyyNQxbqquXIzUko2u/wvKkLhCyksL74YuShuyU5weex0cCG6zqYSCcP3qh5iLEgy3Vnja/2Y/noqF7E65qfvhZW7T34qRyPKxjgjuEi+angXzoxTww9VCtrly3jRjhqvWwqiA4= From: Roger Pau Monne To: CC: Roger Pau Monne , Wei Liu , Anthony PERARD , Juergen Gross Subject: [PATCH v6 11/12] libs/guest: (re)move xc_cpu_policy_apply_cpuid Date: Mon, 17 Jan 2022 10:48:26 +0100 Message-ID: <20220117094827.16756-12-roger.pau@citrix.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220117094827.16756-1-roger.pau@citrix.com> References: <20220117094827.16756-1-roger.pau@citrix.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: MR2P264CA0170.FRAP264.PROD.OUTLOOK.COM (2603:10a6:501::9) To DS7PR03MB5608.namprd03.prod.outlook.com (2603:10b6:5:2c9::18) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: b791d97b-b104-44bb-dffb-08d9d99eb890 X-MS-TrafficTypeDiagnostic: DM6PR03MB4059:EE_ X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:272; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: L5cpUW3/mPcFULwZe3loqdlfNjA2vKyq3ejNy3R3S6b25fH3ewEIki3Wpz2lEibQdiYk7Lq6tFrjMpFiDDD7YjsHIYM5Ct9gW2cDn63n34ONnymyIlGjg89kEhgNRmfRTScGuk/P0tFYJ0YybZ9uaBktXKSTfwc77xhlk9Awabgrm6+5sjKCxoHQ0CnY7EUdXSM4UGl9tMd5OYzEFd0wH9CP3Cvfa5Eh6iRnf9/THzr0ufbokbSHBcks+AjTVhYChhywMYbXx5sYM0wJVk5D8bH+EMF2jlTGCFt0xPo1Pb65MizIGdm0SFVkqeDturPII1wZklb5EJcLGXuhB8u+Dbj93clEWX9jWCduA1mRzVLFWkpjcxowk0QL7P0j1U3LWwluYMfjhPG6/tJT3W9tcJhdCd3IkP717H4k1lI67lSUqK8OihxNnFPhtai5umIXvoaCuZBjwkYPH73N20n9HMZvrLGC2zc7/9qFa2OKAidakbB/am2fLzww2AllYjXM+4Bna5pYEIVnyNKDmzdmPaR/nFNKcObdfprev+8sw66WC7zdPT4nRry5PXSP68kwy7gyu3zhuy9fl2y/S6AaIo2avR7pbgdDSqVzm5MoDZ5l/2ecT2yswMmMXyDQDvxyAOYrK53PRKRoKKAuPTJqPQ== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DS7PR03MB5608.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(366004)(4326008)(6512007)(8936002)(186003)(36756003)(6506007)(316002)(83380400001)(38100700002)(30864003)(6486002)(26005)(6916009)(86362001)(6666004)(8676002)(54906003)(2616005)(82960400001)(2906002)(5660300002)(66946007)(66556008)(66476007)(1076003)(508600001);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?SzZKbEV4clhvNEk1cUhIRitjTU5rcVBWR2tiYXNQL3NYVXB2RXhWVlBDdTB6?= =?utf-8?B?YVFFWGFuNjRrRm90bjhwWWZtVjk5UEYvdlVZb2NxVFFWT2oxSjFMb2xpVnRL?= =?utf-8?B?YUo5bS9UVkZ4SkVmVFI4MGJidjZnOWtqR1JtOWwwQ0ZqZFdoc1BGVGp6bEFI?= =?utf-8?B?TmcyTEkzZDc5N2xBeFh3Z2RXcUwvMjM3QzhzQ1FBamFHaDZXNWt6UDhMRERa?= =?utf-8?B?MjN3blMycXVpYUFFeWJwVVBFVWp4OEl1aXlLSElSRC9tQmxsaDJmQk5NQ2pq?= =?utf-8?B?QWExK082b1dUZmFzeC9MSlhCYklDaUZWUFFzNGhlbW5vTFdEWFdqbjhlT05p?= =?utf-8?B?ejZ4TmVBNWNKd3NycjZHK0ZZbDV0RHRTejdCL0V2UDQ3aVcxNDJudlJCdCto?= =?utf-8?B?Ny9maUdKRDBiSUN1MjZDME9LT2VCRFcvUFVXdkIwSS9mbzNvcXJNTUpOejNj?= =?utf-8?B?R1JDSzJ5cUZBbkRDSnVHbEJyR1k4dFFSd0p0KzYxdjJmUXhPSVVuSS9BaGJ5?= =?utf-8?B?MURLclJhZGJtVzltNmFwRS83a3NscjFSTVlYNGNlY2dWaXY3VUx1OUdwTFcw?= =?utf-8?B?eXlIS2NReERXOS9wMGlFUDV6ZzNhNVloeFpxRnUzYUx2cVptbUkyUVp3VSt0?= =?utf-8?B?VXFFRUt2L1o4cWN1a0Yya3VyWFlYL1JXaEZrS3pDNWwxZzFlbDMxNGZKNVpO?= =?utf-8?B?ZzhRL2w0U3RmM0hxRDZEUzRpS245aGt5WGs5NHhRL3E3MXp5cFRud0lGRnEr?= =?utf-8?B?Mm5RdThEZ0ZmblR2elZScmJjTzE5QVdNQ2tCSmV5T3cxMTlhK0JtcTFjNDZ0?= =?utf-8?B?VlJndmU3TE1wdEpNWDNQb3pWWUFUQXdHSFhUQlgwM3ZlWnlTanB3OEJxZldm?= =?utf-8?B?MjIxV1ZJekFCcmxJRUVKajZ1Y1VQVWdOZVlDdmpFTW1EZW5iZnRRYWdwR1hP?= =?utf-8?B?MWNKVVphVDVLc2k0eE9WNVFadFNZTURZcXNTdnpyOExZVlBzS1RFYWdNRzBW?= =?utf-8?B?NGs2MDlGdHdCaG9SeWJKOTZnaC9Rcm40eTMrZjQ1VFoxVmU0SVlWWHlRN0cz?= =?utf-8?B?YUFwS0dIYUJhd3NWUnJKbHFhR055S254VlpKcXN3Qm9xYlNzQWVVOWF1Rml0?= =?utf-8?B?UU5SN2NiRmJxTGdaUkJYZVJqZHVSdVMzeldEeHVreTczY0R6cEhWSVlrRXlO?= =?utf-8?B?UW9kUUdEdEtXUEVMUXpNOEE2R3piQ1RMOUFoVFUwaFd6VkVRdlMzNkt1SWJv?= =?utf-8?B?RWlGdllyYjRxdDFsb1RBeU9iQ2hHNnB6SXRBTFBNdks3c29oQWVPME9od3Q4?= =?utf-8?B?N0RuWVFucFUraWUzT2hUcmlRTXlYRWYxdmFaanRmQlhSK3B1d2VEN0dhYmtL?= =?utf-8?B?SmY3SUxtUTN5R3lNMTJVcDk3QnlLcThlenk4cGJmZkN1WnVmV1BLYjJXVXNs?= =?utf-8?B?VUh4eW1iYi9QbWpYK0lKM291WnVuaytVR2RiUnlxWnhiWi9IcGI3QlMvK2Ry?= =?utf-8?B?SmFsQ2hNL1JsNm1ZeVp3RHY1MWc5OVhES242bElYM09jSSs1aGJseEZnbGNQ?= =?utf-8?B?eUgxaGprY1pKcWhsL3R0eFE2RDY0WVIyZHRBbEJOVG9HRlVab0M4QTJqM3ZV?= =?utf-8?B?cjRYeGtFUUFOaW1JU2ordzRBTDc2RjNwWjdhM2JHZDBtQnFBVlh1VktwWUll?= =?utf-8?B?bzRxOTFZUkhDeFdUSmJNR2pyN0MvTlBmRi8yTzJibndVS3RpRENrMStiWFk3?= =?utf-8?B?OEFNQzVLSjUrVVZpamlZUjVTSnRmblR6Rm1oRTZXL1FHYXRhZFZCWXhET2dW?= =?utf-8?B?ZER0cEJnZEU2TUNiMFdFREJDWkNzVUZnZDFmYjdqMTFMSkN1dEJJeWZ3Y01p?= =?utf-8?B?Q2h5eEo0cFRrNnlIRTVSTk4ycFZ1aHpyVnFZWmNWa2pTRVhyZnNRTVgwYUhX?= =?utf-8?B?dzhFVkVFTlpLTGRuVWgvanpuNjROa3lrZGNjS0FVVDArRzhXWHBVZ1g3UHNa?= =?utf-8?B?SVlLTng5S2xHMzZRUlRsYnYwSzZ0b081bWZKT3hMTGVpcVREdDkrU0NQMzBF?= =?utf-8?B?MXFuZmYwa0Fmc1pITTA0NEh0end2SjE1bG9VWGcrS2htNmg5SHBKWGtpVUpi?= =?utf-8?B?WU80Mm01UVJNUHoxejROSU1rNS9hdURvSUxPRXRTN1dFTlU2QS9CK0x6N0R3?= =?utf-8?Q?mFQWCSb9XHasU9hSYZ9fZAU=3D?= X-MS-Exchange-CrossTenant-Network-Message-Id: b791d97b-b104-44bb-dffb-08d9d99eb890 X-MS-Exchange-CrossTenant-AuthSource: DS7PR03MB5608.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Jan 2022 09:49:57.6072 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 335836de-42ef-43a2-b145-348c2ee9ca5b X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: HQRy/r/4bSoqHZZnECeOQfScu8WabuUz9WdIVvzGEvK20qMUpF/pe6Rcv77IUrchonB8oZdcXUYafdwrM4HCqA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR03MB4059 X-OriginatorOrg: citrix.com X-ZohoMail-DKIM: pass (identity @citrix.com) X-ZM-MESSAGEID: 1642413445294100006 Move the logic from xc_cpu_policy_apply_cpuid into libxl, now that the xc_cpu_policy_* helpers allow modifying a cpu policy. By moving such parsing into libxl directly we can get rid of xc_xend_cpuid, as libxl will now implement it's own private type for storing CPUID information, which currently matches xc_xend_cpuid. Note the function logic is moved as-is, but requires adapting to the libxl coding style. No functional change intended. Signed-off-by: Roger Pau Monn=C3=A9 Reviewed-by: Anthony PERARD --- Changes since v2: - Use LOG*D. - Pass a gc to apply_policy. - Use 'r' for libxc return values. --- tools/include/libxl.h | 6 +- tools/include/xenctrl.h | 26 ------ tools/include/xenguest.h | 4 - tools/libs/guest/xg_cpuid_x86.c | 125 -------------------------- tools/libs/light/libxl_cpuid.c | 142 ++++++++++++++++++++++++++++-- tools/libs/light/libxl_internal.h | 26 ++++++ 6 files changed, 165 insertions(+), 164 deletions(-) diff --git a/tools/include/libxl.h b/tools/include/libxl.h index 2bbbd21f0b..8a8032ba25 100644 --- a/tools/include/libxl.h +++ b/tools/include/libxl.h @@ -1420,10 +1420,10 @@ void libxl_bitmap_init(libxl_bitmap *map); void libxl_bitmap_dispose(libxl_bitmap *map); =20 /* - * libxl_cpuid_policy is opaque in the libxl ABI. Users of both libxl and - * libxc may not make assumptions about xc_xend_cpuid. + * libxl_cpuid_policy is opaque in the libxl ABI. Users of libxl may not m= ake + * assumptions about libxl__cpuid_policy. */ -typedef struct xc_xend_cpuid libxl_cpuid_policy; +typedef struct libxl__cpuid_policy libxl_cpuid_policy; typedef libxl_cpuid_policy * libxl_cpuid_policy_list; void libxl_cpuid_dispose(libxl_cpuid_policy_list *cpuid_list); int libxl_cpuid_policy_list_length(const libxl_cpuid_policy_list *l); diff --git a/tools/include/xenctrl.h b/tools/include/xenctrl.h index 745d67c970..79169f8ace 100644 --- a/tools/include/xenctrl.h +++ b/tools/include/xenctrl.h @@ -1803,32 +1803,6 @@ int xc_domain_debug_control(xc_interface *xch, =20 #if defined(__i386__) || defined(__x86_64__) =20 -/* - * CPUID policy data, expressed in the legacy XEND format. - * - * Policy is an array of strings, 32 chars long: - * policy[0] =3D eax - * policy[1] =3D ebx - * policy[2] =3D ecx - * policy[3] =3D edx - * - * The format of the string is the following: - * '1' -> force to 1 - * '0' -> force to 0 - * 'x' -> we don't care (use default) - * 'k' -> pass through host value - * 's' -> legacy alias for 'k' - */ -struct xc_xend_cpuid { - union { - struct { - uint32_t leaf, subleaf; - }; - uint32_t input[2]; - }; - char *policy[4]; -}; - int xc_mca_op(xc_interface *xch, struct xen_mc *mc); int xc_mca_op_inject_v2(xc_interface *xch, unsigned int flags, xc_cpumap_t cpumap, unsigned int nr_cpus); diff --git a/tools/include/xenguest.h b/tools/include/xenguest.h index 8f05d8aa66..3462d27516 100644 --- a/tools/include/xenguest.h +++ b/tools/include/xenguest.h @@ -825,10 +825,6 @@ int xc_cpu_policy_make_compat_4_12(xc_interface *xch, = xc_cpu_policy_t *policy, int xc_cpu_policy_legacy_topology(xc_interface *xch, xc_cpu_policy_t *poli= cy, bool hvm); =20 -/* Apply an xc_xend_cpuid object to the policy. */ -int xc_cpu_policy_apply_cpuid(xc_interface *xch, xc_cpu_policy_t *policy, - const struct xc_xend_cpuid *cpuid, bool hvm); - /* Apply a featureset to the policy. */ int xc_cpu_policy_apply_featureset(xc_interface *xch, xc_cpu_policy_t *pol= icy, const uint32_t *featureset, diff --git a/tools/libs/guest/xg_cpuid_x86.c b/tools/libs/guest/xg_cpuid_x8= 6.c index 974549c0db..8bc7bd7224 100644 --- a/tools/libs/guest/xg_cpuid_x86.c +++ b/tools/libs/guest/xg_cpuid_x86.c @@ -254,131 +254,6 @@ int xc_set_domain_cpu_policy(xc_interface *xch, uint3= 2_t domid, return ret; } =20 -int xc_cpu_policy_apply_cpuid(xc_interface *xch, xc_cpu_policy_t *policy, - const struct xc_xend_cpuid *cpuid, bool hvm) -{ - int rc; - xc_cpu_policy_t *host =3D NULL, *def =3D NULL; - - host =3D xc_cpu_policy_init(); - def =3D xc_cpu_policy_init(); - if ( !host || !def ) - { - PERROR("Failed to init policies"); - rc =3D -ENOMEM; - goto out; - } - - /* Get the domain type's default policy. */ - rc =3D xc_cpu_policy_get_system(xch, hvm ? XEN_SYSCTL_cpu_policy_hvm_d= efault - : XEN_SYSCTL_cpu_policy_pv_defa= ult, - def); - if ( rc ) - { - PERROR("Failed to obtain %s def policy", hvm ? "hvm" : "pv"); - goto out; - } - - /* Get the host policy. */ - rc =3D xc_cpu_policy_get_system(xch, XEN_SYSCTL_cpu_policy_host, host); - if ( rc ) - { - PERROR("Failed to obtain host policy"); - goto out; - } - - rc =3D -EINVAL; - for ( ; cpuid->leaf !=3D XEN_CPUID_INPUT_UNUSED; ++cpuid ) - { - xen_cpuid_leaf_t cur_leaf; - xen_cpuid_leaf_t def_leaf; - xen_cpuid_leaf_t host_leaf; - - rc =3D xc_cpu_policy_get_cpuid(xch, policy, cpuid->leaf, cpuid->su= bleaf, - &cur_leaf); - if ( rc ) - { - ERROR("Failed to get current policy leaf %#x subleaf %#x", - cpuid->leaf, cpuid->subleaf); - goto out; - } - rc =3D xc_cpu_policy_get_cpuid(xch, def, cpuid->leaf, cpuid->suble= af, - &def_leaf); - if ( rc ) - { - ERROR("Failed to get def policy leaf %#x subleaf %#x", - cpuid->leaf, cpuid->subleaf); - goto out; - } - rc =3D xc_cpu_policy_get_cpuid(xch, host, cpuid->leaf, cpuid->subl= eaf, - &host_leaf); - if ( rc ) - { - ERROR("Failed to get host policy leaf %#x subleaf %#x", - cpuid->leaf, cpuid->subleaf); - goto out; - } - - for ( unsigned int i =3D 0; i < ARRAY_SIZE(cpuid->policy); i++ ) - { - uint32_t *cur_reg =3D &cur_leaf.a + i; - const uint32_t *def_reg =3D &def_leaf.a + i; - const uint32_t *host_reg =3D &host_leaf.a + i; - - if ( cpuid->policy[i] =3D=3D NULL ) - continue; - - for ( unsigned int j =3D 0; j < 32; j++ ) - { - bool val; - - switch ( cpuid->policy[i][j] ) - { - case '1': - val =3D true; - break; - - case '0': - val =3D false; - break; - - case 'x': - val =3D test_bit(31 - j, def_reg); - break; - - case 'k': - case 's': - val =3D test_bit(31 - j, host_reg); - break; - - default: - ERROR("Bad character '%c' in policy[%d] string '%s'", - cpuid->policy[i][j], i, cpuid->policy[i]); - goto out; - } - - clear_bit(31 - j, cur_reg); - if ( val ) - set_bit(31 - j, cur_reg); - } - } - - rc =3D xc_cpu_policy_update_cpuid(xch, policy, &cur_leaf, 1); - if ( rc ) - { - PERROR("Failed to set policy leaf %#x subleaf %#x", - cpuid->leaf, cpuid->subleaf); - goto out; - } - } - - out: - xc_cpu_policy_destroy(def); - xc_cpu_policy_destroy(host); - - return rc; -} - xc_cpu_policy_t *xc_cpu_policy_init(void) { return calloc(1, sizeof(struct xc_cpu_policy)); diff --git a/tools/libs/light/libxl_cpuid.c b/tools/libs/light/libxl_cpuid.c index 7dcdb35a4c..556e8f41a7 100644 --- a/tools/libs/light/libxl_cpuid.c +++ b/tools/libs/light/libxl_cpuid.c @@ -309,7 +309,7 @@ int libxl_cpuid_parse_config(libxl_cpuid_policy_list *c= puid, const char* str) char *sep, *val, *endptr; int i; const struct cpuid_flags *flag; - struct xc_xend_cpuid *entry; + struct libxl__cpuid_policy *entry; unsigned long num; char flags[33], *resstr; =20 @@ -387,7 +387,7 @@ int libxl_cpuid_parse_config_xend(libxl_cpuid_policy_li= st *cpuid, char *endptr; unsigned long value; uint32_t leaf, subleaf =3D XEN_CPUID_INPUT_UNUSED; - struct xc_xend_cpuid *entry; + struct libxl__cpuid_policy *entry; =20 /* parse the leaf number */ value =3D strtoul(str, &endptr, 0); @@ -437,6 +437,137 @@ int libxl_cpuid_parse_config_xend(libxl_cpuid_policy_= list *cpuid, return 0; } =20 +static int apply_cpuid(libxl__gc *gc, xc_cpu_policy_t *policy, + libxl_cpuid_policy_list cpuid, bool hvm, domid_t do= mid) +{ + int r, rc =3D 0; + xc_cpu_policy_t *host =3D NULL, *def =3D NULL; + + host =3D xc_cpu_policy_init(); + def =3D xc_cpu_policy_init(); + if (!host || !def) { + LOGD(ERROR, domid, "Failed to init policies"); + rc =3D ERROR_FAIL; + goto out; + } + + /* Get the domain type's default policy. */ + r =3D xc_cpu_policy_get_system(CTX->xch, + hvm ? XEN_SYSCTL_cpu_policy_hvm_default + : XEN_SYSCTL_cpu_policy_pv_default, + def); + if (r) { + LOGED(ERROR, domid, "Failed to obtain %s def policy", + hvm ? "hvm" : "pv"); + rc =3D ERROR_FAIL; + goto out; + } + + /* Get the host policy. */ + r =3D xc_cpu_policy_get_system(CTX->xch, XEN_SYSCTL_cpu_policy_host, h= ost); + if (r) { + LOGED(ERROR, domid, "Failed to obtain host policy"); + rc =3D ERROR_FAIL; + goto out; + } + + for (; cpuid->leaf !=3D XEN_CPUID_INPUT_UNUSED; ++cpuid) { + xen_cpuid_leaf_t cur_leaf; + xen_cpuid_leaf_t def_leaf; + xen_cpuid_leaf_t host_leaf; + + r =3D xc_cpu_policy_get_cpuid(CTX->xch, policy, cpuid->leaf, + cpuid->subleaf, &cur_leaf); + if (r) { + LOGED(ERROR, domid, + "Failed to get current policy leaf %#x subleaf %#x", + cpuid->leaf, cpuid->subleaf); + r =3D ERROR_FAIL; + goto out; + } + r =3D xc_cpu_policy_get_cpuid(CTX->xch, def, cpuid->leaf, cpuid->s= ubleaf, + &def_leaf); + if (r) { + LOGED(ERROR, domid, + "Failed to get def policy leaf %#x subleaf %#x", + cpuid->leaf, cpuid->subleaf); + rc =3D ERROR_FAIL; + goto out; + } + r =3D xc_cpu_policy_get_cpuid(CTX->xch, host, cpuid->leaf, + cpuid->subleaf, &host_leaf); + if (r) { + LOGED(ERROR, domid, + "Failed to get host policy leaf %#x subleaf %#x", + cpuid->leaf, cpuid->subleaf); + rc =3D ERROR_FAIL; + goto out; + } + + for (unsigned int i =3D 0; i < ARRAY_SIZE(cpuid->policy); i++) { + uint32_t *cur_reg =3D &cur_leaf.a + i; + const uint32_t *def_reg =3D &def_leaf.a + i; + const uint32_t *host_reg =3D &host_leaf.a + i; + + if (cpuid->policy[i] =3D=3D NULL) + continue; + +#define test_bit(i, r) !!(*(r) & (1u << (i))) +#define set_bit(i, r) (*(r) |=3D (1u << (i))) +#define clear_bit(i, r) (*(r) &=3D ~(1u << (i))) + for (unsigned int j =3D 0; j < 32; j++) { + bool val; + + switch (cpuid->policy[i][j]) { + case '1': + val =3D true; + break; + + case '0': + val =3D false; + break; + + case 'x': + val =3D test_bit(31 - j, def_reg); + break; + + case 'k': + case 's': + val =3D test_bit(31 - j, host_reg); + break; + + default: + LOGD(ERROR, domid, + "Bad character '%c' in policy[%d] string '%s'", + cpuid->policy[i][j], i, cpuid->policy[i]); + rc =3D ERROR_FAIL; + goto out; + } + + clear_bit(31 - j, cur_reg); + if (val) + set_bit(31 - j, cur_reg); + } +#undef clear_bit +#undef set_bit +#undef test_bit + } + + r =3D xc_cpu_policy_update_cpuid(CTX->xch, policy, &cur_leaf, 1); + if (r) { + LOGED(ERROR, domid, "Failed to set policy leaf %#x subleaf %#x= ", + cpuid->leaf, cpuid->subleaf); + rc =3D ERROR_FAIL; + goto out; + } + } + + out: + xc_cpu_policy_destroy(def); + xc_cpu_policy_destroy(host); + return rc; +} + int libxl__cpuid_legacy(libxl_ctx *ctx, uint32_t domid, bool restore, libxl_domain_build_info *info) { @@ -552,10 +683,9 @@ int libxl__cpuid_legacy(libxl_ctx *ctx, uint32_t domid= , bool restore, } =20 /* Apply the bits from info->cpuid if any. */ - r =3D xc_cpu_policy_apply_cpuid(ctx->xch, policy, info->cpuid, hvm); - if (r) { - LOGEVD(ERROR, domid, -r, "Failed to apply CPUID changes"); - rc =3D ERROR_FAIL; + rc =3D apply_cpuid(gc, policy, info->cpuid, hvm, domid); + if (rc) { + LOGD(ERROR, domid, "Failed to apply CPUID changes"); goto out; } =20 diff --git a/tools/libs/light/libxl_internal.h b/tools/libs/light/libxl_int= ernal.h index 37d5c27756..c99b271f9c 100644 --- a/tools/libs/light/libxl_internal.h +++ b/tools/libs/light/libxl_internal.h @@ -2059,6 +2059,32 @@ typedef yajl_gen_status (*libxl__gen_json_callback)(= yajl_gen hand, void *); _hidden char *libxl__object_to_json(libxl_ctx *ctx, const char *type, libxl__gen_json_callback gen, void *p); =20 +/* + * CPUID policy data, expressed in the internal libxl format. + * + * Policy is an array of strings, 32 chars long: + * policy[0] =3D eax + * policy[1] =3D ebx + * policy[2] =3D ecx + * policy[3] =3D edx + * + * The format of the string is the following: + * '1' -> force to 1 + * '0' -> force to 0 + * 'x' -> we don't care (use default) + * 'k' -> pass through host value + * 's' -> legacy alias for 'k' + */ +struct libxl__cpuid_policy { + union { + struct { + uint32_t leaf, subleaf; + }; + uint32_t input[2]; + }; + char *policy[4]; +}; + _hidden int libxl__cpuid_legacy(libxl_ctx *ctx, uint32_t domid, bool retor= e, libxl_domain_build_info *info); =20 --=20 2.34.1 From nobody Sat May 4 19:45:18 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=citrix.com); dmarc=pass(p=reject dis=none) header.from=citrix.com ARC-Seal: i=2; a=rsa-sha256; t=1642413445; cv=pass; d=zohomail.com; s=zohoarc; b=ZEmSRKyJC1rzbVO2QXhPqWc7OGJcg+Nb5AjqjWnIFw8jTyKTSrl/wuCGZpfr7c96zkiVbdHgfUqApI2tIdTSx+RWUbLzWjGfCLn9m3BVDF/qBcfYTQOOgQpIRxw0/Vvowhz2dVk9tQGPx+S//jkSK5Go6zePlS/988ZypLrAfmc= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1642413445; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=LJf2xu1l9SXGnbg2Yt5yA3xSAk+yaXKaJteq7987IPQ=; b=cAFeSDhtizePQYr7UwW0rgF8lGNBq+Vb0ZP4ENDOngyoT5Ufdi/+MGk8FlsyYD7uzDh9SP97JltPhVETtLy6MzRTFy+umU3wXI3zBEJpDeY68glpcjSd8xCL+7pgE0CmgfcwHiFbC7xI5BYur8UeaCLl9Z7tVItDtBPVqJPNq0g= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=citrix.com); dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1642413445458358.84229209931686; Mon, 17 Jan 2022 01:57:25 -0800 (PST) Received: from list by lists.xenproject.org with outflank-mailman.258059.443986 (Exim 4.92) (envelope-from ) id 1n9Ol0-0008Qg-Gr; Mon, 17 Jan 2022 09:56:58 +0000 Received: by outflank-mailman (output) from mailman id 258059.443986; Mon, 17 Jan 2022 09:56:58 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1n9Ol0-0008QW-Az; Mon, 17 Jan 2022 09:56:58 +0000 Received: by outflank-mailman (input) for mailman id 258059; Mon, 17 Jan 2022 09:56:56 +0000 Received: from se1-gles-flk1-in.inumbo.com ([94.247.172.50] helo=se1-gles-flk1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1n9OeP-0003a5-2N for xen-devel@lists.xenproject.org; Mon, 17 Jan 2022 09:50:09 +0000 Received: from esa3.hc3370-68.iphmx.com (esa3.hc3370-68.iphmx.com [216.71.145.155]) by se1-gles-flk1.inumbo.com (Halon) with ESMTPS id d9618f1d-777a-11ec-a115-11989b9578b4; Mon, 17 Jan 2022 10:50:07 +0100 (CET) X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" X-Inumbo-ID: d9618f1d-777a-11ec-a115-11989b9578b4 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=citrix.com; s=securemail; t=1642413007; h=from:to:cc:subject:date:message-id:in-reply-to: references:content-transfer-encoding:mime-version; bh=PpqceEVBU/IQyI58549xqPJzUhi2ZBLyq+Qisg1SH2M=; b=PVJIiyenJEBTbvNBem05Ul/wjwAeJyciyOe4ZDP0xG00Enqt7S9TuPh5 lgurZ1Njxdsa6YjKva7IxjEuh+dZr2uGhS/E8snbvgmfrRUzI6D/a0OCx AeX0MCannkpItoNak3qwrF1s0bU4LMEssNQHBD1gJAf9Vy6ZBnzNeTvEb M=; Authentication-Results: esa3.hc3370-68.iphmx.com; dkim=pass (signature verified) header.i=@citrix.onmicrosoft.com IronPort-SDR: uOZwPq+4mfqmanm+MypQ7j9yVLmc2XDUEdMrSV9UX6CVOx5jHnfu2FbQD/LW/keXsobDwVSILQ 8nImlKJQnHvq+xBDOQIKxcQa7Cyz303jaxModd1e5YcOoiMOI2TFGWUfuvHnMxDPwV9xy3sufi nRsK9jgccB/PX4uFQwIBB5jaGsNUxmNRem9A95mzwEELOvXOa1cgFecNHrkYO/jVJ8H+h62Bo9 KZbYztsIe+pMRVDGAZzNBvXUqOUnvQX4Q7gfT03FFUrlPyFiZumR9ISgzUJkEL9GugI6NWXuyr DWPywS7njLLtRz4VxmXNUsyL X-SBRS: 5.2 X-MesageID: 62131536 X-Ironport-Server: esa3.hc3370-68.iphmx.com X-Remote-IP: 162.221.156.83 X-Policy: $RELAYED IronPort-Data: A9a23:twtt+KBaWknUNBVW/9nkw5YqxClBgxIJ4kV8jS/XYbTApD8ghjRWm 2QaCj2CbK2PMTGjKdh3Po/kp0gEscWEydIyQQY4rX1jcSlH+JHPbTi7wuYcHM8wwunrFh8PA xA2M4GYRCwMo/u1Si6FatANl1ElvU2zbue6WL6s1hxZH1c+En940E07wobVv6Yz6TSHK1LV0 T/Ni5W31G+Ng1aY5UpNtspvADs21BjDkGtwUm4WPJinj3eH/5UhN7oNJLnZEpfNatI88thW5 Qr05OrREmvxp3/BAz4++1rxWhVirrX6ZWBihpfKMkQLb9crSiEai84G2PQghUh/ugi5uc5Jx Yx26IWeWAENGILeh98WTEwNe81+FfUuFL7vJHG+tYqYzlHccmuqyPJrZK00FdRGoKAtWzgIr KFGbmBWBvyAr7veLLaTUO5ji95lNMD2FIgepmth3XfSCvNOrZXrHf+TvoYFh2lYasZmH9fRV 8QbW2JWUi/lURFhAAgRUrgkpbL97pX4W2IB8w/EzUYt2EDMyCRh3b6rN8DaEvSISt9ShV2wv X/d8iLyBRRyHMySz3+J/2yhgsfLnDjnQ8QCGbug7PlojVaPgGsJB3U+V1G2vP24gU6WQM9EJ gof/S9GkEQp3BX1FJ+nBUT++SPa+E5HMzZNLwEkwDCw+ozK2wvAPTUdYC9HTPoJptANTiN/g zdlgOjVLTBotbSUT1eU+bGVsS6+NEApEIMSWcMXZVBbuoe++enfmjqKF48+S/Dt0rUZDBmpm 2jSxBXSkYn/miLiO0+T2VncywyhqZHSJuLezlWGBzn1hu+ViWPMWmBJ1bQ5xasaRGp6ZgPY1 JThpyR4xLpUZX1qvHbcKNjh5Jnzu5643MT02DaD5aUJ+TW34GKEdotN+jx4L0oBGp9aJWWyP R+I6V8Nus870J6WgUlfOd/Z5yMCl/mIKDgYfqqMMoomjmZZKWdrAx2ClWbPhjuwwSDAYIk0O IuBcNbEMJrpIf8P8dZCfM9EieVD7nlnnQv7HMmnpzz6j+b2TCPLGN8tbQvfBshkvfjsiFiEr L5i2z6ilk83vBvWOHeHqOb+7DkicBAGOHwBg5cGKb7YfFs3QTFJ5j246epJRrGJVp99z4/g1 nq8RlVZ2Bz4g3jGIh+NcXdtdPXkWpMXkJ7xFXVE0Y+A1ydxbICxwr0YcpdrL7Ar+PY6lax/T uUfetXGCfNKE2yV9zMYZJj7jYpjaBX02l7eY3v7OGAyL8x6WgjE2t74ZQ+zpiMAOTW66Jklq Lq62wKFHZdaH1Z+DNzbYe6Exk+quSRPg/p7WkbFe4EBeEjl/IVwBTb2i/s7f5MFJRnZn2PI3 AeKGxYI4+LKptZtotXOgKmFqaavEvd/QRUGTzWKs+7uOHCDrGS5wIJGXOKZRhznVTv5qPe4e OFY7/DgK/lbzlxEhJVxTuRwxqUk6tqx+7IDllZ4HG/GZkiAA697JiXUxtFGs6BAy+MLuQayX U7TqNBWNa/QZZHgGV8VYgEkcv6CxbcfnTyLtaY5J0Dz5SlW+rubUBoNY0nQ2XIFdLYlYpk4x eoBudIN713tgxUnBd+KkyRI+jneNXcHSagm6skXDYKDZtDHEb2ejUgw0hPL3aw= IronPort-HdrOrdr: A9a23:HVcpza3SjzcMRgbnNzSJaAqjBSpyeYIsimQD101hICG9Lfb2qy n+ppgmPEHP5Qr5OEtApTiBUJPwJU80kqQFnbX5XI3SITUO3VHHEGgM1/qF/9SNIVydygcZ79 YaT0EcMqyAMbEZt7eC3ODQKb9Jq7PmgcOVbKXlvg1QpGlRGt9dBmxCe2Gm+yNNNWx77c1TLu vi2iMLnUvqRV0nKuCAQlUVVenKoNPG0LrgfB49HhYirC2Dlymh5rLWGwWRmk52aUID/Z4StU z+1yDp7KSqtP+2jjfaym/o9pxT3P/s0MFKCsCggtUcbh/slgGrToJ8XKDqhkF+nMifrHIR1P XcqRYpOMp+r1vXY2GOuBPonzLt1T4/gkWSv2OwsD/Gm4jUVTg6A81OicZyaR3C8Xctu9l6ze Ziw3+Zn4A/N2KPoA3No/zzEz16nEu9pnQv1cQJiWZEbIcYYLhN6aQC4UJuFosaFi6S0vFpLA BXNrCd2B9qSyLYU5iA1VMfguBEH05DUitue3Jy+/B8iFNt7TVEJ0hx/r1pop5PzuN4d3B+3Z W2Dk1frsA7ciYnV9MMOA4/e7rENoW0e2O1DIuzGyWvKEhVAQOEl3bIiI9Fkd1CPqZ4i6cPpA == X-IronPort-AV: E=Sophos;i="5.88,295,1635220800"; d="scan'208";a="62131536" ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=c/9Xf+zSgXUkM8p+ZdFBBNEV5J9mtJJEkvftA/BqZzRlvnFQWS7FdKcGwEIFa4ySRD+q57LbExOSOLFl4pNy4M760EGNBc6jnYwFBhiLWbgKOeBz20DtTZpl29Fb+E4yj0ctwNMNTgnk3TT/xLgpy7K1ziz2Gk07aYbZF3sv6/+Coqzy+/hA0Aq9SFo4iuVxlzOXshGytkS4wSsIYMfRZBCcUasMibpGPJg4CoR+riN7IcqcnBuQ0rqSCh/OocjdQ4C1sRfBYSwTQXRNTkiLNlX8mfvTDPQrV09/yHOaEIcsGdB3uMeeU2DsSwg/NWLE/Ad8jGTCuOP196cTSOqJtQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; 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=LJf2xu1l9SXGnbg2Yt5yA3xSAk+yaXKaJteq7987IPQ=; b=FzeGBS1/XJE/zTgB6CPeSUPkLP41dZlO8MQtG+4lvuiBGjWq//RAHGpdQe5Hb6DGld+OQfbVqYyl+Zks/Rr5K+7Fck85hRP0wxf8LPUqtRgT4cBe95Z25aYM2SxiBhRPrnY/Kch2LKeBUeBju8Mc58T+JnWcyEM8FD+VgQe5JR2jZEtaODYiei4H+rU9wA/gHBmq5twfhKM1Xqf+5jnupRmFHZJbs5hKqBqIN/7EjGqeDNATBBOQwkP8s/1q8AO7bjKzI0ykx1VqrBr7h0f/OO8BPw35qbGIqgkYrLq7SppUAkm9iwq2ZOh+pBp71sJDD/6LAep5pb58kGDOcoTDBg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com; dkim=pass header.d=citrix.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=citrix.onmicrosoft.com; s=selector2-citrix-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=LJf2xu1l9SXGnbg2Yt5yA3xSAk+yaXKaJteq7987IPQ=; b=bLFirHRIMPUB/BJciGJNgsmDc3e15AayBF9gNGEcOrdto+xwFoWHtAz2YZ03g6vbno+xGOkorYln8wHSeJytmTrjFjtuDcn8BrW3P0AoF/PeHZl2eC3yafC8/kTwAEYMLfgs2hRe3C+KtmyBaqBxpcq6cq6t5ja5ixjlNoPCskQ= From: Roger Pau Monne To: CC: Jan Beulich , Wei Liu , Anthony PERARD , Juergen Gross , Andrew Cooper , =?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= Subject: [PATCH v6 12/12] x86/CPUID: shrink max_{,sub}leaf fields according to actual leaf contents Date: Mon, 17 Jan 2022 10:48:27 +0100 Message-ID: <20220117094827.16756-13-roger.pau@citrix.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220117094827.16756-1-roger.pau@citrix.com> References: <20220117094827.16756-1-roger.pau@citrix.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: MR1P264CA0117.FRAP264.PROD.OUTLOOK.COM (2603:10a6:501:50::10) To DS7PR03MB5608.namprd03.prod.outlook.com (2603:10b6:5:2c9::18) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 8ed79bf0-6099-46ef-73d0-08d9d99ebbab X-MS-TrafficTypeDiagnostic: DM6PR03MB4059:EE_ X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:3173; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: e3vYJb+ELqhaJELkGvtD15K+HiFIifcBtBR3QR7A/KxXDKG9YEnu9kuEEORbWTCHiQHu4E682Iqi+S0qui9GDrSfhalH+MjDcqHo4oXKwLVVoVu1MSZ2qKopKNH65acAw2yd3Bj+MeXWLx37dOgRvKCIhrefwjDZUCAiXrgmY2iIpxwXd4aCoMxhX33jwTzJFCGJgXNBI0wmJB3PzHzrnQLFcesaCu1kIgb4CMnCzAL7aSbO9WeZiDCyRU5nke0NhMEsf61eIkIEHtby/CdaDki87tVSB/iBXoHD4MIWX0c/k81uAa92lWoAZmYjND2wIiXjvGSDvg1ZIsyuJ99csLomCMZM9IRvf6vp52+NLBqMoFEewNOtP/YZXEmiZAtLulGZhl03XUkPyZrqGu2+uJxSVH+XOTUm1bxP08+42TA4DK/YEH2uj+yZnjJRUj5F5Am6vBzn7rS/3GPkuBkC/FnwdwM7ElvOpsmiJlhnGNkl/J7dmoQPvG4lRECxUliuft6jq/JGWs7C7r1uSi3uHE/IkuVsw/46wJPsZqNe7LtBZnErM4NiI6lfVQ3iQb2TloOTUq5I1vLHtNDkrdhgCW5dXA3cXW2WlfhilSb6M7wWO7csbqhUb907S8TN6lDnb1JV6L+/bGZOxfsGHkvk5g== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DS7PR03MB5608.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(366004)(4326008)(107886003)(6512007)(8936002)(186003)(36756003)(6506007)(316002)(83380400001)(38100700002)(6486002)(26005)(6916009)(86362001)(6666004)(8676002)(54906003)(2616005)(82960400001)(2906002)(5660300002)(66946007)(66556008)(66476007)(1076003)(508600001);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?NXBvS2Vkc3ZmK1UxbWRFc0ZXeGZzTzlPcVM0QTNDdVVLcWRJZlY5akF2TmJ0?= =?utf-8?B?R201UFhIblRJVm55NnRpcFFhRUZwRnB6VUc1M2R0UGY3MmJLQWkrL01ZcVJB?= =?utf-8?B?T3M3SzMrVUFzR2hyTmJjTnkxS2tCaUEweFJBVkIvWXVuUW5CZ0ZHL3VpQ0k5?= =?utf-8?B?bEp4enhPcnF6SXlmWWF1cW5Bc0V1ZlpSMHErcEF0NzlFcFhuOTV2ait1WXQr?= =?utf-8?B?UUZQcXV5UXdGRGtHYmlyUDJCYk5PTE5BQ3VKS2N6c2FUYW5NSzRmaG45UTJ1?= =?utf-8?B?dHBteTI0SEtmNE5jeWdUQk1SRzYvQnRDbGY2bU91dE51N25XS0x3MnhZTDBD?= =?utf-8?B?Ritic1l2WG9BWjkraUJCcFNUL0U3aEp1QkZBL1FCQkRtdUo5amFxSGEzZ2Qx?= =?utf-8?B?QTNvSjYxSDVGcEo2UTk3M2IvVkJCbXphdFdLSmdIMktKZGh6Q0pKWlRPelpT?= =?utf-8?B?Y1ZhT2hxSExqSUVVZ1IxdnV1eUVpNjk3MVpLRThXK29wcHEwZkFoS0FqUXl5?= =?utf-8?B?aDJiRzF2elVodE9aaDljQ3JsaVJUSEpUWEdBRFdHQkcxUkY3MzV3b01OQ2xv?= =?utf-8?B?RnlvQUZnWUcvVU8vcTd4djI5OXVaSkdFWkVnWGFGUGhmUU5UME1qSkdLYUZj?= =?utf-8?B?ZnFQNVBVUGhXdGU4bldpdm4yWkFhYm8wUGR1OXMzazZpRzlmSW9abzg3NEVT?= =?utf-8?B?OE5udlFrK0ZQdWY5SUI3RDUrZW1tNjIwQkp4dkFOYWFKL0ljOWFoMVVwQW8z?= =?utf-8?B?bk9DTHpXenpVR1hra3dBKzZ6RG5NbmJxc1k0Sjg4UXVWS3dlSXpJbTBReksy?= =?utf-8?B?TU4rYjdKaHhuclAxQTR3WTFZTHlYWUF1a2hJeTZEZm0wK29jY1R3aHprVHJT?= =?utf-8?B?TmhMYVV3YlZ5bWNrRUxKZ1pKc0VXaW5aNGs2alQyZFZXaVUzYVRyNmxOZXln?= =?utf-8?B?cWtMZCtWbmU2OGlXb1BUU0tNL3d5VjlocFpWUmdNMG90c1FoUjBJenZQeW1I?= =?utf-8?B?R1hRNXZDS0U5c2N1S1dwb1dETy93UEdqa2NXN0taRnpjcEh5N0o3eWhCY1Er?= =?utf-8?B?OTZzNjhLakJ2Y1lhOTJFNGV6TWU1V1ZqVWpQK0tKNWFHL3VZVnFjUDVjanVw?= =?utf-8?B?WS80M2VXWXY4NTZtTVF5dlQwZWtsWlR3a2tvSlpuOFlZQXdJNkNJZUZvK1B4?= =?utf-8?B?bTdYa2VudUlMUUh4V2RTVWxUbU0vMHJwZGxZQ2o2NGErS0ZzZkJGV0E5c0dw?= =?utf-8?B?Z0Q1OWZZU1JVeUIrdlQ3WUVqWW9qZTRleGtYUm51bVVTNHhScjczQmNsUXhw?= =?utf-8?B?c1FiOVRMZnAxWXFkRS91SjNaYU1oMnlBQXc3ZmpmQjJkTmQwdHlmaWcrQXUx?= =?utf-8?B?Yk5Wdy9DNVNiV3A5eEVqTjMvSkRFeGVkS2s2d3c0SHo5RFh2czBZTFdNY2lo?= =?utf-8?B?cWxXaEMvWFpBVGYvWXgrZmdYNXZmVi9BdG9wekJDaFA4OC8xN2xKTXM2REdm?= =?utf-8?B?K05IYmhrWXYvTjFMTHFhNlVoaStpK1JFOUROeVVJVnQ3eWRueTBYMzQ0Mktv?= =?utf-8?B?WUVGc2lGbFZ1ZzJNZ0tIaHQ0eHdNamtZKzhZS0djRnpxZTJpMTd5RTByMTBH?= =?utf-8?B?S01jQkFVN05PSXpvNFEvWHlHK0d5S2ljY1ROYjJnT3BtWDZzTXU3ZkswQU1D?= =?utf-8?B?aUhxZEZtUGlpbzFzcUF6TkZvdDloWlJmVjhFN08wdEx1TWd0WkRscU1RY3Ry?= =?utf-8?B?bXBkcUI0K2ZvYzA4U1REMmlzVXVobStuTGRlby9ZTGgvaVBheGM2NUtXWEVQ?= =?utf-8?B?WWpJSkFVQUZTR0VzeXRnTm8rZ0VhVzZUaGZNTElubDR6cEtnQXppaUNWL0lX?= =?utf-8?B?SGx4dTlLSXFuMGZ3enZ5QWRZSnowc3krci9zTUhUUWI3cWpzZjZjWG5YTjEw?= =?utf-8?B?TDg4bkt1NDNvYUNJaDFDaWdLZWxQTktROTZKRHMyYlhhRHlFZTY3TlE4a2pS?= =?utf-8?B?WVMxOHFaTUFVSkh0eTdZUG51Y3pVVG5oNUlLVW5xaG10Yk9wV3pzWkFGMUdG?= =?utf-8?B?YjhDaHhHMnNXeEordEl2bEIxYVgrQzF0OTFWOVE4SFpKODZvbEc0V2ZUaW8z?= =?utf-8?B?eWhsTnoxZitXOFRqVGlHUVM0UGY1NVFtQUI4MGlEMHNHU3BDTU9EZXdRVzQx?= =?utf-8?Q?jp3ZRPKztMCEWWIS3s1G3cE=3D?= X-MS-Exchange-CrossTenant-Network-Message-Id: 8ed79bf0-6099-46ef-73d0-08d9d99ebbab X-MS-Exchange-CrossTenant-AuthSource: DS7PR03MB5608.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Jan 2022 09:50:02.7990 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 335836de-42ef-43a2-b145-348c2ee9ca5b X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 5dXjuMNVacLrT7PjnhCVMRvpU1fewsu+AqFamduZz9EWZMQJ3Vi2Nvv3c0MDZPyq/7Xt2kf5t3LSe3JSusjxgA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR03MB4059 X-OriginatorOrg: citrix.com X-ZohoMail-DKIM: pass (identity @citrix.com) X-ZM-MESSAGEID: 1642413447374100001 From: Jan Beulich Zapping leaf data for out of range leaves is just one half of it: To avoid guests (bogusly or worse) inferring information from mere leaf presence, also shrink maximum indicators such that the respective trailing entry is not all blank (unless of course it's the initial subleaf of a leaf that's not the final one). This is also in preparation of bumping the maximum basic leaf we support, to ensure guests not getting exposed related features won't observe a change in behavior. Note that such shrinking is only done when creating a policy for a domain from scratch. Migrated in domains keep their previous policy if present untouched, and for migrated in domains not having CPUID data the crafted Xen pre-4.13 policy is not trimmed to keep a behavior compatible with those older Xen versions. Signed-off-by: Jan Beulich Signed-off-by: Roger Pau Monn=C3=A9 --- Changes since v4: - New in this version, picked up from 540d911c2813. - Only shrink policies for newly created domains. --- tools/include/xenguest.h | 3 + tools/libs/guest/xg_cpuid_x86.c | 5 ++ tools/libs/light/libxl_cpuid.c | 7 ++ tools/tests/cpu-policy/test-cpu-policy.c | 101 +++++++++++++++++++++++ xen/include/xen/lib/x86/cpuid.h | 7 ++ xen/lib/x86/cpuid.c | 39 +++++++++ 6 files changed, 162 insertions(+) diff --git a/tools/include/xenguest.h b/tools/include/xenguest.h index 3462d27516..e8b0d3ff16 100644 --- a/tools/include/xenguest.h +++ b/tools/include/xenguest.h @@ -830,6 +830,9 @@ int xc_cpu_policy_apply_featureset(xc_interface *xch, x= c_cpu_policy_t *policy, const uint32_t *featureset, unsigned int nr_features); =20 +/* Sanitize a policy: can change the contents of the passed policy. */ +void xc_cpu_policy_sanitize(xc_interface *xch, xc_cpu_policy_t *policy); + int xc_get_cpu_levelling_caps(xc_interface *xch, uint32_t *caps); int xc_get_cpu_featureset(xc_interface *xch, uint32_t index, uint32_t *nr_features, uint32_t *featureset); diff --git a/tools/libs/guest/xg_cpuid_x86.c b/tools/libs/guest/xg_cpuid_x8= 6.c index 8bc7bd7224..c630dd8a73 100644 --- a/tools/libs/guest/xg_cpuid_x86.c +++ b/tools/libs/guest/xg_cpuid_x86.c @@ -688,3 +688,8 @@ int xc_cpu_policy_apply_featureset(xc_interface *xch, x= c_cpu_policy_t *policy, =20 return 0; } + +void xc_cpu_policy_sanitize(xc_interface *xch, xc_cpu_policy_t *policy) +{ + x86_cpuid_policy_shrink_max_leaves(&policy->cpuid); +} diff --git a/tools/libs/light/libxl_cpuid.c b/tools/libs/light/libxl_cpuid.c index 556e8f41a7..c7294680d4 100644 --- a/tools/libs/light/libxl_cpuid.c +++ b/tools/libs/light/libxl_cpuid.c @@ -689,6 +689,13 @@ int libxl__cpuid_legacy(libxl_ctx *ctx, uint32_t domid= , bool restore, goto out; } =20 + /* + * Do not attempt any modifications if creating a policy that aims to = be + * compatible with pre-4.13 Xen versions. + */ + if (!restore) + xc_cpu_policy_sanitize(ctx->xch, policy); + r =3D xc_cpu_policy_set_domain(ctx->xch, domid, policy); if (r) { LOGED(ERROR, domid, "Failed to set domain CPUID policy"); diff --git a/tools/tests/cpu-policy/test-cpu-policy.c b/tools/tests/cpu-pol= icy/test-cpu-policy.c index 686d7a886c..20419a6108 100644 --- a/tools/tests/cpu-policy/test-cpu-policy.c +++ b/tools/tests/cpu-policy/test-cpu-policy.c @@ -8,10 +8,13 @@ #include =20 #include +#include #include #include #include =20 +#define XSTATE_FP_SSE (X86_XCR0_FP | X86_XCR0_SSE) + static unsigned int nr_failures; #define fail(fmt, ...) \ ({ \ @@ -671,6 +674,103 @@ static void test_msr_get_entry(void) } } =20 +static void test_cpuid_maximum_leaf_shrinking(void) +{ + static const struct test { + const char *name; + struct cpuid_policy p; + } tests[] =3D { + { + .name =3D "basic", + .p =3D { + /* Very basic information only. */ + .basic.max_leaf =3D 1, + .basic.raw_fms =3D 0xc2, + }, + }, + { + .name =3D "cache", + .p =3D { + /* Cache subleaves present. */ + .basic.max_leaf =3D 4, + .cache.subleaf[0].type =3D 1, + }, + }, + { + .name =3D "feat#0", + .p =3D { + /* Subleaf 0 only with some valid bit. */ + .basic.max_leaf =3D 7, + .feat.max_subleaf =3D 0, + .feat.fsgsbase =3D 1, + }, + }, + { + .name =3D "feat#1", + .p =3D { + /* Subleaf 1 only with some valid bit. */ + .basic.max_leaf =3D 7, + .feat.max_subleaf =3D 1, + .feat.avx_vnni =3D 1, + }, + }, + { + .name =3D "topo", + .p =3D { + /* Topology subleaves present. */ + .basic.max_leaf =3D 0xb, + .topo.subleaf[0].type =3D 1, + }, + }, + { + .name =3D "xstate", + .p =3D { + /* First subleaf always valid (and then non-zero). */ + .basic.max_leaf =3D 0xd, + .xstate.xcr0_low =3D XSTATE_FP_SSE, + }, + }, + { + .name =3D "extd", + .p =3D { + /* Commonly available information only. */ + .extd.max_leaf =3D 0x80000008, + .extd.maxphysaddr =3D 0x28, + .extd.maxlinaddr =3D 0x30, + }, + }, + }; + + printf("Testing CPUID maximum leaf shrinking:\n"); + + for ( size_t i =3D 0; i < ARRAY_SIZE(tests); ++i ) + { + const struct test *t =3D &tests[i]; + struct cpuid_policy *p =3D memdup(&t->p); + + p->basic.max_leaf =3D ARRAY_SIZE(p->basic.raw) - 1; + p->feat.max_subleaf =3D ARRAY_SIZE(p->feat.raw) - 1; + p->extd.max_leaf =3D 0x80000000 | (ARRAY_SIZE(p->extd.raw) - 1); + + x86_cpuid_policy_shrink_max_leaves(p); + + /* Check the the resulting max (sub)leaf values against expecation= s. */ + if ( p->basic.max_leaf !=3D t->p.basic.max_leaf ) + fail(" Test %s basic fail - expected %#x, got %#x\n", + t->name, t->p.basic.max_leaf, p->basic.max_leaf); + + if ( p->extd.max_leaf !=3D t->p.extd.max_leaf ) + fail(" Test %s extd fail - expected %#x, got %#x\n", + t->name, t->p.extd.max_leaf, p->extd.max_leaf); + + if ( p->feat.max_subleaf !=3D t->p.feat.max_subleaf ) + fail(" Test %s feat fail - expected %#x, got %#x\n", + t->name, t->p.feat.max_subleaf, p->feat.max_subleaf); + + free(p); + } +} + static void test_is_compatible_success(void) { static struct test { @@ -787,6 +887,7 @@ int main(int argc, char **argv) test_cpuid_deserialise_failure(); test_cpuid_out_of_range_clearing(); test_cpuid_get_leaf_failure(); + test_cpuid_maximum_leaf_shrinking(); =20 test_msr_serialise_success(); test_msr_deserialise_failure(); diff --git a/xen/include/xen/lib/x86/cpuid.h b/xen/include/xen/lib/x86/cpui= d.h index 050cd4f9d1..86cda38986 100644 --- a/xen/include/xen/lib/x86/cpuid.h +++ b/xen/include/xen/lib/x86/cpuid.h @@ -386,6 +386,13 @@ void x86_cpuid_policy_fill_native(struct cpuid_policy = *p); */ void x86_cpuid_policy_clear_out_of_range_leaves(struct cpuid_policy *p); =20 +/** + * Shrink max leaf/subleaf values such that the last respective valid entry + * isn't all blank. While permitted by the spec, such extraneous leaves m= ay + * provide undue "hints" to guests. + */ +void x86_cpuid_policy_shrink_max_leaves(struct cpuid_policy *p); + #ifdef __XEN__ #include typedef XEN_GUEST_HANDLE_64(xen_cpuid_leaf_t) cpuid_leaf_buffer_t; diff --git a/xen/lib/x86/cpuid.c b/xen/lib/x86/cpuid.c index 924f882fc4..6a943cd91b 100644 --- a/xen/lib/x86/cpuid.c +++ b/xen/lib/x86/cpuid.c @@ -236,6 +236,45 @@ void x86_cpuid_policy_clear_out_of_range_leaves(struct= cpuid_policy *p) ARRAY_SIZE(p->extd.raw) - 1); } =20 +void x86_cpuid_policy_shrink_max_leaves(struct cpuid_policy *p) +{ + unsigned int i; + + p->basic.raw[0x4] =3D p->cache.raw[0]; + + for ( i =3D p->feat.max_subleaf; i; --i ) + if ( p->feat.raw[i].a | p->feat.raw[i].b | + p->feat.raw[i].c | p->feat.raw[i].d ) + break; + p->feat.max_subleaf =3D i; + p->basic.raw[0x7] =3D p->feat.raw[i]; + + p->basic.raw[0xb] =3D p->topo.raw[0]; + + /* + * Due to the way xstate gets handled in the hypervisor (see + * recalculate_xstate()) there is (for now at least) no need to fiddle + * with the xstate subleaves (IOW we assume they're already in consist= ent + * shape, for coming from either hardware or recalculate_xstate()). + */ + p->basic.raw[0xd] =3D p->xstate.raw[0]; + + for ( i =3D p->basic.max_leaf; i; --i ) + if ( p->basic.raw[i].a | p->basic.raw[i].b | + p->basic.raw[i].c | p->basic.raw[i].d ) + break; + p->basic.max_leaf =3D i; + + for ( i =3D p->extd.max_leaf & 0xffff; i; --i ) + if ( p->extd.raw[i].a | p->extd.raw[i].b | + p->extd.raw[i].c | p->extd.raw[i].d ) + break; + if ( i | p->extd.raw[0].b | p->extd.raw[0].c | p->extd.raw[0].d ) + p->extd.max_leaf =3D 0x80000000 | i; + else + p->extd.max_leaf =3D 0; +} + const uint32_t *x86_cpuid_lookup_deep_deps(uint32_t feature) { static const uint32_t deep_features[] =3D INIT_DEEP_FEATURES; --=20 2.34.1