Received: by 10.213.65.68 with SMTP id h4csp1808152imn; Thu, 5 Apr 2018 04:15:55 -0700 (PDT) X-Google-Smtp-Source: AIpwx494e3B1yK5zgoyhlKfjmEFVmH8dFDupn7fKC91zpRkwRdegpdh4xwADSFFRXcQL0X5bwgBN X-Received: by 2002:a17:902:9a86:: with SMTP id w6-v6mr22309412plp.168.1522926955640; Thu, 05 Apr 2018 04:15:55 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1522926955; cv=none; d=google.com; s=arc-20160816; b=LaishxcFyyvs+njjJTX7IRfhBMahjMZeyX1iYixuwNbVv+yHuyLHTT4CkEvkCXUHf+ nV0+dTpx2VY1vAz/4NvSiAG3mPaeXBnSdDXcW0GZSFY4VkzpS1kvob3/clavKdKIh+qS fEKFA9b3hRquvyWFY2feudUcQyC4b/DC5qdy+XqvLGKLAU8RY5ycx38rQkM/QquIee2j mFyLujbU6+qEFxmBR0X6sc/9pBPiZXLgzRW6SKs4hn25t7/45fMWKPD+p/jRmJbUUkmw GixH6Ak/fltOsHVGVJiCdIkwrLLw5me03hkqX30JYGyOlqGcZlwKW0lJkw0O7l6I+yAT 33kg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:cc:to:subject:message-id:date:from :references:in-reply-to:mime-version:dkim-signature :arc-authentication-results; bh=adU5nWes4r+BozbNbSbdDKRhRKl2miQPtPahFNd+Jd4=; b=O8YbbZ+NN9v75sk/1K6etI+kubA4RrYJE6YcEOokD8YvJAKFjZEQ12ils13HtKI797 o+ybyTibzAqWaMwxpXz5xqTVnr38Qba9YIKA8Fj5coa3P4Mbk9sm9aBcz7rBULI4x8Qc TSEdYReUeaW/vPXyqT1hMU1Wwvb0icD/PjiVc0bXTSkPYMMajoKaZRqVK+xjbffm5gF/ FN0ryWP38BY0loYWzzwWb/rJPT2xdGDhwIUR0DRAe9f15hY2KX8ur/pawhzUM4q7ImJB D2hbK0ZWOqCK3uIAqjmWG6JhkeACKBtUfmn/AqcLKkM5/+gx1FYYfHvWUM15rq+hP/pH eu5w== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=uhhTvpkt; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id l186si5217180pgd.174.2018.04.05.04.15.41; Thu, 05 Apr 2018 04:15:55 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=uhhTvpkt; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751346AbeDELOe (ORCPT + 99 others); Thu, 5 Apr 2018 07:14:34 -0400 Received: from mail-ua0-f193.google.com ([209.85.217.193]:36371 "EHLO mail-ua0-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751038AbeDELOd (ORCPT ); Thu, 5 Apr 2018 07:14:33 -0400 Received: by mail-ua0-f193.google.com with SMTP id v4so14733566uaj.3 for ; Thu, 05 Apr 2018 04:14:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc; bh=adU5nWes4r+BozbNbSbdDKRhRKl2miQPtPahFNd+Jd4=; b=uhhTvpkt8L1Q5F+XOZ35Mk5R7o6g3vh1p/GECJjqN4Op5DFYm15VX9j/ZXfGZV7kRD kcM/cqQACGCXorIYs8vy73Ssy3hHgq9rhQe4ONOVAldubRyXgZksd4zJjMO0o41EokK0 Dodt8Wuc+P7Se98whkb8Tje23FkuOw8lweHzwY6o0lXkJLWyPFwf2GPUg0OjYu78Bib7 QMgLmcPGJ1kWwUmO6Fou6Xyh9QiHwDYOu/uv6GbFSbbWkexGjFWsz7JnyKZIhL79/QWb G2izkSkd+M8vmvEOFy19Jlp6XEW7zHNWEb/gvS62ssccRVXGJffSnde3OhckziT1y6bO ouGg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc; bh=adU5nWes4r+BozbNbSbdDKRhRKl2miQPtPahFNd+Jd4=; b=iXJHfG+ki/up79mg698FYvi0FmE8rD0wQ1chqwOSnmcbZrYCUgxHF5zLeYMZ7ncc1c u42e1F1I9Dx+KlRA5z3ue49Pr9msx+3v0m405IPPBFSnTEp5l81o14lijx7FRHK8s3sE u/6l7uGrEdK5xVEUqXljBexQcINY93JSvR0waHmyUIX0hygskglkruL2yHj3ylj9s9Vl cCZL6wIccMpQ+7aak5+76nbG2iML4PRjZ7cz0IBVIdczfQbeEZGmIAyQbl/N23q6NOU5 ns5l2i48E+/GD4yetzBKdfWpybh0aRhVuTzR+bk0+7B908ceJlgr7fAF8h7EhwS7w1x3 U1cw== X-Gm-Message-State: AElRT7Fl8lc/LNsUPrDEREEcN3JTXOB/0ZvyiadjTmN13t9K7UQzCmL9 QVikpyHIKzEWT49SIo9Jkr0qOQ3gyjP/9q5ZRsc= X-Received: by 10.176.49.78 with SMTP id e14mr14203456uam.126.1522926872589; Thu, 05 Apr 2018 04:14:32 -0700 (PDT) MIME-Version: 1.0 Received: by 10.176.97.133 with HTTP; Thu, 5 Apr 2018 04:14:32 -0700 (PDT) In-Reply-To: <20180405105631.9514-1-khandual@linux.vnet.ibm.com> References: <20180405105631.9514-1-khandual@linux.vnet.ibm.com> From: Balbir Singh Date: Thu, 5 Apr 2018 21:14:32 +1000 Message-ID: Subject: Re: [RFC] virtio: Use DMA MAP API for devices without an IOMMU To: Anshuman Khandual Cc: virtualization@lists.linux-foundation.org, "linux-kernel@vger.kernel.org" , robh@kernel.org, Benjamin Herrenschmidt , Michael Ellerman , Joe Perches , "open list:LINUX FOR POWERPC (32-BIT AND 64-BIT)" , Markus Elfring , David Gibson Content-Type: text/plain; charset="UTF-8" Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Thu, Apr 5, 2018 at 8:56 PM, Anshuman Khandual wrote: > There are certian platforms which would like to use SWIOTLB based DMA API > for bouncing purpose without actually requiring an IOMMU back end. But the > virtio core does not allow such mechanism. Right now DMA MAP API is only > selected for devices which have an IOMMU and then the QEMU/host back end > will process all incoming SG buffer addresses as IOVA instead of simple > GPA which is the case for simple bounce buffers after being processed with > SWIOTLB API. To enable this usage, it introduces an architecture specific > function which will just make virtio core front end select DMA operations > structure. > > Signed-off-by: Anshuman Khandual > --- > This RFC is just to get some feedback. Please ignore the function call > back into the architecture. It can be worked out properly later on. But > the question is can we have virtio devices in the guest which would like > to use SWIOTLB based (or any custom DMA API based) bounce buffering with > out actually being an IOMMU devices emulated by QEMU/host as been with > the current VIRTIO_F_IOMMU_PLATFORM virtio flag ? > > arch/powerpc/platforms/pseries/iommu.c | 6 ++++++ > drivers/virtio/virtio_ring.c | 4 ++++ > include/linux/virtio.h | 2 ++ > 3 files changed, 12 insertions(+) > > diff --git a/arch/powerpc/platforms/pseries/iommu.c b/arch/powerpc/platforms/pseries/iommu.c > index 06f02960b439..dd15fbddbe89 100644 > --- a/arch/powerpc/platforms/pseries/iommu.c > +++ b/arch/powerpc/platforms/pseries/iommu.c > @@ -1396,3 +1396,9 @@ static int __init disable_multitce(char *str) > __setup("multitce=", disable_multitce); > > machine_subsys_initcall_sync(pseries, tce_iommu_bus_notifier_init); > + > +bool is_virtio_dma_platform(void) > +{ > + return true; > +} > +EXPORT_SYMBOL(is_virtio_dma_platform); > diff --git a/drivers/virtio/virtio_ring.c b/drivers/virtio/virtio_ring.c > index 71458f493cf8..9f205a79d378 100644 > --- a/drivers/virtio/virtio_ring.c > +++ b/drivers/virtio/virtio_ring.c > @@ -144,6 +144,10 @@ struct vring_virtqueue { > > static bool vring_use_dma_api(struct virtio_device *vdev) > { > + /* Use DMA API even for virtio devices without an IOMMU */ > + if (is_virtio_dma_platform()) > + return true; > + > if (!virtio_has_iommu_quirk(vdev)) > return true; > > diff --git a/include/linux/virtio.h b/include/linux/virtio.h > index 988c7355bc22..d8bb83d753ea 100644 > --- a/include/linux/virtio.h > +++ b/include/linux/virtio.h > @@ -200,6 +200,8 @@ static inline struct virtio_driver *drv_to_virtio(struct device_driver *drv) > int register_virtio_driver(struct virtio_driver *drv); > void unregister_virtio_driver(struct virtio_driver *drv); > > +extern bool is_virtio_dma_platform(void); > + Where is the default implementation for non-pseries platforms? Will they compile after these changes? Balbir