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=-9.8 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH, MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED autolearn=unavailable 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 EA215C4742C for ; Wed, 4 Nov 2020 18:21:53 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 8978020759 for ; Wed, 4 Nov 2020 18:21:53 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="mS9aIDQz" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1732331AbgKDSVu (ORCPT ); Wed, 4 Nov 2020 13:21:50 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:54126 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1731036AbgKDSVt (ORCPT ); Wed, 4 Nov 2020 13:21:49 -0500 Received: from mail-pf1-x441.google.com (mail-pf1-x441.google.com [IPv6:2607:f8b0:4864:20::441]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 96676C061A4A for ; Wed, 4 Nov 2020 10:21:49 -0800 (PST) Received: by mail-pf1-x441.google.com with SMTP id b3so18010689pfo.2 for ; Wed, 04 Nov 2020 10:21:49 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=date:from:to:cc:subject:message-id:references:mime-version :content-disposition:in-reply-to; bh=Z8gc6ARs/YzzuiIYGit2cDBKpxrUS5sAZ12IGbVfp4I=; b=mS9aIDQz02BPksqMQmtfWq2bRIfqGdCcrb3TZ8qXpCcucwMkUkXsnRClnS4SlW9Bsc 7BJNnaw7i7WOANvIk6NmLJpreM9AlXCICLQDhtF6oWj40nunCVTsiVFQ2MgOsMgp0dZT e94ZVvvSWBcWyRqDjMdvS/B8S2znVU0A+7eShjWgu0NNLbWl5tSfmpYLB160GSEJvbBA Dd6HG7wOuW9ZYLK5A4EmSECwPyxgd4n3ZSqEmVE6IlntJ3LSBrFH+y3UNjHtCwyVV56p nJTniVE6YIbcOL1xuGB1GPwpo6+N2DWAUPigNRnLlvHkxU6NLjDdTy/JboMLapL3k/Z7 OVDg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:in-reply-to; bh=Z8gc6ARs/YzzuiIYGit2cDBKpxrUS5sAZ12IGbVfp4I=; b=DYV7fLg6rAm1ICNsk2hnO6fFroQw637KKMgc8sk6sztFfjG0xhOXdioX0Z40t5wyzZ EO7Nu5zdHell6b28eGKSlQ4TE6SPrE8AQsi2+N6z7kfPpQUXFPw6mRVKYl9PexojWWqp kdyEIPYv4nA2H2X5essaIemtxAymZ8RN7zAulDch8XZWzxZdie3VmLgpy+SRZ+CPf1Xg oqu5w7TJbXupwMmHce9uvDzlRirwz7JmblvTtBgmuRUmUpDnUBX8I/EK4xaGj2f7N/jN hXv7tGLqDNISw7+sjMSM1qKOH9IsD1SMNEgCFBFWMX9HRx5KviFuLTfCU/79ZkVO3rQh lF0Q== X-Gm-Message-State: AOAM531OVaIWs+j0iivCKXEdvYeytxoOr7N0jNd1HJG63sQusk54w92M TYJxIjQOw+6T9ig++XLnwJ1nYg== X-Google-Smtp-Source: ABdhPJxKUPsUDYJlcLkUimYNsligw92mxLn0ooxNeaCj3i3jNbmfb0dEaj/exRRAJYPqif6kUP99Ng== X-Received: by 2002:a63:4c51:: with SMTP id m17mr22137626pgl.270.1604514109032; Wed, 04 Nov 2020 10:21:49 -0800 (PST) Received: from xps15 (S0106002369de4dac.cg.shawcable.net. [68.147.8.254]) by smtp.gmail.com with ESMTPSA id u5sm2785866pjn.15.2020.11.04.10.21.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 04 Nov 2020 10:21:48 -0800 (PST) Date: Wed, 4 Nov 2020 11:21:46 -0700 From: Mathieu Poirier To: Alexander Lobakin Cc: Amit Shah , Arnd Bergmann , Greg Kroah-Hartman , Arnaud Pouliquen , Suman Anna , Bjorn Andersson , Ohad Ben-Cohen , "Michael S. Tsirkin" , Jason Wang , virtualization@lists.linux-foundation.org, linux-remoteproc@vger.kernel.org, linux-kernel@vger.kernel.org, stable@vger.kernel.org Subject: Re: [PATCH virtio] virtio: virtio_console: fix DMA memory allocation for rproc serial Message-ID: <20201104182146.GC2893396@xps15> References: MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: Precedence: bulk List-ID: X-Mailing-List: linux-remoteproc@vger.kernel.org On Wed, Nov 04, 2020 at 03:31:36PM +0000, Alexander Lobakin wrote: > Since commit 086d08725d34 ("remoteproc: create vdev subdevice with > specific dma memory pool"), every remoteproc has a DMA subdevice > ("remoteprocX#vdevYbuffer") for each virtio device, which inherits > DMA capabilities from the corresponding platform device. This allowed > to associate different DMA pools with each vdev, and required from > virtio drivers to perform DMA operations with the parent device > (vdev->dev.parent) instead of grandparent (vdev->dev.parent->parent). > > virtio_rpmsg_bus was already changed in the same merge cycle with > commit d999b622fcfb ("rpmsg: virtio: allocate buffer from parent"), > but virtio_console did not. In fact, operations using the grandparent > worked fine while the grandparent was the platform device, but since > commit c774ad010873 ("remoteproc: Fix and restore the parenting > hierarchy for vdev") this was changed, and now the grandparent device > is the remoteproc device without any DMA capabilities. > So, starting v5.8-rc1 the following warning is observed: > > [ 2.483925] ------------[ cut here ]------------ > [ 2.489148] WARNING: CPU: 3 PID: 101 at kernel/dma/mapping.c:427 0x80e7eee8 > [ 2.489152] Modules linked in: virtio_console(+) > [ 2.503737] virtio_rpmsg_bus rpmsg_core > [ 2.508903] > [ 2.528898] > [ 2.913043] > [ 2.914907] ---[ end trace 93ac8746beab612c ]--- > [ 2.920102] virtio-ports vport1p0: Error allocating inbufs > > kernel/dma/mapping.c:427 is: > > WARN_ON_ONCE(!dev->coherent_dma_mask); > > obviously because the grandparent now is remoteproc dev without any > DMA caps: You are correct. > > [ 3.104943] Parent: remoteproc0#vdev1buffer, grandparent: remoteproc0 > > Fix this the same way as it was for virtio_rpmsg_bus, using just the > parent device (vdev->dev.parent, "remoteprocX#vdevYbuffer") for DMA > operations. > This also allows now to reserve DMA pools/buffers for rproc serial > via Device Tree. > > Fixes: c774ad010873 ("remoteproc: Fix and restore the parenting hierarchy for vdev") > Cc: stable@vger.kernel.org # 5.1+ > Signed-off-by: Alexander Lobakin > --- > drivers/char/virtio_console.c | 8 ++++---- > 1 file changed, 4 insertions(+), 4 deletions(-) > > diff --git a/drivers/char/virtio_console.c b/drivers/char/virtio_console.c > index a2da8f768b94..1836cc56e357 100644 > --- a/drivers/char/virtio_console.c > +++ b/drivers/char/virtio_console.c > @@ -435,12 +435,12 @@ static struct port_buffer *alloc_buf(struct virtio_device *vdev, size_t buf_size > /* > * Allocate DMA memory from ancestor. When a virtio > * device is created by remoteproc, the DMA memory is > - * associated with the grandparent device: > - * vdev => rproc => platform-dev. > + * associated with the parent device: > + * virtioY => remoteprocX#vdevYbuffer. > */ > - if (!vdev->dev.parent || !vdev->dev.parent->parent) > + buf->dev = vdev->dev.parent; > + if (!buf->dev) > goto free_buf; > - buf->dev = vdev->dev.parent->parent; Reviewed-by: Mathieu Poirier > > /* Increase device refcnt to avoid freeing it */ > get_device(buf->dev); > -- > 2.29.2 > >