From nobody Tue May 7 00:28:49 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=none (zoho.com: 192.237.175.120 is neither permitted nor denied by domain of lists.xenproject.org) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=fail (BodyHash is different from the expected one) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1567411971922431.8334991994317; Mon, 2 Sep 2019 01:12:51 -0700 (PDT) Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1i4hR4-0003P5-9W; Mon, 02 Sep 2019 08:11:38 +0000 Received: from us1-rack-iad1.inumbo.com ([172.99.69.81]) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1i4hR2-0003Oy-CT for xen-devel@lists.xenproject.org; Mon, 02 Sep 2019 08:11:36 +0000 Received: from EUR03-DB5-obe.outbound.protection.outlook.com (unknown [40.107.4.107]) by us1-rack-iad1.inumbo.com (Halon) with ESMTPS id 477c0656-cd59-11e9-8980-bc764e2007e4; Mon, 02 Sep 2019 08:11:35 +0000 (UTC) Received: from AM7PR02MB5750.eurprd02.prod.outlook.com (10.141.171.8) by AM7PR02MB5927.eurprd02.prod.outlook.com (10.141.174.151) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2220.18; Mon, 2 Sep 2019 08:11:33 +0000 Received: from AM7PR02MB5750.eurprd02.prod.outlook.com ([fe80::d422:432c:51e0:2d74]) by AM7PR02MB5750.eurprd02.prod.outlook.com ([fe80::d422:432c:51e0:2d74%4]) with mapi id 15.20.2220.022; Mon, 2 Sep 2019 08:11:33 +0000 X-Inumbo-ID: 477c0656-cd59-11e9-8980-bc764e2007e4 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=deMcXJ3rVpwUJ2j+Pzuzwi78H2qgVPoFafOPPEfBAyxH/4hMLaAXAqqChYgPg9w4DwLKua46QzKPZJfjZBES3n11B0oilpBcctPYqHv3a2mRx7FfJdu4BwvZsnLyJAuKCp2fzhLdVDHybR2tpXgxgkdQn2/HVwJk9eoGQoyroa31frgysaLO3pB4tiPeHtP6lr4uCRIJevs+62SmD8Sm2mdV8AtBqQN0o/tPm4yxyfNkBYicH32xCvTbrtScXIAOeaXpPQc4MAn3uRvggjVsPsu07d7b3GKmbFGMHSMWBWTnpq+p2lWXgwXnKyzP+UlttGvnl9CC2gA89Vcr50AFFQ== 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-SenderADCheck; bh=gRGQXjvojTLYc64MbNu5kMSglQlYC1bw44CAr/waOIs=; b=F6EBIKlJ1cjBqKcuopv15VibXASODFb8JDdcnyXgXkGaubusIVVJ9BtD8ss1AqpKHA1HZEuzFCW7nuELA1Ew9fio4INIW10bBd7UrQA/RZYDQnA5h8K0v/EWJjhKhkKjEYrtzflO8HAQ/jod6O0y+WyMRGhDdVA2zp31+2L4z8vR3rAMcD7LSTwwQ9s3Dy5qOKkj5j+OvOxaqTBSO+3V2T2cdSbrH3w0DCI/fAsigNyFu4e0yRSMfU0i6RxuDAJ+Yk/o4/hTD7XJLzNgEjovbFxYJm5erxGVDKEl5xfq4FfonT3ehugSadwtKHpv+voZRz2g5MvsxKRZPOPlnHDfcg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=bitdefender.com; dmarc=pass action=none header.from=bitdefender.com; dkim=pass header.d=bitdefender.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bitdefender.onmicrosoft.com; s=selector2-bitdefender-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=gRGQXjvojTLYc64MbNu5kMSglQlYC1bw44CAr/waOIs=; b=uzS8soyFus8+s+iUhQqFUTAMG7tkKhzffP2GfSXya8PTz8aCVe3uR68DRINnlAtGQVM5/rWFN9Z7XMnNpu4lMnEK0E27WEz6ZIq0Wn7vCzqcuHfpnJN3x/qiO8ijNLYH/5TC4thDMkoHbbBO2RtYdwvWjNuPewlCN4erNdFksqM= From: Alexandru Stefan ISAILA To: "xen-devel@lists.xenproject.org" Thread-Topic: [PATCH v1] x86/altp2m: Add hypercall to create a new view and set sve bits Thread-Index: AQHVYWYIdb/r2yKq9kGUPnrK2APIqg== Date: Mon, 2 Sep 2019 08:11:33 +0000 Message-ID: <20190902081118.31001-1-aisaila@bitdefender.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: PR0P264CA0055.FRAP264.PROD.OUTLOOK.COM (2603:10a6:100:1d::19) To AM7PR02MB5750.eurprd02.prod.outlook.com (2603:10a6:20b:102::8) authentication-results: spf=none (sender IP is ) smtp.mailfrom=aisaila@bitdefender.com; x-ms-exchange-messagesentrepresentingtype: 1 x-mailer: git-send-email 2.17.1 x-originating-ip: [91.199.104.6] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 50bc7e68-86f8-4bba-780c-08d72f7d2aea x-microsoft-antispam: BCL:0; PCL:0; RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600166)(711020)(4605104)(1401327)(2017052603328)(7193020); SRVR:AM7PR02MB5927; x-ms-traffictypediagnostic: AM7PR02MB5927:|AM7PR02MB5927:|AM7PR02MB5927: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:639; x-forefront-prvs: 01480965DA x-forefront-antispam-report: SFV:NSPM; SFS:(10019020)(366004)(39860400002)(346002)(376002)(136003)(396003)(189003)(199004)(2501003)(6506007)(14454004)(256004)(316002)(2616005)(5660300002)(478600001)(66066001)(86362001)(6916009)(305945005)(186003)(71200400001)(107886003)(476003)(486006)(66446008)(2906002)(99286004)(5640700003)(71190400001)(8936002)(66946007)(53936002)(52116002)(102836004)(64756008)(2351001)(6512007)(7736002)(6486002)(25786009)(50226002)(386003)(6116002)(36756003)(26005)(1076003)(4326008)(8676002)(54906003)(3846002)(81166006)(81156014)(14444005)(7416002)(66476007)(66556008)(6436002); DIR:OUT; SFP:1102; SCL:1; SRVR:AM7PR02MB5927; H:AM7PR02MB5750.eurprd02.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; MX:1; A:1; Received-SPF: none (zoho.com: 192.237.175.120 is neither permitted nor denied by domain of lists.xenproject.org) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; received-spf: None (protection.outlook.com: bitdefender.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: 71k/jQ/TNyV5hNp5rWLSDrSeDf9TzroRJqOUv5Bu9K7myAOI1CC8g99IxAkYPzPjNVKElQPOemuBLZvMwwpD/0QHbURD84APQILHtWHtuIw+VJpMeGa6hhNgB5Y9a1WGBZswC1N46jV2eDpX2pCpVs/xKDH9GVobeBVvgYJP70qf1dTS/Phvs6aRAmPAAZNuI8IKitW7iY6Fz8biIo4EdJXx5htoLNWA8UWSlobPVOXFEHwoNTAZXVs0gsxpGVjHZ+OAdqcGDJk7cckIDxvglJZ/Ey6HW+YLrHHBgy5Fd74BI7Q90vVkoLB6ISunfrEs9PdSnhThxLt9705xRoyjsWXuB8xZGy3HJXexONewOC3iIgxD4BITEpGmG9fDUE2dIAkS0NNM97sPwzUMr2LJrWAtTh9bx15OmC+3ocVztSw= MIME-Version: 1.0 X-OriginatorOrg: bitdefender.com X-MS-Exchange-CrossTenant-Network-Message-Id: 50bc7e68-86f8-4bba-780c-08d72f7d2aea X-MS-Exchange-CrossTenant-originalarrivaltime: 02 Sep 2019 08:11:33.5942 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 487baf29-f1da-469a-9221-243f830c36f3 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: j9ikUrKzhXq9eI+INvVOfV3b0uvVYRM/JlfGOLzbWrnPEatdZkVL1cOc+eEj2wUqgSQ3K0JU494SEQ1XHvXJgPG/DJ2IGoRHrUMKsTOe97Q= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM7PR02MB5927 Subject: [Xen-devel] [PATCH v1] x86/altp2m: Add hypercall to create a new view and set sve bits X-BeenThere: xen-devel@lists.xenproject.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Cc: "kevin.tian@intel.com" , "sstabellini@kernel.org" , "jun.nakajima@intel.com" , "wl@xen.org" , "konrad.wilk@oracle.com" , "george.dunlap@eu.citrix.com" , "andrew.cooper3@citrix.com" , "ian.jackson@eu.citrix.com" , "tim@xen.org" , "julien.grall@arm.com" , "jbeulich@suse.com" , Alexandru Stefan ISAILA , "roger.pau@citrix.com" Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) By default the sve bits are not set. This patch adds the option of setting the sve bits upon creating a new altp2m view. Signed-off-by: Alexandru Isaila --- tools/libxc/include/xenctrl.h | 3 +++ tools/libxc/xc_altp2m.c | 28 ++++++++++++++++++++++++++++ xen/arch/x86/hvm/hvm.c | 3 ++- xen/arch/x86/mm/p2m-ept.c | 19 ++++++++++++++++++- xen/arch/x86/mm/p2m.c | 10 +++++----- xen/include/asm-x86/hvm/vmx/vmx.h | 2 +- xen/include/asm-x86/p2m.h | 2 +- xen/include/public/hvm/hvm_op.h | 1 + 8 files changed, 59 insertions(+), 9 deletions(-) diff --git a/tools/libxc/include/xenctrl.h b/tools/libxc/include/xenctrl.h index 0ff6ed9e70..86702e5df8 100644 --- a/tools/libxc/include/xenctrl.h +++ b/tools/libxc/include/xenctrl.h @@ -1925,6 +1925,9 @@ int xc_altp2m_set_vcpu_disable_notify(xc_interface *h= andle, uint32_t domid, uint32_t vcpuid); int xc_altp2m_create_view(xc_interface *handle, uint32_t domid, xenmem_access_t default_access, uint16_t *view_i= d); +int xc_altp2m_create_view_set_sve(xc_interface *handle, uint32_t domid, + xenmem_access_t default_access, + uint16_t *view_id, bool set_sve); int xc_altp2m_destroy_view(xc_interface *handle, uint32_t domid, uint16_t view_id); /* Switch all vCPUs of the domain to the specified altp2m view */ diff --git a/tools/libxc/xc_altp2m.c b/tools/libxc/xc_altp2m.c index a86520c232..aeb9f36ea0 100644 --- a/tools/libxc/xc_altp2m.c +++ b/tools/libxc/xc_altp2m.c @@ -139,6 +139,34 @@ int xc_altp2m_create_view(xc_interface *handle, uint32= _t domid, return rc; } =20 +int xc_altp2m_create_view_set_sve(xc_interface *handle, uint32_t domid, + xenmem_access_t default_access, + uint16_t *view_id, bool set_sve) +{ + int rc; + DECLARE_HYPERCALL_BUFFER(xen_hvm_altp2m_op_t, arg); + + arg =3D xc_hypercall_buffer_alloc(handle, arg, sizeof(*arg)); + if ( arg =3D=3D NULL ) + return -1; + + arg->version =3D HVMOP_ALTP2M_INTERFACE_VERSION; + arg->cmd =3D HVMOP_altp2m_create_p2m; + arg->domain =3D domid; + arg->u.view.view =3D -1; + arg->u.view.hvmmem_default_access =3D default_access; + arg->u.view.set_sve =3D set_sve; + + rc =3D xencall2(handle->xcall, __HYPERVISOR_hvm_op, HVMOP_altp2m, + HYPERCALL_BUFFER_AS_ARG(arg)); + + if ( !rc ) + *view_id =3D arg->u.view.view; + + xc_hypercall_buffer_free(handle, arg); + return rc; +} + int xc_altp2m_destroy_view(xc_interface *handle, uint32_t domid, uint16_t view_id) { diff --git a/xen/arch/x86/hvm/hvm.c b/xen/arch/x86/hvm/hvm.c index 029eea3b85..95d382b114 100644 --- a/xen/arch/x86/hvm/hvm.c +++ b/xen/arch/x86/hvm/hvm.c @@ -4627,7 +4627,8 @@ static int do_altp2m_op( } =20 case HVMOP_altp2m_create_p2m: - if ( !(rc =3D p2m_init_next_altp2m(d, &a.u.view.view)) ) + if ( !(rc =3D p2m_init_next_altp2m(d, &a.u.view.view, + a.u.view.set_sve)) ) rc =3D __copy_to_guest(arg, &a, 1) ? -EFAULT : 0; break; =20 diff --git a/xen/arch/x86/mm/p2m-ept.c b/xen/arch/x86/mm/p2m-ept.c index 6b8468c793..255ed97734 100644 --- a/xen/arch/x86/mm/p2m-ept.c +++ b/xen/arch/x86/mm/p2m-ept.c @@ -1339,7 +1339,7 @@ void setup_ept_dump(void) register_keyhandler('D', ept_dump_p2m_table, "dump VT-x EPT tables", 0= ); } =20 -void p2m_init_altp2m_ept(struct domain *d, unsigned int i) +void p2m_init_altp2m_ept(struct domain *d, unsigned int i, bool set_sve) { struct p2m_domain *p2m =3D d->arch.altp2m_p2m[i]; struct p2m_domain *hostp2m =3D p2m_get_hostp2m(d); @@ -1355,6 +1355,23 @@ void p2m_init_altp2m_ept(struct domain *d, unsigned = int i) ept =3D &p2m->ept; ept->mfn =3D pagetable_get_pfn(p2m_get_pagetable(p2m)); d->arch.altp2m_eptp[i] =3D ept->eptp; + + if ( set_sve ) + { + unsigned long gfn =3D 0, max_gpfn =3D domain_get_maximum_gpfn(d); + + for( ; gfn < max_gpfn; ++gfn ) + { + mfn_t mfn; + p2m_access_t a; + p2m_type_t t; + + altp2m_get_effective_entry(p2m, _gfn(gfn), &mfn, &t, &a, + AP2MGET_query); + p2m->set_entry(p2m, _gfn(gfn), mfn, PAGE_ORDER_4K, t, a, true); + + } + } } =20 unsigned int p2m_find_altp2m_by_eptp(struct domain *d, uint64_t eptp) diff --git a/xen/arch/x86/mm/p2m.c b/xen/arch/x86/mm/p2m.c index 8a5229ee21..4ec61740f6 100644 --- a/xen/arch/x86/mm/p2m.c +++ b/xen/arch/x86/mm/p2m.c @@ -2528,7 +2528,7 @@ void p2m_flush_altp2m(struct domain *d) altp2m_list_unlock(d); } =20 -static int p2m_activate_altp2m(struct domain *d, unsigned int idx) +static int p2m_activate_altp2m(struct domain *d, unsigned int idx, bool se= t_sve) { struct p2m_domain *hostp2m, *p2m; int rc; @@ -2554,7 +2554,7 @@ static int p2m_activate_altp2m(struct domain *d, unsi= gned int idx) goto out; } =20 - p2m_init_altp2m_ept(d, idx); + p2m_init_altp2m_ept(d, idx, set_sve); =20 out: p2m_unlock(p2m); @@ -2572,13 +2572,13 @@ int p2m_init_altp2m_by_id(struct domain *d, unsigne= d int idx) altp2m_list_lock(d); =20 if ( d->arch.altp2m_eptp[idx] =3D=3D mfn_x(INVALID_MFN) ) - rc =3D p2m_activate_altp2m(d, idx); + rc =3D p2m_activate_altp2m(d, idx, false); =20 altp2m_list_unlock(d); return rc; } =20 -int p2m_init_next_altp2m(struct domain *d, uint16_t *idx) +int p2m_init_next_altp2m(struct domain *d, uint16_t *idx, bool set_sve) { int rc =3D -EINVAL; unsigned int i; @@ -2590,7 +2590,7 @@ int p2m_init_next_altp2m(struct domain *d, uint16_t *= idx) if ( d->arch.altp2m_eptp[i] !=3D mfn_x(INVALID_MFN) ) continue; =20 - rc =3D p2m_activate_altp2m(d, i); + rc =3D p2m_activate_altp2m(d, i, set_sve); =20 if ( !rc ) *idx =3D i; diff --git a/xen/include/asm-x86/hvm/vmx/vmx.h b/xen/include/asm-x86/hvm/vm= x/vmx.h index ebaa74449b..7707f1768f 100644 --- a/xen/include/asm-x86/hvm/vmx/vmx.h +++ b/xen/include/asm-x86/hvm/vmx/vmx.h @@ -598,7 +598,7 @@ void ept_p2m_uninit(struct p2m_domain *p2m); void ept_walk_table(struct domain *d, unsigned long gfn); bool_t ept_handle_misconfig(uint64_t gpa); void setup_ept_dump(void); -void p2m_init_altp2m_ept(struct domain *d, unsigned int i); +void p2m_init_altp2m_ept(struct domain *d, unsigned int i, bool set_sve); /* Locate an alternate p2m by its EPTP */ unsigned int p2m_find_altp2m_by_eptp(struct domain *d, uint64_t eptp); =20 diff --git a/xen/include/asm-x86/p2m.h b/xen/include/asm-x86/p2m.h index 94285db1b4..c85c91819e 100644 --- a/xen/include/asm-x86/p2m.h +++ b/xen/include/asm-x86/p2m.h @@ -884,7 +884,7 @@ bool p2m_altp2m_get_or_propagate(struct p2m_domain *ap2= m, unsigned long gfn_l, int p2m_init_altp2m_by_id(struct domain *d, unsigned int idx); =20 /* Find an available alternate p2m and make it valid */ -int p2m_init_next_altp2m(struct domain *d, uint16_t *idx); +int p2m_init_next_altp2m(struct domain *d, uint16_t *idx, bool set_sve); =20 /* Make a specific alternate p2m invalid */ int p2m_destroy_altp2m_by_id(struct domain *d, unsigned int idx); diff --git a/xen/include/public/hvm/hvm_op.h b/xen/include/public/hvm/hvm_o= p.h index c6cd12f596..924d947e78 100644 --- a/xen/include/public/hvm/hvm_op.h +++ b/xen/include/public/hvm/hvm_op.h @@ -244,6 +244,7 @@ struct xen_hvm_altp2m_view { /* Create view only: default access type * NOTE: currently ignored */ uint16_t hvmmem_default_access; /* xenmem_access_t */ + uint8_t set_sve; /* bool value */ }; typedef struct xen_hvm_altp2m_view xen_hvm_altp2m_view_t; DEFINE_XEN_GUEST_HANDLE(xen_hvm_altp2m_view_t); --=20 2.17.1 _______________________________________________ Xen-devel mailing list Xen-devel@lists.xenproject.org https://lists.xenproject.org/mailman/listinfo/xen-devel