Skip to content

Commit fa9d4bf

Browse files
committed
Merge tag 'ntb-6.6' of https://github.com/jonmason/ntb
Pull NTB updates from Jon Mason: "Link toggling fixes and debugfs error path fixes" [ And for everybody like me who always have to remind themselves what the TLA of the day is, and what NTB stands for - it's a PCIe "Non-Transparent Bridge" thing - Linus ] * tag 'ntb-6.6' of https://github.com/jonmason/ntb: ntb: Check tx descriptors outstanding instead of head/tail for tx queue ntb: Fix calculation ntb_transport_tx_free_entry() ntb: Drop packets when qp link is down ntb: Clean up tx tail index on link down ntb: amd: Drop unnecessary error check for debugfs_create_dir NTB: ntb_tool: Switch to memdup_user_nul() helper dtivers: ntb: fix parameter check in perf_setup_dbgfs() ntb: Remove error checking for debugfs_create_dir()
2 parents 6099776 + 6439822 commit fa9d4bf

File tree

4 files changed

+24
-25
lines changed

4 files changed

+24
-25
lines changed

drivers/ntb/hw/amd/ntb_hw_amd.c

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -941,13 +941,10 @@ static void ndev_init_debugfs(struct amd_ntb_dev *ndev)
941941
ndev->debugfs_dir =
942942
debugfs_create_dir(pci_name(ndev->ntb.pdev),
943943
debugfs_dir);
944-
if (IS_ERR(ndev->debugfs_dir))
945-
ndev->debugfs_info = NULL;
946-
else
947-
ndev->debugfs_info =
948-
debugfs_create_file("info", S_IRUSR,
949-
ndev->debugfs_dir, ndev,
950-
&amd_ntb_debugfs_info);
944+
ndev->debugfs_info =
945+
debugfs_create_file("info", S_IRUSR,
946+
ndev->debugfs_dir, ndev,
947+
&amd_ntb_debugfs_info);
951948
}
952949
}
953950

drivers/ntb/ntb_transport.c

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -909,7 +909,7 @@ static int ntb_set_mw(struct ntb_transport_ctx *nt, int num_mw,
909909
return 0;
910910
}
911911

912-
static void ntb_qp_link_down_reset(struct ntb_transport_qp *qp)
912+
static void ntb_qp_link_context_reset(struct ntb_transport_qp *qp)
913913
{
914914
qp->link_is_up = false;
915915
qp->active = false;
@@ -932,6 +932,13 @@ static void ntb_qp_link_down_reset(struct ntb_transport_qp *qp)
932932
qp->tx_async = 0;
933933
}
934934

935+
static void ntb_qp_link_down_reset(struct ntb_transport_qp *qp)
936+
{
937+
ntb_qp_link_context_reset(qp);
938+
if (qp->remote_rx_info)
939+
qp->remote_rx_info->entry = qp->rx_max_entry - 1;
940+
}
941+
935942
static void ntb_qp_link_cleanup(struct ntb_transport_qp *qp)
936943
{
937944
struct ntb_transport_ctx *nt = qp->transport;
@@ -1174,7 +1181,7 @@ static int ntb_transport_init_queue(struct ntb_transport_ctx *nt,
11741181
qp->ndev = nt->ndev;
11751182
qp->client_ready = false;
11761183
qp->event_handler = NULL;
1177-
ntb_qp_link_down_reset(qp);
1184+
ntb_qp_link_context_reset(qp);
11781185

11791186
if (mw_num < qp_count % mw_count)
11801187
num_qps_mw = qp_count / mw_count + 1;
@@ -1894,7 +1901,7 @@ static void ntb_async_tx(struct ntb_transport_qp *qp,
18941901
static int ntb_process_tx(struct ntb_transport_qp *qp,
18951902
struct ntb_queue_entry *entry)
18961903
{
1897-
if (qp->tx_index == qp->remote_rx_info->entry) {
1904+
if (!ntb_transport_tx_free_entry(qp)) {
18981905
qp->tx_ring_full++;
18991906
return -EAGAIN;
19001907
}
@@ -2276,9 +2283,13 @@ int ntb_transport_tx_enqueue(struct ntb_transport_qp *qp, void *cb, void *data,
22762283
struct ntb_queue_entry *entry;
22772284
int rc;
22782285

2279-
if (!qp || !qp->link_is_up || !len)
2286+
if (!qp || !len)
22802287
return -EINVAL;
22812288

2289+
/* If the qp link is down already, just ignore. */
2290+
if (!qp->link_is_up)
2291+
return 0;
2292+
22822293
entry = ntb_list_rm(&qp->ntb_tx_free_q_lock, &qp->tx_free_q);
22832294
if (!entry) {
22842295
qp->tx_err_no_buf++;
@@ -2418,7 +2429,7 @@ unsigned int ntb_transport_tx_free_entry(struct ntb_transport_qp *qp)
24182429
unsigned int head = qp->tx_index;
24192430
unsigned int tail = qp->remote_rx_info->entry;
24202431

2421-
return tail > head ? tail - head : qp->tx_max_entry + tail - head;
2432+
return tail >= head ? tail - head : qp->tx_max_entry + tail - head;
24222433
}
24232434
EXPORT_SYMBOL_GPL(ntb_transport_tx_free_entry);
24242435

drivers/ntb/test/ntb_perf.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1355,7 +1355,7 @@ static void perf_setup_dbgfs(struct perf_ctx *perf)
13551355
struct pci_dev *pdev = perf->ntb->pdev;
13561356

13571357
perf->dbgfs_dir = debugfs_create_dir(pci_name(pdev), perf_dbgfs_topdir);
1358-
if (!perf->dbgfs_dir) {
1358+
if (IS_ERR(perf->dbgfs_dir)) {
13591359
dev_warn(&perf->ntb->dev, "DebugFS unsupported\n");
13601360
return;
13611361
}

drivers/ntb/test/ntb_tool.c

Lines changed: 3 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -370,16 +370,9 @@ static ssize_t tool_fn_write(struct tool_ctx *tc,
370370
if (*offp)
371371
return 0;
372372

373-
buf = kmalloc(size + 1, GFP_KERNEL);
374-
if (!buf)
375-
return -ENOMEM;
376-
377-
if (copy_from_user(buf, ubuf, size)) {
378-
kfree(buf);
379-
return -EFAULT;
380-
}
381-
382-
buf[size] = 0;
373+
buf = memdup_user_nul(ubuf, size);
374+
if (IS_ERR(buf))
375+
return PTR_ERR(buf);
383376

384377
n = sscanf(buf, "%c %lli", &cmd, &bits);
385378

@@ -1495,8 +1488,6 @@ static void tool_setup_dbgfs(struct tool_ctx *tc)
14951488

14961489
tc->dbgfs_dir = debugfs_create_dir(dev_name(&tc->ntb->dev),
14971490
tool_dbgfs_topdir);
1498-
if (!tc->dbgfs_dir)
1499-
return;
15001491

15011492
debugfs_create_file("port", 0600, tc->dbgfs_dir,
15021493
tc, &tool_port_fops);

0 commit comments

Comments
 (0)