diff options
| -rw-r--r-- | drivers/ntb/hw/amd/ntb_hw_amd.c | 11 | ||||
| -rw-r--r-- | drivers/ntb/ntb_transport.c | 21 | ||||
| -rw-r--r-- | drivers/ntb/test/ntb_perf.c | 2 | ||||
| -rw-r--r-- | drivers/ntb/test/ntb_tool.c | 15 | 
4 files changed, 24 insertions, 25 deletions
| diff --git a/drivers/ntb/hw/amd/ntb_hw_amd.c b/drivers/ntb/hw/amd/ntb_hw_amd.c index 4940b6301d83..d687e8c2cc78 100644 --- a/drivers/ntb/hw/amd/ntb_hw_amd.c +++ b/drivers/ntb/hw/amd/ntb_hw_amd.c @@ -941,13 +941,10 @@ static void ndev_init_debugfs(struct amd_ntb_dev *ndev)  		ndev->debugfs_dir =  			debugfs_create_dir(pci_name(ndev->ntb.pdev),  					   debugfs_dir); -		if (IS_ERR(ndev->debugfs_dir)) -			ndev->debugfs_info = NULL; -		else -			ndev->debugfs_info = -				debugfs_create_file("info", S_IRUSR, -						    ndev->debugfs_dir, ndev, -						    &amd_ntb_debugfs_info); +		ndev->debugfs_info = +			debugfs_create_file("info", S_IRUSR, +					    ndev->debugfs_dir, ndev, +					    &amd_ntb_debugfs_info);  	}  } diff --git a/drivers/ntb/ntb_transport.c b/drivers/ntb/ntb_transport.c index 2abd2235bbca..f9e7847a378e 100644 --- a/drivers/ntb/ntb_transport.c +++ b/drivers/ntb/ntb_transport.c @@ -909,7 +909,7 @@ static int ntb_set_mw(struct ntb_transport_ctx *nt, int num_mw,  	return 0;  } -static void ntb_qp_link_down_reset(struct ntb_transport_qp *qp) +static void ntb_qp_link_context_reset(struct ntb_transport_qp *qp)  {  	qp->link_is_up = false;  	qp->active = false; @@ -932,6 +932,13 @@ static void ntb_qp_link_down_reset(struct ntb_transport_qp *qp)  	qp->tx_async = 0;  } +static void ntb_qp_link_down_reset(struct ntb_transport_qp *qp) +{ +	ntb_qp_link_context_reset(qp); +	if (qp->remote_rx_info) +		qp->remote_rx_info->entry = qp->rx_max_entry - 1; +} +  static void ntb_qp_link_cleanup(struct ntb_transport_qp *qp)  {  	struct ntb_transport_ctx *nt = qp->transport; @@ -1174,7 +1181,7 @@ static int ntb_transport_init_queue(struct ntb_transport_ctx *nt,  	qp->ndev = nt->ndev;  	qp->client_ready = false;  	qp->event_handler = NULL; -	ntb_qp_link_down_reset(qp); +	ntb_qp_link_context_reset(qp);  	if (mw_num < qp_count % mw_count)  		num_qps_mw = qp_count / mw_count + 1; @@ -1894,7 +1901,7 @@ err:  static int ntb_process_tx(struct ntb_transport_qp *qp,  			  struct ntb_queue_entry *entry)  { -	if (qp->tx_index == qp->remote_rx_info->entry) { +	if (!ntb_transport_tx_free_entry(qp)) {  		qp->tx_ring_full++;  		return -EAGAIN;  	} @@ -2276,9 +2283,13 @@ int ntb_transport_tx_enqueue(struct ntb_transport_qp *qp, void *cb, void *data,  	struct ntb_queue_entry *entry;  	int rc; -	if (!qp || !qp->link_is_up || !len) +	if (!qp || !len)  		return -EINVAL; +	/* If the qp link is down already, just ignore. */ +	if (!qp->link_is_up) +		return 0; +  	entry = ntb_list_rm(&qp->ntb_tx_free_q_lock, &qp->tx_free_q);  	if (!entry) {  		qp->tx_err_no_buf++; @@ -2418,7 +2429,7 @@ unsigned int ntb_transport_tx_free_entry(struct ntb_transport_qp *qp)  	unsigned int head = qp->tx_index;  	unsigned int tail = qp->remote_rx_info->entry; -	return tail > head ? tail - head : qp->tx_max_entry + tail - head; +	return tail >= head ? tail - head : qp->tx_max_entry + tail - head;  }  EXPORT_SYMBOL_GPL(ntb_transport_tx_free_entry); diff --git a/drivers/ntb/test/ntb_perf.c b/drivers/ntb/test/ntb_perf.c index 65e1e5cf1b29..553f1f46bc66 100644 --- a/drivers/ntb/test/ntb_perf.c +++ b/drivers/ntb/test/ntb_perf.c @@ -1355,7 +1355,7 @@ static void perf_setup_dbgfs(struct perf_ctx *perf)  	struct pci_dev *pdev = perf->ntb->pdev;  	perf->dbgfs_dir = debugfs_create_dir(pci_name(pdev), perf_dbgfs_topdir); -	if (!perf->dbgfs_dir) { +	if (IS_ERR(perf->dbgfs_dir)) {  		dev_warn(&perf->ntb->dev, "DebugFS unsupported\n");  		return;  	} diff --git a/drivers/ntb/test/ntb_tool.c b/drivers/ntb/test/ntb_tool.c index eeeb4b1c97d2..641cb7e05a47 100644 --- a/drivers/ntb/test/ntb_tool.c +++ b/drivers/ntb/test/ntb_tool.c @@ -370,16 +370,9 @@ static ssize_t tool_fn_write(struct tool_ctx *tc,  	if (*offp)  		return 0; -	buf = kmalloc(size + 1, GFP_KERNEL); -	if (!buf) -		return -ENOMEM; - -	if (copy_from_user(buf, ubuf, size)) { -		kfree(buf); -		return -EFAULT; -	} - -	buf[size] = 0; +	buf = memdup_user_nul(ubuf, size); +	if (IS_ERR(buf)) +		return PTR_ERR(buf);  	n = sscanf(buf, "%c %lli", &cmd, &bits); @@ -1495,8 +1488,6 @@ static void tool_setup_dbgfs(struct tool_ctx *tc)  	tc->dbgfs_dir = debugfs_create_dir(dev_name(&tc->ntb->dev),  					   tool_dbgfs_topdir); -	if (!tc->dbgfs_dir) -		return;  	debugfs_create_file("port", 0600, tc->dbgfs_dir,  			    tc, &tool_port_fops); | 
