From patchwork Mon Jul 5 16:15:11 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jan Beulich X-Patchwork-Id: 12359403 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-17.3 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,USER_AGENT_SANE_1 autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 7E54BC07E99 for ; Mon, 5 Jul 2021 16:15:28 +0000 (UTC) Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 2821C610FB for ; Mon, 5 Jul 2021 16:15:28 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 2821C610FB Authentication-Results: mail.kernel.org; dmarc=fail (p=quarantine dis=none) header.from=suse.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=xen-devel-bounces@lists.xenproject.org Received: from list by lists.xenproject.org with outflank-mailman.150524.278302 (Exim 4.92) (envelope-from ) id 1m0RFe-0003i0-Pz; Mon, 05 Jul 2021 16:15:18 +0000 X-Outflank-Mailman: Message body and most headers restored to incoming version Received: by outflank-mailman (output) from mailman id 150524.278302; Mon, 05 Jul 2021 16:15:18 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1m0RFe-0003ht-M4; Mon, 05 Jul 2021 16:15:18 +0000 Received: by outflank-mailman (input) for mailman id 150524; Mon, 05 Jul 2021 16:15:17 +0000 Received: from us1-rack-iad1.inumbo.com ([172.99.69.81]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1m0RFd-0003hb-8d for xen-devel@lists.xenproject.org; Mon, 05 Jul 2021 16:15:17 +0000 Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.109.102]) by us1-rack-iad1.inumbo.com (Halon) with ESMTPS id c0c01110-17f5-4feb-bf78-3aee15f5569f; Mon, 05 Jul 2021 16:15:16 +0000 (UTC) Received: from EUR05-VI1-obe.outbound.protection.outlook.com (mail-vi1eur05lp2177.outbound.protection.outlook.com [104.47.17.177]) (Using TLS) by relay.mimecast.com with ESMTP id de-mta-31-QofTHA8xOuWANYvNt19zcA-1; Mon, 05 Jul 2021 18:15:14 +0200 Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16) by VI1PR0402MB2829.eurprd04.prod.outlook.com (2603:10a6:800:bb::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.33; Mon, 5 Jul 2021 16:15:13 +0000 Received: from VI1PR04MB5600.eurprd04.prod.outlook.com ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4287.033; Mon, 5 Jul 2021 16:15:13 +0000 Received: from [10.156.60.236] (37.24.206.209) by PR0P264CA0184.FRAP264.PROD.OUTLOOK.COM (2603:10a6:100:1c::28) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.22 via Frontend Transport; Mon, 5 Jul 2021 16:15:12 +0000 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: c0c01110-17f5-4feb-bf78-3aee15f5569f DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619; t=1625501715; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=3iQ7NFvbW+C8AVXqVXivhOo4ScWJDlsGayh6E5RebDA=; b=VTMJdj0DlDgkqRvrk6trBQF2WiU+I5xSefMhgl9E1bzjRAwSEefTtGmWSTWY/i/XORRyy5 ENp6HnzKA3hOBoHmXJSDecp/PWw4nW6bEti1oEoPbg9WrqrdUzJEB0EvtpJSl1An5rbzqI /65gy1TCiIrMUWiPpbhixGB1tjyAM6Y= X-MC-Unique: QofTHA8xOuWANYvNt19zcA-1 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=jvxk71p3QR6z/zusqPx7xVWThBcWaQYHX2jGEWDbXize9feHNtbZmKkHRSxCQfNCZVP71BvNaj4kT0CbOsTCtUwhNrVf2bDhy11dBQglKsUTb3X7D8Cwdtc3v4a1ue+W9vozpJz/mv4VTbiHIMeZVF5JgZyT6iAyZKut1wOhW2PrznDuLSXA/Mpy1ewe/FwICMhkDjMQIC2sgEoObuWQKIlj+I9xgQQlG+60ZlgshA34HEhFHYdmul8fYTvN4UZZ97CBStCIb9Y7KmPYKp781FYaRSpqNWgQWWeml+7rzrrOSyXEuqiENGmyeGDVcSYcdY7FSypdAc4cnDzP/7MTyQ== 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=3iQ7NFvbW+C8AVXqVXivhOo4ScWJDlsGayh6E5RebDA=; b=kTj5xYCcklD3WCzDAdIxQAk/pEp8/L6zo7xtvgsWLarNADYt5Z2aa1WluFgF/gjxNBmdiQ8Nv4ZwogJfr3fwFrFqxTpOoEBYc6KA9ohJnb3FFrj5lLtaXaqun1eHLBxafVPpdJvBXJG5hPXAKB0lkHRSQjWGxirY4GJtiIC1jvwtajvzXadokO9kCBe1a7s1gihAl0cBMwYvBV3yHkT5QJYJnVKZqzcm18o0YgTGEaDxSRIJ/SdKY5gVekcvM+tVFElOWhxlUbcThBH9Eo+FX8aNahwtuPA0MEgnr7DkJ7XENda7KSEoYGrQkPVES3fTA8aRBnQSJV6B0Y4gfCneCQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com; dkim=pass header.d=suse.com; arc=none Authentication-Results: xen.org; dkim=none (message not signed) header.d=none;xen.org; dmarc=none action=none header.from=suse.com; Subject: [PATCH 16/16] x86/P2M: the majority for struct p2m_domain's fields are HVM-only From: Jan Beulich To: "xen-devel@lists.xenproject.org" Cc: Andrew Cooper , Wei Liu , =?utf-8?q?Roger_Pau_Monn=C3=A9?= , George Dunlap , Paul Durrant References: Message-ID: Date: Mon, 5 Jul 2021 18:15:11 +0200 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101 Thunderbird/78.11.0 In-Reply-To: Content-Language: en-US X-Originating-IP: [37.24.206.209] X-ClientProxiedBy: PR0P264CA0184.FRAP264.PROD.OUTLOOK.COM (2603:10a6:100:1c::28) To VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 89328dc8-2bea-42e8-ec37-08d93fd01178 X-MS-TrafficTypeDiagnostic: VI1PR0402MB2829: X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:6430; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: kBgnuxcckez0tquYpN98TWJmV6IcLHtavT7e/OFTJCUWCa2cEpfWNEph5osySZTINf+6/ieVF8o8Na77K/Sr8GnemS8a2YMaj5aNosDOPaCuqlDL3biy8SBCHSOhl+31AYssCIEITpIVBzIccvBju13n1sDimnXtGVNdNGm378H0tx5MMR+jkxQKUdW5QmmD8KDqWOezoTO7qc4I3Sd+BNr9crA3HHAYNOT5Wrs28IeX7oGs9hiw6fEtYzmdffVin1hrzf1xy14t0HOs5KwEHAYUbxVqGWCpfYoM+dL5RcbFY1G0PrUlA3Yb/MAw+t6EOFzclwtH7ay0ow4KpFMAMX7ixlI7qQLcbLcp0PQhxu2VEG0JXdNhUgxA9uxoOt0Fvg0/dvDbDlJ/Vx0iVWbODp9C6x2uDseFt/7TyN0Y9lRpfPC2teEdTBkwIZID9Tj/K2rVQJqZ2EYgQqVWr2a9DsTqLZznmhcT2cexbsaop0HynaCfMSimICNus7uAQ3LM7Sp/YjFMRlaNwVkAEf8ZxWE7wOwjsYKVwPntk4JeusGfO4lBq1yxR6KEIPXxVcy4h0xP7A/yubaL+78moyElNJXP+iTHJeB/i6rKLhYkjSqOW3FRYwyALsce3udjGDKuwbmOcV/g0oARFGedKFZLbjGu5dqTayET8n74n9FmrxaqAdz5cXnr9GwK6sR29H5l/OYMLeqJxCTHZ0HLoQyMOv+qDzd7V/jDZeCIkKTYbe0= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(39850400004)(366004)(136003)(376002)(346002)(396003)(6486002)(26005)(16576012)(478600001)(2616005)(956004)(86362001)(2906002)(6916009)(316002)(83380400001)(8676002)(16526019)(66556008)(36756003)(8936002)(38100700002)(54906003)(31696002)(4326008)(66476007)(186003)(66946007)(31686004)(5660300002)(45980500001)(43740500002);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?UyY0kPoXvzuItPKtS6x3U6BNDkt8?= =?utf-8?q?HNzd5gQiB2mo+bPtMjfHjVCU1bh/naSzOXQbyp3K/bZoa2k12Ca8y6IvoVvS7GWJ6?= =?utf-8?q?wNixDpyMrfY8c1C7/iyctgylG3reNJrMe0OBBV97WhLDh3MeqduHPIapsBkEC6/5F?= =?utf-8?q?h2cNHrkMou2pfxBDol9ZueaAH7Csu6BvKCta2W/b2SoZc78jjzuy0gQEHiHuyEqji?= =?utf-8?q?PMSVtV2uHv5+GGW99w2zIAXTFR7Mr11UtqKfvFp1HrAwzGy5qTbxdqlOzH1FxGit/?= =?utf-8?q?Waaki90ztj3mjYE8osKXYHih2DjoBSRhyStUiZO5MHMB4myzrxRcj5C2OtLAPcjCG?= =?utf-8?q?MaRHWtctxRRsgSm4v5RWa0p4arB9CBgjkaYXVaHM2q1saY32t4u2n0RVibZaMJLQ5?= =?utf-8?q?dK3OOsWDzgmaF+GAX2b0qY4fDuO8Csfqq7B1bIsEEg73i6tIPfMC81CGrVZWDC3YW?= =?utf-8?q?jqhPFLxp0dtPX2r6KrzJPMPJaqMaf9o4Zbh9W6R3+ObhlWzpUREwabzfog8v6tNno?= =?utf-8?q?G2pvRH14JiqpQjKX27Z2dQOzQSqXOKATbkdhxPKJ2lJUbXftYaR8B3foRNrwRJTcr?= =?utf-8?q?YkLpvur/v+q++/qAJMdw+XtL3gDTdlIMfC1RaZno0cxZrdPZfZAIkMZyXe0arm2QQ?= =?utf-8?q?hU4wgaC0IZ+vQHomHbxIMuV9L+quHweFlE2gaycUGyuWgYwsXGx0s4Zjp/bnW8XYb?= =?utf-8?q?FlCo8uhja9+czQzw+CIFN2ZRys7lZaQfVyfRxa3zUlpi1B8WZl0LLH20cci9si7L/?= =?utf-8?q?CqihlstcE2b2YELcgvh9U6M5IzxCapviNo2uinYO88y77w0puZgrE78LtY25uQMtQ?= =?utf-8?q?PCx7ZNG9Avy0ZyU7RGPKG5j03yKbZPpn2rs5Clo9rCsNjCMFIVIsVqGVWTajXecRR?= =?utf-8?q?sAUjzZSENzl7/pCN2Udi9zIYG1liqn5kuaPZsJ/pKmSaBj+FavcTc6dFcSnShp2RF?= =?utf-8?q?WeXTRKtAy/WkDC+hwjw5dYgirx3K9sNzor9RCACW9ShCoNnTRETFIuhH6Em+6kjDB?= =?utf-8?q?HJWrjA18cBjIfclhe+6sCrLQHsLqyCwdYh6ZNwbDpgbMMtpiXSvpysA8JTZJzkRzI?= =?utf-8?q?agFKkiVJYQ9kBA2G52Wdef71TOV7HMaFbTBmS20quNUTPG6i54IMUGulMq6BXdGVE?= =?utf-8?q?JpUxn/HYT9VwSeZZrBWs969EG0hHQWKj6tG9JxvyiEEgcEA7/114kW0igC5GWP1/B?= =?utf-8?q?0RwXq1KIpNDyCi6NXbxH/9H2A7a/D6KjwKbtTf8g1GVVX1uwJtD9CgQyX5krkZRdq?= =?utf-8?q?de3NgtPJas5IzYMQ?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: 89328dc8-2bea-42e8-ec37-08d93fd01178 X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Jul 2021 16:15:12.9979 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: TAXSYouP5oqQROLj/oh5fZPvO6vhavgpVtp27wNU8yxebLDqwJg1+mp0Lqaf9rd5GWWTmbqNyeGFZVYnocF5Qg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR0402MB2829 ..., as are the majority of the locks involved. Conditionalize things accordingly. Also adjust the ioreq field's indentation at this occasion. Signed-off-by: Jan Beulich Reviewed-by: Paul Durrant Reviewed-by: George Dunlap --- a/xen/arch/x86/mm.c +++ b/xen/arch/x86/mm.c @@ -481,8 +481,11 @@ unsigned int page_get_ram_type(mfn_t mfn unsigned long domain_get_maximum_gpfn(struct domain *d) { +#ifdef CONFIG_HVM if ( is_hvm_domain(d) ) return p2m_get_hostp2m(d)->max_mapped_pfn; +#endif + /* NB. PV guests specify nr_pfns rather than max_pfn so we adjust here. */ return (arch_get_max_pfn(d) ?: 1) - 1; } --- a/xen/arch/x86/mm/mm-locks.h +++ b/xen/arch/x86/mm/mm-locks.h @@ -237,6 +237,8 @@ static inline void mm_enforce_order_unlo * * ************************************************************************/ +#ifdef CONFIG_HVM + /* Nested P2M lock (per-domain) * * A per-domain lock that protects the mapping from nested-CR3 to @@ -354,6 +356,8 @@ declare_mm_lock(pod) #define pod_unlock(p) mm_unlock(&(p)->pod.lock) #define pod_locked_by_me(p) mm_locked_by_me(&(p)->pod.lock) +#endif /* CONFIG_HVM */ + /* Page alloc lock (per-domain) * * This is an external lock, not represented by an mm_lock_t. However, --- a/xen/arch/x86/mm/p2m.c +++ b/xen/arch/x86/mm/p2m.c @@ -48,6 +48,8 @@ #undef virt_to_mfn #define virt_to_mfn(v) _mfn(__virt_to_mfn(v)) +DEFINE_PERCPU_RWLOCK_GLOBAL(p2m_percpu_rwlock); + /* Turn on/off host superpage page table support for hap, default on. */ bool_t __initdata opt_hap_1gb = 1, __initdata opt_hap_2mb = 1; boolean_param("hap_1gb", opt_hap_1gb); --- a/xen/arch/x86/mm/p2m-basic.c +++ b/xen/arch/x86/mm/p2m-basic.c @@ -28,16 +28,15 @@ #include "mm-locks.h" #include "p2m.h" -DEFINE_PERCPU_RWLOCK_GLOBAL(p2m_percpu_rwlock); - /* Init the datastructures for later use by the p2m code */ static int p2m_initialise(struct domain *d, struct p2m_domain *p2m) { int ret = 0; - mm_rwlock_init(&p2m->lock); #ifdef CONFIG_HVM + mm_rwlock_init(&p2m->lock); INIT_PAGE_LIST_HEAD(&p2m->pages); + spin_lock_init(&p2m->ioreq.lock); #endif p2m->domain = d; @@ -55,8 +54,6 @@ static int p2m_initialise(struct domain else p2m_pt_init(p2m); - spin_lock_init(&p2m->ioreq.lock); - return ret; } --- a/xen/drivers/passthrough/x86/iommu.c +++ b/xen/drivers/passthrough/x86/iommu.c @@ -338,7 +338,7 @@ bool arch_iommu_use_permitted(const stru return d == dom_io || (likely(!mem_sharing_enabled(d)) && likely(!mem_paging_enabled(d)) && - likely(!p2m_get_hostp2m(d)->global_logdirty)); + likely(!p2m_is_global_logdirty(d))); } /* --- a/xen/include/asm-x86/p2m.h +++ b/xen/include/asm-x86/p2m.h @@ -199,8 +199,10 @@ typedef enum { /* Per-p2m-table state */ struct p2m_domain { +#ifdef CONFIG_HVM /* Lock that protects updates to the p2m */ mm_rwlock_t lock; +#endif /* * Same as a domain's dirty_cpumask but limited to @@ -220,13 +222,14 @@ struct p2m_domain { */ p2m_access_t default_access; +#ifdef CONFIG_HVM + /* Host p2m: Log-dirty ranges registered for the domain. */ struct rangeset *logdirty_ranges; /* Host p2m: Global log-dirty mode enabled for the domain. */ bool global_logdirty; -#ifdef CONFIG_HVM /* Translated domain: p2m mapping */ pagetable_t phys_table; @@ -269,7 +272,6 @@ struct p2m_domain { unsigned int level); void (*write_p2m_entry_post)(struct p2m_domain *p2m, unsigned int oflags); -#endif #if P2M_AUDIT long (*audit_p2m)(struct p2m_domain *p2m); #endif @@ -304,7 +306,6 @@ struct p2m_domain { unsigned long min_remapped_gfn; unsigned long max_remapped_gfn; -#ifdef CONFIG_HVM /* Populate-on-demand variables * All variables are protected with the pod lock. We cannot rely on * the p2m lock if it's turned into a fine-grained lock. @@ -361,27 +362,27 @@ struct p2m_domain { * threaded on in LRU order. */ struct list_head np2m_list; -#endif union { struct ept_data ept; /* NPT-equivalent structure could be added here. */ }; - struct { - spinlock_t lock; - /* - * ioreq server who's responsible for the emulation of - * gfns with specific p2m type(for now, p2m_ioreq_server). - */ - struct ioreq_server *server; - /* - * flags specifies whether read, write or both operations - * are to be emulated by an ioreq server. - */ - unsigned int flags; - unsigned long entry_count; - } ioreq; + struct { + spinlock_t lock; + /* + * ioreq server who's responsible for the emulation of + * gfns with specific p2m type(for now, p2m_ioreq_server). + */ + struct ioreq_server *server; + /* + * flags specifies whether read, write or both operations + * are to be emulated by an ioreq server. + */ + unsigned int flags; + unsigned long entry_count; + } ioreq; +#endif /* CONFIG_HVM */ }; /* get host p2m table */ @@ -645,6 +646,15 @@ int p2m_finish_type_change(struct domain gfn_t first_gfn, unsigned long max_nr); +static inline bool p2m_is_global_logdirty(const struct domain *d) +{ +#ifdef CONFIG_HVM + return p2m_get_hostp2m(d)->global_logdirty; +#else + return false; +#endif +} + int p2m_is_logdirty_range(struct p2m_domain *, unsigned long start, unsigned long end); @@ -792,6 +802,8 @@ extern void audit_p2m(struct domain *d, #define P2M_DEBUG(f, a...) do { (void)(f); } while(0) #endif +#ifdef CONFIG_HVM + /* * Functions specific to the p2m-pt implementation */ @@ -852,7 +864,7 @@ void nestedp2m_write_p2m_entry_post(stru /* * Alternate p2m: shadow p2m tables used for alternate memory views */ -#ifdef CONFIG_HVM + /* get current alternate p2m table */ static inline struct p2m_domain *p2m_get_altp2m(struct vcpu *v) { @@ -905,10 +917,10 @@ int p2m_altp2m_propagate_change(struct d /* Set a specific p2m view visibility */ int p2m_set_altp2m_view_visibility(struct domain *d, unsigned int idx, uint8_t visible); -#else +#else /* CONFIG_HVM */ struct p2m_domain *p2m_get_altp2m(struct vcpu *v); static inline void p2m_altp2m_check(struct vcpu *v, uint16_t idx) {} -#endif +#endif /* CONFIG_HVM */ /* * p2m type to IOMMU flags @@ -942,6 +954,8 @@ static inline unsigned int p2m_get_iommu return flags; } +#ifdef CONFIG_HVM + int p2m_set_ioreq_server(struct domain *d, unsigned int flags, struct ioreq_server *s); struct ioreq_server *p2m_get_ioreq_server(struct domain *d, @@ -1006,6 +1020,8 @@ static inline int p2m_entry_modify(struc return 0; } +#endif /* CONFIG_HVM */ + #endif /* _XEN_ASM_X86_P2M_H */ /*