Received: by 2002:a05:6a10:af89:0:0:0:0 with SMTP id iu9csp6209805pxb; Thu, 27 Jan 2022 08:43:12 -0800 (PST) X-Google-Smtp-Source: ABdhPJwAJoWkwKDLR9O+LLMmWgJhQM4wxGaydcysDkgAUTbmrAl8oIDFBbIyj9o4lKG/bnN6cQ/v X-Received: by 2002:a63:2b49:: with SMTP id r70mr3267341pgr.111.1643301792316; Thu, 27 Jan 2022 08:43:12 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1643301792; cv=none; d=google.com; s=arc-20160816; b=M8bbU5i19qpWT9YZp9NaTXcIFkZb2UramCAiYz+LN39jiImfufW4YPQcPNCHoI6FfW GlJYtda0um1Zi1ZouXz46YESJauPkzzFdUmHBw/xfxdFAlmRuRnI/bMllLR5r1eVoknr 5cJDxEnmJxJp8nMCbI0LHUOOAvxw1nLK0gdJe5U90aHu0ZYYXqLtKaKFJOOvXg7y3ZK5 /emuzLkcQ6jp8Qp6XPEIwdlTWfD1+4gK2+k30HMG7Hf1dfwy4wzjJU8rTGvdmUlt36NH csBX1r8wXfRywKGrUhCHp7pBMWMSZvQjhqWXCoCAeDO3JpW26Fxf4I+C1jpsS4meEUCz 1FPw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:in-reply-to:content-transfer-encoding :content-disposition:mime-version:references:message-id:subject:to :from:date:dkim-signature; bh=E2A772H+0MrvEtA9A/aD62l8EteiJEDcpzbYW++4R9k=; b=S4HsknqNkLTzaRltyiWC2a8syXzwuhOkUAYFlAxNHhviFsaXgsE62TC+dj2K6RH1j5 9u3G7kh7MSBmwO7BUOPXPAWweTHVsowCj60pVx2OhJ+L1nErnlqcBpbMQJ75xKgOWrbm YRWdAmpzND1Qp7RHm5wuh+n86iMoS6EqxiKvsbd3Vl+mZCG69TfDPFN94ZnjmRauoVL6 7PVwQR6WvmSFbOYDcme9KKqiNaKVN11MGaZEF5bZSpb4gGuQ5yJXNofGbqIHqfCWCCc0 A3oBb2MvF+wgO1OwC6b2x9TxEeDovQaB8kKF8CtW0EIViqDpvew9TPwmSEDY3hrVJpRL Kkzw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b="Yep//h8g"; 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=intel.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id m15si1572743pfk.341.2022.01.27.08.42.59; Thu, 27 Jan 2022 08:43:12 -0800 (PST) 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=@intel.com header.s=Intel header.b="Yep//h8g"; 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=intel.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S238639AbiA0Jdf (ORCPT + 99 others); Thu, 27 Jan 2022 04:33:35 -0500 Received: from mga05.intel.com ([192.55.52.43]:46306 "EHLO mga05.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S238648AbiA0Jde (ORCPT ); Thu, 27 Jan 2022 04:33:34 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1643276014; x=1674812014; h=date:from:to:subject:message-id:references:mime-version: content-transfer-encoding:in-reply-to; bh=70bvD9FchQOD0i4lLqg413fUh6fr+M8PLj6aT5wcP/A=; b=Yep//h8gQivjJcqN+rzl0kTulNkCNgpCIwP03DBKLLBCt4UFqArvlAEh TScKWxPNPqq6edUYefSykcZWt7o5cfXOACl0aLyBeN1U3f0sH3lGFWE4Z pf5ZfR8caLdFWCfUHzn0pcQE86ZOIVc7461YMH2uCaDwyx9df9G/FwG0W Ctkahkf4BfxsJ2BC2VyJuC6eMQMtQ7dFwRZ30ySy66TjcE47W/VmWMZ12 Obq/OAVu/SXrtCZq7ybqpnPsck8x/HVuiyo2GK3rvoQ+guTvUHSuGlsHa sEHithKnj5SzSNRju28bCy9Xh421RRCmAXjtsatJRdEE3uy+HvebXw1vc w==; X-IronPort-AV: E=McAfee;i="6200,9189,10239"; a="333155052" X-IronPort-AV: E=Sophos;i="5.88,320,1635231600"; d="scan'208";a="333155052" Received: from orsmga006.jf.intel.com ([10.7.209.51]) by fmsmga105.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 27 Jan 2022 01:33:33 -0800 X-IronPort-AV: E=Sophos;i="5.88,320,1635231600"; d="scan'208";a="480224705" Received: from anithaha-mobl.amr.corp.intel.com (HELO ldmartin-desk2) ([10.212.224.126]) by orsmga006-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 27 Jan 2022 01:33:32 -0800 Date: Thu, 27 Jan 2022 01:33:32 -0800 From: Lucas De Marchi To: Daniel Vetter , Christian =?utf-8?B?S8O2bmln?= , linaro-mm-sig@lists.linaro.org, intel-gfx@lists.freedesktop.org, linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-media@vger.kernel.org Subject: Re: [Intel-gfx] [PATCH 02/19] dma-buf-map: Add helper to initialize second map Message-ID: <20220127093332.wnkd2qy4tvwg5i5l@ldmartin-desk2> X-Patchwork-Hint: comment References: <20220126203702.1784589-1-lucas.demarchi@intel.com> <20220126203702.1784589-3-lucas.demarchi@intel.com> <20220127075728.ygwgorhnrwaocdqv@ldmartin-desk2> <3066c6a7-fc73-d34d-d209-a3ff6818dfb6@amd.com> MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1; format=flowed Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Thu, Jan 27, 2022 at 09:57:25AM +0100, Daniel Vetter wrote: >On Thu, Jan 27, 2022 at 09:02:54AM +0100, Christian K?nig wrote: >> Am 27.01.22 um 08:57 schrieb Lucas De Marchi: >> > On Thu, Jan 27, 2022 at 08:27:11AM +0100, Christian K?nig wrote: >> > > Am 26.01.22 um 21:36 schrieb Lucas De Marchi: >> > > > When dma_buf_map struct is passed around, it's useful to be able to >> > > > initialize a second map that takes care of reading/writing to an offset >> > > > of the original map. >> > > > >> > > > Add a helper that copies the struct and add the offset to the proper >> > > > address. >> > > >> > > Well what you propose here can lead to all kind of problems and is >> > > rather bad design as far as I can see. >> > > >> > > The struct dma_buf_map is only to be filled in by the exporter and >> > > should not be modified in this way by the importer. >> > >> > humn... not sure if I was? clear. There is no importer and exporter here. >> >> Yeah, and exactly that's what I'm pointing out as problem here. >> >> You are using the inter driver framework for something internal to the >> driver. That is an absolutely clear NAK! >> >> We could discuss that, but you guys are just sending around patches to do >> this without any consensus that this is a good idea. > >Uh I suggested this, also we're already using dma_buf_map all over the >place as a convenient abstraction. So imo that's all fine, it should allow >drivers to simplify some code where on igpu it's in normal kernel memory >and on dgpu it's behind some pci bar. > >Maybe we should have a better name for that struct (and maybe also a >better place), but way back when we discussed that bikeshed I didn't come >up with anything better really. I suggest iosys_map since it abstracts access to IO and system memory. > >> > There is a role delegation on filling out and reading a buffer when >> > that buffer represents a struct layout. >> > >> > struct bla { >> > ????int a; >> > ????int b; >> > ????int c; >> > ????struct foo foo; >> > ????struct bar bar; >> > ????int d; >> > } >> > >> > >> > This implementation allows you to have: >> > >> > ????fill_foo(struct dma_buf_map *bla_map) { ... } >> > ????fill_bar(struct dma_buf_map *bla_map) { ... } >> > >> > and the first thing these do is to make sure the map it's pointing to >> > is relative to the struct it's supposed to write/read. Otherwise you're >> > suggesting everything to be relative to struct bla, or to do the same >> > I'm doing it, but IMO more prone to error: >> > >> > ????struct dma_buf_map map = *bla_map; >> > ????dma_buf_map_incr(map, offsetof(...)); > >Wrt the issue at hand I think the above is perfectly fine code. The idea >with dma_buf_map is really that it's just a special pointer, so writing >the code exactly as pointer code feels best. Unfortunately you cannot make >them typesafe (because of C), so the code sometimes looks a bit ugly. >Otherwise we could do stuff like container_of and all that with >typechecking in the macros. I had exactly this code above, but after writting quite a few patches using it, particularly with functions that have to write to 2 maps (see patch 6 for example), it felt much better to have something to initialize correctly from the start struct dma_buf_map other_map = *bla_map; /* poor Lucas forgetting dma_buf_map_incr(map, offsetof(...)); */ is error prone and hard to debug since you will be reading/writting from/to another location rather than exploding While with the construct below other_map; ... other_map = INITIALIZER() I can rely on the compiler complaining about uninitialized var. And in most of the cases I can just have this single line in the beggining of the function when the offset is constant: struct dma_buf_map other_map = INITIALIZER(bla_map, offsetof(..)); Lucas De Marchi >-Daniel > >> > IMO this construct is worse because at a point in time in the function >> > the map was pointing to the wrong thing the function was supposed to >> > read/write. >> > >> > It's also useful when the function has double duty, updating a global >> > part of the struct and a table inside it (see example in patch 6) >> > >> > thanks >> > Lucas De Marchi >> > >-- >Daniel Vetter >Software Engineer, Intel Corporation >http://blog.ffwll.ch