git://git.onelab.eu
/
linux-2.6.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Fedora kernel-2.6.17-1.2142_FC4 patched with stable patch-2.6.17.4-vs2.0.2-rc26.diff
[linux-2.6.git]
/
drivers
/
infiniband
/
core
/
fmr_pool.c
diff --git
a/drivers/infiniband/core/fmr_pool.c
b/drivers/infiniband/core/fmr_pool.c
index
328feae
..
838bf54
100644
(file)
--- a/
drivers/infiniband/core/fmr_pool.c
+++ b/
drivers/infiniband/core/fmr_pool.c
@@
-1,5
+1,6
@@
/*
* Copyright (c) 2004 Topspin Communications. All rights reserved.
/*
* Copyright (c) 2004 Topspin Communications. All rights reserved.
+ * Copyright (c) 2005 Sun Microsystems, Inc. All rights reserved.
*
* This software is available to you under a choice of one of two
* licenses. You may choose to be licensed under the terms of the GNU
*
* This software is available to you under a choice of one of two
* licenses. You may choose to be licensed under the terms of the GNU
@@
-29,7
+30,7
@@
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*
- * $Id: fmr_pool.c
1349 2004-12-16 21:09:43Z roland
$
+ * $Id: fmr_pool.c
2730 2005-06-28 16:43:03Z sean.hefty
$
*/
#include <linux/errno.h>
*/
#include <linux/errno.h>
@@
-38,7
+39,7
@@
#include <linux/jhash.h>
#include <linux/kthread.h>
#include <linux/jhash.h>
#include <linux/kthread.h>
-#include <ib_fmr_pool.h>
+#include <
rdma/
ib_fmr_pool.h>
#include "core_priv.h"
#include "core_priv.h"
@@
-277,9
+278,9
@@
struct ib_fmr_pool *ib_create_fmr_pool(struct ib_pd *pd,
{
struct ib_pool_fmr *fmr;
struct ib_fmr_attr attr = {
{
struct ib_pool_fmr *fmr;
struct ib_fmr_attr attr = {
- .max_pages = params->max_pages_per_fmr,
- .max_maps = IB_FMR_MAX_REMAPS,
- .page_s
ize = PAGE_SHIFT
+ .max_pages
= params->max_pages_per_fmr,
+ .max_maps
= IB_FMR_MAX_REMAPS,
+ .page_s
hift = params->page_shift
};
for (i = 0; i < params->pool_size; ++i) {
};
for (i = 0; i < params->pool_size; ++i) {
@@
-329,10
+330,11
@@
EXPORT_SYMBOL(ib_create_fmr_pool);
*
* Destroy an FMR pool and free all associated resources.
*/
*
* Destroy an FMR pool and free all associated resources.
*/
-
int
ib_destroy_fmr_pool(struct ib_fmr_pool *pool)
+
void
ib_destroy_fmr_pool(struct ib_fmr_pool *pool)
{
struct ib_pool_fmr *fmr;
struct ib_pool_fmr *tmp;
{
struct ib_pool_fmr *fmr;
struct ib_pool_fmr *tmp;
+ LIST_HEAD(fmr_list);
int i;
kthread_stop(pool->thread);
int i;
kthread_stop(pool->thread);
@@
-340,6
+342,11
@@
int ib_destroy_fmr_pool(struct ib_fmr_pool *pool)
i = 0;
list_for_each_entry_safe(fmr, tmp, &pool->free_list, list) {
i = 0;
list_for_each_entry_safe(fmr, tmp, &pool->free_list, list) {
+ if (fmr->remap_count) {
+ INIT_LIST_HEAD(&fmr_list);
+ list_add_tail(&fmr->fmr->list, &fmr_list);
+ ib_unmap_fmr(&fmr_list);
+ }
ib_dealloc_fmr(fmr->fmr);
list_del(&fmr->list);
kfree(fmr);
ib_dealloc_fmr(fmr->fmr);
list_del(&fmr->list);
kfree(fmr);
@@
-352,8
+359,6
@@
int ib_destroy_fmr_pool(struct ib_fmr_pool *pool)
kfree(pool->cache_bucket);
kfree(pool);
kfree(pool->cache_bucket);
kfree(pool);
-
- return 0;
}
EXPORT_SYMBOL(ib_destroy_fmr_pool);
}
EXPORT_SYMBOL(ib_destroy_fmr_pool);