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

Re: [PATCH v2 14/18] IOMMU: fold flush-all hook into "flush one"


  • To: Jan Beulich <jbeulich@xxxxxxxx>
  • From: Roger Pau Monné <roger.pau@xxxxxxxxxx>
  • Date: Tue, 14 Dec 2021 10:27:18 +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=EbgA2lJ5pJeptvlrLlwZHmNEZyQEIJL1N2gNhGXwc4A=; b=EYOhZ314dLfzgXdL5i6JJkFjagdAYO0kmN2wy4j41ZKPNDon08qhx9V6vahu8kxnQvk2uRaV+WThjMe+hGzBGaz/N5rZQSsP0gfsTRV703EgsUXEcZdSuI7D5JpV9T2ZuhgRcji4z/5uEY7HgRY3mgRsHRelurNPsixuZk5TxIMnPEHu9UxEhK5RcHMffIPtPxN5EhC3LlHVmzPs7OSi4amJUuGnBkWAjN/we0rk1ey5Iop9Za9qN25pdtzz54X22+B48i0cjSxAZajTFDre25Jl1Yy3c7IFBqa77cO5ZRHudcItRBCN9QDvuUKN7+/iiFXxnel64YOAvPMuQQLY2Q==
  • Arc-seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=byuhe0ScOb/xX16u8PJ0fIkk/wBkbm+P/lJVcbz4J2+kTl25uZPtcaNMjI4LuLqiGA7vSqJ5OdsRakHBh14QoMeN5HHZn3f962n+vwIjVx/TlM6CdaNOek6Ajcif60INLXkS9cAWRGoHsPM2F3YrzAmDz0xnP0AwUER6KFQ4YkQhP6pJglLoHxUVKP7qAZZdYKmD4sZN52+g1ood2Wa4zUBkb9c97B/aXfi2BsUnW8kAsKM8/VDkqJYx+ZVTXS954K1LVLfJ50y4T8hdeh+Nz4jC+cpYC11UaNdbWLWg5/DY09hxnzJIlhS23SxKa+2FYZ2paEJ48VBETn6I9myO1Q==
  • Authentication-results: esa1.hc3370-68.iphmx.com; dkim=pass (signature verified) header.i=@citrix.onmicrosoft.com
  • Cc: "xen-devel@xxxxxxxxxxxxxxxxxxxx" <xen-devel@xxxxxxxxxxxxxxxxxxxx>, "Andrew Cooper" <andrew.cooper3@xxxxxxxxxx>, Paul Durrant <paul@xxxxxxx>, Kevin Tian <kevin.tian@xxxxxxxxx>, Julien Grall <julien@xxxxxxx>, Stefano Stabellini <sstabellini@xxxxxxxxxx>, Volodymyr Babchuk <volodymyr_babchuk@xxxxxxxx>, Bertrand Marquis <bertrand.marquis@xxxxxxx>, Rahul Singh <Rahul.Singh@xxxxxxx>
  • Delivery-date: Tue, 14 Dec 2021 09:27:53 +0000
  • Ironport-data: A9a23:Qyi6DaItPDZEIy2YFE+RsZMlxSXFcZb7ZxGr2PjKsXjdYENS1jAAm GYWDT+Fa6yIazDwedwiPIXg9k5SsMPWyIVrG1ZlqX01Q3x08seUXt7xwmUcns+xwm8vaGo9s q3yv/GZdJhcokcxIn5BC5C5xZVG/fjgqoHUVaiUakideSc+EH140Eg6x7Zj6mJVqYPR7z2l6 IuaT/L3YDdJ6xYsWo7Dw/vewP/HlK2aVAIw5jTSV9gS1LPtvyB94KYkDbOwNxPFrrx8RYZWc QphIIaRpQs19z91Yj+sfy2SnkciGtY+NiDW4pZatjTLbrGvaUXe345iXMfwZ3u7hB2usO5vl fEKmaWzZjsQNKTFp+ItcyVXRnQW0a1uoNcrIFC6uM2XiUbHb2Ht07NlC0Re0Y8wo7gtRzsUr LpBdW5LPkvra+GemdpXTsF2gcsuNo/zNZ43sXB81zDJS/0hRPgvRo2UvYQFg2Zh2KiiG97cY 401TR01dyjFTD0XH35GLbQ4mOeR0yyXnzpw9wvO+PtfD3Lo5BJ21L/hId/EYOuATM9enlubj m/e9mG/CRYfXPSE0iaM+H+ogu7JnAv4VZgUGbn+8eRl6HWpz2wODFstVF20odGwkEv4UNVaQ 2Qe9zAyt6E0+AquR8PkQhyjiHeeu1gXXN84O+8n7ACAzILE7gDfAXILJhZRZdpjuMIoSDgC0 l6Sg8ivFTFpqKeSS3+W6vGTtzzaESofIHIGZCQEZRAY+NSlq4Y25jrMQ8hiFuipj9TzMTD23 z2O6iM5gt07lccW042r8FaBhCijzqUlVSZsuF+RBDj8qFokOsj1PORE9GQ3895nA7iHE33Gk EEHtPSn5ukHMpe9tBCCFbBl8K6S296JNzjVgFhKFpYn9iiw93PLQb288A2SN28ybJ9aJGaBj Fv7/FoIucQNZCfCgbpfOtrpU6wXIb7c+cMJvxw+Rv5HedBPeQCO50mCjmbAjjm2wCDAfUzSU Kp3kPpA715GWcyLLxLsHo/xNIPHIAhkmgs/orihkHyaPUK2PiL9dFv8GALmghoFxK2Fuh7J1 N1UKtGHzR5SOMWnPHKGrdRKdQ1UcilrbXwTlyCxXrTcSuaBMDt+Y8I9PJt7I9A190irvrmgE o6Btr9wlwOk2CyvxfSiYXF/crL/NauTXlpgVRHAyW2AgiB5Ca72tf93X8JuIdEPqb07pdYpH qJtU5jRXZxypsHvpm11gW/V99c5KnxGRGumYkKYXdTIV8I6GlGSpIa7JlCHGetnJnPfiPbSa oaIj2vzaZECWx5jHIDRbveuxEm2pn8ThKR5WE6gHzWZUB+EHFFCJ3Ojg/kpDdsLLBmflDKW2 xzPWUUTpPXXop9z+97M3PjWo4CsGup4P0xbA2iEsurmaXiEpjKukd1aTeKFXTHBT2eoqq+sU vpYkqPnO/odkVcU74clS+R3zbgz7sfErqNBylg2B23CalmmU+syInSP0cRVmLdKw7tV5Vm/V k6Vo4EIMrSVIsL1VlUWIVN9POiE0PgVnBjU7Og0fxqmtHMmouLfXBwLbReWiSFbIL9kC68fw L8s6JwM9giyqhs2KdLa3CpawHuBcy4bWKI9u5BEXIKy0lg3yktPaID3AzPt5M3dcM1FN0QnL 2PGhKfGgLgAlEPOf2BqSCrI1OtZw58PpApL3BkJIFHQwojJgfo+3Rtw9zUrT1sKkkUbgrwrY mU7ZVdoIaiu/itzgJkRVm+hLAhNGRmF9xGj0FAOjmDYExGlW2GlwLfR4gpREJT1K15hQwU=
  • Ironport-hdrordr: A9a23:OaUj3qEK54VZCsU1pLqFeZHXdLJyesId70hD6qkvc3Jom52j+P xGws526faVslYssHFJo6HnBEClewKgyXcT2/hsAV7CZnidhILMFuBfBOTZsljd8kHFh4pgPO JbAtdD4b7LfChHZKTBkXGF+r8bqbHtms3Y5pa9854ud3AQV0gJ1XYJNu/xKDwOeOApP+tfKH LKjfA32QZINE5nI/hSQRI+Lpz+juyOsKijTQ8NBhYh5gXLpTS06ITiGxzd+hsFSTtAzZor7G CAymXCl+qemsD+7iWZ+37Y7pxQltek4txfBPaUgsxQDjn3kA6naKloRrXHljEop+OE7kosjb D30lsdFvU2z0mUUnC+oBPr1QWl+DEy60X6wVvdunfnqdyRfkNzN+NxwaZiNjfJ4Uspu99xlI hR2XiCipZRBRTc2Azg+tnhTXhR5wqJiEtntdRWo21UUIMYZrMUh5cY5llpHJAJGz+/wJw7Ed NpENrX6J9tABKnhkjizytSKeGXLzEO9k/seDlHhiXV6UkZoJlB9Tpa+CRF9U1ws67USPF/lq 352+pT5fdzp/QtHNBA7dE6ML2K41z2MGHx2V2pUCHa/YE8SjnwQs3Mkf8IDN/DQu1+8HJ1ou WZbG9l
  • Ironport-sdr: r7A02iWP1wC0PPOTQJ4K91h43xQhKfVaRRm/bYCjyy2hLqqRsz0aqlPBF5DXWqfyVcf0ONoqhV QbuSMqXWRmocFOlQesyNtmFpL1HGz4wWZA5+v7PD9I0pXeyT1SdTg3Rl+lqUuMoavgxQ5+4ewY DOikqDLNbJ7MztfQX2PqQtG+2t85fWLyItl2VNLV5IhsIj1G7daGF/HEEl6aiD0WoxBPOk1PLb 96VC1PLDWGHz0xUOu2cUrKwW4SNtu1Reft4qDVFLDQstDIGlxhU9i4uUqXKzDDLJdNDHmDsEos WgbpxcML7bliyEeAU42uXCif
  • List-id: Xen developer discussion <xen-devel.lists.xenproject.org>

