diff options
Diffstat (limited to 'drivers/infiniband/hw/qib/qib_init.c')
-rw-r--r-- | drivers/infiniband/hw/qib/qib_init.c | 139 |
1 files changed, 116 insertions, 23 deletions
diff --git a/drivers/infiniband/hw/qib/qib_init.c b/drivers/infiniband/hw/qib/qib_init.c index 173f805790da..fdae42973056 100644 --- a/drivers/infiniband/hw/qib/qib_init.c +++ b/drivers/infiniband/hw/qib/qib_init.c | |||
@@ -39,10 +39,17 @@ | |||
39 | #include <linux/idr.h> | 39 | #include <linux/idr.h> |
40 | #include <linux/module.h> | 40 | #include <linux/module.h> |
41 | #include <linux/printk.h> | 41 | #include <linux/printk.h> |
42 | #ifdef CONFIG_INFINIBAND_QIB_DCA | ||
43 | #include <linux/dca.h> | ||
44 | #endif | ||
42 | 45 | ||
43 | #include "qib.h" | 46 | #include "qib.h" |
44 | #include "qib_common.h" | 47 | #include "qib_common.h" |
45 | #include "qib_mad.h" | 48 | #include "qib_mad.h" |
49 | #ifdef CONFIG_DEBUG_FS | ||
50 | #include "qib_debugfs.h" | ||
51 | #include "qib_verbs.h" | ||
52 | #endif | ||
46 | 53 | ||
47 | #undef pr_fmt | 54 | #undef pr_fmt |
48 | #define pr_fmt(fmt) QIB_DRV_NAME ": " fmt | 55 | #define pr_fmt(fmt) QIB_DRV_NAME ": " fmt |
@@ -64,6 +71,11 @@ ushort qib_cfgctxts; | |||
64 | module_param_named(cfgctxts, qib_cfgctxts, ushort, S_IRUGO); | 71 | module_param_named(cfgctxts, qib_cfgctxts, ushort, S_IRUGO); |
65 | MODULE_PARM_DESC(cfgctxts, "Set max number of contexts to use"); | 72 | MODULE_PARM_DESC(cfgctxts, "Set max number of contexts to use"); |
66 | 73 | ||
74 | unsigned qib_numa_aware; | ||
75 | module_param_named(numa_aware, qib_numa_aware, uint, S_IRUGO); | ||
76 | MODULE_PARM_DESC(numa_aware, | ||
77 | "0 -> PSM allocation close to HCA, 1 -> PSM allocation local to process"); | ||
78 | |||
67 | /* | 79 | /* |
68 | * If set, do not write to any regs if avoidable, hack to allow | 80 | * If set, do not write to any regs if avoidable, hack to allow |
69 | * check for deranged default register values. | 81 | * check for deranged default register values. |
@@ -89,8 +101,6 @@ unsigned qib_wc_pat = 1; /* default (1) is to use PAT, not MTRR */ | |||
89 | module_param_named(wc_pat, qib_wc_pat, uint, S_IRUGO); | 101 | module_param_named(wc_pat, qib_wc_pat, uint, S_IRUGO); |
90 | MODULE_PARM_DESC(wc_pat, "enable write-combining via PAT mechanism"); | 102 | MODULE_PARM_DESC(wc_pat, "enable write-combining via PAT mechanism"); |
91 | 103 | ||
92 | struct workqueue_struct *qib_cq_wq; | ||
93 | |||
94 | static void verify_interrupt(unsigned long); | 104 | static void verify_interrupt(unsigned long); |
95 | 105 | ||
96 | static struct idr qib_unit_table; | 106 | static struct idr qib_unit_table; |
@@ -121,6 +131,11 @@ int qib_create_ctxts(struct qib_devdata *dd) | |||
121 | { | 131 | { |
122 | unsigned i; | 132 | unsigned i; |
123 | int ret; | 133 | int ret; |
134 | int local_node_id = pcibus_to_node(dd->pcidev->bus); | ||
135 | |||
136 | if (local_node_id < 0) | ||
137 | local_node_id = numa_node_id(); | ||
138 | dd->assigned_node_id = local_node_id; | ||
124 | 139 | ||
125 | /* | 140 | /* |
126 | * Allocate full ctxtcnt array, rather than just cfgctxts, because | 141 | * Allocate full ctxtcnt array, rather than just cfgctxts, because |
@@ -143,7 +158,8 @@ int qib_create_ctxts(struct qib_devdata *dd) | |||
143 | continue; | 158 | continue; |
144 | 159 | ||
145 | ppd = dd->pport + (i % dd->num_pports); | 160 | ppd = dd->pport + (i % dd->num_pports); |
146 | rcd = qib_create_ctxtdata(ppd, i); | 161 | |
162 | rcd = qib_create_ctxtdata(ppd, i, dd->assigned_node_id); | ||
147 | if (!rcd) { | 163 | if (!rcd) { |
148 | qib_dev_err(dd, | 164 | qib_dev_err(dd, |
149 | "Unable to allocate ctxtdata for Kernel ctxt, failing\n"); | 165 | "Unable to allocate ctxtdata for Kernel ctxt, failing\n"); |
@@ -161,20 +177,33 @@ done: | |||
161 | /* | 177 | /* |
162 | * Common code for user and kernel context setup. | 178 | * Common code for user and kernel context setup. |
163 | */ | 179 | */ |
164 | struct qib_ctxtdata *qib_create_ctxtdata(struct qib_pportdata *ppd, u32 ctxt) | 180 | struct qib_ctxtdata *qib_create_ctxtdata(struct qib_pportdata *ppd, u32 ctxt, |
181 | int node_id) | ||
165 | { | 182 | { |
166 | struct qib_devdata *dd = ppd->dd; | 183 | struct qib_devdata *dd = ppd->dd; |
167 | struct qib_ctxtdata *rcd; | 184 | struct qib_ctxtdata *rcd; |
168 | 185 | ||
169 | rcd = kzalloc(sizeof(*rcd), GFP_KERNEL); | 186 | rcd = kzalloc_node(sizeof(*rcd), GFP_KERNEL, node_id); |
170 | if (rcd) { | 187 | if (rcd) { |
171 | INIT_LIST_HEAD(&rcd->qp_wait_list); | 188 | INIT_LIST_HEAD(&rcd->qp_wait_list); |
189 | rcd->node_id = node_id; | ||
172 | rcd->ppd = ppd; | 190 | rcd->ppd = ppd; |
173 | rcd->dd = dd; | 191 | rcd->dd = dd; |
174 | rcd->cnt = 1; | 192 | rcd->cnt = 1; |
175 | rcd->ctxt = ctxt; | 193 | rcd->ctxt = ctxt; |
176 | dd->rcd[ctxt] = rcd; | 194 | dd->rcd[ctxt] = rcd; |
177 | 195 | #ifdef CONFIG_DEBUG_FS | |
196 | if (ctxt < dd->first_user_ctxt) { /* N/A for PSM contexts */ | ||
197 | rcd->opstats = kzalloc_node(sizeof(*rcd->opstats), | ||
198 | GFP_KERNEL, node_id); | ||
199 | if (!rcd->opstats) { | ||
200 | kfree(rcd); | ||
201 | qib_dev_err(dd, | ||
202 | "Unable to allocate per ctxt stats buffer\n"); | ||
203 | return NULL; | ||
204 | } | ||
205 | } | ||
206 | #endif | ||
178 | dd->f_init_ctxt(rcd); | 207 | dd->f_init_ctxt(rcd); |
179 | 208 | ||
180 | /* | 209 | /* |
@@ -429,6 +458,7 @@ static int loadtime_init(struct qib_devdata *dd) | |||
429 | dd->intrchk_timer.function = verify_interrupt; | 458 | dd->intrchk_timer.function = verify_interrupt; |
430 | dd->intrchk_timer.data = (unsigned long) dd; | 459 | dd->intrchk_timer.data = (unsigned long) dd; |
431 | 460 | ||
461 | ret = qib_cq_init(dd); | ||
432 | done: | 462 | done: |
433 | return ret; | 463 | return ret; |
434 | } | 464 | } |
@@ -944,6 +974,10 @@ void qib_free_ctxtdata(struct qib_devdata *dd, struct qib_ctxtdata *rcd) | |||
944 | vfree(rcd->subctxt_uregbase); | 974 | vfree(rcd->subctxt_uregbase); |
945 | vfree(rcd->subctxt_rcvegrbuf); | 975 | vfree(rcd->subctxt_rcvegrbuf); |
946 | vfree(rcd->subctxt_rcvhdr_base); | 976 | vfree(rcd->subctxt_rcvhdr_base); |
977 | #ifdef CONFIG_DEBUG_FS | ||
978 | kfree(rcd->opstats); | ||
979 | rcd->opstats = NULL; | ||
980 | #endif | ||
947 | kfree(rcd); | 981 | kfree(rcd); |
948 | } | 982 | } |
949 | 983 | ||
@@ -1033,7 +1067,6 @@ done: | |||
1033 | dd->f_set_armlaunch(dd, 1); | 1067 | dd->f_set_armlaunch(dd, 1); |
1034 | } | 1068 | } |
1035 | 1069 | ||
1036 | |||
1037 | void qib_free_devdata(struct qib_devdata *dd) | 1070 | void qib_free_devdata(struct qib_devdata *dd) |
1038 | { | 1071 | { |
1039 | unsigned long flags; | 1072 | unsigned long flags; |
@@ -1043,6 +1076,9 @@ void qib_free_devdata(struct qib_devdata *dd) | |||
1043 | list_del(&dd->list); | 1076 | list_del(&dd->list); |
1044 | spin_unlock_irqrestore(&qib_devs_lock, flags); | 1077 | spin_unlock_irqrestore(&qib_devs_lock, flags); |
1045 | 1078 | ||
1079 | #ifdef CONFIG_DEBUG_FS | ||
1080 | qib_dbg_ibdev_exit(&dd->verbs_dev); | ||
1081 | #endif | ||
1046 | ib_dealloc_device(&dd->verbs_dev.ibdev); | 1082 | ib_dealloc_device(&dd->verbs_dev.ibdev); |
1047 | } | 1083 | } |
1048 | 1084 | ||
@@ -1066,6 +1102,10 @@ struct qib_devdata *qib_alloc_devdata(struct pci_dev *pdev, size_t extra) | |||
1066 | goto bail; | 1102 | goto bail; |
1067 | } | 1103 | } |
1068 | 1104 | ||
1105 | #ifdef CONFIG_DEBUG_FS | ||
1106 | qib_dbg_ibdev_init(&dd->verbs_dev); | ||
1107 | #endif | ||
1108 | |||
1069 | idr_preload(GFP_KERNEL); | 1109 | idr_preload(GFP_KERNEL); |
1070 | spin_lock_irqsave(&qib_devs_lock, flags); | 1110 | spin_lock_irqsave(&qib_devs_lock, flags); |
1071 | 1111 | ||
@@ -1081,6 +1121,9 @@ struct qib_devdata *qib_alloc_devdata(struct pci_dev *pdev, size_t extra) | |||
1081 | if (ret < 0) { | 1121 | if (ret < 0) { |
1082 | qib_early_err(&pdev->dev, | 1122 | qib_early_err(&pdev->dev, |
1083 | "Could not allocate unit ID: error %d\n", -ret); | 1123 | "Could not allocate unit ID: error %d\n", -ret); |
1124 | #ifdef CONFIG_DEBUG_FS | ||
1125 | qib_dbg_ibdev_exit(&dd->verbs_dev); | ||
1126 | #endif | ||
1084 | ib_dealloc_device(&dd->verbs_dev.ibdev); | 1127 | ib_dealloc_device(&dd->verbs_dev.ibdev); |
1085 | dd = ERR_PTR(ret); | 1128 | dd = ERR_PTR(ret); |
1086 | goto bail; | 1129 | goto bail; |
@@ -1158,6 +1201,35 @@ struct pci_driver qib_driver = { | |||
1158 | .err_handler = &qib_pci_err_handler, | 1201 | .err_handler = &qib_pci_err_handler, |
1159 | }; | 1202 | }; |
1160 | 1203 | ||
1204 | #ifdef CONFIG_INFINIBAND_QIB_DCA | ||
1205 | |||
1206 | static int qib_notify_dca(struct notifier_block *, unsigned long, void *); | ||
1207 | static struct notifier_block dca_notifier = { | ||
1208 | .notifier_call = qib_notify_dca, | ||
1209 | .next = NULL, | ||
1210 | .priority = 0 | ||
1211 | }; | ||
1212 | |||
1213 | static int qib_notify_dca_device(struct device *device, void *data) | ||
1214 | { | ||
1215 | struct qib_devdata *dd = dev_get_drvdata(device); | ||
1216 | unsigned long event = *(unsigned long *)data; | ||
1217 | |||
1218 | return dd->f_notify_dca(dd, event); | ||
1219 | } | ||
1220 | |||
1221 | static int qib_notify_dca(struct notifier_block *nb, unsigned long event, | ||
1222 | void *p) | ||
1223 | { | ||
1224 | int rval; | ||
1225 | |||
1226 | rval = driver_for_each_device(&qib_driver.driver, NULL, | ||
1227 | &event, qib_notify_dca_device); | ||
1228 | return rval ? NOTIFY_BAD : NOTIFY_DONE; | ||
1229 | } | ||
1230 | |||
1231 | #endif | ||
1232 | |||
1161 | /* | 1233 | /* |
1162 | * Do all the generic driver unit- and chip-independent memory | 1234 | * Do all the generic driver unit- and chip-independent memory |
1163 | * allocation and initialization. | 1235 | * allocation and initialization. |
@@ -1170,22 +1242,22 @@ static int __init qlogic_ib_init(void) | |||
1170 | if (ret) | 1242 | if (ret) |
1171 | goto bail; | 1243 | goto bail; |
1172 | 1244 | ||
1173 | qib_cq_wq = create_singlethread_workqueue("qib_cq"); | ||
1174 | if (!qib_cq_wq) { | ||
1175 | ret = -ENOMEM; | ||
1176 | goto bail_dev; | ||
1177 | } | ||
1178 | |||
1179 | /* | 1245 | /* |
1180 | * These must be called before the driver is registered with | 1246 | * These must be called before the driver is registered with |
1181 | * the PCI subsystem. | 1247 | * the PCI subsystem. |
1182 | */ | 1248 | */ |
1183 | idr_init(&qib_unit_table); | 1249 | idr_init(&qib_unit_table); |
1184 | 1250 | ||
1251 | #ifdef CONFIG_INFINIBAND_QIB_DCA | ||
1252 | dca_register_notify(&dca_notifier); | ||
1253 | #endif | ||
1254 | #ifdef CONFIG_DEBUG_FS | ||
1255 | qib_dbg_init(); | ||
1256 | #endif | ||
1185 | ret = pci_register_driver(&qib_driver); | 1257 | ret = pci_register_driver(&qib_driver); |
1186 | if (ret < 0) { | 1258 | if (ret < 0) { |
1187 | pr_err("Unable to register driver: error %d\n", -ret); | 1259 | pr_err("Unable to register driver: error %d\n", -ret); |
1188 | goto bail_unit; | 1260 | goto bail_dev; |
1189 | } | 1261 | } |
1190 | 1262 | ||
1191 | /* not fatal if it doesn't work */ | 1263 | /* not fatal if it doesn't work */ |
@@ -1193,10 +1265,14 @@ static int __init qlogic_ib_init(void) | |||
1193 | pr_err("Unable to register ipathfs\n"); | 1265 | pr_err("Unable to register ipathfs\n"); |
1194 | goto bail; /* all OK */ | 1266 | goto bail; /* all OK */ |
1195 | 1267 | ||
1196 | bail_unit: | ||
1197 | idr_destroy(&qib_unit_table); | ||
1198 | destroy_workqueue(qib_cq_wq); | ||
1199 | bail_dev: | 1268 | bail_dev: |
1269 | #ifdef CONFIG_INFINIBAND_QIB_DCA | ||
1270 | dca_unregister_notify(&dca_notifier); | ||
1271 | #endif | ||
1272 | #ifdef CONFIG_DEBUG_FS | ||
1273 | qib_dbg_exit(); | ||
1274 | #endif | ||
1275 | idr_destroy(&qib_unit_table); | ||
1200 | qib_dev_cleanup(); | 1276 | qib_dev_cleanup(); |
1201 | bail: | 1277 | bail: |
1202 | return ret; | 1278 | return ret; |
@@ -1217,9 +1293,13 @@ static void __exit qlogic_ib_cleanup(void) | |||
1217 | "Unable to cleanup counter filesystem: error %d\n", | 1293 | "Unable to cleanup counter filesystem: error %d\n", |
1218 | -ret); | 1294 | -ret); |
1219 | 1295 | ||
1296 | #ifdef CONFIG_INFINIBAND_QIB_DCA | ||
1297 | dca_unregister_notify(&dca_notifier); | ||
1298 | #endif | ||
1220 | pci_unregister_driver(&qib_driver); | 1299 | pci_unregister_driver(&qib_driver); |
1221 | 1300 | #ifdef CONFIG_DEBUG_FS | |
1222 | destroy_workqueue(qib_cq_wq); | 1301 | qib_dbg_exit(); |
1302 | #endif | ||
1223 | 1303 | ||
1224 | qib_cpulist_count = 0; | 1304 | qib_cpulist_count = 0; |
1225 | kfree(qib_cpulist); | 1305 | kfree(qib_cpulist); |
@@ -1311,6 +1391,7 @@ static void cleanup_device_data(struct qib_devdata *dd) | |||
1311 | } | 1391 | } |
1312 | kfree(tmp); | 1392 | kfree(tmp); |
1313 | kfree(dd->boardname); | 1393 | kfree(dd->boardname); |
1394 | qib_cq_exit(dd); | ||
1314 | } | 1395 | } |
1315 | 1396 | ||
1316 | /* | 1397 | /* |
@@ -1483,6 +1564,7 @@ static void qib_remove_one(struct pci_dev *pdev) | |||
1483 | int qib_create_rcvhdrq(struct qib_devdata *dd, struct qib_ctxtdata *rcd) | 1564 | int qib_create_rcvhdrq(struct qib_devdata *dd, struct qib_ctxtdata *rcd) |
1484 | { | 1565 | { |
1485 | unsigned amt; | 1566 | unsigned amt; |
1567 | int old_node_id; | ||
1486 | 1568 | ||
1487 | if (!rcd->rcvhdrq) { | 1569 | if (!rcd->rcvhdrq) { |
1488 | dma_addr_t phys_hdrqtail; | 1570 | dma_addr_t phys_hdrqtail; |
@@ -1492,9 +1574,13 @@ int qib_create_rcvhdrq(struct qib_devdata *dd, struct qib_ctxtdata *rcd) | |||
1492 | sizeof(u32), PAGE_SIZE); | 1574 | sizeof(u32), PAGE_SIZE); |
1493 | gfp_flags = (rcd->ctxt >= dd->first_user_ctxt) ? | 1575 | gfp_flags = (rcd->ctxt >= dd->first_user_ctxt) ? |
1494 | GFP_USER : GFP_KERNEL; | 1576 | GFP_USER : GFP_KERNEL; |
1577 | |||
1578 | old_node_id = dev_to_node(&dd->pcidev->dev); | ||
1579 | set_dev_node(&dd->pcidev->dev, rcd->node_id); | ||
1495 | rcd->rcvhdrq = dma_alloc_coherent( | 1580 | rcd->rcvhdrq = dma_alloc_coherent( |
1496 | &dd->pcidev->dev, amt, &rcd->rcvhdrq_phys, | 1581 | &dd->pcidev->dev, amt, &rcd->rcvhdrq_phys, |
1497 | gfp_flags | __GFP_COMP); | 1582 | gfp_flags | __GFP_COMP); |
1583 | set_dev_node(&dd->pcidev->dev, old_node_id); | ||
1498 | 1584 | ||
1499 | if (!rcd->rcvhdrq) { | 1585 | if (!rcd->rcvhdrq) { |
1500 | qib_dev_err(dd, | 1586 | qib_dev_err(dd, |
@@ -1510,9 +1596,11 @@ int qib_create_rcvhdrq(struct qib_devdata *dd, struct qib_ctxtdata *rcd) | |||
1510 | } | 1596 | } |
1511 | 1597 | ||
1512 | if (!(dd->flags & QIB_NODMA_RTAIL)) { | 1598 | if (!(dd->flags & QIB_NODMA_RTAIL)) { |
1599 | set_dev_node(&dd->pcidev->dev, rcd->node_id); | ||
1513 | rcd->rcvhdrtail_kvaddr = dma_alloc_coherent( | 1600 | rcd->rcvhdrtail_kvaddr = dma_alloc_coherent( |
1514 | &dd->pcidev->dev, PAGE_SIZE, &phys_hdrqtail, | 1601 | &dd->pcidev->dev, PAGE_SIZE, &phys_hdrqtail, |
1515 | gfp_flags); | 1602 | gfp_flags); |
1603 | set_dev_node(&dd->pcidev->dev, old_node_id); | ||
1516 | if (!rcd->rcvhdrtail_kvaddr) | 1604 | if (!rcd->rcvhdrtail_kvaddr) |
1517 | goto bail_free; | 1605 | goto bail_free; |
1518 | rcd->rcvhdrqtailaddr_phys = phys_hdrqtail; | 1606 | rcd->rcvhdrqtailaddr_phys = phys_hdrqtail; |
@@ -1556,6 +1644,7 @@ int qib_setup_eagerbufs(struct qib_ctxtdata *rcd) | |||
1556 | unsigned e, egrcnt, egrperchunk, chunk, egrsize, egroff; | 1644 | unsigned e, egrcnt, egrperchunk, chunk, egrsize, egroff; |
1557 | size_t size; | 1645 | size_t size; |
1558 | gfp_t gfp_flags; | 1646 | gfp_t gfp_flags; |
1647 | int old_node_id; | ||
1559 | 1648 | ||
1560 | /* | 1649 | /* |
1561 | * GFP_USER, but without GFP_FS, so buffer cache can be | 1650 | * GFP_USER, but without GFP_FS, so buffer cache can be |
@@ -1574,25 +1663,29 @@ int qib_setup_eagerbufs(struct qib_ctxtdata *rcd) | |||
1574 | size = rcd->rcvegrbuf_size; | 1663 | size = rcd->rcvegrbuf_size; |
1575 | if (!rcd->rcvegrbuf) { | 1664 | if (!rcd->rcvegrbuf) { |
1576 | rcd->rcvegrbuf = | 1665 | rcd->rcvegrbuf = |
1577 | kzalloc(chunk * sizeof(rcd->rcvegrbuf[0]), | 1666 | kzalloc_node(chunk * sizeof(rcd->rcvegrbuf[0]), |
1578 | GFP_KERNEL); | 1667 | GFP_KERNEL, rcd->node_id); |
1579 | if (!rcd->rcvegrbuf) | 1668 | if (!rcd->rcvegrbuf) |
1580 | goto bail; | 1669 | goto bail; |
1581 | } | 1670 | } |
1582 | if (!rcd->rcvegrbuf_phys) { | 1671 | if (!rcd->rcvegrbuf_phys) { |
1583 | rcd->rcvegrbuf_phys = | 1672 | rcd->rcvegrbuf_phys = |
1584 | kmalloc(chunk * sizeof(rcd->rcvegrbuf_phys[0]), | 1673 | kmalloc_node(chunk * sizeof(rcd->rcvegrbuf_phys[0]), |
1585 | GFP_KERNEL); | 1674 | GFP_KERNEL, rcd->node_id); |
1586 | if (!rcd->rcvegrbuf_phys) | 1675 | if (!rcd->rcvegrbuf_phys) |
1587 | goto bail_rcvegrbuf; | 1676 | goto bail_rcvegrbuf; |
1588 | } | 1677 | } |
1589 | for (e = 0; e < rcd->rcvegrbuf_chunks; e++) { | 1678 | for (e = 0; e < rcd->rcvegrbuf_chunks; e++) { |
1590 | if (rcd->rcvegrbuf[e]) | 1679 | if (rcd->rcvegrbuf[e]) |
1591 | continue; | 1680 | continue; |
1681 | |||
1682 | old_node_id = dev_to_node(&dd->pcidev->dev); | ||
1683 | set_dev_node(&dd->pcidev->dev, rcd->node_id); | ||
1592 | rcd->rcvegrbuf[e] = | 1684 | rcd->rcvegrbuf[e] = |
1593 | dma_alloc_coherent(&dd->pcidev->dev, size, | 1685 | dma_alloc_coherent(&dd->pcidev->dev, size, |
1594 | &rcd->rcvegrbuf_phys[e], | 1686 | &rcd->rcvegrbuf_phys[e], |
1595 | gfp_flags); | 1687 | gfp_flags); |
1688 | set_dev_node(&dd->pcidev->dev, old_node_id); | ||
1596 | if (!rcd->rcvegrbuf[e]) | 1689 | if (!rcd->rcvegrbuf[e]) |
1597 | goto bail_rcvegrbuf_phys; | 1690 | goto bail_rcvegrbuf_phys; |
1598 | } | 1691 | } |