| .. | .. |
|---|
| 1 | +// SPDX-License-Identifier: GPL-2.0-only |
|---|
| 1 | 2 | /* |
|---|
| 2 | 3 | * Copyright (c) 2016 HGST, a Western Digital Company. |
|---|
| 3 | | - * |
|---|
| 4 | | - * This program is free software; you can redistribute it and/or modify it |
|---|
| 5 | | - * under the terms and conditions of the GNU General Public License, |
|---|
| 6 | | - * version 2, as published by the Free Software Foundation. |
|---|
| 7 | | - * |
|---|
| 8 | | - * This program is distributed in the hope it will be useful, but WITHOUT |
|---|
| 9 | | - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
|---|
| 10 | | - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for |
|---|
| 11 | | - * more details. |
|---|
| 12 | 4 | */ |
|---|
| 13 | 5 | #include <rdma/ib_verbs.h> |
|---|
| 14 | 6 | #include <rdma/mr_pool.h> |
|---|
| .. | .. |
|---|
| 42 | 34 | EXPORT_SYMBOL(ib_mr_pool_put); |
|---|
| 43 | 35 | |
|---|
| 44 | 36 | int ib_mr_pool_init(struct ib_qp *qp, struct list_head *list, int nr, |
|---|
| 45 | | - enum ib_mr_type type, u32 max_num_sg) |
|---|
| 37 | + enum ib_mr_type type, u32 max_num_sg, u32 max_num_meta_sg) |
|---|
| 46 | 38 | { |
|---|
| 47 | 39 | struct ib_mr *mr; |
|---|
| 48 | 40 | unsigned long flags; |
|---|
| 49 | 41 | int ret, i; |
|---|
| 50 | 42 | |
|---|
| 51 | 43 | for (i = 0; i < nr; i++) { |
|---|
| 52 | | - mr = ib_alloc_mr(qp->pd, type, max_num_sg); |
|---|
| 44 | + if (type == IB_MR_TYPE_INTEGRITY) |
|---|
| 45 | + mr = ib_alloc_mr_integrity(qp->pd, max_num_sg, |
|---|
| 46 | + max_num_meta_sg); |
|---|
| 47 | + else |
|---|
| 48 | + mr = ib_alloc_mr(qp->pd, type, max_num_sg); |
|---|
| 53 | 49 | if (IS_ERR(mr)) { |
|---|
| 54 | 50 | ret = PTR_ERR(mr); |
|---|
| 55 | 51 | goto out; |
|---|