On Tue, Dec 14, 2021 at 10:06:37AM +0100, Jan Beulich wrote:
> On 13.12.2021 16:04, Roger Pau Monné wrote:
> > On Fri, Sep 24, 2021 at 11:53:59AM +0200, Jan Beulich wrote:
> >> Having a separate flush-all hook has always been puzzling me some. We
> >> will want to be able to force a full flush via accumulated flush flags
> >> from the map/unmap functions. Introduce a respective new flag and fold
> >> all flush handling to use the single remaining hook.
> >>
> >> Note that because of the respective comments in SMMU and IPMMU-VMSA
> >> code, I've folded the two prior hook functions into one. For SMMU-v3,
> >> which lacks a comment towards incapable hardware, I've left both
> >> functions in place on the assumption that selective and full flushes
> >> will eventually want separating.
> >>
> >> Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx>

Reviewed-by: Roger Pau Monné <roger.pau@xxxxxxxxxx>

> >> --- a/xen/drivers/passthrough/vtd/iommu.c
> >> +++ b/xen/drivers/passthrough/vtd/iommu.c
> >> @@ -731,18 +731,21 @@ static int __must_check iommu_flush_iotl
> >>                                                  unsigned long page_count,
> >>                                                  unsigned int flush_flags)
> >>  {
> >> -    ASSERT(page_count && !dfn_eq(dfn, INVALID_DFN));
> >> -    ASSERT(flush_flags);
> >> +    if ( flush_flags & IOMMU_FLUSHF_all )
> >> +    {
> >> +        dfn = INVALID_DFN;
> >> +        page_count = 0;
> > 
> > Don't we expect callers to already pass an invalid dfn and a 0 page
> > count when doing a full flush?
> 
> I didn't want to introduce such a requirement. The two arguments should
> imo be don't-cares with IOMMU_FLUSHF_all, such that callers handing on
> (or accumulating) flags don't need to apply extra care.
> 
> > In the equivalent AMD code you didn't set those for the FLUSHF_all
> > case.
> 
> There's no similar dependency there in AMD code. For VT-d,
> iommu_flush_iotlb() needs at least one of the two set this way to
> actually do a full-address-space flush. (Which, as an aside, I've
> recently learned is supposedly wrong when cap_isoch() returns true. But
> that's an orthogonal issue, albeit it may be possible to deal with at
> the same time as, down the road, limiting the too aggressive flushing
> done by subsequent patches using this new flag.)

I see. AMD flush helper gets the flags as a parameter (because
the flush all function is a wrapper around the flush pages one), so
there's no need to signal a full flush using the other parameters.

> I could be talked into setting just page_count to zero here.

No, I think it's fine.

Thanks, Roger.



 


Rackspace

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