Skip to content

Commit 865be78

Browse files
committed
Merge tag 'ntb-4.12-bugfixes' of git://github.com/jonmason/ntb
Pull NTB fixes from Jon Mason: "NTB bug fixes to address the modinfo in ntb_perf, a couple of bugs in the NTB transport QP calculations, skx doorbells, and sleeping in ntb_async_tx_submit" * tag 'ntb-4.12-bugfixes' of git://github.com/jonmason/ntb: ntb: no sleep in ntb_async_tx_submit ntb: ntb_hw_intel: Skylake doorbells should be 32bits, not 64bits ntb_transport: fix bug calculating num_qps_mw ntb_transport: fix qp count bug NTB: ntb_test: fix bug printing ntb_perf results ntb: Correct modinfo usage statement for ntb_perf
2 parents 41f1830 + 88931ec commit 865be78

File tree

4 files changed

+15
-51
lines changed

4 files changed

+15
-51
lines changed

drivers/ntb/hw/intel/ntb_hw_intel.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2878,7 +2878,7 @@ static const struct intel_ntb_reg skx_reg = {
28782878
.link_is_up = xeon_link_is_up,
28792879
.db_ioread = skx_db_ioread,
28802880
.db_iowrite = skx_db_iowrite,
2881-
.db_size = sizeof(u64),
2881+
.db_size = sizeof(u32),
28822882
.ntb_ctl = SKX_NTBCNTL_OFFSET,
28832883
.mw_bar = {2, 4},
28842884
};

drivers/ntb/ntb_transport.c

Lines changed: 11 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -177,14 +177,12 @@ struct ntb_transport_qp {
177177
u64 rx_err_ver;
178178
u64 rx_memcpy;
179179
u64 rx_async;
180-
u64 dma_rx_prep_err;
181180
u64 tx_bytes;
182181
u64 tx_pkts;
183182
u64 tx_ring_full;
184183
u64 tx_err_no_buf;
185184
u64 tx_memcpy;
186185
u64 tx_async;
187-
u64 dma_tx_prep_err;
188186
};
189187

