[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH v2 12/18] AMD/IOMMU: allow use of superpage mappings


  • To: Jan Beulich <jbeulich@xxxxxxxx>
  • From: Roger Pau Monné <roger.pau@xxxxxxxxxx>
  • Date: Fri, 10 Dec 2021 16:06:44 +0100
  • 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
  • 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=uDCPmv99RgsOQid8kfkssZfAP/dlCNB1gprSfG0nPq0=; b=m2hkrXRBvhSFszCyPc1WDlXLg0GN56CZoGo7UNBvNP2y5zZX/cPB0QNMlT293KYdzaCg0VwB5jBsqFGS1135BtdZHeJD//d0VBOOKyvDBOJMTt2SJd+W7nP4JLKSd8KIWMYXYjZlC7DJX6pPpCiyCA9d8OZxs3/Tv1oWdl/t2tsRL5YJxYU2BoGlkBS2TVMQnzLJ1ro196oMFbv4g/KUjIgqbJobTAIjSsQCFB1+O6/fvJyzO/FazTQMnicuxgRRPZ++soFurOv97CwvWpOZQRsizQDYHckdHDSGaCcRrzCsDNwXXG2cuqA98btZVJ284dBWr7bBwg0cveZcXd353g==
  • Arc-seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=F19eNeFCVVOzMqHNbc/kiDsN1e9mruytmJ+7cPTvBGSn29crSEFyhSN6tyy/XttVAa888qGVUARfIUbnyzzLfchTx2cUXDZu8C5JdnmrmqlOU+BNdKKdt1T01A706SOVJAWsHkoM7zyDBcMSU1NNFAQkrMtoUVCspRR5nl90bG8/QSM4hMIyb16ByVivlj942NRARGXnq6ALADosC6dXbfFPsHCEGk2bqYsuh/5zFgzU1t+ntr7oKof1bcrs0PH63O+hj+Hdp085JwBTjiFR5gNOOLImunZo2qaxX8XrWLjL+zHCF5XGdyGDaFQlkPtS6xC8KI8lXhEmGX4Z21GkIQ==
  • Authentication-results: esa4.hc3370-68.iphmx.com; dkim=pass (signature verified) header.i=@citrix.onmicrosoft.com
  • Cc: "xen-devel@xxxxxxxxxxxxxxxxxxxx" <xen-devel@xxxxxxxxxxxxxxxxxxxx>, Paul Durrant <paul@xxxxxxx>, Andrew Cooper <andrew.cooper3@xxxxxxxxxx>, George Dunlap <george.dunlap@xxxxxxxxxx>, Ian Jackson <iwj@xxxxxxxxxxxxxx>, Julien Grall <julien@xxxxxxx>, Stefano Stabellini <sstabellini@xxxxxxxxxx>, Wei Liu <wl@xxxxxxx>
  • Delivery-date: Fri, 10 Dec 2021 15:07:21 +0000
  • Ironport-data: A9a23:TKnItK1mNw8xf5tsmfbD5XJ2kn2cJEfYwER7XKvMYLTBsI5bpz1Rn DQcDGrXafmPZWf2Lt51YIng8BhQ6pLQmNNjSAVqpC1hF35El5HIVI+TRqvS04J+DSFhoGZPt Zh2hgzodZhsJpPkS5PE3oHJ9RGQ74nRLlbHILOCanAZqTNMEn970Es5wrZh2+aEvPDia++zk YKqyyHgEAfNNw5cagr4PIra9XuDFNyr0N8plgRWicJj5TcypFFMZH4rHomjLmOQf2VhNrXSq 9Avbl2O1jixEx8FUrtJm1tgG6EAaua60QOm0hK6V0U+6/TrS+NbPqsTbZIhhUlrZzqhlupxk O1J7cGMChoHPZD1lLo2QilxHHQrVUFG0OevzXmXtMWSywvNcmf2wuUoB0YzVWEa0r8pWycUr 6VecW1TKEDY7w616OvTpu1EnMMsIdOtJIoCknph0SvYHbAtRpWrr6Diu4YIhGls2p4m8fD2T vUhNSQsY0X6Zz5WC3IGEYgzhcazmSyqG9FfgA3M/vdmi4TJ9yRzzbzsPdz9atGMA8JPkS6wv Xna9m70BhUbMt23yjef9H+owOjVkkvTR4Y6BLC+sPlwjzW7x3MRIA0bU0Ohpvu0gVL4XMhQQ 2QW8Cczqak59GSwU8LwGRa/pRasrhMaHtZdDeA+wAWM0bbPpRaUAHAeSTxMY8Bgs9U5LRQy3 0KNt8PkA3poqrL9dJ6G3u7K93XoY3FTdDJcI39fJecY3zX9iIgJjkr3So4+LO2ooN7IID2u6 CG6hSdr0t3/kvU3/6m8+FnGhRelqZ7IUhM5623rY4610u9qTNX7PtL1sDA3+d4Fdd/EFQfZ4 BDojuDDtLhmMH2bqMCarAzh9pmN7u3NDjDTiEUH83IJp2X0oC7LkWy9DVhDyKZV3iQsJW+Bj Kz741o5CHpv0J2CN/cfj2WZUZtC8EQYPY65Ps04l/IXCnSLSCeJ/Tt1eWmb1H33nU4nnMkXY MnAIJ7zUCpEUfU7lFJaotvxN5dxnkjSIkuJGvjGI+mPi+LCNBZ5t59bWLdxUgzJxPzd+1iEm zquH8CL1w9eQIXDjtr/quYuwaQxBSFjX/je8pUPHsbae1YOMDxxWpf5nOJ6E6Q4zvs9qws91 izkMqOu4AGk3iOvxMTjQi0LVY4Dqr4j9y9mZnJ1Yg7zs5XhCK72hJoim1IMVeBP3MRozOJuT ulDfMOFA/9VTS/A9ShbZp74xLGOvjzx2mpi5gKpP2oyeYBOXQvM9oO2dwfj7nBWXCG2qdE/s /ur0QaCGcgPQAFrDcD3bvOzzgzu4ShBybwqB0aYcMNOfEjM8ZRxL3CjhPEAPMxRew7IwSGX1 ljKDE5A9/XNuYI87PLAmbuA89WyC+J7E0cDRzvb4L+6ODP05G2mxYMcAu+EcSqEDDH/+bm4Z PUTxPb5aaVVkFFPuot6MrBq0aNhuIe/++4EllxpRSyZYU6qB7VsJmi98fNO7qAdlKVEvQaWW 16U/oUIM7u+J864QkUaIxAob7rf2KhMyCXS9/k8PG7z+DRzoOicSUxXMhSB1H5dIb9yPN93y OstopdLuQm2ix5sOdealCFEsW+LKyVYAakgs5gbBq7tixYqlQ4eMcCNVHeu7cHdcchIP2krP iSQ1fjLiLlrz0bfd2Y+SCrW1u1HiJVS4B1HwTfu/bhSdgYpUhPv4CBszA==
  • Ironport-hdrordr: A9a23:57I5lalNZoiuF3ca9kD5fXD3zFLpDfPIimdD5ihNYBxZY6Wkfp +V88jzhCWZtN9OYhwdcLC7WZVpQRvnhPlICK0qTM2ftWjdyRCVxeRZg7cKrAeQeREWmtQtsJ uINpIOdeEYbmIK8/oSgjPIaurIqePvmMvD5Za8vgZQpENRGtldBm9Ce3mm+yZNNW977PQCZf 6hDp0tnUvdRZ1bVLXxOlA1G8z44/HbnpPvZhALQzYh9Qm1lDutrJr3CQKR0BsyWy5Ghe5Kyx mJryXJooGY992rwB7V0GHeq7xQhdva09NGQOiBkNIcJDnAghuhIK5hR7qBljYop/zH0idhrP D85zMbe+hj4XLYeW+45TPrxgnbyT4rr0TvzFeJ6EGT1/DRdXYfMY5slIhZehzW5w4Lp9dnyp 9G2Gqfqt5+EQ7AtD6V3amHazha0m6P5VYym+8aiHJSFaEEbqVKkIAZ9ERJVL8dASPB7pw9Gu UGNrCS2B9vSyLbU5nlhBgt/DT1NU5DXCtuA3Jy9vB96gIm3UyQlCAjtYkidnRpzuNLd3AL3Z WBDk1SrsA8ciYhV9MIOA4we7rGNoXze2O/DIuzGyWvKEhVAQOEl3bIiI9Fkd1CPqZ4i6cPpA ==
  • Ironport-sdr: A271ZuiUczvl67zjsTHEO9ohmfEqhN3Dj26ivXM0SAie4ALlS7malkGThZCKKwjKvyqJf70Kx1 hlRhhneRQc8ZOXb3H2M03eAIZwGslIkjAGRrU3s8HoLsPjUsDCJwq+/hFRos2rRHU6zr/HM2MO R5g8fyyJQ1shmnWlPfAEVjzwC/T/xU1HYOMYOoYPbplC/RgOQgs7k/6qcg7BydIagrHze8pHCY C1qF4a6PIThmVT+okyjHhbyiSFr/DqEKUsYYQNqyEQWYUS8sNugkI2kGyg0royYL2zwXKnl9pt m8RxXXEPNKwwa8w8ezTX8m3h
  • List-id: Xen developer discussion <xen-devel.lists.xenproject.org>

