Lines Matching refs:rcd

134 	dd->rcd = kcalloc(dd->ctxtcnt, sizeof(*dd->rcd), GFP_KERNEL);
135 if (!dd->rcd)
141 struct qib_ctxtdata *rcd;
148 rcd = qib_create_ctxtdata(ppd, i, dd->assigned_node_id);
149 if (!rcd) {
152 kfree(dd->rcd);
153 dd->rcd = NULL;
156 rcd->pkeys[0] = QIB_DEFAULT_P_KEY;
157 rcd->seq_cnt = 1;
169 struct qib_ctxtdata *rcd;
171 rcd = kzalloc_node(sizeof(*rcd), GFP_KERNEL, node_id);
172 if (rcd) {
173 INIT_LIST_HEAD(&rcd->qp_wait_list);
174 rcd->node_id = node_id;
175 rcd->ppd = ppd;
176 rcd->dd = dd;
177 rcd->cnt = 1;
178 rcd->ctxt = ctxt;
179 dd->rcd[ctxt] = rcd;
182 rcd->opstats = kzalloc_node(sizeof(*rcd->opstats),
184 if (!rcd->opstats) {
185 kfree(rcd);
192 dd->f_init_ctxt(rcd);
205 rcd->rcvegrbuf_size = 0x8000;
206 rcd->rcvegrbufs_perchunk =
207 rcd->rcvegrbuf_size / dd->rcvegrbufsize;
208 rcd->rcvegrbuf_chunks = (rcd->rcvegrcnt +
209 rcd->rcvegrbufs_perchunk - 1) /
210 rcd->rcvegrbufs_perchunk;
211 rcd->rcvegrbufs_perchunk_shift =
212 ilog2(rcd->rcvegrbufs_perchunk);
214 return rcd;
486 for (i = 0; dd->rcd && i < dd->first_user_ctxt; ++i) {
487 struct qib_ctxtdata *rcd = dd->rcd[i];
489 if (rcd)
490 dd->f_rcvctrl(rcd->ppd, rcvmask, i);
637 struct qib_ctxtdata *rcd;
666 /* dd->rcd can be NULL if early init failed */
667 for (i = 0; dd->rcd && i < dd->first_user_ctxt; ++i) {
674 rcd = dd->rcd[i];
675 if (!rcd)
678 lastfail = qib_create_rcvhdrq(dd, rcd);
680 lastfail = qib_setup_eagerbufs(rcd);
897 * @rcd: the ctxtdata structure
905 void qib_free_ctxtdata(struct qib_devdata *dd, struct qib_ctxtdata *rcd)
907 if (!rcd)
910 if (rcd->rcvhdrq) {
911 dma_free_coherent(&dd->pcidev->dev, rcd->rcvhdrq_size,
912 rcd->rcvhdrq, rcd->rcvhdrq_phys);
913 rcd->rcvhdrq = NULL;
914 if (rcd->rcvhdrtail_kvaddr) {
916 rcd->rcvhdrtail_kvaddr,
917 rcd->rcvhdrqtailaddr_phys);
918 rcd->rcvhdrtail_kvaddr = NULL;
921 if (rcd->rcvegrbuf) {
924 for (e = 0; e < rcd->rcvegrbuf_chunks; e++) {
925 void *base = rcd->rcvegrbuf[e];
926 size_t size = rcd->rcvegrbuf_size;
929 base, rcd->rcvegrbuf_phys[e]);
931 kfree(rcd->rcvegrbuf);
932 rcd->rcvegrbuf = NULL;
933 kfree(rcd->rcvegrbuf_phys);
934 rcd->rcvegrbuf_phys = NULL;
935 rcd->rcvegrbuf_chunks = 0;
938 kfree(rcd->tid_pg_list);
939 vfree(rcd->user_event_mask);
940 vfree(rcd->subctxt_uregbase);
941 vfree(rcd->subctxt_rcvegrbuf);
942 vfree(rcd->subctxt_rcvhdr_base);
944 kfree(rcd->opstats);
945 rcd->opstats = NULL;
947 kfree(rcd);
1353 * We acquire lock to be really paranoid that rcd isn't being
1358 tmp = dd->rcd;
1359 dd->rcd = NULL;
1362 struct qib_ctxtdata *rcd = tmp[ctxt];
1365 qib_free_ctxtdata(dd, rcd);
1536 * @rcd: the context data
1542 int qib_create_rcvhdrq(struct qib_devdata *dd, struct qib_ctxtdata *rcd)
1547 if (!rcd->rcvhdrq) {
1554 set_dev_node(&dd->pcidev->dev, rcd->node_id);
1555 rcd->rcvhdrq = dma_alloc_coherent(&dd->pcidev->dev, amt,
1556 &rcd->rcvhdrq_phys, GFP_KERNEL);
1559 if (!rcd->rcvhdrq) {
1562 amt, rcd->ctxt);
1566 if (rcd->ctxt >= dd->first_user_ctxt) {
1567 rcd->user_event_mask = vmalloc_user(PAGE_SIZE);
1568 if (!rcd->user_event_mask)
1573 set_dev_node(&dd->pcidev->dev, rcd->node_id);
1574 rcd->rcvhdrtail_kvaddr = dma_alloc_coherent(
1578 if (!rcd->rcvhdrtail_kvaddr)
1580 rcd->rcvhdrqtailaddr_phys = phys_hdrqtail;
1583 rcd->rcvhdrq_size = amt;
1587 memset(rcd->rcvhdrq, 0, rcd->rcvhdrq_size);
1588 if (rcd->rcvhdrtail_kvaddr)
1589 memset(rcd->rcvhdrtail_kvaddr, 0, PAGE_SIZE);
1595 rcd->ctxt);
1596 vfree(rcd->user_event_mask);
1597 rcd->user_event_mask = NULL;
1599 dma_free_coherent(&dd->pcidev->dev, amt, rcd->rcvhdrq,
1600 rcd->rcvhdrq_phys);
1601 rcd->rcvhdrq = NULL;
1608 * @rcd: the context we are setting up.
1615 int qib_setup_eagerbufs(struct qib_ctxtdata *rcd)
1617 struct qib_devdata *dd = rcd->dd;
1622 egrcnt = rcd->rcvegrcnt;
1623 egroff = rcd->rcvegr_tid_base;
1626 chunk = rcd->rcvegrbuf_chunks;
1627 egrperchunk = rcd->rcvegrbufs_perchunk;
1628 size = rcd->rcvegrbuf_size;
1629 if (!rcd->rcvegrbuf) {
1630 rcd->rcvegrbuf =
1631 kcalloc_node(chunk, sizeof(rcd->rcvegrbuf[0]),
1632 GFP_KERNEL, rcd->node_id);
1633 if (!rcd->rcvegrbuf)
1636 if (!rcd->rcvegrbuf_phys) {
1637 rcd->rcvegrbuf_phys =
1639 sizeof(rcd->rcvegrbuf_phys[0]),
1640 GFP_KERNEL, rcd->node_id);
1641 if (!rcd->rcvegrbuf_phys)
1644 for (e = 0; e < rcd->rcvegrbuf_chunks; e++) {
1645 if (rcd->rcvegrbuf[e])
1649 set_dev_node(&dd->pcidev->dev, rcd->node_id);
1650 rcd->rcvegrbuf[e] =
1652 &rcd->rcvegrbuf_phys[e],
1655 if (!rcd->rcvegrbuf[e])
1659 rcd->rcvegr_phys = rcd->rcvegrbuf_phys[0];
1661 for (e = chunk = 0; chunk < rcd->rcvegrbuf_chunks; chunk++) {
1662 dma_addr_t pa = rcd->rcvegrbuf_phys[chunk];
1666 memset(rcd->rcvegrbuf[chunk], 0, size);
1683 for (e = 0; e < rcd->rcvegrbuf_chunks && rcd->rcvegrbuf[e]; e++)
1685 rcd->rcvegrbuf[e], rcd->rcvegrbuf_phys[e]);
1686 kfree(rcd->rcvegrbuf_phys);
1687 rcd->rcvegrbuf_phys = NULL;
1689 kfree(rcd->rcvegrbuf);
1690 rcd->rcvegrbuf = NULL;