Loading drivers/ntb/ntb_transport.c +32 −14 Original line number Diff line number Diff line Loading @@ -346,6 +346,7 @@ int ntb_transport_register_client_dev(char *device_name) { struct ntb_transport_client_dev *client_dev; struct ntb_transport_ctx *nt; int node; int rc, i = 0; if (list_empty(&ntb_transport_list)) Loading @@ -354,8 +355,10 @@ int ntb_transport_register_client_dev(char *device_name) list_for_each_entry(nt, &ntb_transport_list, entry) { struct device *dev; client_dev = kzalloc(sizeof(*client_dev), GFP_KERNEL); node = dev_to_node(&nt->ndev->dev); client_dev = kzalloc_node(sizeof(*client_dev), GFP_KERNEL, node); if (!client_dev) { rc = -ENOMEM; goto err; Loading Loading @@ -953,6 +956,7 @@ static int ntb_transport_probe(struct ntb_client *self, struct ntb_dev *ndev) struct ntb_transport_mw *mw; unsigned int mw_count, qp_count; u64 qp_bitmap; int node; int rc, i; if (ntb_db_is_unsafe(ndev)) Loading @@ -962,7 +966,9 @@ static int ntb_transport_probe(struct ntb_client *self, struct ntb_dev *ndev) dev_dbg(&ndev->dev, "scratchpad is unsafe, proceed anyway...\n"); nt = kzalloc(sizeof(*nt), GFP_KERNEL); node = dev_to_node(&ndev->dev); nt = kzalloc_node(sizeof(*nt), GFP_KERNEL, node); if (!nt) return -ENOMEM; Loading @@ -972,7 +978,8 @@ static int ntb_transport_probe(struct ntb_client *self, struct ntb_dev *ndev) nt->mw_count = mw_count; nt->mw_vec = kcalloc(mw_count, sizeof(*nt->mw_vec), GFP_KERNEL); nt->mw_vec = kzalloc_node(mw_count * sizeof(*nt->mw_vec), GFP_KERNEL, node); if (!nt->mw_vec) { rc = -ENOMEM; goto err; Loading Loading @@ -1012,7 +1019,8 @@ static int ntb_transport_probe(struct ntb_client *self, struct ntb_dev *ndev) nt->qp_bitmap = qp_bitmap; nt->qp_bitmap_free = qp_bitmap; nt->qp_vec = kcalloc(qp_count, sizeof(*nt->qp_vec), GFP_KERNEL); nt->qp_vec = kzalloc_node(qp_count * sizeof(*nt->qp_vec), GFP_KERNEL, node); if (!nt->qp_vec) { rc = -ENOMEM; goto err2; Loading Loading @@ -1512,6 +1520,11 @@ static void ntb_send_link_down(struct ntb_transport_qp *qp) ntb_qp_link_down_reset(qp); } static bool ntb_dma_filter_fn(struct dma_chan *chan, void *node) { return dev_to_node(&chan->dev->device) == (int)(unsigned long)node; } /** * ntb_transport_create_queue - Create a new NTB transport layer queue * @rx_handler: receive callback function Loading @@ -1537,12 +1550,16 @@ ntb_transport_create_queue(void *data, struct device *client_dev, struct ntb_transport_qp *qp; u64 qp_bit; unsigned int free_queue; dma_cap_mask_t dma_mask; int node; int i; ndev = dev_ntb(client_dev->parent); pdev = ndev->pdev; nt = ndev->ctx; node = dev_to_node(&ndev->dev); free_queue = ffs(nt->qp_bitmap); if (!free_queue) goto err; Loading @@ -1560,15 +1577,16 @@ ntb_transport_create_queue(void *data, struct device *client_dev, qp->tx_handler = handlers->tx_handler; qp->event_handler = handlers->event_handler; dmaengine_get(); qp->dma_chan = dma_find_channel(DMA_MEMCPY); if (!qp->dma_chan) { dmaengine_put(); dma_cap_zero(dma_mask); dma_cap_set(DMA_MEMCPY, dma_mask); qp->dma_chan = dma_request_channel(dma_mask, ntb_dma_filter_fn, (void *)(unsigned long)node); if (!qp->dma_chan) dev_info(&pdev->dev, "Unable to allocate DMA channel, using CPU instead\n"); } for (i = 0; i < NTB_QP_DEF_NUM_ENTRIES; i++) { entry = kzalloc(sizeof(*entry), GFP_ATOMIC); entry = kzalloc_node(sizeof(*entry), GFP_ATOMIC, node); if (!entry) goto err1; Loading @@ -1578,7 +1596,7 @@ ntb_transport_create_queue(void *data, struct device *client_dev, } for (i = 0; i < NTB_QP_DEF_NUM_ENTRIES; i++) { entry = kzalloc(sizeof(*entry), GFP_ATOMIC); entry = kzalloc_node(sizeof(*entry), GFP_ATOMIC, node); if (!entry) goto err2; Loading @@ -1601,7 +1619,7 @@ ntb_transport_create_queue(void *data, struct device *client_dev, while ((entry = ntb_list_rm(&qp->ntb_rx_free_q_lock, &qp->rx_free_q))) kfree(entry); if (qp->dma_chan) dmaengine_put(); dma_release_channel(qp->dma_chan); nt->qp_bitmap_free |= qp_bit; err: return NULL; Loading Loading @@ -1638,7 +1656,7 @@ void ntb_transport_free_queue(struct ntb_transport_qp *qp) */ dma_sync_wait(chan, qp->last_cookie); dmaengine_terminate_all(chan); dmaengine_put(); dma_release_channel(chan); } qp_bit = BIT_ULL(qp->qp_num); Loading Loading
drivers/ntb/ntb_transport.c +32 −14 Original line number Diff line number Diff line Loading @@ -346,6 +346,7 @@ int ntb_transport_register_client_dev(char *device_name) { struct ntb_transport_client_dev *client_dev; struct ntb_transport_ctx *nt; int node; int rc, i = 0; if (list_empty(&ntb_transport_list)) Loading @@ -354,8 +355,10 @@ int ntb_transport_register_client_dev(char *device_name) list_for_each_entry(nt, &ntb_transport_list, entry) { struct device *dev; client_dev = kzalloc(sizeof(*client_dev), GFP_KERNEL); node = dev_to_node(&nt->ndev->dev); client_dev = kzalloc_node(sizeof(*client_dev), GFP_KERNEL, node); if (!client_dev) { rc = -ENOMEM; goto err; Loading Loading @@ -953,6 +956,7 @@ static int ntb_transport_probe(struct ntb_client *self, struct ntb_dev *ndev) struct ntb_transport_mw *mw; unsigned int mw_count, qp_count; u64 qp_bitmap; int node; int rc, i; if (ntb_db_is_unsafe(ndev)) Loading @@ -962,7 +966,9 @@ static int ntb_transport_probe(struct ntb_client *self, struct ntb_dev *ndev) dev_dbg(&ndev->dev, "scratchpad is unsafe, proceed anyway...\n"); nt = kzalloc(sizeof(*nt), GFP_KERNEL); node = dev_to_node(&ndev->dev); nt = kzalloc_node(sizeof(*nt), GFP_KERNEL, node); if (!nt) return -ENOMEM; Loading @@ -972,7 +978,8 @@ static int ntb_transport_probe(struct ntb_client *self, struct ntb_dev *ndev) nt->mw_count = mw_count; nt->mw_vec = kcalloc(mw_count, sizeof(*nt->mw_vec), GFP_KERNEL); nt->mw_vec = kzalloc_node(mw_count * sizeof(*nt->mw_vec), GFP_KERNEL, node); if (!nt->mw_vec) { rc = -ENOMEM; goto err; Loading Loading @@ -1012,7 +1019,8 @@ static int ntb_transport_probe(struct ntb_client *self, struct ntb_dev *ndev) nt->qp_bitmap = qp_bitmap; nt->qp_bitmap_free = qp_bitmap; nt->qp_vec = kcalloc(qp_count, sizeof(*nt->qp_vec), GFP_KERNEL); nt->qp_vec = kzalloc_node(qp_count * sizeof(*nt->qp_vec), GFP_KERNEL, node); if (!nt->qp_vec) { rc = -ENOMEM; goto err2; Loading Loading @@ -1512,6 +1520,11 @@ static void ntb_send_link_down(struct ntb_transport_qp *qp) ntb_qp_link_down_reset(qp); } static bool ntb_dma_filter_fn(struct dma_chan *chan, void *node) { return dev_to_node(&chan->dev->device) == (int)(unsigned long)node; } /** * ntb_transport_create_queue - Create a new NTB transport layer queue * @rx_handler: receive callback function Loading @@ -1537,12 +1550,16 @@ ntb_transport_create_queue(void *data, struct device *client_dev, struct ntb_transport_qp *qp; u64 qp_bit; unsigned int free_queue; dma_cap_mask_t dma_mask; int node; int i; ndev = dev_ntb(client_dev->parent); pdev = ndev->pdev; nt = ndev->ctx; node = dev_to_node(&ndev->dev); free_queue = ffs(nt->qp_bitmap); if (!free_queue) goto err; Loading @@ -1560,15 +1577,16 @@ ntb_transport_create_queue(void *data, struct device *client_dev, qp->tx_handler = handlers->tx_handler; qp->event_handler = handlers->event_handler; dmaengine_get(); qp->dma_chan = dma_find_channel(DMA_MEMCPY); if (!qp->dma_chan) { dmaengine_put(); dma_cap_zero(dma_mask); dma_cap_set(DMA_MEMCPY, dma_mask); qp->dma_chan = dma_request_channel(dma_mask, ntb_dma_filter_fn, (void *)(unsigned long)node); if (!qp->dma_chan) dev_info(&pdev->dev, "Unable to allocate DMA channel, using CPU instead\n"); } for (i = 0; i < NTB_QP_DEF_NUM_ENTRIES; i++) { entry = kzalloc(sizeof(*entry), GFP_ATOMIC); entry = kzalloc_node(sizeof(*entry), GFP_ATOMIC, node); if (!entry) goto err1; Loading @@ -1578,7 +1596,7 @@ ntb_transport_create_queue(void *data, struct device *client_dev, } for (i = 0; i < NTB_QP_DEF_NUM_ENTRIES; i++) { entry = kzalloc(sizeof(*entry), GFP_ATOMIC); entry = kzalloc_node(sizeof(*entry), GFP_ATOMIC, node); if (!entry) goto err2; Loading @@ -1601,7 +1619,7 @@ ntb_transport_create_queue(void *data, struct device *client_dev, while ((entry = ntb_list_rm(&qp->ntb_rx_free_q_lock, &qp->rx_free_q))) kfree(entry); if (qp->dma_chan) dmaengine_put(); dma_release_channel(qp->dma_chan); nt->qp_bitmap_free |= qp_bit; err: return NULL; Loading Loading @@ -1638,7 +1656,7 @@ void ntb_transport_free_queue(struct ntb_transport_qp *qp) */ dma_sync_wait(chan, qp->last_cookie); dmaengine_terminate_all(chan); dmaengine_put(); dma_release_channel(chan); } qp_bit = BIT_ULL(qp->qp_num); Loading