On Fri, Sep 24, 2021 at 11:52:14AM +0200, Jan Beulich wrote:
> No separate feature flags exist which would control availability of
> these; the only restriction is HATS (establishing the maximum number of
> page table levels in general), and even that has a lower bound of 4.
> Thus we can unconditionally announce 2M, 1G, and 512G mappings. (Via
> non-default page sizes the implementation in principle permits arbitrary
> size mappings, but these require multiple identical leaf PTEs to be
> written, which isn't all that different from having to write multiple
> consecutive PTEs with increasing frame numbers. IMO that's therefore
> beneficial only on hardware where suitable TLBs exist; I'm unaware of
> such hardware.)

Also replacing/shattering such non-standard page sizes will require
more logic, so unless there's a performance benefit I would just skip
using them.

> 
> Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx>
> ---
> I'm not fully sure about allowing 512G mappings: The scheduling-for-
> freeing of intermediate page tables can take quite a while when
> replacing a tree of 4k mappings by a single 512G one. Plus (or otoh)
> there's no present code path via which 512G chunks of memory could be
> allocated (and hence mapped) anyway.

I would limit to 1G, which is what we support for CPU page tables
also.

> --- a/xen/drivers/passthrough/amd/iommu_map.c
> +++ b/xen/drivers/passthrough/amd/iommu_map.c
> @@ -32,12 +32,13 @@ static unsigned int pfn_to_pde_idx(unsig
>  }
>  
>  static union amd_iommu_pte clear_iommu_pte_present(unsigned long l1_mfn,
> -                                                   unsigned long dfn)
> +                                                   unsigned long dfn,
> +                                                   unsigned int level)
>  {
>      union amd_iommu_pte *table, *pte, old;
>  
>      table = map_domain_page(_mfn(l1_mfn));
> -    pte = &table[pfn_to_pde_idx(dfn, 1)];
> +    pte = &table[pfn_to_pde_idx(dfn, level)];
>      old = *pte;
>  
>      write_atomic(&pte->raw, 0);
> @@ -288,10 +289,31 @@ static int iommu_pde_from_dfn(struct dom
>      return 0;
>  }
>  
> +static void queue_free_pt(struct domain *d, mfn_t mfn, unsigned int 
> next_level)

Nit: should the last parameter be named level rather than next_level?
AFAICT it's the level of the mfn parameter.

Should we also assert that level (or next_level) is always != 0 for
extra safety?

Thanks, Roger.



 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.