forked from torvalds/linux
-
Notifications
You must be signed in to change notification settings - Fork 17
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge tag 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/gi…
…t/dledford/rdma Pull rdma updates from Doug Ledford: "Primary 4.7 merge window changes - Updates to the new Intel X722 iWARP driver - Updates to the hfi1 driver - Fixes for the iw_cxgb4 driver - Misc core fixes - Generic RDMA READ/WRITE API addition - SRP updates - Misc ipoib updates - Minor mlx5 updates" * tag 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dledford/rdma: (148 commits) IB/mlx5: Fire the CQ completion handler from tasklet net/mlx5_core: Use tasklet for user-space CQ completion events IB/core: Do not require CAP_NET_ADMIN for packet sniffing IB/mlx4: Fix unaligned access in send_reply_to_slave IB/mlx5: Report Scatter FCS device capability when supported IB/mlx5: Add Scatter FCS support for Raw Packet QP IB/core: Add Scatter FCS create flag IB/core: Add Raw Scatter FCS device capability IB/core: Add extended device capability flags i40iw: pass hw_stats by reference rather than by value i40iw: Remove unnecessary synchronize_irq() before free_irq() i40iw: constify i40iw_vf_cqp_ops structure IB/mlx5: Add UARs write-combining and non-cached mapping IB/mlx5: Allow mapping the free running counter on PROT_EXEC IB/mlx4: Use list_for_each_entry_safe IB/SA: Use correct free function IB/core: Fix a potential array overrun in CMA and SA agent IB/core: Remove unnecessary check in ibnl_rcv_msg IB/IWPM: Fix a potential skb leak RDMA/nes: replace custom print_hex_dump() ...
- Loading branch information
Showing
111 changed files
with
4,116 additions
and
2,605 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,86 @@ | ||
/* | ||
* Copyright (c) 2016 HGST, a Western Digital Company. | ||
* | ||
* This program is free software; you can redistribute it and/or modify it | ||
* under the terms and conditions of the GNU General Public License, | ||
* version 2, as published by the Free Software Foundation. | ||
* | ||
* This program is distributed in the hope it will be useful, but WITHOUT | ||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | ||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for | ||
* more details. | ||
*/ | ||
#include <rdma/ib_verbs.h> | ||
#include <rdma/mr_pool.h> | ||
|
||
struct ib_mr *ib_mr_pool_get(struct ib_qp *qp, struct list_head *list) | ||
{ | ||
struct ib_mr *mr; | ||
unsigned long flags; | ||
|
||
spin_lock_irqsave(&qp->mr_lock, flags); | ||
mr = list_first_entry_or_null(list, struct ib_mr, qp_entry); | ||
if (mr) { | ||
list_del(&mr->qp_entry); | ||
qp->mrs_used++; | ||
} | ||
spin_unlock_irqrestore(&qp->mr_lock, flags); | ||
|
||
return mr; | ||
} | ||
EXPORT_SYMBOL(ib_mr_pool_get); | ||
|
||
void ib_mr_pool_put(struct ib_qp *qp, struct list_head *list, struct ib_mr *mr) | ||
{ | ||
unsigned long flags; | ||
|
||
spin_lock_irqsave(&qp->mr_lock, flags); | ||
list_add(&mr->qp_entry, list); | ||
qp->mrs_used--; | ||
spin_unlock_irqrestore(&qp->mr_lock, flags); | ||
} | ||
EXPORT_SYMBOL(ib_mr_pool_put); | ||
|
||
int ib_mr_pool_init(struct ib_qp *qp, struct list_head *list, int nr, | ||
enum ib_mr_type type, u32 max_num_sg) | ||
{ | ||
struct ib_mr *mr; | ||
unsigned long flags; | ||
int ret, i; | ||
|
||
for (i = 0; i < nr; i++) { | ||
mr = ib_alloc_mr(qp->pd, type, max_num_sg); | ||
if (IS_ERR(mr)) { | ||
ret = PTR_ERR(mr); | ||
goto out; | ||
} | ||
|
||
spin_lock_irqsave(&qp->mr_lock, flags); | ||
list_add_tail(&mr->qp_entry, list); | ||
spin_unlock_irqrestore(&qp->mr_lock, flags); | ||
} | ||
|
||
return 0; | ||
out: | ||
ib_mr_pool_destroy(qp, list); | ||
return ret; | ||
} | ||
EXPORT_SYMBOL(ib_mr_pool_init); | ||
|
||
void ib_mr_pool_destroy(struct ib_qp *qp, struct list_head *list) | ||
{ | ||
struct ib_mr *mr; | ||
unsigned long flags; | ||
|
||
spin_lock_irqsave(&qp->mr_lock, flags); | ||
while (!list_empty(list)) { | ||
mr = list_first_entry(list, struct ib_mr, qp_entry); | ||
list_del(&mr->qp_entry); | ||
|
||
spin_unlock_irqrestore(&qp->mr_lock, flags); | ||
ib_dereg_mr(mr); | ||
spin_lock_irqsave(&qp->mr_lock, flags); | ||
} | ||
spin_unlock_irqrestore(&qp->mr_lock, flags); | ||
} | ||
EXPORT_SYMBOL(ib_mr_pool_destroy); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.