Received: by 2002:a6b:fb09:0:0:0:0:0 with SMTP id h9csp2669627iog; Sun, 26 Jun 2022 23:48:46 -0700 (PDT) X-Google-Smtp-Source: AGRyM1svZu/Rk23BwtQ+FAsvL7rYtTSDDHrRQcz3g7GP6xVKqvsDmZUbj0fx2XVfHXfEKKNTncih X-Received: by 2002:a17:906:7288:b0:722:da04:da51 with SMTP id b8-20020a170906728800b00722da04da51mr11275567ejl.316.1656312525881; Sun, 26 Jun 2022 23:48:45 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1656312525; cv=none; d=google.com; s=arc-20160816; b=u0oQWKOxDZoFP5CbcgYrX1p2lJlvOPvw12Tyv/2EzoIlI7thya4l4MypZy3nkLqkga yb0epOxmZbivZ2vGcm4AJ8/sY2ohTFaOg/796AXlaCJ4WGy53QM6Vxv/e8eGRkcnsLW0 MpPmh47BjHvTCjOwQyZqqDV4W33JgTQH2W4G1oYzuqa6e+e3Qc5msDRGo2Pr8jMlOX9N RoQ8zXdelsLYm7drEIbjeXtwQkpgUdpS9kR0B3fk2h/3EcwgrmL//NZ+zmOCm176+IDJ iN9AStyZlmpEaFzKaqC+OuylKxCZPbONhq/6mDP+AKTMIdT6B1g2fAtiRjY8cuTunB4X zZWg== 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-disposition:mime-version :references:message-id:subject:cc:to:from:date:dkim-signature; bh=FKVwwIINpga7sVSaCeXX61YkD4yrwJTMycUS0eFlD9c=; b=zGWyBcdrNx1Yy/tB5K1fiWpv7Oh5/Ew9mZJTcFukF3NMxMZgdPnYbJJUEV2evEaZJY VYszikmfZVXTRZhHKKpHRjYuoJqyw3pzJ2CAfjp0bunna4SxBLTqk49eyqGC6ESKoSOu jTg/V5cRyuMhGf1y1wZnZEyBuizJAU7p4NVuNz19m8qWCcQrX2F6r+9ddnwKR1zMlzL0 7IlnKRNuyqu7zpbucS4D5Xqqt5lS43Fm1tCmAGpVjItV+hN2qyF1zp0cq9tHEWcjQ2mK Rm+kmfk0LVwT7as4o10Q9oQktKEx2mr6/M8kAaX2w8YrZFht4vYwJQri/WcRaRWM+Z1K bpZg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=FmeHYhyR; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id m10-20020a056402510a00b0042de68c0303si8850246edd.628.2022.06.26.23.48.20; Sun, 26 Jun 2022 23:48:45 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=FmeHYhyR; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232248AbiF0GVg (ORCPT + 99 others); Mon, 27 Jun 2022 02:21:36 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:54870 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229999AbiF0GVf (ORCPT ); Mon, 27 Jun 2022 02:21:35 -0400 Received: from dfw.source.kernel.org (dfw.source.kernel.org [139.178.84.217]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id C43302BDA; Sun, 26 Jun 2022 23:21:34 -0700 (PDT) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dfw.source.kernel.org (Postfix) with ESMTPS id 602A8612B4; Mon, 27 Jun 2022 06:21:34 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 3F07FC341C8; Mon, 27 Jun 2022 06:21:32 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1656310893; bh=hk9+mMFsgmDnegzAol0i+gs3JTJRWP8+Fr77+Or2q7w=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=FmeHYhyRxDBjlMgOrmLE7ult6qm3mSfK51byhC6Ma5CtFZd/8gVce6GQd8s+VTiIi 4O0hHnVCQNOuY0srPKLL1Zb+Rf4bUMmehyTvd/5W48BpAqZYsFqTDtLMHNg6a1kCjC hnVpis6CkL6RxQZfTAxxTlZCvp23T5dopST+nTlKZzcHvTQqrPJVf9T6igV37Gn3hK GBTT7qqEhHLy7dGHayQU9imgIVg6VSClZppi59/1I8Yge/mZQeF7OgSbFnf0Glchzr /rP0B29JTl8mW9B5lX4yVkKDv5AYEyVsdChknKPT19R34V+EwfSkOwzGKAWX0UDL5o Vk7qGMHn3j9Lw== Date: Mon, 27 Jun 2022 11:51:29 +0530 From: Vinod Koul To: Jie Hai Cc: wangzhou1@hisilicon.com, dmaengine@vger.kernel.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH 3/8] dmaengine: hisilicon: Add multi-thread support for a DMA channel Message-ID: References: <20220625074422.3479591-1-haijie1@huawei.com> <20220625074422.3479591-4-haijie1@huawei.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20220625074422.3479591-4-haijie1@huawei.com> X-Spam-Status: No, score=-7.5 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_HI, SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 25-06-22, 15:44, Jie Hai wrote: > When we get a DMA channel and try to use it in multiple threads it > will cause oops and hanging the system. > > % echo 100 > /sys/module/dmatest/parameters/threads_per_chan > % echo 100 > /sys/module/dmatest/parameters/iterations > % echo 1 > /sys/module/dmatest/parameters/run > [383493.327077] Unable to handle kernel paging request at virtual > address dead000000000108 > [383493.335103] Mem abort info: > [383493.335103] ESR = 0x96000044 > [383493.335105] EC = 0x25: DABT (current EL), IL = 32 bits > [383493.335107] SET = 0, FnV = 0 > [383493.335108] EA = 0, S1PTW = 0 > [383493.335109] FSC = 0x04: level 0 translation fault > [383493.335110] Data abort info: > [383493.335111] ISV = 0, ISS = 0x00000044 > [383493.364739] CM = 0, WnR = 1 > [383493.367793] [dead000000000108] address between user and kernel > address ranges > [383493.375021] Internal error: Oops: 96000044 [#1] PREEMPT SMP > [383493.437574] CPU: 63 PID: 27895 Comm: dma0chan0-copy2 Kdump: > loaded Tainted: GO 5.17.0-rc4+ #2 > [383493.457851] pstate: 204000c9 (nzCv daIF +PAN -UAO -TCO -DIT > -SSBS BTYPE=--) > [383493.465331] pc : vchan_tx_submit+0x64/0xa0 > [383493.469957] lr : vchan_tx_submit+0x34/0xa0 > > This happens because of data race. Each thread rewrite channels's > descriptor as soon as device_issue_pending is called. It leads to > the situation that the driver thinks that it uses the right > descriptor in interrupt handler while channels's descriptor has > been changed by other thread. > > With current fixes channels's descriptor changes it's value only > when it has been used. A new descriptor is acquired from > vc->desc_issued queue that is already filled with descriptors > that are ready to be sent. Threads have no direct access to DMA > channel descriptor. Now it is just possible to queue a descriptor > for further processing. > > Fixes: e9f08b65250d ("dmaengine: hisilicon: Add Kunpeng DMA engine support") > Signed-off-by: Jie Hai > --- > drivers/dma/hisi_dma.c | 6 ++---- > 1 file changed, 2 insertions(+), 4 deletions(-) > > diff --git a/drivers/dma/hisi_dma.c b/drivers/dma/hisi_dma.c > index 0a0f8a4d168a..0385419be8d5 100644 > --- a/drivers/dma/hisi_dma.c > +++ b/drivers/dma/hisi_dma.c > @@ -271,7 +271,6 @@ static void hisi_dma_start_transfer(struct hisi_dma_chan *chan) > > vd = vchan_next_desc(&chan->vc); > if (!vd) { > - dev_err(&hdma_dev->pdev->dev, "no issued task!\n"); how is this a fix? > chan->desc = NULL; > return; > } > @@ -303,7 +302,7 @@ static void hisi_dma_issue_pending(struct dma_chan *c) > > spin_lock_irqsave(&chan->vc.lock, flags); > > - if (vchan_issue_pending(&chan->vc)) > + if (vchan_issue_pending(&chan->vc) && !chan->desc) This looks good > hisi_dma_start_transfer(chan); > > spin_unlock_irqrestore(&chan->vc.lock, flags); > @@ -442,11 +441,10 @@ static irqreturn_t hisi_dma_irq(int irq, void *data) > chan->qp_num, chan->cq_head); > if (FIELD_GET(STATUS_MASK, cqe->w0) == STATUS_SUCC) { > vchan_cookie_complete(&desc->vd); > + hisi_dma_start_transfer(chan); Why should this fix the error reported? > } else { > dev_err(&hdma_dev->pdev->dev, "task error!\n"); > } > - > - chan->desc = NULL; > } > > spin_unlock(&chan->vc.lock); > -- > 2.33.0 -- ~Vinod