ionic: move rx_page_alloc and free
Move ionic_rx_page_alloc() and ionic_rx_page_free() to earlier in the file to make the next patch easier to review. Signed-off-by: Shannon Nelson <snelson@pensando.io> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
eeada4105d
commit
2b5720f269
@ -66,6 +66,76 @@ static struct sk_buff *ionic_rx_skb_alloc(struct ionic_queue *q,
|
||||
return skb;
|
||||
}
|
||||
|
||||
static int ionic_rx_page_alloc(struct ionic_queue *q,
|
||||
struct ionic_page_info *page_info)
|
||||
{
|
||||
struct ionic_lif *lif = q->lif;
|
||||
struct ionic_rx_stats *stats;
|
||||
struct net_device *netdev;
|
||||
struct device *dev;
|
||||
|
||||
netdev = lif->netdev;
|
||||
dev = lif->ionic->dev;
|
||||
stats = q_to_rx_stats(q);
|
||||
|
||||
if (unlikely(!page_info)) {
|
||||
net_err_ratelimited("%s: %s invalid page_info in alloc\n",
|
||||
netdev->name, q->name);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
page_info->page = dev_alloc_page();
|
||||
if (unlikely(!page_info->page)) {
|
||||
net_err_ratelimited("%s: %s page alloc failed\n",
|
||||
netdev->name, q->name);
|
||||
stats->alloc_err++;
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
page_info->dma_addr = dma_map_page(dev, page_info->page, 0, PAGE_SIZE,
|
||||
DMA_FROM_DEVICE);
|
||||
if (unlikely(dma_mapping_error(dev, page_info->dma_addr))) {
|
||||
put_page(page_info->page);
|
||||
page_info->dma_addr = 0;
|
||||
page_info->page = NULL;
|
||||
net_err_ratelimited("%s: %s dma map failed\n",
|
||||
netdev->name, q->name);
|
||||
stats->dma_map_err++;
|
||||
return -EIO;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void ionic_rx_page_free(struct ionic_queue *q,
|
||||
struct ionic_page_info *page_info)
|
||||
{
|
||||
struct ionic_lif *lif = q->lif;
|
||||
struct net_device *netdev;
|
||||
struct device *dev;
|
||||
|
||||
netdev = lif->netdev;
|
||||
dev = lif->ionic->dev;
|
||||
|
||||
if (unlikely(!page_info)) {
|
||||
net_err_ratelimited("%s: %s invalid page_info in free\n",
|
||||
netdev->name, q->name);
|
||||
return;
|
||||
}
|
||||
|
||||
if (unlikely(!page_info->page)) {
|
||||
net_err_ratelimited("%s: %s invalid page in free\n",
|
||||
netdev->name, q->name);
|
||||
return;
|
||||
}
|
||||
|
||||
dma_unmap_page(dev, page_info->dma_addr, PAGE_SIZE, DMA_FROM_DEVICE);
|
||||
|
||||
put_page(page_info->page);
|
||||
page_info->dma_addr = 0;
|
||||
page_info->page = NULL;
|
||||
}
|
||||
|
||||
static struct sk_buff *ionic_rx_frags(struct ionic_queue *q,
|
||||
struct ionic_desc_info *desc_info,
|
||||
struct ionic_cq_info *cq_info)
|
||||
@ -253,76 +323,6 @@ static bool ionic_rx_service(struct ionic_cq *cq, struct ionic_cq_info *cq_info)
|
||||
return true;
|
||||
}
|
||||
|
||||
static int ionic_rx_page_alloc(struct ionic_queue *q,
|
||||
struct ionic_page_info *page_info)
|
||||
{
|
||||
struct ionic_lif *lif = q->lif;
|
||||
struct ionic_rx_stats *stats;
|
||||
struct net_device *netdev;
|
||||
struct device *dev;
|
||||
|
||||
netdev = lif->netdev;
|
||||
dev = lif->ionic->dev;
|
||||
stats = q_to_rx_stats(q);
|
||||
|
||||
if (unlikely(!page_info)) {
|
||||
net_err_ratelimited("%s: %s invalid page_info in alloc\n",
|
||||
netdev->name, q->name);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
page_info->page = dev_alloc_page();
|
||||
if (unlikely(!page_info->page)) {
|
||||
net_err_ratelimited("%s: %s page alloc failed\n",
|
||||
netdev->name, q->name);
|
||||
stats->alloc_err++;
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
page_info->dma_addr = dma_map_page(dev, page_info->page, 0, PAGE_SIZE,
|
||||
DMA_FROM_DEVICE);
|
||||
if (unlikely(dma_mapping_error(dev, page_info->dma_addr))) {
|
||||
put_page(page_info->page);
|
||||
page_info->dma_addr = 0;
|
||||
page_info->page = NULL;
|
||||
net_err_ratelimited("%s: %s dma map failed\n",
|
||||
netdev->name, q->name);
|
||||
stats->dma_map_err++;
|
||||
return -EIO;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void ionic_rx_page_free(struct ionic_queue *q,
|
||||
struct ionic_page_info *page_info)
|
||||
{
|
||||
struct ionic_lif *lif = q->lif;
|
||||
struct net_device *netdev;
|
||||
struct device *dev;
|
||||
|
||||
netdev = lif->netdev;
|
||||
dev = lif->ionic->dev;
|
||||
|
||||
if (unlikely(!page_info)) {
|
||||
net_err_ratelimited("%s: %s invalid page_info in free\n",
|
||||
netdev->name, q->name);
|
||||
return;
|
||||
}
|
||||
|
||||
if (unlikely(!page_info->page)) {
|
||||
net_err_ratelimited("%s: %s invalid page in free\n",
|
||||
netdev->name, q->name);
|
||||
return;
|
||||
}
|
||||
|
||||
dma_unmap_page(dev, page_info->dma_addr, PAGE_SIZE, DMA_FROM_DEVICE);
|
||||
|
||||
put_page(page_info->page);
|
||||
page_info->dma_addr = 0;
|
||||
page_info->page = NULL;
|
||||
}
|
||||
|
||||
void ionic_rx_fill(struct ionic_queue *q)
|
||||
{
|
||||
struct net_device *netdev = q->lif->netdev;
|
||||
|
Loading…
Reference in New Issue
Block a user