From mboxrd@z Thu Jan 1 00:00:00 1970 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=-0.8 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,SPF_PASS 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 0F90BC433F5 for ; Thu, 6 Sep 2018 12:42:54 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id C638E205F4 for ; Thu, 6 Sep 2018 12:42:53 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org C638E205F4 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=arm.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728679AbeIFRSK (ORCPT ); Thu, 6 Sep 2018 13:18:10 -0400 Received: from foss.arm.com ([217.140.101.70]:44952 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728174AbeIFRSK (ORCPT ); Thu, 6 Sep 2018 13:18:10 -0400 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.72.51.249]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id E2A7380D; Thu, 6 Sep 2018 05:42:50 -0700 (PDT) Received: from [10.4.12.111] (ostrya.emea.arm.com [10.4.12.111]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 206BF3F575; Thu, 6 Sep 2018 05:42:48 -0700 (PDT) Subject: Re: [PATCH v5 13/23] iommu: introduce device fault report API To: Auger Eric , Jacob Pan , iommu@lists.linux-foundation.org, LKML , Joerg Roedel , David Woodhouse , Greg Kroah-Hartman , Alex Williamson Cc: Jean Delvare , Rafael Wysocki , Raj Ashok References: <1526072055-86990-1-git-send-email-jacob.jun.pan@linux.intel.com> <1526072055-86990-14-git-send-email-jacob.jun.pan@linux.intel.com> <2094d667-5dbf-b4b8-8e19-c76d67b82362@redhat.com> From: Jean-Philippe Brucker Message-ID: Date: Thu, 6 Sep 2018 13:42:35 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.0 MIME-Version: 1.0 In-Reply-To: <2094d667-5dbf-b4b8-8e19-c76d67b82362@redhat.com> Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 06/09/2018 10:25, Auger Eric wrote: >> + mutex_lock(&fparam->lock); >> + list_add_tail(&evt_pending->list, &fparam->faults); > same doubt as Yi Liu. You cannot rely on the userspace willingness to > void the queue and deallocate this memory. > > SMMUv3 holds a queue of events whose size is implementation dependent. > I think such a queue should be available at SW level and its size should > be negotiated. Note that this fault API can also be used by host device drivers that want to be notified on fault, in which case a direct callback seems easier to use, and perhaps more efficient than an intermediate queue. When injecting faults into userspace it makes sense to batch events, to avoid context switches. Even though that queue management should probably be done by VFIO, the IOMMU API has to help in some way, at least to tell VFIO when the IOMMU driver is done processing a batch of event. > Note SMMU has separate queues for PRI and fault events. Here you use the > same queue for all events. I don't know if it would make sense to have > separate APIs? Host device drivers that use this API to be notified on fault can't deal with arch-specific event formats (SMMU event, Vt-d fault event, etc), so the APIs should be arch-agnostic. Given that requirement, using a single iommu_fault_event structure for both PRI and event queues made sense, especially since the even queue can have stall events that look a lot like PRI page requests. Or do you mean separate APIs for recoverable and non-recoverable faults? Using the same queue for PRI and stall event, and a separate one for non-recoverable events? Separate queues may be useful for the device driver scenario (non-virtualization), where recoverable faults are handled by io-pgfaults while non-recoverable ones could be reported directly to the device driver. For this case I was thinking of adding a multiple-consumer thing: both io-pgfaults and the device driver register a fault handler. io-pgfault handles recoverable ones and what's left goes to the device driver. This could also allow the device driver to be notified when io-pgfault doesn't successfully handle a fault (handle_mm_fault returns an error). Thanks, Jean