Patch "ntb: no sleep in ntb_async_tx_submit" has been added to the 4.9-stable tree
Subsystems (2)
This is a note to let you know that I've just added the patch titled
ntb: no sleep in ntb_async_tx_submit
to the 4.9-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
ntb-no-sleep-in-ntb_async_tx_submit.patch
and it can be found in the queue-4.9 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
88931ec3dc11e7dbceb3b0df455693873b508fbeMon Sep 17 00:00:00 2001
From: Allen Hubbe <[email protected]>
Date: Fri, 9 Jun 2017 18:06:36 -0400
Subject: ntb: no sleep in ntb_async_tx_submit
From: Allen Hubbe <[email protected]>
commit 88931ec3dc11e7dbceb3b0df455693873b508fbe upstream.
Do not sleep in ntb_async_tx_submit, which could deadlock. This reverts commit "8c874cc140d667f84ae4642bb5b5e0d6396d2ca4"
--- drivers/ntb/ntb_transport.c | 50 ++++++-------------------------------------- 1 file changed, 7 insertions(+), 43 deletions(-)
drivers/ntb/ntb_transport.c +7 -43
@@ -176,14 +176,12 @@ struct ntb_transport_qp {u64 rx_err_ver;u64 rx_memcpy;u64 rx_async; -u64 dma_rx_prep_err;u64 tx_bytes;u64 tx_pkts;u64 tx_ring_full;u64 tx_err_no_buf;u64 tx_memcpy;u64 tx_async; -u64 dma_tx_prep_err; };struct ntb_transport_mw {
@@ -256,8 +254,6 @@ enum {#define QP_TO_MW (nt, qp) ((qp) % nt->mw_count)#define NTB_QP_DEF_NUM_ENTRIES 100#define NTB_LINK_DOWN_TIMEOUT 10 -#define DMA_RETRIES 20 -#define DMA_OUT_RESOURCE_TO msecs_to_jiffies(50)static void ntb_transport_rxc_db (unsigned long data);static const struct ntb_ctx_ops ntb_transport_ops;
@@ -518,12 +514,6 @@ static ssize_t debugfs_read(struct file out_offset +=snprintf (buf + out_offset, out_count - out_offset,"free tx - \t%u\n" ,ntb_transport_tx_free_entry (qp)); - out_offset +=snprintf (buf + out_offset, out_count - out_offset, -"DMA tx prep err - \t%llu\n" , - qp->dma_tx_prep_err); - out_offset +=snprintf (buf + out_offset, out_count - out_offset, -"DMA rx prep err - \t%llu\n" , - qp->dma_rx_prep_err); out_offset +=snprintf (buf + out_offset, out_count - out_offset,"\n" );
@@ -770,8 +760,6 @@ static void ntb_qp_link_down_reset(struc qp->tx_err_no_buf =0 ; qp->tx_memcpy =0 ; qp->tx_async =0 ; - qp->dma_tx_prep_err =0 ; - qp->dma_rx_prep_err =0 ; }static void ntb_qp_link_cleanup (struct ntb_transport_qp *qp)
@@ -1314,7 +1302,6 @@ static int ntb_async_rx_submit(struct ntstruct dmaengine_unmap_data *unmap;dma_cookie_t cookie;void *buf = entry->buf; -int retries =0 ; len = entry->len; device = chan->device;
@@ -1343,22 +1330,11 @@ static int ntb_async_rx_submit(struct nt unmap->from_cnt =1 ; -for (retries =0 ; retries <DMA_RETRIES ; retries++) { - txd = device->device_prep_dma_memcpy (chan, - unmap->addr[1 ], - unmap->addr[0 ], len, -DMA_PREP_INTERRUPT ); -if (txd) -break ; - -set_current_state (TASK_INTERRUPTIBLE ); -schedule_timeout (DMA_OUT_RESOURCE_TO ); - } - -if (!txd) { - qp->dma_rx_prep_err++; + txd = device->device_prep_dma_memcpy (chan, unmap->addr[1 ], + unmap->addr[0 ], len, +DMA_PREP_INTERRUPT ); +if (!txd) goto err_get_unmap; - } txd->callback_result = ntb_rx_copy_callback; txd->callback_param = entry;
@@ -1603,7 +1579,6 @@ static int ntb_async_tx_submit(struct ntstruct dmaengine_unmap_data *unmap;dma_addr_t dest;dma_cookie_t cookie; -int retries =0 ; device = chan->device; dest = qp->tx_mw_phys + qp->tx_max_frame * entry->tx_index;
@@ -1625,21 +1600,10 @@ static int ntb_async_tx_submit(struct nt unmap->to_cnt =1 ; -for (retries =0 ; retries <DMA_RETRIES ; retries++) { - txd = device->device_prep_dma_memcpy (chan, dest, - unmap->addr[0 ], len, -DMA_PREP_INTERRUPT ); -if (txd) -break ; - -set_current_state (TASK_INTERRUPTIBLE ); -schedule_timeout (DMA_OUT_RESOURCE_TO ); - } - -if (!txd) { - qp->dma_tx_prep_err++; + txd = device->device_prep_dma_memcpy (chan, dest, unmap->addr[0 ], len, +DMA_PREP_INTERRUPT ); +if (!txd) goto err_get_unmap; - } txd->callback_result = ntb_tx_copy_callback; txd->callback_param = entry;
Patches currently in stable-queue which might be from [email protected] are
queue-4.9/ntb-ntb_test-fix-bug-printing-ntb_perf-results.patch queue-4.9/ntb_transport-fix-bug-calculating-num_qps_mw.patch queue-4.9/ntb-ntb_test-ensure-the-link-is-up-before-trying-to-configure-the-mws.patch queue-4.9/ntb-no-sleep-in-ntb_async_tx_submit.patch queue-4.9/ntb-transport-shouldn-t-disable-link-due-to-bogus-values-in-spads.patch queue-4.9/ntb_transport-fix-qp-count-bug.patch