Received: by 2002:a05:6a10:f3d0:0:0:0:0 with SMTP id a16csp5521996pxv; Wed, 7 Jul 2021 05:53:02 -0700 (PDT) X-Google-Smtp-Source: ABdhPJz2gMf45bOGsaDqCeztslAT3VA9mH9zshG9O8P4zL+hJe+YzCdaaBT0KgAs70GiRjIu9vQn X-Received: by 2002:a17:906:2da1:: with SMTP id g1mr23631749eji.47.1625662382751; Wed, 07 Jul 2021 05:53:02 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1625662382; cv=none; d=google.com; s=arc-20160816; b=gUUbEsLSgNxatVt+ENymnBdWdl/I29fjCtrwr2LIjQD+qM6KKUpY8phsBGNdg+ExLl dew22wtBLN41daLH1ZyIeKQYYhhfH+B9L8GVCm8RgPV9KKsMi/Iq05aXWL/eTIjTW/zb ZAGXiFkJ31lvs9H9uH8Ww88ZAMcD7TWVHt3W58Evshbgoc7y2eJBZK+y49ASmSpftuMr 1pOkiNLs73puKwtaRWhBN7L/IfWCRMvnw1wQlcVH3Kg+dIR51rx0fyOaNpP7s3ICmIWt 04amXj9jBMN4fwXrejuxNy094hxSnlzkPfoKElY0A8N6C96ewwTuveEHC8nqqlRDJ7G2 N2Jg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:subject:message-id:date:from:in-reply-to :references:mime-version:dkim-signature; bh=AWfBTNR+7qXXmfyz0hwbeeOHPZvd/rdFeAqJwOu0Eek=; b=rMHuGWqmiMK01w/H10c21ESGii6LWgPixeIoRz1aQST/IW6Hqz0cNbYhGzb+vplhUu ucFsv7WxAARZngjwQayLGVW2XpWUhUcADcT5dxpkUlcN+belzzEHe8ECZaiHYv6RK5uf I+N5sdu35XXoueGUJDNBCSKO45poNgAYh1aeg9QpPeFMAtw3EpWJO00U21m4lRTjAgiW 8ceYzepC+bbDwrXr4gaGtc2aPIkWeIDWo2+VN/FCJF7eK/8Ouye6hzIEw9WobKwPMDoE 83nv82wBgJXoQG23AC1+aHYmuklKUAL8QvzpjMG+igSjFKBF22t6wBEDM/7P3ZNnZTRQ 3sIQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@chromium.org header.s=google header.b=gs9Uh0+I; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=chromium.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id o3si17232440ejb.436.2021.07.07.05.52.39; Wed, 07 Jul 2021 05:53:02 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@chromium.org header.s=google header.b=gs9Uh0+I; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=chromium.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231748AbhGGMvq (ORCPT + 99 others); Wed, 7 Jul 2021 08:51:46 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46214 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231726AbhGGMvp (ORCPT ); Wed, 7 Jul 2021 08:51:45 -0400 Received: from mail-ed1-x52f.google.com (mail-ed1-x52f.google.com [IPv6:2a00:1450:4864:20::52f]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 5F4A7C06175F for ; Wed, 7 Jul 2021 05:49:05 -0700 (PDT) Received: by mail-ed1-x52f.google.com with SMTP id h2so3233797edt.3 for ; Wed, 07 Jul 2021 05:49:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=AWfBTNR+7qXXmfyz0hwbeeOHPZvd/rdFeAqJwOu0Eek=; b=gs9Uh0+IX75An6xhR1AwTXnBIpGA7+nYA10/RA3Oo1dUIloN8ATCPG8c9UWDzpfMiC U6Fg0rc+8NpCeuEEEE13vaZDW8zOJ3t2XDlSWjjtEuaJUxr/stPDOD89GYUDH8vSAIdZ ETd6vo7YS49ihPdMHsyKty78mAKG4lQknRCkQ= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=AWfBTNR+7qXXmfyz0hwbeeOHPZvd/rdFeAqJwOu0Eek=; b=p5pDq4XhUqrkjIqC5HCc0YAtKbhKRQNTZWh/qEwLfODG406+tUwoidO+GaAyxR4aJy 9JJbgeAyVZBoJfuiZuq8Ib5Oxd5K4CC9c5FUTdaSXvNfAuQNNJbC4/MOT15KfB7cqjhF aZx/kSNr7qIhzm4a4OBd55Mv9AAAPlrRqj8SUOxMvz8khlWV2H4eekLWYA14DwXkExNP HktwggKx1u6JGvhYXnMaetWkDvAE8o/fZz+HVSAztd1vfcUqUDi3xYw2iMLzbvEduBz2 ZmHEzOBWE8+ud9FJYPTFuihxY9E6/f7ZnQyzqTZ6qhrfFhVGGn/WidtQAcXZ7B5cKU3O Pyuw== X-Gm-Message-State: AOAM5324k380V+K7z2C8n5AbW0XEDzuwvjVttWlVk951VJluUASQKe0q MN+D2CTN0tbVsRc0oZK/KE3rqvlc+akDFg== X-Received: by 2002:a05:6402:1655:: with SMTP id s21mr29996951edx.295.1625662143300; Wed, 07 Jul 2021 05:49:03 -0700 (PDT) Received: from mail-wr1-f51.google.com (mail-wr1-f51.google.com. [209.85.221.51]) by smtp.gmail.com with ESMTPSA id k25sm7373691eds.77.2021.07.07.05.49.02 for (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 07 Jul 2021 05:49:02 -0700 (PDT) Received: by mail-wr1-f51.google.com with SMTP id f17so2911750wrt.6 for ; Wed, 07 Jul 2021 05:49:02 -0700 (PDT) X-Received: by 2002:adf:c448:: with SMTP id a8mr7784112wrg.103.1625662141974; Wed, 07 Jul 2021 05:49:01 -0700 (PDT) MIME-Version: 1.0 References: <20210427131344.139443-1-senozhatsky@chromium.org> <20210427131344.139443-9-senozhatsky@chromium.org> <10a0903a-e295-5cba-683a-1eb89a0804ed@xs4all.nl> In-Reply-To: From: Tomasz Figa Date: Wed, 7 Jul 2021 21:48:49 +0900 X-Gmail-Original-Message-ID: Message-ID: Subject: Re: [PATCHv2 8/8] videobuf2: handle non-contiguous DMA allocations To: Hans Verkuil , Sergey Senozhatsky Cc: Ricardo Ribalda , Christoph Hellwig , Mauro Carvalho Chehab , linux-media@vger.kernel.org, linux-kernel@vger.kernel.org Content-Type: text/plain; charset="UTF-8" Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Fri, Jun 25, 2021 at 12:10 PM Sergey Senozhatsky wrote: > > Hi Hans, > > On (21/06/17 16:56), Sergey Senozhatsky wrote: > [..] > > static void *vb2_dc_vaddr(struct vb2_buffer *vb, void *buf_priv) > > { > > struct vb2_dc_buf *buf = buf_priv; > > > > if (buf->vaddr) > > return buf->vaddr; > > > > if (buf->db_attach) { > > struct dma_buf_map map; > > > > if (!dma_buf_vmap(buf->db_attach->dmabuf, &map)) > > buf->vaddr = map.vaddr; > > > > return buf->vaddr; > > } > > > > if (!buf->coherent_mem) > > buf->vaddr = dma_vmap_noncontiguous(buf->dev, buf->size, > > buf->dma_sgt); > > return buf->vaddr; > > } > > > > And in vb2_dc_alloc functions set vaddr for !DMA_ATTR_NO_KERNEL_MAPPING > > in both coherent and non-coherent. So that we probably can have less > > branches when ->vaddr is NULL for one type of allocations, and is not > > NULL for another. I'd prefer if it stayed as is. This opportunistic mapping as in the current revision is quite nice, because most of the drivers don't bother to set DMA_ATTR_NO_KERNEL_MAPPING even if they don't need the kernel mapping. Also, even if the driver itself doesn't need the kernel mapping, we can still create one on demand if the DMA-buf importer demands it from us. > > > > static int vb2_dc_alloc_coherent(struct vb2_dc_buf *buf) > > { > > struct vb2_queue *q = buf->vb->vb2_queue; > > > > buf->cookie = dma_alloc_attrs(buf->dev, > > buf->size, > > &buf->dma_addr, > > GFP_KERNEL | q->gfp_flags, > > buf->attrs); > > if (!buf->cookie) > > return -ENOMEM; > > > > if (q->dma_attrs & DMA_ATTR_NO_KERNEL_MAPPING) > > return 0; > > > > buf->vaddr = buf->cookie; > > return 0; > > } > > > > static int vb2_dc_alloc_non_coherent(struct vb2_dc_buf *buf) > > { > > struct vb2_queue *q = buf->vb->vb2_queue; > > > > buf->dma_sgt = dma_alloc_noncontiguous(buf->dev, > > buf->size, > > buf->dma_dir, > > GFP_KERNEL | q->gfp_flags, > > buf->attrs); > > if (!buf->dma_sgt) > > return -ENOMEM; > > > > if (q->dma_attrs & DMA_ATTR_NO_KERNEL_MAPPING) > > return 0; > > > > buf->vaddr = dma_vmap_noncontiguous(buf->dev, buf->size, buf->dma_sgt); > > if (!buf->vaddr) { > > dma_free_noncontiguous(buf->dev, buf->size, > > buf->dma_sgt, buf->dma_addr); > > return -ENOMEM; > > } > > return 0; > > } > > I guess this should address the case when > > "after allocating the buffer, the buffer is exported as a dma_buf and > another device calls dma_buf_ops vb2_dc_dmabuf_ops_vmap, which in turn > calls dma_buf_map_set_vaddr(map, buf->vaddr); with a NULL buf->vaddr" Sorry, I fail to get what this is about. Where does this quote come from? > > Because ->vaddr will not be NULL now after allocation for both coherent > and non-coherent buffers (modulo DMA_ATTR_NO_KERNEL_MAPPING requests). > > What do you think? Hans, any feedback on this? Thanks. Best regards, Tomasz