190188
struct ntb_transport_mw {
@@ -254,8 +252,6 @@ enum {
254252
#define QP_TO_MW(nt, qp) ((qp) % nt->mw_count)
255253
#define NTB_QP_DEF_NUM_ENTRIES 100
256254
#define NTB_LINK_DOWN_TIMEOUT 10
257-
#define DMA_RETRIES 20
258-
#define DMA_OUT_RESOURCE_TO msecs_to_jiffies(50)
259255

260256
static void ntb_transport_rxc_db(unsigned long data);
261257
static const struct ntb_ctx_ops ntb_transport_ops;
@@ -516,12 +512,6 @@ static ssize_t debugfs_read(struct file *filp, char __user *ubuf, size_t count,
516512
out_offset += snprintf(buf + out_offset, out_count - out_offset,
517513
"free tx - \t%u\n",
518514
ntb_transport_tx_free_entry(qp));
519-
out_offset += snprintf(buf + out_offset, out_count - out_offset,
520-
"DMA tx prep err - \t%llu\n",
521-
qp->dma_tx_prep_err);
522-
out_offset += snprintf(buf + out_offset, out_count - out_offset,
523-
"DMA rx prep err - \t%llu\n",
524-
qp->dma_rx_prep_err);
525515

526516
out_offset += snprintf(buf + out_offset, out_count - out_offset,
527517
"\n");
@@ -623,7 +613,7 @@ static int ntb_transport_setup_qp_mw(struct ntb_transport_ctx *nt,
623613
if (!mw->virt_addr)
624614
return -ENOMEM;
625615

626-
if (qp_count % mw_count && mw_num + 1 < qp_count / mw_count)
616+
if (mw_num < qp_count % mw_count)
627617
num_qps_mw = qp_count / mw_count + 1;
628618
else
629619
num_qps_mw = qp_count / mw_count;
@@ -768,8 +758,6 @@ static void ntb_qp_link_down_reset(struct ntb_transport_qp *qp)
768758
qp->tx_err_no_buf = 0;
769759
qp->tx_memcpy = 0;
770760
qp->tx_async = 0;
771-
qp->dma_tx_prep_err = 0;
772-
qp->dma_rx_prep_err = 0;
773761
}
774762

775763
static void ntb_qp_link_cleanup(struct ntb_transport_qp *qp)
@@ -1000,7 +988,7 @@ static int ntb_transport_init_queue(struct ntb_transport_ctx *nt,
1000988
qp->event_handler = NULL;
1001989
ntb_qp_link_down_reset(qp);
1002990

1003-
if (qp_count % mw_count && mw_num + 1 < qp_count / mw_count)
991+
if (mw_num < qp_count % mw_count)
1004992
num_qps_mw = qp_count / mw_count + 1;
1005993
else
1006994
num_qps_mw = qp_count / mw_count;
@@ -1128,8 +1116,8 @@ static int ntb_transport_probe(struct ntb_client *self, struct ntb_dev *ndev)
11281116
qp_count = ilog2(qp_bitmap);
11291117
if (max_num_clients && max_num_clients < qp_count)
11301118
qp_count = max_num_clients;
1131-
else if (mw_count < qp_count)
1132-
qp_count = mw_count;
1119+
else if (nt->mw_count < qp_count)
1120+
qp_count = nt->mw_count;
11331121

11341122
qp_bitmap &= BIT_ULL(qp_count) - 1;
11351123

@@ -1317,7 +1305,6 @@ static int ntb_async_rx_submit(struct ntb_queue_entry *entry, void *offset)
13171305
struct dmaengine_unmap_data *unmap;
13181306
dma_cookie_t cookie;
13191307
void *buf = entry->buf;
1320-
int retries = 0;
13211308

13221309
len = entry->len;
13231310
device = chan->device;
@@ -1346,22 +1333,11 @@ static int ntb_async_rx_submit(struct ntb_queue_entry *entry, void *offset)
13461333

13471334
unmap->from_cnt = 1;
13481335

1349-
for (retries = 0; retries < DMA_RETRIES; retries++) {
1350-
txd = device->device_prep_dma_memcpy(chan,
1351-
unmap->addr[1],
1352-
unmap->addr[0], len,
1353-
DMA_PREP_INTERRUPT);
1354-
if (txd)
1355-
break;
1356-
1357-
set_current_state(TASK_INTERRUPTIBLE);
1358-
schedule_timeout(DMA_OUT_RESOURCE_TO);
1359-
}
1360-
1361-
if (!txd) {
1362-
qp->dma_rx_prep_err++;
1336+
txd = device->device_prep_dma_memcpy(chan, unmap->addr[1],
1337+
unmap->addr[0], len,
1338+
DMA_PREP_INTERRUPT);
1339+
if (!txd)
13631340
goto err_get_unmap;
1364-
}
13651341

13661342
txd->callback_result = ntb_rx_copy_callback;
13671343
txd->callback_param = entry;
@@ -1606,7 +1582,6 @@ static int ntb_async_tx_submit(struct ntb_transport_qp *qp,
16061582
struct dmaengine_unmap_data *unmap;
16071583
dma_addr_t dest;
16081584
dma_cookie_t cookie;
1609-
int retries = 0;
16101585

16111586
device = chan->device;
16121587
dest = qp->tx_mw_phys + qp->tx_max_frame * entry->tx_index;
@@ -1628,21 +1603,10 @@ static int ntb_async_tx_submit(struct ntb_transport_qp *qp,
16281603

16291604
unmap->to_cnt = 1;
16301605

1631-
for (retries = 0; retries < DMA_RETRIES; retries++) {
1632-
txd = device->device_prep_dma_memcpy(chan, dest,
1633-
unmap->addr[0], len,
1634-
DMA_PREP_INTERRUPT);
1635-
if (txd)
1636-
break;
1637-
1638-
set_current_state(TASK_INTERRUPTIBLE);
1639-
schedule_timeout(DMA_OUT_RESOURCE_TO);
1640-
}
1641-
1642-
if (!txd) {
1643-
qp->dma_tx_prep_err++;
1606+
txd = device->device_prep_dma_memcpy(chan, dest, unmap->addr[0], len,
1607+
DMA_PREP_INTERRUPT);
1608+
if (!txd)
16441609
goto err_get_unmap;
1645-
}
16461610

16471611
txd->callback_result = ntb_tx_copy_callback;
16481612
txd->callback_param = entry;

drivers/ntb/test/ntb_perf.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -90,11 +90,11 @@ MODULE_PARM_DESC(max_mw_size, "Limit size of large memory windows");
9090

9191
static unsigned int seg_order = 19; /* 512K */
9292
module_param(seg_order, uint, 0644);
93-
MODULE_PARM_DESC(seg_order, "size order [n^2] of buffer segment for testing");
93+
MODULE_PARM_DESC(seg_order, "size order [2^n] of buffer segment for testing");
9494

9595
static unsigned int run_order = 32; /* 4G */
9696
module_param(run_order, uint, 0644);
97-
MODULE_PARM_DESC(run_order, "size order [n^2] of total data to transfer");
97+
MODULE_PARM_DESC(run_order, "size order [2^n] of total data to transfer");
9898

9999
static bool use_dma; /* default to 0 */
100100
module_param(use_dma, bool, 0644);

tools/testing/selftests/ntb/ntb_test.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -305,7 +305,7 @@ function perf_test()
305305
echo "Running remote perf test $WITH DMA"
306306
write_file "" $REMOTE_PERF/run
307307
echo -n " "
308-
read_file $LOCAL_PERF/run
308+
read_file $REMOTE_PERF/run
309309
echo " Passed"
310310

311311
_modprobe -r ntb_perf

0 commit comments

Comments
 (0)