From: Matthew Wilcox Date: Fri, 15 Feb 2019 21:01:15 +0000 (-0500) Subject: nicstar: Convert to XArray X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=774ceca42046be2398f1643c8443534597c29f35;p=users%2Fwilly%2Fxarray.git nicstar: Convert to XArray Signed-off-by: Matthew Wilcox --- diff --git a/drivers/atm/nicstar.c b/drivers/atm/nicstar.c index 8db8c0fb5e2d..914244952fe9 100644 --- a/drivers/atm/nicstar.c +++ b/drivers/atm/nicstar.c @@ -49,7 +49,7 @@ #include #include #include -#include +#include #include #include #include @@ -244,7 +244,6 @@ static void nicstar_remove_one(struct pci_dev *pcidev) if (card->scd2vc[j] != NULL) free_scq(card, card->scd2vc[j]->scq, card->scd2vc[j]->tx_vcc); } - idr_destroy(&card->idr); dma_free_coherent(&card->pcidev->dev, NS_RSQSIZE + NS_RSQ_ALIGNMENT, card->rsq.org, card->rsq.dma); dma_free_coherent(&card->pcidev->dev, NS_TSQSIZE + NS_TSQ_ALIGNMENT, @@ -637,7 +636,7 @@ static int ns_init_card(int i, struct pci_dev *pcidev) card->efbie = 1; /* To prevent push_rxbufs from enabling the interrupt */ - idr_init(&card->idr); + xa_init_flags(&card->handles, XA_FLAGS_ALLOC); /* Pre-allocate some huge buffers */ skb_queue_head_init(&card->hbpool.queue); @@ -942,7 +941,7 @@ static void free_scq(ns_dev *card, scq_info *scq, struct atm_vcc *vcc) static void push_rxbufs(ns_dev * card, struct sk_buff *skb) { struct sk_buff *handle1, *handle2; - int id1, id2; + int id1, id2, ret; u32 addr1, addr2; u32 stat; unsigned long flags; @@ -1018,13 +1017,17 @@ static void push_rxbufs(ns_dev * card, struct sk_buff *skb) card->lbfqc += 2; } - id1 = idr_alloc(&card->idr, handle1, 0, 0, GFP_ATOMIC); - if (id1 < 0) + ret = xa_alloc(&card->handles, &id1, handle1, xa_limit_31b, + GFP_ATOMIC); + if (ret < 0) goto out; - id2 = idr_alloc(&card->idr, handle2, 0, 0, GFP_ATOMIC); - if (id2 < 0) + ret = xa_alloc(&card->handles, &id2, handle2, xa_limit_31b, + GFP_ATOMIC); + if (ret < 0) { + xa_erase(&card->handles, id1); goto out; + } spin_lock_irqsave(&card->res_lock, flags); while (CMD_BUSY(card)) ; @@ -1150,7 +1153,7 @@ static irqreturn_t ns_irq_handler(int irq, void *dev_id) struct sk_buff *oldbuf; oldbuf = card->rcbuf; - card->rcbuf = idr_find(&card->idr, + card->rcbuf = xa_load(&card->handles, ns_rcqe_nextbufhandle(card->rawcell)); card->rawch = NS_PRV_DMA(card->rcbuf); card->rawcell = (struct ns_rcqe *) @@ -1979,7 +1982,7 @@ static void dequeue_rx(ns_dev * card, ns_rsqe * rsqe) card->lbfqc = ns_stat_lfbqc_get(stat); id = le32_to_cpu(rsqe->buffer_handle); - skb = idr_remove(&card->idr, id); + skb = xa_erase(&card->handles, id); if (!skb) { RXPRINTK(KERN_ERR "nicstar%d: skb not found!\n", card->index); diff --git a/drivers/atm/nicstar.h b/drivers/atm/nicstar.h index 1b7f1dfc1735..bbd42f389303 100644 --- a/drivers/atm/nicstar.h +++ b/drivers/atm/nicstar.h @@ -17,11 +17,11 @@ #include #include -#include #include #include #include #include +#include /* Options */ @@ -714,7 +714,7 @@ typedef struct ns_dev { int vpibits; int vcibits; struct pci_dev *pcidev; - struct idr idr; + struct xarray handles; struct atm_dev *atmdev; tsq_info tsq; rsq_info rsq;