Received: by 2002:a25:86ce:0:0:0:0:0 with SMTP id y14csp500295ybm; Wed, 22 May 2019 06:57:23 -0700 (PDT) X-Google-Smtp-Source: APXvYqxLRglQPAwCxBLgDlF+PMYCA+gqq/b3zz85VhW2GWjT7d3+o3VQTTmqdFgUQpwdlYICgeCu X-Received: by 2002:a17:902:f81:: with SMTP id 1mr41156577plz.242.1558533443028; Wed, 22 May 2019 06:57:23 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1558533443; cv=none; d=google.com; s=arc-20160816; b=OgrxVJi47FOEfO4gZ9ng1JC0VJHhnM6JwEwn5TR6mcLZvhrlngE9TwczQANndCackp ov11ZBCSoTKB68A6CqEKPUG0bi85clqxm0cHzD7cAkO43MNqQyAqKLS1Gc/IyhPqtAz3 mYm7cmXyk+gSVDhpSrKJ0XqTLLyflNkC2MT+39wh4624n0LCCzFMolX5rI88zrRfdP9e S5bhyg+gHprDIuk2WIGrVvDOQPDhfZsE6bUuwIUpA7feGT/KI0hdSeAMbALRquYKL81s r6EJqQRztv7nUu+nZqSjzfJIpxMLTQfPORLOW05pf0zUSIvJn7HMeDjQ43o1u1xOleKv Cb2A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding :content-language:in-reply-to:mime-version:user-agent:date :message-id:from:references:cc:to:subject; bh=OdCZ2fSyBdjP7kCzWnltPAW1m4R6WVCQ7n2lL8r4O5U=; b=UUvBxsX4sEQw+Evh55xO7SMaixDCwHAjVEct4RLTCWW0+A85tw9nO3GkKPq05vsA4l 3L01G0XyPhbEedv7r8eF7BaUG0FVfy1GXvEEL9bTc0CbNoZqYjGHQlPxEUdGIbP+u3xa 2aqtKYBPffasD2fMYTvfNM2Ey3K+6aq9FJQI+ahqYWKCxwz3yD0WSDs9YKZMUt1GuKmj 3f8FT2+ANPFtky1CcLqcHYN6lTNmobp1LzoDp3uvFy6Tq6cUrH81se+UeCJfvYv5ML/F wh/0f+MlxwKRZ86fFEXcO8FxLo16tQxZdEHOp5m3qxgADDq52XvlE/ogPb0tGihI0DYv Y4Ew== ARC-Authentication-Results: i=1; mx.google.com; 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 Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id l9si26028757pff.51.2019.05.22.06.57.07; Wed, 22 May 2019 06:57:23 -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; 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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728983AbfEVNzz (ORCPT + 99 others); Wed, 22 May 2019 09:55:55 -0400 Received: from foss.arm.com ([217.140.101.70]:52022 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726770AbfEVNzy (ORCPT ); Wed, 22 May 2019 09:55:54 -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 EE8DE80D; Wed, 22 May 2019 06:55:53 -0700 (PDT) Received: from [10.1.196.75] (e110467-lin.cambridge.arm.com [10.1.196.75]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 58C903F575; Wed, 22 May 2019 06:55:52 -0700 (PDT) Subject: Re: [PATCH] swiotlb: sync buffer when mapping FROM_DEVICE To: Christoph Hellwig Cc: =?UTF-8?Q?Horia_Geant=c4=83?= , Konrad Rzeszutek Wilk , Marek Szyprowski , iommu@lists.linux-foundation.org, linux-kernel@vger.kernel.org, linux-imx@nxp.com References: <20190522072018.10660-1-horia.geanta@nxp.com> <20190522123243.GA26390@lst.de> <6cbe5470-16a6-17e9-337d-6ba18b16b6e8@arm.com> <20190522130921.GA26874@lst.de> <20190522133400.GA27229@lst.de> From: Robin Murphy Message-ID: Date: Wed, 22 May 2019 14:55:50 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.6.1 MIME-Version: 1.0 In-Reply-To: <20190522133400.GA27229@lst.de> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-GB Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 22/05/2019 14:34, Christoph Hellwig wrote: > On Wed, May 22, 2019 at 02:25:38PM +0100, Robin Murphy wrote: >> Sure, but that should be irrelevant since the effective problem here is in >> the sync_*_for_cpu direction, and it's the unmap which nobbles the buffer. >> If the driver does this: >> >> dma_map_single(whole buffer); >> >> dma_unmap_single(whole buffer); >> >> >> then it could instead do this and be happy: >> >> dma_map_single(whole buffer, SKIP_CPU_SYNC); >> >> dma_sync_single_for_cpu(updated part of buffer); >> dma_unmap_single(whole buffer, SKIP_CPU_SYNC); >> > > Assuming the driver knows how much was actually DMAed this would > solve the issue. Horia, does this work for you? Ohhh, and now I've just twigged what you were suggesting - your DMA_ATTR_PARTIAL flag would mean "treat this as a read-modify-write of the buffer because we *don't* know exactly which parts the device may write to". So indeed if we did go down that route we wouldn't need any of the sync stuff I was worrying about (but I might suggest naming it DMA_ATTR_UPDATE instead). Apologies for being slow :) Robin.