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 core 6 1.2949 + vserver 2.2.0
[linux-2.6.git]
/
drivers
/
infiniband
/
ulp
/
srp
/
ib_srp.h
diff --git
a/drivers/infiniband/ulp/srp/ib_srp.h
b/drivers/infiniband/ulp/srp/ib_srp.h
index
4e7727d
..
c217723
100644
(file)
--- a/
drivers/infiniband/ulp/srp/ib_srp.h
+++ b/
drivers/infiniband/ulp/srp/ib_srp.h
@@
-38,6
+38,7
@@
#include <linux/types.h>
#include <linux/list.h>
#include <linux/mutex.h>
#include <linux/types.h>
#include <linux/list.h>
#include <linux/mutex.h>
+#include <linux/scatterlist.h>
#include <scsi/scsi_host.h>
#include <scsi/scsi_cmnd.h>
#include <scsi/scsi_host.h>
#include <scsi/scsi_cmnd.h>
@@
-45,6
+46,7
@@
#include <rdma/ib_verbs.h>
#include <rdma/ib_sa.h>
#include <rdma/ib_cm.h>
#include <rdma/ib_verbs.h>
#include <rdma/ib_sa.h>
#include <rdma/ib_cm.h>
+#include <rdma/ib_fmr_pool.h>
enum {
SRP_PATH_REC_TIMEOUT_MS = 1000,
enum {
SRP_PATH_REC_TIMEOUT_MS = 1000,
@@
-54,20
+56,21
@@
enum {
SRP_DLID_REDIRECT = 2,
SRP_MAX_LUN = 512,
SRP_DLID_REDIRECT = 2,
SRP_MAX_LUN = 512,
- SRP_
MAX_IU_LEN = 256
,
+ SRP_
DEF_SG_TABLESIZE = 12
,
SRP_RQ_SHIFT = 6,
SRP_RQ_SIZE = 1 << SRP_RQ_SHIFT,
SRP_SQ_SIZE = SRP_RQ_SIZE - 1,
SRP_CQ_SIZE = SRP_SQ_SIZE + SRP_RQ_SIZE,
SRP_RQ_SHIFT = 6,
SRP_RQ_SIZE = 1 << SRP_RQ_SHIFT,
SRP_SQ_SIZE = SRP_RQ_SIZE - 1,
SRP_CQ_SIZE = SRP_SQ_SIZE + SRP_RQ_SIZE,
- SRP_TAG_TSK_MGMT = 1 << (SRP_RQ_SHIFT + 1)
+ SRP_TAG_TSK_MGMT = 1 << (SRP_RQ_SHIFT + 1),
+
+ SRP_FMR_SIZE = 256,
+ SRP_FMR_POOL_SIZE = 1024,
+ SRP_FMR_DIRTY_SIZE = SRP_FMR_POOL_SIZE / 4
};
#define SRP_OP_RECV (1 << 31)
};
#define SRP_OP_RECV (1 << 31)
-#define SRP_MAX_INDIRECT ((SRP_MAX_IU_LEN - \
- sizeof (struct srp_cmd) - \
- sizeof (struct srp_indirect_buf)) / 16)
enum srp_target_state {
SRP_TARGET_LIVE,
enum srp_target_state {
SRP_TARGET_LIVE,
@@
-76,15
+79,23
@@
enum srp_target_state {
SRP_TARGET_REMOVED
};
SRP_TARGET_REMOVED
};
-struct srp_
host
{
-
u8 initiator_port_id[16]
;
+struct srp_
device
{
+
struct list_head dev_list
;
struct ib_device *dev;
struct ib_device *dev;
- u8 port;
struct ib_pd *pd;
struct ib_mr *mr;
struct ib_pd *pd;
struct ib_mr *mr;
+ struct ib_fmr_pool *fmr_pool;
+ int fmr_page_shift;
+ int fmr_page_size;
+ u64 fmr_page_mask;
+};
+
+struct srp_host {
+ struct srp_device *dev;
+ u8 port;
struct class_device class_dev;
struct list_head target_list;
struct class_device class_dev;
struct list_head target_list;
- s
truct mutex target_mutex
;
+ s
pinlock_t target_lock
;
struct completion released;
struct list_head list;
};
struct completion released;
struct list_head list;
};
@@
-94,9
+105,14
@@
struct srp_request {
struct scsi_cmnd *scmnd;
struct srp_iu *cmd;
struct srp_iu *tsk_mgmt;
struct scsi_cmnd *scmnd;
struct srp_iu *cmd;
struct srp_iu *tsk_mgmt;
- DECLARE_PCI_UNMAP_ADDR(direct_mapping)
+ struct ib_pool_fmr *fmr;
+ /*
+ * Fake scatterlist used when scmnd->use_sg==0. Can be killed
+ * when the SCSI midlayer no longer generates non-SG commands.
+ */
+ struct scatterlist fake_sg;
struct completion done;
struct completion done;
- short
next
;
+ short
index
;
u8 cmd_done;
u8 tsk_status;
};
u8 cmd_done;
u8 tsk_status;
};
@@
-105,6
+121,8
@@
struct srp_target_port {
__be64 id_ext;
__be64 ioc_guid;
__be64 service_id;
__be64 id_ext;
__be64 ioc_guid;
__be64 service_id;
+ __be64 initiator_ext;
+ u16 io_class;
struct srp_host *srp_host;
struct Scsi_Host *scsi_host;
char target_name[32];
struct srp_host *srp_host;
struct Scsi_Host *scsi_host;
char target_name[32];
@@
-121,6
+139,8
@@
struct srp_target_port {
int max_ti_iu_len;
s32 req_lim;
int max_ti_iu_len;
s32 req_lim;
+ int zero_req_lim;
+
unsigned rx_head;
struct srp_iu *rx_ring[SRP_RQ_SIZE];
unsigned rx_head;
struct srp_iu *rx_ring[SRP_RQ_SIZE];
@@
-128,7
+148,7
@@
struct srp_target_port {
unsigned tx_tail;
struct srp_iu *tx_ring[SRP_SQ_SIZE + 1];
unsigned tx_tail;
struct srp_iu *tx_ring[SRP_SQ_SIZE + 1];
-
int req_head
;
+
struct list_head free_reqs
;
struct list_head req_queue;
struct srp_request req_ring[SRP_SQ_SIZE];
struct list_head req_queue;
struct srp_request req_ring[SRP_SQ_SIZE];
@@
-141,7
+161,7
@@
struct srp_target_port {
};
struct srp_iu {
};
struct srp_iu {
-
dma_addr_t
dma;
+
u64
dma;
void *buf;
size_t size;
enum dma_data_direction direction;
void *buf;
size_t size;
enum dma_data_direction direction;