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);
1354 * We acquire lock to be really paranoid that rcd isn't being
1359 tmp = dd->rcd;
1360 dd->rcd = NULL;
1363 struct qib_ctxtdata *rcd = tmp[ctxt];
1366 qib_free_ctxtdata(dd, rcd);
1537 * @rcd: the context data
1543 int qib_create_rcvhdrq(struct qib_devdata *dd, struct qib_ctxtdata *rcd)
1548 if (!rcd->rcvhdrq) {
1554 gfp_flags = (rcd->ctxt >= dd->first_user_ctxt) ?
1558 set_dev_node(&dd->pcidev->dev, rcd->node_id);
1559 rcd->rcvhdrq = dma_alloc_coherent(
1560 &dd->pcidev->dev, amt, &rcd->rcvhdrq_phys,
1564 if (!rcd->rcvhdrq) {
1567 amt, rcd->ctxt);
1571 if (rcd->ctxt >= dd->first_user_ctxt) {
1572 rcd->user_event_mask = vmalloc_user(PAGE_SIZE);
1573 if (!rcd->user_event_mask)
1578 set_dev_node(&dd->pcidev->dev, rcd->node_id);
1579 rcd->rcvhdrtail_kvaddr = dma_alloc_coherent(
1583 if (!rcd->rcvhdrtail_kvaddr)
1585 rcd->rcvhdrqtailaddr_phys = phys_hdrqtail;
1588 rcd->rcvhdrq_size = amt;
1592 memset(rcd->rcvhdrq, 0, rcd->rcvhdrq_size);
1593 if (rcd->rcvhdrtail_kvaddr)
1594 memset(rcd->rcvhdrtail_kvaddr, 0, PAGE_SIZE);
1600 rcd->ctxt);
1601 vfree(rcd->user_event_mask);
1602 rcd->user_event_mask = NULL;
1604 dma_free_coherent(&dd->pcidev->dev, amt, rcd->rcvhdrq,
1605 rcd->rcvhdrq_phys);
1606 rcd->rcvhdrq = NULL;
1613 * @rcd: the context we are setting up.
1620 int qib_setup_eagerbufs(struct qib_ctxtdata *rcd)
1622 struct qib_devdata *dd = rcd->dd;
1636 egrcnt = rcd->rcvegrcnt;
1637 egroff = rcd->rcvegr_tid_base;
1640 chunk = rcd->rcvegrbuf_chunks;
1641 egrperchunk = rcd->rcvegrbufs_perchunk;
1642 size = rcd->rcvegrbuf_size;
1643 if (!rcd->rcvegrbuf) {
1644 rcd->rcvegrbuf =
1645 kcalloc_node(chunk, sizeof(rcd->rcvegrbuf[0]),
1646 GFP_KERNEL, rcd->node_id);
1647 if (!rcd->rcvegrbuf)
1650 if (!rcd->rcvegrbuf_phys) {
1651 rcd->rcvegrbuf_phys =
1653 sizeof(rcd->rcvegrbuf_phys[0]),
1654 GFP_KERNEL, rcd->node_id);
1655 if (!rcd->rcvegrbuf_phys)
1658 for (e = 0; e < rcd->rcvegrbuf_chunks; e++) {
1659 if (rcd->rcvegrbuf[e])
1663 set_dev_node(&dd->pcidev->dev, rcd->node_id);
1664 rcd->rcvegrbuf[e] =
1666 &rcd->rcvegrbuf_phys[e],
1669 if (!rcd->rcvegrbuf[e])
1673 rcd->rcvegr_phys = rcd->rcvegrbuf_phys[0];
1675 for (e = chunk = 0; chunk < rcd->rcvegrbuf_chunks; chunk++) {
1676 dma_addr_t pa = rcd->rcvegrbuf_phys[chunk];
1680 memset(rcd->rcvegrbuf[chunk], 0, size);
1697 for (e = 0; e < rcd->rcvegrbuf_chunks && rcd->rcvegrbuf[e]; e++)
1699 rcd->rcvegrbuf[e], rcd->rcvegrbuf_phys[e]);
1700 kfree(rcd->rcvegrbuf_phys);
1701 rcd->rcvegrbuf_phys = NULL;
1703 kfree(rcd->rcvegrbuf);
1704 rcd->rcvegrbuf = NULL;