Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
•
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
drivers
infiniband
hw
mthca
mthca_pd.c
Go to the documentation of this file.
1
/*
2
* Copyright (c) 2004 Topspin Communications. All rights reserved.
3
* Copyright (c) 2005 Cisco Systems. All rights reserved.
4
* Copyright (c) 2005 Mellanox Technologies. All rights reserved.
5
*
6
* This software is available to you under a choice of one of two
7
* licenses. You may choose to be licensed under the terms of the GNU
8
* General Public License (GPL) Version 2, available from the file
9
* COPYING in the main directory of this source tree, or the
10
* OpenIB.org BSD license below:
11
*
12
* Redistribution and use in source and binary forms, with or
13
* without modification, are permitted provided that the following
14
* conditions are met:
15
*
16
* - Redistributions of source code must retain the above
17
* copyright notice, this list of conditions and the following
18
* disclaimer.
19
*
20
* - Redistributions in binary form must reproduce the above
21
* copyright notice, this list of conditions and the following
22
* disclaimer in the documentation and/or other materials
23
* provided with the distribution.
24
*
25
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
26
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
27
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
28
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
29
* BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
30
* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
31
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
32
* SOFTWARE.
33
*/
34
35
#include <linux/errno.h>
36
37
#include "
mthca_dev.h
"
38
39
int
mthca_pd_alloc
(
struct
mthca_dev
*
dev
,
int
privileged,
struct
mthca_pd
*pd)
40
{
41
int
err
= 0;
42
43
pd->
privileged
= privileged;
44
45
atomic_set
(&pd->
sqp_count
, 0);
46
pd->
pd_num
=
mthca_alloc
(&dev->
pd_table
.alloc);
47
if
(pd->
pd_num
== -1)
48
return
-
ENOMEM
;
49
50
if
(privileged) {
51
err =
mthca_mr_alloc_notrans
(dev, pd->
pd_num
,
52
MTHCA_MPT_FLAG_LOCAL_READ
|
53
MTHCA_MPT_FLAG_LOCAL_WRITE
,
54
&pd->
ntmr
);
55
if
(err)
56
mthca_free
(&dev->
pd_table
.alloc, pd->
pd_num
);
57
}
58
59
return
err
;
60
}
61
62
void
mthca_pd_free
(
struct
mthca_dev
*
dev
,
struct
mthca_pd
*pd)
63
{
64
if
(pd->
privileged
)
65
mthca_free_mr
(dev, &pd->
ntmr
);
66
mthca_free
(&dev->
pd_table
.alloc, pd->
pd_num
);
67
}
68
69
int
mthca_init_pd_table
(
struct
mthca_dev
*
dev
)
70
{
71
return
mthca_alloc_init
(&dev->
pd_table
.alloc,
72
dev->
limits
.num_pds,
73
(1 << 24) - 1,
74
dev->
limits
.reserved_pds);
75
}
76
77
void
mthca_cleanup_pd_table
(
struct
mthca_dev
*
dev
)
78
{
79
/* XXX check if any PDs are still allocated? */
80
mthca_alloc_cleanup
(&dev->
pd_table
.alloc);
81
}
Generated on Thu Jan 10 2013 13:37:56 for Linux Kernel by
1.8.2