Received: by 2002:a05:7412:2a8c:b0:e2:908c:2ebd with SMTP id u12csp1366790rdh; Mon, 25 Sep 2023 10:26:32 -0700 (PDT) X-Google-Smtp-Source: AGHT+IGURxB4YWb7ZFjWeSbOcbLoPSJi3Q/chOqnaxhnzGkeRT1iCr5PzWNSCW85g02xW4h5PUCX X-Received: by 2002:a9d:7d01:0:b0:6b9:4216:c209 with SMTP id v1-20020a9d7d01000000b006b94216c209mr7764066otn.12.1695662792038; Mon, 25 Sep 2023 10:26:32 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1695662792; cv=none; d=google.com; s=arc-20160816; b=ySEvdBq48f4foVgMQc7rJ835Sqy4zANiPi8j2fD5LcG+5vkNlkr6+4KeSNsmsL95RY CKEi3Y7WCOWTibkj6SmQbAPpyhO16rC34FwDXaR9bR09FabbllnD+2eD8o2PAeoER88k 92h8SXAM+L5CEj6lhniCdg7BsmO4HUdnW7Zdcm2xLvguONxULOilijFW34PaDR3Vnylw 8g9MmwNm8GzuxTpKXpjDADXbfwvRSbWxpdFq+KmZm1dFN5UVKxEJrLy2FwK74AByqL1h +B9dEww3CYFQuieVtu7W9qgmbQq1Rn+iKNUTCoMGffcuNSeeEtb+YFO1mDVmfhBm2N2/ nKRg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:in-reply-to:from :references:cc:to:content-language:subject:user-agent:mime-version :date:message-id; bh=z5X83Z2yhLCbkNOf3CmnPxrvqNyxZLOw5UI01LLJ8CM=; fh=6CnY0PDFv7SwsuLWtHYOQERiNjiEarqHOImF33gov24=; b=orXgA0tpAzUDnFiWoHC6QLyl4VZ9lqyz7njJvD3pVn/pgl1IVEnmTQAhGdgoOsChiH g1T/RLfM6UXrv/k3k2BM0YMQGCuGgg6Z8bnh2Ctq++0OSi33h2C5J/jnn0LhKHyQYpjA /YrCRq+BZ+4z2gWXo1xgigYe1Hk83mcG8NqisTZwWZTLQ827g88GfzD7rB/FLbGbPTJQ CCMLTPSlR09IbGcnHmgs4VRHdemNU3eTKWzNiBqZ06LZaKPOOV1u0pR24l4zySRYlo6N iNrLWVPrhOvr5hx5JxRad6e62tAg1EjLZhkKc98q7qBUPQKZWINKXiEVVoLh2Z5fRl55 CgXQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.32 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=arm.com Return-Path: Received: from agentk.vger.email (agentk.vger.email. [23.128.96.32]) by mx.google.com with ESMTPS id 14-20020a63020e000000b00565342470c4si10205959pgc.801.2023.09.25.10.26.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 25 Sep 2023 10:26:31 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.32 as permitted sender) client-ip=23.128.96.32; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.32 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=arm.com Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by agentk.vger.email (Postfix) with ESMTP id EDAD980560DD; Mon, 25 Sep 2023 10:24:10 -0700 (PDT) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.10 at agentk.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232862AbjIYRYI (ORCPT + 99 others); Mon, 25 Sep 2023 13:24:08 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:38892 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229437AbjIYRYH (ORCPT ); Mon, 25 Sep 2023 13:24:07 -0400 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id 3AC68BC for ; Mon, 25 Sep 2023 10:24:00 -0700 (PDT) Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id ED2B9DA7; Mon, 25 Sep 2023 10:24:37 -0700 (PDT) Received: from [10.57.0.188] (unknown [10.57.0.188]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 80B4B3F59C; Mon, 25 Sep 2023 10:23:58 -0700 (PDT) Message-ID: Date: Mon, 25 Sep 2023 18:23:36 +0100 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Windows NT 10.0; rv:102.0) Gecko/20100101 Thunderbird/102.15.1 Subject: Re: [PATCH v2 1/2] iommu/virtio: Make use of ops->iotlb_sync_map Content-Language: en-GB To: Jason Gunthorpe Cc: Jean-Philippe Brucker , Niklas Schnelle , Joerg Roedel , Will Deacon , virtualization@lists.linux-foundation.org, iommu@lists.linux.dev, linux-kernel@vger.kernel.org References: <20230919081519.GA3860249@myrica> <20230919144649.GT13795@ziepe.ca> <20230922075719.GB1361815@myrica> <20230922124130.GD13795@ziepe.ca> <900b644e-6e21-1038-2252-3dc86cbf0a32@arm.com> <20230922162714.GH13795@ziepe.ca> <123c53c3-d259-9c20-9aa6-0c216d7eb3c0@arm.com> <20230922233309.GI13795@ziepe.ca> <20230925132941.GK13795@ziepe.ca> From: Robin Murphy In-Reply-To: <20230925132941.GK13795@ziepe.ca> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-Spam-Status: No, score=-2.2 required=5.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,NICE_REPLY_A,SPF_HELO_NONE,SPF_PASS autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on agentk.vger.email Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (agentk.vger.email [0.0.0.0]); Mon, 25 Sep 2023 10:24:11 -0700 (PDT) On 2023-09-25 14:29, Jason Gunthorpe wrote: > On Mon, Sep 25, 2023 at 02:07:50PM +0100, Robin Murphy wrote: >> On 2023-09-23 00:33, Jason Gunthorpe wrote: >>> On Fri, Sep 22, 2023 at 07:07:40PM +0100, Robin Murphy wrote: >>> >>>> virtio isn't setting ops->pgsize_bitmap for the sake of direct mappings >>>> either; it sets it once it's discovered any instance, since apparently it's >>>> assuming that all instances must support identical page sizes, and thus once >>>> it's seen one it can work "normally" per the core code's assumptions. It's >>>> also I think the only driver which has a "finalise" bodge but *can* still >>>> properly support map-before-attach, by virtue of having to replay mappings >>>> to every new endpoint anyway. >>> >>> Well it can't quite do that since it doesn't know the geometry - it >>> all is sort of guessing and hoping it doesn't explode on replay. If it >>> knows the geometry it wouldn't need finalize... >> >> I think it's entirely reasonable to assume that any direct mappings >> specified for a device are valid for that device and its IOMMU. However, in >> the particular case of virtio, it really shouldn't ever have direct mappings >> anyway, since even if the underlying hardware did have any, the host can >> enforce the actual direct-mapping aspect itself, and just present them as >> unusable regions to the guest. > > I assume this machinery is for the ARM GIC ITS page.... > >> Again, that's irrelevant. It can only be about whether the actual >> ->map_pages call succeeds or not. A driver could well know up-front that all >> instances support the same pgsize_bitmap and aperture, and set both at >> ->domain_alloc time, yet still be unable to handle an actual mapping without >> knowing which instance(s) that needs to interact with (e.g. omap-iommu). > > I think this is a different issue. The domain is supposed to represent > the actual io pte storage, and the storage is supposed to exist even > when the domain is not attached to anything. > > As we said with tegra-gart, it is a bug in the driver if all the > mappings disappear when the last device is detached from the domain. > Driver bugs like this turn into significant issues with vfio/iommufd > as this will result in warn_on's and memory leaking. > > So, I disagree that this is something we should be allowing in the API > design. map_pages should succeed (memory allocation failures aside) if > a IOVA within the aperture and valid flags are presented. Regardless > of the attachment status. Calling map_pages with an IOVA outside the > aperture should be a caller bug. > > It looks omap is just mis-designed to store the pgd in the omap_iommu, > not the omap_iommu_domain :( pgd is clearly a per-domain object in our > API. And why does every instance need its own copy of the identical > pgd? The point wasn't that it was necessarily a good and justifiable example, just that it is one that exists, to demonstrate that in general we have no reasonable heuristic for guessing whether ->map_pages is going to succeed or not other than by calling it and seeing if it succeeds or not. And IMO it's a complete waste of time thinking about ways to make such a heuristic possible instead of just getting on with fixing iommu_domain_alloc() to make the problem disappear altogether. Once Joerg pushes out the current queue I'll rebase and resend v4 of the bus ops removal, then hopefully get back to despairing at the hideous pile of WIP iommu_domain_alloc() patches I currently have on top of it... Thanks, Robin.