|
40 | 40 | #include <linux/rculist.h>
|
41 | 41 | #include <linux/mm.h>
|
42 | 42 | #include <linux/random.h>
|
| 43 | +#include <linux/vmalloc.h> |
43 | 44 |
|
44 | 45 | #include "qib.h"
|
45 | 46 | #include "qib_common.h"
|
@@ -2109,10 +2110,16 @@ int qib_register_ib_device(struct qib_devdata *dd)
|
2109 | 2110 | * the LKEY). The remaining bits act as a generation number or tag.
|
2110 | 2111 | */
|
2111 | 2112 | spin_lock_init(&dev->lk_table.lock);
|
| 2113 | + /* insure generation is at least 4 bits see keys.c */ |
| 2114 | + if (ib_qib_lkey_table_size > MAX_LKEY_TABLE_BITS) { |
| 2115 | + qib_dev_warn(dd, "lkey bits %u too large, reduced to %u\n", |
| 2116 | + ib_qib_lkey_table_size, MAX_LKEY_TABLE_BITS); |
| 2117 | + ib_qib_lkey_table_size = MAX_LKEY_TABLE_BITS; |
| 2118 | + } |
2112 | 2119 | dev->lk_table.max = 1 << ib_qib_lkey_table_size;
|
2113 | 2120 | lk_tab_size = dev->lk_table.max * sizeof(*dev->lk_table.table);
|
2114 | 2121 | dev->lk_table.table = (struct qib_mregion __rcu **)
|
2115 |
| - __get_free_pages(GFP_KERNEL, get_order(lk_tab_size)); |
| 2122 | + vmalloc(lk_tab_size); |
2116 | 2123 | if (dev->lk_table.table == NULL) {
|
2117 | 2124 | ret = -ENOMEM;
|
2118 | 2125 | goto err_lk;
|
@@ -2286,7 +2293,7 @@ int qib_register_ib_device(struct qib_devdata *dd)
|
2286 | 2293 | sizeof(struct qib_pio_header),
|
2287 | 2294 | dev->pio_hdrs, dev->pio_hdrs_phys);
|
2288 | 2295 | err_hdrs:
|
2289 |
| - free_pages((unsigned long) dev->lk_table.table, get_order(lk_tab_size)); |
| 2296 | + vfree(dev->lk_table.table); |
2290 | 2297 | err_lk:
|
2291 | 2298 | kfree(dev->qp_table);
|
2292 | 2299 | err_qpt:
|
@@ -2340,8 +2347,7 @@ void qib_unregister_ib_device(struct qib_devdata *dd)
|
2340 | 2347 | sizeof(struct qib_pio_header),
|
2341 | 2348 | dev->pio_hdrs, dev->pio_hdrs_phys);
|
2342 | 2349 | lk_tab_size = dev->lk_table.max * sizeof(*dev->lk_table.table);
|
2343 |
| - free_pages((unsigned long) dev->lk_table.table, |
2344 |
| - get_order(lk_tab_size)); |
| 2350 | + vfree(dev->lk_table.table); |
2345 | 2351 | kfree(dev->qp_table);
|
2346 | 2352 | }
|
2347 | 2353 |
|
|
0 commit comments