From mboxrd@z Thu Jan 1 00:00:00 1970 Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.remote-ip=209.85.161.44 ARC-Seal: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; cv=none; t=1794727186; b=t1vZYjvIpC57LR50PndUFtdknADqrBub03IyJ9k1zUqWMBTeDUw3mAi9QfutCIrG96cb WO++7dgqTvhcvPgfFOogNsBzcqZnHnGvW+Aa6SzX3kuXGJQgDHriQYgspRdMz38PVD+JD 5KPuBGO+6qz7M0pUl+AUm9iFwZTisafsORQFUI1qYp7DrifY6aw8QwX6LoOWnQd+jEZ6E fAQWdEbDg6L5E4l3fipRD9HcFN+yis4p+puZOJhDe89wmknddM0TxcW8Dq7fe7TrohK+d Rf+/tsvrYjTOdc+7vdMwsbbnik8IqWjawBwsxP3Mf8kzqJkQJok2jiEr9ur5H4Lr9Zg== ARC-Message-Signature: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; c=relaxed/relaxed; t=1794727186; h=DMARC-Filter:Received:DKIM-Signature:X-Google-DKIM-Signature: X-Forwarded-Encrypted:X-Gm-Message-State:X-Gm-Gg:X-Received:Received: From:Date:Subject:MIME-Version:Content-Type:Content-Transfer-Encoding: Message-Id:References:In-Reply-To:To:Cc:X-Mailer; bh=clb16rj88aJbTcdYzcJEuHREx2BavzM+wmqbqo2G9WA=; b=Fz/6hfafVAEqzM4cbS46lZLXRq54cxbTicTaCTpv3aY0NnXSntUlOlsSYxTfMZRUkbTm W9+ImkkShMKuONjSLh2kxyG5Mg6bMNMZR8j6D4eHuCu+2tsuhpgba69PdbSrGvkcmY0BE KPd+xFavxxBLs0Wmz24SwMGoz+WPJGgYqU1d/tJgTUKgB+4b2VK4Js2LQMACYZILEQqBc 4LMNXOLdC9m495MtsFj21YlWaVfJF0t0i3FRYa3l3njnyP/idicshOwrR32Y6TjkaGf4R q9DM0qevwGj3IJ68FiMpAjkVT0RYpI+Z5xrEsl4TT23bhHTSkvFDizIbc32sbOpsYew== ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20260707 header.b=uRn0TwYq; arc=none smtp.remote-ip=209.85.161.44 Received: from mail-oo1-f44.google.com (mail-oo1-f44.google.com [209.85.161.44]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature ECDSA (prime256v1) server-digest SHA256) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 1F092606A32D for ; Sun, 15 Nov 2026 07:19:45 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.2 smtp.subspace.kernel.org 1F092606A32D Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20260707 header.b=uRn0TwYq Received: by mail-oo1-f44.google.com with SMTP id 006d021491bc7-6b19e291cc6so3312473eaf.2 for ; Sat, 14 Nov 2026 23:19:45 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20260707; t=1794727184; x=1795331984; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=clb16rj88aJbTcdYzcJEuHREx2BavzM+wmqbqo2G9WA=; b=uRn0TwYq0Gb0fpk0mP20sjt6CpvvbvkADkw2qkfVXtpiHQq5PfBNkutEUH/QORBwQv jQtNTqnBOVun7M9D7Vg1Qzi5tpDrcc0yJitXLcPEc+Up5gsjCi4lawckRX38IMrSizWP lIvAJIhm0Bt6cNrihvtfmGgHekZrcmtJQe0+nckg+TndixACw2fx4AhpTCkm6icg1NQz llq2x1pPJ0WrenKDlsUZU1WZd22uih6+rEbbMqHmQwzxy7VEDDNELyKloigV4SbdeUfj gBLAm75aTAkbaYElZa6UsGft5bvJtBtqm/6R3F4I5UfPsAJrIttmXmwFGSAC0KrvzaBk l3/g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1794727184; x=1795331984; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=clb16rj88aJbTcdYzcJEuHREx2BavzM+wmqbqo2G9WA=; b=wHMA0+XKiRugcF2TVN5nMQZedSpm7W9CLOkQI/mjNJEyPYsPVpzPCrNjF9s2tuQ+xw 8wf5igtcb8VZIigBeexigWEc/F8fyt5eh8oocFzGuC9iHZ0RIJ5+LmvoUIUIUkBFB3ao iANDxjhn0DPjiJ9KPh920wcVe+1kbgg2SejMaq1rXFTdWxon7xI2HFBWAAJBWJKYxgzK P81CQn4xufGxmUr066Zv57vmmjES9gtqZ774KWIEb+CICSwU/dUHof4XXtVPZBjWTSDv OPSTFxDquiixr7k87oPgkCzv5oOC1gQw5Y1r3YhU5RRipJ0RoS8BZsOTYqBrO192G/oh FV0Q== X-Forwarded-Encrypted: i=1; AL+hErH4OyBt9BdvEPy80TIHDyaAiiiWBIv3LRXm0dkHDw9C8gMprxfVWfj5yjEGoUDcFudOILM2QjBND5HP4CM=@vger.kernel.org X-Gm-Message-State: APuU4Z+KIdQCEtUMsusDaaqcPA8nRVfl0ubQw7vMfeyVEGVY8aLTmkCu e6OI+dqxb/3Xbq7C7Fn88XRikWIMIpFh4uC1+T3U6m1VP7uN+tdwWeMj X-Gm-Gg: AYBFou0qILR5kedZBDzDcndDeupAeV+kI7rBqlsiJZRRr8OShIjS+rtqyB35SP4zWAS hxDvC63sQy6O/s/itIswYTsDife3OQpmNwGCgeNR24nKpiCYNiDfJyRIgIojQHXXJyFGykTYscB 2a5PrHxxJft/5kP8Zsad0uW4l/VSqzJ4kM5J4olgt+XlDjlgWeQmq7Mf3vlpO/sZq4hGKfFLdV5 E4iMNDyXIJYPr3qjOZYmW03oqFjjO+d+Z47X1re4UHNrnddOijBKc74UchfOd7nexvUoCxiMmAO w66Zxpp/fp4TfFORaHCXoPA/lD3i7oB14NaOtaXcETl2CFcgaCSDhPLLryYyILoSrMls4MVe//E H68Nz+AjJBeilbd6O5WYJ3Id+8xn20kXiId4i7mrIFebnqQL12hEXn+1Se9YK99Jc3iP2re1rw7 7p6emYGbEdkFsEf7ShZXBQOYf8VJXqRobwcMXehjlXzv9WptplduOeT08jVT4Evbof5dWGh4bOV eN+iDhWQ4tKzQEHZuPApy4O2Jv5e8s7UHHxRgccHSsmgHIAbx5ms9DSEn6oZQamWqRWUtDn3bY1 LwjSIQD09vhV7k5MrcS2z0dWN2uxgHDZvKrDvTMg0fcsiR+/9tzDCM20DkZirVF6mZ2dlW5Tce9 qAbFPNzI5NehQFzSIuoteHvFwZDv+nx/6oRSIaXm1XSZuQJsClusnQKtPls0Z+FKo90xidv+BPA tiNJhIOq0b8T+VaXVpGB4nVcHdepi5i6/ai7oozf5ZfgzCJppP7aA= X-Received: by 2002:a05:6820:c44e:10b0:716:cfac:bc29 with SMTP id 006d021491bc7-71ab5221abfmr3034088eaf.85.1794727184038; Sat, 14 Nov 2026 23:19:44 -0800 (PST) Received: from [127.0.1.1] (174-29-1-49.hlrn.qwest.net. [174.29.1.49]) by smtp.gmail.com with ESMTPSA id 006d021491bc7-71ae860ebd7sm1145321eaf.8.2026.11.14.23.19.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 14 Nov 2026 23:19:43 -0800 (PST) From: James Hilliard Date: Sun, 15 Nov 2026 00:19:36 -0700 Subject: [PATCH v7 03/10] dmaengine: dw: complete cookies before releasing the channel lock X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Message-Id: <20261115-submit-dw-dma-synchronize-v1-v7-3-8d58f3d49e4d@gmail.com> References: <20261115-submit-dw-dma-synchronize-v1-v7-0-8d58f3d49e4d@gmail.com> In-Reply-To: <20261115-submit-dw-dma-synchronize-v1-v7-0-8d58f3d49e4d@gmail.com> To: Viresh Kumar , Andy Shevchenko , Vinod Koul , Frank Li , Dan Williams Cc: Serge Semin , Greg Kroah-Hartman , Jiri Slaby , =?utf-8?q?Ilpo_J=C3=A4rvinen?= , dmaengine@vger.kernel.org, linux-serial@vger.kernel.org, linux-kernel@vger.kernel.org, Sashiko , Lars-Peter Clausen , James Hilliard , stable@vger.kernel.org, Frank Li X-Mailer: b4 0.15.2 Completion detaches a descriptor from the active list under the channel lock, but updates its cookie later when freeing it. Termination can take the lock in between and complete newer descriptors. Completing the older cookie afterwards moves completed_cookie backwards and makes an already terminated transfer appear outstanding again. Complete cookies while detaching descriptors in the completion, error recovery and termination paths. Keep the active-before-queued ordering when terminating so completed_cookie advances in submission order. Descriptor freeing and client notification no longer update cookies. Fixes: 3bfb1d20b547 ("dmaengine: Driver for the Synopsys DesignWare DMA controller") Cc: stable@vger.kernel.org Reviewed-by: Frank Li Signed-off-by: James Hilliard --- drivers/dma/dw/core.c | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/drivers/dma/dw/core.c b/drivers/dma/dw/core.c index f7ca9da5af90..2d69fab06601 100644 --- a/drivers/dma/dw/core.c +++ b/drivers/dma/dw/core.c @@ -231,18 +231,17 @@ static void dwc_dostart_first_queued(struct dw_dma_chan *dwc) /*----------------------------------------------------------------------*/ static void -dwc_descriptor_complete(struct dw_dma_chan *dwc, struct dw_desc *desc, - bool callback_required) +dwc_descriptor_free(struct dw_dma_chan *dwc, struct dw_desc *desc, + bool callback_required) { struct dma_async_tx_descriptor *txd = &desc->txd; struct dw_desc *child; unsigned long flags; struct dmaengine_desc_callback cb; - dev_vdbg(dmaengine_chan_dev(&dwc->chan), "descriptor %u complete\n", txd->cookie); + dev_vdbg(dmaengine_chan_dev(&dwc->chan), "freeing descriptor %p\n", desc); spin_lock_irqsave(&dwc->lock, flags); - dma_cookie_complete(txd); if (callback_required) dmaengine_desc_get_callback(txd, &cb); else @@ -329,12 +328,14 @@ static void dwc_scan_descriptors(struct dw_dma *dw, struct dw_dma_chan *dwc) /* Detach the completed transfer before starting queued work. */ list_splice_init(&dwc->active_list, &list); + list_for_each_entry(desc, &list, desc_node) + dma_cookie_complete(&desc->txd); dwc_dostart_first_queued(dwc); spin_unlock_irqrestore(&dwc->lock, flags); list_for_each_entry_safe(desc, _desc, &list, desc_node) { list_del_init(&desc->desc_node); - dwc_descriptor_complete(dwc, desc, true); + dwc_descriptor_free(dwc, desc, true); } return; } @@ -436,10 +437,11 @@ static void dwc_handle_error(struct dw_dma *dw, struct dw_dma_chan *dwc) list_for_each_entry(child, &bad_desc->tx_list, desc_node) dwc_dump_lli(dwc, child); + /* Pretend the descriptor completed successfully */ + dma_cookie_complete(&bad_desc->txd); spin_unlock_irqrestore(&dwc->lock, flags); - /* Pretend the descriptor completed successfully */ - dwc_descriptor_complete(dwc, bad_desc, true); + dwc_descriptor_free(dwc, bad_desc, true); return; unlock: @@ -940,12 +942,16 @@ static int dwc_terminate_all(struct dma_chan *chan) /* active_list entries will end up before queued entries */ list_splice_init(&dwc->queue, &list); list_splice_init(&dwc->active_list, &list); + list_for_each_entry(desc, &list, desc_node) + dma_cookie_complete(&desc->txd); spin_unlock_irqrestore(&dwc->lock, flags); /* Flush all pending and queued descriptors */ - list_for_each_entry_safe(desc, _desc, &list, desc_node) - dwc_descriptor_complete(dwc, desc, false); + list_for_each_entry_safe(desc, _desc, &list, desc_node) { + list_del_init(&desc->desc_node); + dwc_descriptor_free(dwc, desc, false); + } return 0; } -- 2.53.0